2026-07-11 · Mat Silverstein
whisper.cpp vs parakeet.cpp for local transcription
Minutes ships both engines: whisper.cpp as the default, parakeet.cpp behind an opt-in build flag. That means we've had to make both work in production — batch transcription, live meeting transcription, dictation, folder-watcher processing — on the same audio, on the same machines. This is what we've learned, with the numbers and the friction included.
The numbers
Parakeet is NVIDIA's FastConformer architecture; parakeet.cpp is its ggml-style local port with Metal acceleration on Apple Silicon. LibriSpeech clean word-error rates, with speed measured on 10 seconds of audio on an M-series GPU:
| Engine | Model | Params | WER | Speed |
|---|---|---|---|---|
| Whisper | small (our default) | 244M | 3.4% | ~200ms |
| Whisper | medium | 769M | 2.9% | ~600ms |
| Whisper | large-v3 | 1.55B | 2.4% | ~1.5s |
| Parakeet | tdt-ctc-110m | 110M | 2.4% | ~27ms |
| Parakeet | tdt-600m | 600M | 1.7% | ~520ms |
Read that table twice. Parakeet's 110M-parameter model matches Whisper large-v3's accuracy with 14× fewer parameters, and transcribes 10 seconds of audio in 27 milliseconds where large-v3 takes a second and a half. The 600M model beats everything in its class at 1.7% WER. On raw accuracy-per-parameter and speed, it isn't close.
So why is Whisper still our default?
Languages.Whisper covers 99 languages. Parakeet's tdt-600m covers 25 European ones, and the 110M model is English-only. If your meetings might contain Japanese, Hindi, Arabic, or Mandarin, the comparison is over before it starts.
Zero-friction install. whisper.cpp has mature prebuilt distribution everywhere. parakeet.cpp has no binary releases as of this writing: you build it yourself with CMake — and on macOS you need full Xcode for the Metal shader compiler, plus CMake 3.31.x specifically, because a bundled dependency trips on CMake 4. Then you download a 2.4 GB .nemo file from HuggingFace and convert it to safetensors with a small Python venv. We documented the whole path and it's reliable — but it's an afternoon, not a brew install.
Streaming partials.Our dictation overlay depends on fast mid-utterance partial results, and Whisper's streaming behavior is what makes that feel live. Even with Parakeet enabled, Minutes keeps Whisper powering dictation partials and uses Parakeet at utterance finalization.
Fallback maturity.A transcription engine in production needs an answer for "the engine failed mid-meeting." Whisper is compiled into every Minutes build, so Parakeet paths fall back to it automatically — warmup error, sidecar unreachable, or a single failed utterance. The reverse arrangement wouldn't work today.
When Parakeet is clearly worth it
English or major-European-language audio on Apple Silicon, especially live transcription. The latency difference is not subtle: for real-time meeting transcription, a warm Parakeet sidecar turns per-utterance transcription from "noticeable lag" into "effectively instant," and on long batch jobs the throughput gap compounds. One contributor runs Parakeet through NVIDIA's NeMo on an RTX 3090: a 68-minute French meeting transcribes in about 3.5 minutes, with quality that beats Whisper large-v3 on mixed-language audio.
The honest recommendation
Start with Whisper — it's the default for a reason: universal language coverage, no build step, battle-tested fallbacks. If you're on Apple Silicon, work mostly in English or European languages, and care about live latency or long batch jobs, the parakeet.cpp build is worth the afternoon. Minutes lets both coexist in one binary and switches per-path in config, so this isn't a marriage either way.
The full setup guide, including every build pitfall we hit, is in docs/architecture/parakeet.md. Benchmarks are the upstream projects' published LibriSpeech numbers; speed figures are from parakeet.cpp's measurements on M-series GPUs. Minutes is MIT licensed — the pipeline code is on GitHub.