Docs / Speech
Transcribe and dictate
Transcribe audio files, dictate live from the microphone, and serve the audio API with Phonon-1.
Install
pip install fermion-research
pip install mlx mlx-audio mlx-lm soundfile scipy zstandardSpeech runs on the MLX audio stack, installed separately from the CLI. The second line is needed once, on Apple silicon; if anything is missing, fermion transcribe prints the exact command. On NVIDIA GPUs, use the Docker image from the GitHub repository instead.
File transcription
fermion transcribe meeting.wav
fermion transcribe clip.flac --jsontranscribe turns an audio file into a line of text. It reads anything libsndfile decodes: wav, flac, ogg, and aiff at any sample rate or channel count, resampled to 16 kHz mono. mp3 and m4a are refused with the exact ffmpeg conversion command to run first.
Standard output carries only the transcript, so fermion transcribe clip.wav > out.txt writes exactly the words. Progress, warnings, and timings go to standard error. --json returns a JSON object with the text, the model id, and the decode time. There are no sampler flags: transcription decodes greedily, and punctuation and capitalization come from the model itself.
Live dictation
fermion listen
fermion listen > note.txt
fermion listen --wav clip.wavlisten transcribes the microphone live. The current hypothesis updates on one terminal line, finished segments print permanently, and Ctrl-C stops the session and prints the full transcript to standard output.--wav streams a file through the identical live path, paced to real time.
- The first hypothesis appears after about 0.35 s of speech and updates about twice per second.
- A segment finalizes after about 0.7 s of silence, or at the 30 s segment cap.
- On macOS, grant your terminal microphone access under System Settings, Privacy & Security, Microphone.
Transcription server
fermion serve --model phononWith a speech model, serve mounts the audio routes and answers OpenAI audio clients unmodified againstbase_url=http://127.0.0.1:8000/v1. The chat routes are not mounted; a request to one returns a 404 naming the endpoint that exists.
| Method | Route | Purpose |
|---|---|---|
| POST | /v1/audio/transcriptions | One-shot file transcription. |
| GET | /v1/audio/stream | Live transcription over WebSocket. |
| GET | /v1/models | The served model id. |
| GET | /health | Model, decode configuration, and request counters. |
curl -s http://127.0.0.1:8000/v1/audio/transcriptions \
-F file=@clip.wav
# {"text": "The transcript."}response_format selects json (default), text, or verbose_json. Themodel form field is checked: a name this process does not serve returns 404 rather than a transcript from a different model. Request bodies are capped at 32 MB; the model handles utterances up to 30 s and decodes longer audio in chunks. --api-key requires a bearer token on every /v1 route. The Docker image serves this same API on an NVIDIA GPU.
Streaming API covers the live WebSocket route: the opening frame, audio formats, server frames, and session limits.
Model selection
Phonon-1 is the default and the more accurate model. Phonon-1 Micro is the smallest build of the family and trades accuracy for a smaller download.
| Model | Download | On disk | LibriSpeech test-clean | Aliases |
|---|---|---|---|---|
| Phonon-1 | 415 MB | 455 MB | 2.640% | phonon, phonon-1, stt, asr |
| Phonon-1-Micro | 285 MB | 331 MB | 3.002% | phonon-1-micro, micro |
fermion transcribe clip.wav --model micro
fermion listen --model FermionResearch/Phonon-1-MicroBoth models transcribe English from 16 kHz audio, were trained at 2.4 bits per weight from the start, and are open under Apache 2.0. fermion models lists every published model and marks the ones already on your machine. Speech models lists every Phonon release with its measurements.