Yappy dictation
Hold Right ⌥ (Option), talk, release. The text appears where your cursor is, already punctuated and capitalised.
What happens between release and text
mic capture ──▶ whisper.cpp ──▶ LLM cleanup ──▶ inserted at the cursor
(AVAudioEngine) (local ASR) (local or cloud) (smart spacing + ⌘V)
The Whisper model is loaded and kept warm, so there is no cold start when you press the key. Cleanup runs in the gap between you releasing the key and the text landing, which is why the speed of that step is the thing you actually feel.
Hands-free
Double-tap the dictation key to lock recording on. Speak as long as you like and double-tap again to finish. Useful for long passages where holding a modifier gets tiring, and for dictating while your hands are elsewhere.
Smart spacing
Yappy looks at what is already around the cursor before inserting. It will not double a space after a period, will not glue a new sentence onto the previous word, and capitalises the first word when it is starting a sentence. Insertion is a paste by default because paste has a clipboard-recovery path if the text has nowhere to go.
Set injectionStyle to "type" if you would rather watch it appear word by word. It is cosmetic: Whisper and the cleanup pass have both already finished, so nothing arrives sooner. It is also slower, and it falls back to paste when there is no real editable field.
AI cleanup
The cleanup model does one job: turning a raw Whisper transcript into text a person would have typed. It fixes punctuation, casing, filler words, and obvious mishearings, without rewriting what you said.
Turn it off entirely in Settings → Dictation → AI Cleanup and Yappy pastes the raw transcript instantly — local end to end, no LLM in the path at all.
Which model runs it is up to you: see LLM backends.
Personas
Personas restyle how your dictation reads — your own voice, a dialect, or a character. The rule they follow is strict: they change how it reads, never what you said. Every fact, name, number, and instruction lands exactly as spoken.
Pick one in Settings → Dictation → Persona.
Screen context
With Screen Context on, Yappy reads the frontmost window using Apple's on-device OCR and uses it to disambiguate what you dictated — names on screen, the field you are in, the subject of the mail you are replying to. The screenshot is read and discarded on your machine; it is never written to disk or uploaded.
Turn it off in Settings → Dictation → Screen Context if you would rather it did not look.
Language
language defaults to en. Set it to "auto" to let Whisper detect the language per utterance, or pin it to a specific one if you always dictate in it — pinning is more accurate than detecting.
Accuracy
The default model is a good balance. On Apple Silicon you can do better:
WHISPER_MODEL=large-v3-turbo ./scripts/setup.sh
then point whisperModel at ~/.yappy/models/ggml-large-v3-turbo.bin. Voice isolation and history-based biasing are on by default and matter more than model size in a noisy room.