Skip to main content
Listenr Logo

Listenr

Build better speech-to-text and ASR models entirely on your machine.

Record your voice. Clean it up with local AI. Fine-tune Whisper or Moonshine. Deploy something that's actually yours.

PyPI Python License Tests

Walkthrough  |  Setup  |  Configuration  |  Recording  |  Dataset  |  Troubleshooting

Lemonade Developer Challenge Winner

Listenr CLI streaming - example output

How it works

  1. Create good data - Use Listenr to record and collect natural speech with domain-specific vocabulary that generic models miss.
  2. Process & improve - Pipe it through Lemonade or any OpenAI-compatible provider to transcribe with Whisper and automatically correct grammar, punctuation, and homophones using a local LLM.
  3. Fine-tune & deploy - Use Listenr to build train/dev/test splits and fine-tune Whisper or Moonshine with LoRA. Merge the adapter into a self-contained model you can deploy.

Everything stays local - no audio, text, or weights ever leave on your machine.

Get started

Install Lemonade and pull models:

Lemonade guide: lemonade-server.ai/docs/guide/install

# after installing locally, download default models
lemonade pull Whisper-Base
lemonade pull gpt-oss-20b-mxfp4-GGUF

Install Listenr and start recording:

uv tool install listenr   # or: pipx install listenr
listenr record            # start recording

On PyPI. Python 3.11 or newer. The core install covers recording, transcription and dataset building; fine-tuning and the dataset importers live behind extras, listed in docs/setup.md.

On an AMD GPU, install a ROCm torch before the finetune extra, or pip will resolve a CUDA wheel that cannot see your card. See docs/setup.md.

Working on Listenr itself? Clone the repo and uv pip install -e ".[dev]" instead.

Once you have recordings, process & fine-tune:

# Build train/dev/test splits from your manifest
listenr build-dataset --format hf

# Fine-tune Whisper or Moonshine (see docs/finetune-amd.md for AMD GPUs)
podman compose run --rm finetune

# Merge the LoRA adapter into a standalone model
podman compose run --rm merge

# Evaluate it on the held-out test split
listenr eval --compare-base --keyword YourDomainWord

See docs/setup.md for full installation details.

If you want to mix in an external ASR dataset, use the optional importers to write a separate Listenr-compatible manifest: listenr import-mdc <dataset-id> (Mozilla Data Collective) or listenr import-hf <dataset-id> (Hugging Face): then pass that manifest to listenr build-dataset alongside your normal one. See docs/dataset.md for details.

Under the hood

Recording & transcription - Listenr streams your microphone to Lemonade's /realtime WebSocket in ~85 ms chunks (16 kHz). Lemonade's voice activity detection segments speech, runs Whisper.cpp, and streams back transcripts.

Auto-correction - A local LLM cleans up punctuation, grammar, and homophones, producing a higher-quality training corpus than raw Whisper output alone.

Dataset & fine-tuning - Listenr saves each utterance as a .wav clip and a line in manifest.jsonl. One command builds train/dev/test splits in HuggingFace format. Another command fine-tunes any openai/whisper-* or UsefulSensors/moonshine-* model using LoRA (works on AMD and NVIDIA GPUs via Podman). Moonshine is the smaller, English-only, edge-oriented option; Whisper is the multilingual all-rounder.

Deployment - listenr merge folds the LoRA adapter into a self-contained model that loads with plain transformers. No PEFT dependency. Run inference locally or deploy it anywhere.

Commands

Command What it does Needs
listenr record Record from the microphone with live transcription core
listenr asr Transcribe an audio file core
listenr retranscribe Re-run Whisper on saved clips core
listenr build-dataset Build train/dev/test splits from recordings core
listenr categorize Filter a manifest to clips matching topics categorize
listenr import-mdc Import a Mozilla Data Collective dataset mdc
listenr import-hf Import a Hugging Face dataset hf
listenr finetune Fine-tune Whisper or Moonshine with LoRA finetune
listenr merge Merge a LoRA adapter into a standalone model finetune
listenr eval Evaluate the merged model on the test split finetune

Extras install with uv pip install "listenr[finetune]". Running a command without its extra prints the install line you need.

Documentation

Guide Description
docs/setup.md Installation, Lemonade Server, microphone setup
docs/configuration.md Full config.toml reference, VAD tuning, available models
docs/recording.md CLI usage, how recording works, batch transcription
docs/dataset.md Building train/dev/test splits, importing public corpora, and filtering by topic
docs/finetune-amd.md Fine-tuning on an AMD GPU via ROCm and Podman, merging, and evaluation
docs/troubleshooting.md Common errors and fixes

Acknowledgments

License

Mozilla Public License Version 2.0 - see LICENSE.

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

listenr-0.2.1.tar.gz (413.7 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

listenr-0.2.1-py3-none-any.whl (80.2 kB view details)

Uploaded Python 3

File details

Details for the file listenr-0.2.1.tar.gz.

File metadata

  • Download URL: listenr-0.2.1.tar.gz
  • Upload date:
  • Size: 413.7 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/7.0.0 CPython/3.13.14

File hashes

Hashes for listenr-0.2.1.tar.gz
Algorithm Hash digest
SHA256 e248a5169f7ef59d7a09f1288e2a8c6acdbe22f1732b0f491e93bffa36ee2d5c
MD5 47d6106e1062fb1bddb642f4610d32a1
BLAKE2b-256 ea02894322ebc438ca6eefdb6c58a299bd005ac59c863eb18ba1af5362e41292

See more details on using hashes here.

Provenance

The following attestation bundles were made for listenr-0.2.1.tar.gz:

Publisher: release.yml on Rebreda/listenr

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file listenr-0.2.1-py3-none-any.whl.

File metadata

  • Download URL: listenr-0.2.1-py3-none-any.whl
  • Upload date:
  • Size: 80.2 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/7.0.0 CPython/3.13.14

File hashes

Hashes for listenr-0.2.1-py3-none-any.whl
Algorithm Hash digest
SHA256 c51c4807ed8664959397742d058e1437e7018b307ba09e1cdaf58a86bdb0ba58
MD5 c7ba345830b3d4d33bbe75e7bcbc8b8e
BLAKE2b-256 f07d23456ab7d4ac039d84ea1fcc00c64dce84b07388e4b3b52b90752763199b

See more details on using hashes here.

Provenance

The following attestation bundles were made for listenr-0.2.1-py3-none-any.whl:

Publisher: release.yml on Rebreda/listenr

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Release history Release notifications | RSS feed

This release

0.2.1 This release

2 files

0.2.0

2 files

0.1.0

2 files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page