If you use Handy for dictation and wished it had a fast, lightweight Persian option that doesn't fight your GPU for resources, this is that model.
Why this exists
Handy's built-in options each leave a gap for Persian:
Whisper small/medium: officially support Persian, but Persian is a low-resource language in Whisper's training data, and accuracy suffers noticeably.
Whisper large-v3: the first Whisper size with genuinely usable Persian accuracy, but it's GPU-bound. On a shared or modest GPU, model load and inference compete with everything else using the GPU, so it's slow and inconsistent in practice — the opposite of the instant, CPU-only feel Canary and Parakeet give for their languages.
Canary / Parakeet: excellent, CPU-only, instant-load family — but no Persian variant exists.
NVIDIA already publishes a FastConformer checkpoint for Persian, trained on Common Voice fa-15.0 by fine-tuning the English FastConformer encoder. It was never converted for transcribe.cpp, so this repo fills that gap: same architecture family as Parakeet, same CPU-only / instant-load / no-GPU-contention profile once converted.
Honest accuracy notes
This is a Common Voice-only fine-tune. Like most Common Voice-trained ASR models, it's strong on clean, formal speech and weaker on noisy or spontaneous speech — it is not a drop-in replacement for Whisper large-v3's accuracy ceiling on hard audio. It's the right choice when low latency and no GPU contention matter more than squeezing out the last few points of WER on noisy recordings (e.g. dictation in a normal room). In day-to-day use in a quiet environment it has been consistently accurate at Canary-like speed.
Files
File
Precision
Size
stt-fa-fastconformer-hybrid-large-F32.gguf
F32 (unquantized)
~417 MB
Quantized variants may be added later if there's interest — open an issue or discussion if you'd like one.
Using it in Handy
Download stt-fa-fastconformer-hybrid-large-F32.gguf from this repo.
Copy it into Handy's local custom-models folder:
%APPDATA%\com.pais.handy\models\
(macOS/Linux: check Handy's settings/debug page for the equivalent path.)
Restart Handy. The model will appear in the Models tab.
Using it with transcribe.cpp directly
Works with the standard Parakeet-family CTC inference path in transcribe.cpp:
The original checkpoint is a NeMo EncDecHybridRNNTCTCBPEModel: its primary decoder/joint is RNNT, and the CTC head used here is the auxiliary one (stored under the ctc_decoder. prefix rather than top-level decoder.) — the reverse of NVIDIA's official parakeet-tdt_ctc-* checkpoints, which drop ctc_decoder. the other way around. Converting it required a small patch to convert-parakeet.py to alias ctc_decoder.* → decoder.* before tensor extraction.