WinSTT logoWinSTT

Dictionary

Teach WinSTT the names, jargon, and brands it keeps mishearing — corrected in context by your LLM cleanup pass, or by an on-device language model when cleanup is off.

The Dictionary tab is where you fix the words WinSTT gets wrong — proper nouns, product names, and domain jargon — so the right spelling lands every time.

Context-aware — and it works with or without LLM cleanup

Telling a real word from a mis-transcription needs meaning and context — "I watched a video" must stay "video", while "I use veet for builds" should become "Vite". WinSTT uses a language model for that judgement either way:

  • LLM cleanup ON → your dictation cleanup model applies the dictionary.
  • LLM cleanup OFF → a small on-device model (mmBERT) does it instead. It downloads once (~310 MB) in the background the first time you dictate with a dictionary; until it's ready, terms are simply left untouched.

Either way there's no blind string replacement — a correctly-heard everyday word is never swapped for a look-alike term.

The Dictionary settings tab: a suggested-terms strip, an add-a-term form, and the entries table.
Suggested terms up top, the add-a-term form and entries table below.

Two ways to fix a word

Every entry is either a vocabulary word or a replacement pair. Both are folded into the LLM cleanup prompt as structured blocks; the difference is how strongly the model is told to act.

Both run during LLM cleanup — there is no separate deterministic pass.
ModeEntryWhat it does
Vocabulary wordTerm onlyLists your canonical spelling as a preferred term. The LLM fixes a mis-transcribed near-miss to it — using context, so a real word that merely sounds similar is left alone.
Replacement pairTerm → Replace withA find→replace rule the LLM is told to apply verbatim, preserving your exact casing, whenever it sees a whole-word match of the term.

A vocabulary word is a single canonical spelling — a name, brand, or term — with no "Replace with" value. It's listed in the cleanup prompt's <preferred-terms> block so the model nudges a clear mis-hearing toward your spelling. Because the model reads the surrounding words, it only swaps when the dictation genuinely sounds like the term — it won't turn a correctly-heard common word into a look-alike. Use it when the model hears roughly the right sounds but spells them wrong.

A replacement pair adds a "Replace with" value. The Term is a mis-transcription you keep seeing; the replacement is what it should always become. It's listed in the prompt's <replacement-pairs> block as a mechanical find→replace rule, so it's the right tool when a vocabulary word is too soft (e.g. an acronym the model spells out, or a phrase you want rewritten verbatim).

A mis-heard word (wuster·sher) is corrected to Worcestershire.

Why a language model does the matching

Earlier builds used a server-side fuzzy string matcher. It was removed: by letter-distance "video" is actually closer to "Vite" than a genuine mis-hearing like "veet" is, so no string-similarity rule can accept one and reject the other — only a model that understands the sentence can. So the matching always runs through a language model: your cleanup LLM when it's on, or a small on-device encoder (mmBERT) when it's off. The encoder is conservative by design (it favors leaving a word alone over a wrong replacement), so it fixes most mis-hearings and never clobbers a correctly-heard word.

Adding and managing entries

Termdefault
settings.dictionary

The canonical word, name, or brand. Required and trimmed; the Add button stays disabled until you type something. Case-sensitive — type it exactly the way you want it to appear ("PyTorch", not "pytorch"). Each entry gets a stable id automatically.

Replace withdefault
settings.dictionary

Optional. Leave it empty for a vocabulary-only entry; fill it in to make a replacement pair where the Term is always rewritten to this value.

The table lists every entry in the order you added them — there's no sorting or inline editing. To change an entry, delete it (the trash icon, no confirmation) and re-add it. Delete All wipes the whole dictionary at once.

Delete All cannot be undone

Delete All permanently removes every dictionary entry after a confirmation dialog. There is no undo. Individual deletes are instant and also unrecoverable.

Suggested terms

When LLM cleanup is on, WinSTT watches your dictations for proper nouns — people's names, product names, distinctive acronyms, unusual places — and offers them as one-tap additions in the suggestion strip at the top of the tab.

Suggested termsdefault

Up to 5 candidate nouns per dictation, shown newest-first and capped at 20 pills. Add saves a pill as a vocabulary word (persisted immediately); Dismiss drops it for now. Anything already in your dictionary is filtered out so you only see new candidates.

Dismissed isn't forever

The strip lives only in the panel's local state. Dismissing a pill forgets it for this session — if the model surfaces the word again on a later dictation, it reappears. Closing or refreshing the settings panel clears any pending suggestions. The strip is hidden entirely when there's nothing to suggest. It only appears when LLM cleanup is enabled, since the suggestions come from that pipeline.

Getting good results

Because the dictionary rides on the LLM cleanup pass, the quality of corrections tracks the quality of your cleanup model. A few tips:

  • Pick a capable cleanup model. A small local model handles obvious mis-hearings; subtler ones (a foreign brand pronounced unlike its spelling) reward a stronger model.
  • Spell the term the way you want it to appear — casing and all ("PyTorch", "GitHub"). The model is told to preserve it.
  • Reach for a replacement pair when a vocabulary word is too soft. If the model keeps spelling an acronym out or won't pick up a particular mis-hearing, a Term → Replace with pair states the rule mechanically.
  • One spelling per entry. The model maps any close-sounding dictation onto it; you don't need to enumerate every mis-spelling.

Suggested terms need the LLM

The proper-noun suggestion strip is driven by the LLM cleanup pipeline. With LLM cleanup off, no suggestions are generated — add terms by hand instead. Turn cleanup on in LLM settings.

On this page