Skip to documentation content
Keebye Docs

Cleanup and dictionary

What happens to your transcript between speech-to-text and insertion: the dictionary, rule-based cleanup, per-app overrides, and opt-in local-LLM polish.

Every dictation runs through the same short pipeline on your Mac. Nothing here uses the network.

The pipeline

  1. Speech-to-text with the selected engine.

  2. Custom dictionary replacements, always applied.

  3. Cleanup — rule-based, or the local LLM if you opted in — only when enhancement is enabled for the frontmost app.

  4. Insertion by paste or typing.

Rule-based cleanup

This is the complete rule set. Cleanup does not remove false starts or the word "like".

  • Removes standalone "um", "uh", "erm", and the two-word "you know", matching whole tokens only.
  • Collapses immediate word repeats, so "the the" becomes "the".
  • Collapses whitespace.
  • Capitalizes the first letter.
  • Appends a period if the text ends on a letter or digit.

Per-app overrides

Settings › Enhancement › "Clean up transcripts by default" is on. Overrides are keyed by the app's bundle id. "Add current app…" adds the last non-Keebye app you used, with the opposite of the default. Each entry has a checkbox and a "Remove" button.

Custom dictionary

Settings › Dictionary: "Replace spoken words with fixed spellings." Type what Keebye hears in "heard as…" and the spelling you want in "write as…", then press Add (Enter works too). Remove deletes an entry. The empty state reads "No replacements yet."

  • Matches whole words only, never inside a larger word.
  • Matching is case-insensitive; the replacement keeps the casing you typed.
  • Keys can be several words. The longest match wins.
  • Applied to every dictation, whether or not cleanup is enabled for the app.

Local-LLM polish (opt-in)

Keebye can hand the transcript to a local language model instead of the rule-based cleanup. The model is Qwen3-1.7B (Q4_K_M GGUF, about 1.28 GB) running through llama.cpp with Metal. It uses greedy sampling with thinking disabled, a 64-token cap, and a 2-second deadline. Any failure falls back to rule-based cleanup.

A fidelity guard checks the LLM output before it is used: it must keep at least half of the input word occurrences, not exceed twice the input word count plus four, contain no sentence or four-word phrase repeated three or more times, and be non-empty. Otherwise the LLM output is discarded.