# 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](https://yappy.biz/docs/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:

```bash
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.

---

Canonical: https://yappy.biz/docs/dictation/ · Last updated: 2026-08-25
