Processing
Everything WinSTT does between speech and paste — live-preview timing, smart endpoint detection, optional LLM cleanup and hotkey transforms, context awareness, and paste behavior.
The Processing tab governs everything that happens between speech and paste: how fast the live preview updates, when WinSTT decides you've finished a sentence, whether a language model cleans up or rewrites the text, and how the result lands at your cursor.
Realtime preview
Tune how fast the live-preview model streams words while you speak.
Smart Endpoint
A classifier decides when a sentence is finished in hands-free modes.
Sentence pauses
Punctuation-based silence timers — the fallback when Smart Endpoint is off.
LLM cleanup
Auto-polish every transcription with a local or cloud model.
Transforms
Rewrite any selected text on a hotkey — "make this an email", and more.
Context awareness
Feed focused-window text into the cleanup prompt for accurate names.
Paste behavior
Optionally fire a submit key right after each paste.
File format
Pick the batch-export format: plain TXT or timestamped SRT.
Realtime preview
While you speak, a fast model streams words into the overlay so you see text immediately; the main model still produces the final, accurate transcription when you stop. These controls tune how that live pass behaves. See Model → Realtime model to pick the model itself.
falsequality.useMainModelForRealtimeDrive the live preview with your main model instead of the smaller realtime variant. More accurate previews at the cost of more compute per update — only worth it on a fast GPU with a mid-size main model.
0.02quality.realtimeProcessingPauseMinimum seconds between live-preview re-runs. 0.02s updates roughly 50 times a second; raise it to ease CPU/GPU load, lower it for the snappiest feel.
0.2quality.initRealtimeAfterSecondsSeconds to wait after recording starts before the first live-preview run fires. The short delay lets a buffer accumulate so the first preview isn't a one-word guess.
0.2quality.earlyTranscriptionOnSilenceSeconds of detected silence that trigger an early full transcription instead of waiting for the endpoint timer — text lands sooner when you pause mid-thought.
Smart Endpoint
In Toggle and Wake Word modes WinSTT keeps recording across natural pauses, so it needs to decide when a sentence is actually finished. Smart Endpoint uses a sentence-completion classifier to read the live transcript and judge whether you've completed a thought, then sets the silence threshold accordingly.
truequality.smartEndpointAI sentence-completion detection. The pause it waits for is computed as
(model_probability + whisper_heuristic) × Detection Speed, clamped to roughly a 1.0s
floor. Only shown when live transcription is enabled and the mode is
Toggle or Wake Word.
2.0quality.smartEndpointSpeedMultiplier on the computed pause, range 0.5–3.0, step 0.1. Higher finalizes faster (shorter waits, but more risk of cutting you off mid-sentence); lower is more patient. Only visible while Smart Endpoint is on.
Smart Endpoint and LLM cleanup are mutually exclusive
Enabling Smart Endpoint disables LLM dictation cleanup, and vice-versa. The classifier reads the raw live transcript to time the endpoint, so the two can't both own the post-speech stage. Pick the one that fits your workflow — fast hands-free finalizing (Smart Endpoint) or rewritten output (LLM cleanup).
Smart Endpoint falls back when unavailable
Smart Endpoint relies on an on-device sentence classifier that runs through ONNX Runtime like the rest of WinSTT. If that component isn't available, the feature fails soft and falls back to the manual Sentence Pauses below.
Sentence pauses
When Smart Endpoint is off, WinSTT falls back to a punctuation-based heuristic: it looks at how the live transcript ends and waits a different amount of silence before finalizing. These three steppers appear only in Toggle / Wake Word mode with Smart Endpoint off.
| Control | Triggered by | Range | Default |
|---|---|---|---|
| End-of-sentence pause | Transcript ends with . ! ? | 0.1–5.0s, step 0.05 | 0.45 |
| Mid-sentence pause | Transcript ends with an ellipsis … | 0.1–10.0s, step 0.1 | 2.0 |
| Unknown-sentence pause | No clear terminator | 0.1–5.0s, step 0.05 | 1.3 |
0.45quality.endOfSentenceDetectionPauseSilence to wait after a clear terminator (., !, ?). The shortest of the three —
a finished sentence rarely needs a long wait.
2.0quality.midSentenceDetectionPauseSilence to wait after a trailing ellipsis (…). Its upper bound is 10.0s (vs 5.0s
for the others) because an ellipsis signals you intend to keep going, so it warrants a
longer grace period.
1.3quality.unknownSentenceDetectionPauseFallback when speech ends with no recognizable terminator. Raised from 0.7s to 1.3s so ordinary mid-thought pauses don't get clipped.
LLM cleanup
A language model can reshape your words before they're pasted. There is no master LLM switch — this section holds two features that are configured and toggled separately, both running on a local Ollama model by default so nothing leaves your machine unless you point a feature at the cloud.

Dictation cleanup
Runs automatically on every transcription before the text is pasted. Use it to fix punctuation, set a tone, or tighten wording without lifting a finger.
Transforms
On-demand rewrites of whatever text is currently selected, triggered by a hotkey. Use them for "make this an email", "fix grammar", or any custom prompt.
Each feature runs only when its own enabled is on and a model is configured for its chosen provider. They pick their provider independently — dictation can stay local on Ollama while transforms call OpenRouter, or vice versa. When both are off, the LLM subsystem is dormant.
Dictation cleanup vs. Smart Endpoint
Dictation cleanup is mutually exclusive with Smart Endpoint. Both want to own the end of an utterance, so enabling one disables the other. Pick the LLM pass for nicer text, or Smart Endpoint for faster, classifier-driven stops.
Provider
Both features choose one of three providers. Switching provider resets that feature's model selection.
| Provider | Where it runs | Setup | Cost |
|---|---|---|---|
| Ollama | Local — on your machine | Install Ollama, pull a model | Free |
| OpenRouter | Cloud | Add an API key in Integrations | Per token |
| Apple Intelligence | Local — on-device (macOS) | macOS on Apple Silicon only | Free |
ollamallm.dictation.providerollama, openrouter, or apple-intelligence. Each feature carries its own copy, so
the two can run on different backends at the same time.
Local-first, cloud opt-in
Ollama and Apple Intelligence run entirely on-device. OpenRouter is the only cloud path, and it is used only after you add an API key in Integrations and explicitly select it for a feature. Your dictated text never leaves your machine on the local providers.
Model and effort
The model field depends on the active provider.
""llm.dictation.modelThe Ollama model name to use. The picker shows installed local models grouped by family with parameter-size, quantization, capability, context-window, and hardware-fit chips. It also browses the Ollama library and fetches per-model tags so you can pull variants without leaving WinSTT. Required for the feature to run on Ollama.
mediumllm.dictation.thinkingEffortoff, low, medium, or high — the reasoning budget for Ollama models that advertise
the thinking capability. The control only appears when the selected model supports it;
non-thinking models ignore the value.
""llm.dictation.openrouterModelEncoded as modelId or modelId@providerSlug. An empty string means OpenRouter Auto
(let the router choose). Used only when the provider is OpenRouter.
""llm.dictation.openrouterFallbackModelRetried if the primary model errors or times out. Same encoding as the primary; empty disables fallback. It cannot duplicate the primary model.
When the selected OpenRouter model advertises support, three optional parameters are sent:
| Parameter | Setting key | Values | Default |
|---|---|---|---|
| Reasoning effort | llm.dictation.reasoningEffort | low / medium / high | medium |
| Verbosity | llm.dictation.verbosity | low / medium / high | medium |
| Max output tokens | llm.dictation.maxOutputTokens | integer or null | null (model decides) |
Dictation cleanup
When dictation cleanup is on, every transcription is passed through your chosen presets before it lands at your cursor.
falsellm.dictation.enabledActivate the cleanup pass. The feature runs only when this is on and a model is set for the active provider. Mutually exclusive with Smart Endpoint.
[{ "key": "neutral" }]llm.dictation.presetsAn ordered list of cleanup presets applied to dictated text — one tone plus any number of independent modifiers.
Tone presets (pick one)
A tone sets the overall register of the cleanup. At most one tone preset may be active at a time; choosing a new one replaces the old.
| Tone | What it does |
|---|---|
| neutral | Polish only — fix punctuation and obvious errors, keep your voice (the default) |
| formal | Lift the register to professional, complete sentences |
| friendly | Warmer, more conversational phrasing |
| technical | Precise, jargon-aware wording |
| casual | Relaxed, everyday phrasing |
Modifiers (independent)
Modifiers stack on top of the tone in any combination. Some carry an intensity level.
| Modifier | Levels | What it does |
|---|---|---|
| concise | light / medium / high | Trim filler and tighten phrasing |
| summarize | light / medium / high | Condense to the key points |
| reorder | — | Reorder ideas into a logical flow |
| restructure | — | Reshape into cleaner paragraphs/lists |
| rewordForClarity | — | Rephrase confusing passages for readability |
| translate | language picker | Translate the output into a chosen target language (100+ options) |
Level and language memory
Toggling a leveled modifier off and back on restores its last level, and re-enabling
translate restores its last target language. You don't have to re-pick every time.
Custom modifiers
Beyond the built-ins you can author your own modifiers, each with an optional intensity hint. They are stored separately and merged into the prompt at the end of the modifier stack. The list scrolls once it passes 7 rows.
Disabled custom modifiers persist
A custom modifier you toggle off stays in the list (with its level remembered) until you explicitly delete it — turning it off does not remove it.
How presets compose
The presets you enable are assembled into a single prompt in a fixed order, so the result is predictable no matter what you toggle:
Polish base
A universal foundation (clean punctuation, fix obvious errors) is included once per prompt — the same base every tone builds on.
Tone
Your single chosen tone (formal / friendly / technical / casual) layers its register on top of the base.
neutraladds nothing beyond the base.Modifiers
Each enabled built-in and custom modifier is appended, each with its level or intensity hint where it has one.
Translate — always last
If translate is enabled, it is folded in last with a language-generalization clause, so the whole cleaned result is translated as the final step.
A schema clamp is appended to every composed prompt to keep the model returning only the transformed text.
Warmup banner
For Ollama, the panel surfaces a per-feature banner when the model isn't ready, covering three outcomes:
| Outcome | Severity | Inline action |
|---|---|---|
| Ollama unreachable | Warning | Retry now (or install Ollama if missing) |
| Model not found | Warning | Open the model manager to pull it |
| Model load failed | Error | Open the manager; shows the verbatim error |
The toggle never auto-disables
A warmup failure never flips the feature off. You already authorized it, so the toggle stays on and the banner tells you exactly what to fix — bouncing back to off on every retry would just hide the cause.
Playground
Each feature has a playground: type sample text, run it through the composed prompt, and see the result. It has no clipboard side effects and its state is transient — nothing is saved, and closing the tab clears it. Use it to confirm your tone + modifier stack does what you expect before turning the feature loose on real dictation.
Transforms
Transforms reuse all of the provider / model / thinking / tone / modifier machinery above, and add two things: a global hotkey and your own prompt list. They act on the currently selected text rather than dictation.
falsellm.transforms.enabledActivate transforms. Like dictation, runs only with a configured model for the active provider.
""llm.transforms.hotkeyA single global hotkey for the transforms feature. Empty by default (no hotkey). Press LCtrlLShiftP (example) to run a transform on your selection.
[]llm.transforms.promptsYour list of text transforms. Each entry carries its own system prompt and an optional per-transform hotkey.
Each transform entry has these fields:
| Field | What it is |
|---|---|
| id | Stable slug; built-ins use kebab-case (e.g. polish) |
| name | Display name shown in the list |
| prompt | Full system prompt; your selection is the user turn, the model returns only the rewritten text |
| hotkey | Key combo (e.g. LCtrl+LShift+P); empty = reachable only from the Transforms UI |
| builtin | App-seeded entries (Polish, Prompt Engineer) show Reset instead of Delete |
Per-transform hotkeys aren't validated
There is no UI check for conflicting per-transform hotkeys. If two transforms (or another global shortcut) share a combo, the result is undefined — assign distinct keys yourself.
The Transforms playground works the same as dictation's, with its own per-transform editable prompt and transient state.
Context awareness
Dictation cleanup can read text from the window you're typing into so names and jargon get spelled correctly. These controls live next to the LLM config and disappear entirely when the dictation LLM is not configured — the capture pipeline never runs in that case.

falsegeneral.contextAwarenessOff by default. When on, WinSTT reads the focused window's text immediately before each dictation and feeds it to the cleanup step. It does nothing without LLM cleanup enabled. Platform-gated, and it requires an explicit opt-in dialog because it reads content from any focused app.
general.contextDenyListApps and sites that context capture should skip. Entries are either an exe name
(1password.exe, matched against the foreground process) or a URL host
(chase.com, matched as a suffix so subdomains are covered). Seeded with six common
password managers so secrets are never captured. Full detail lives under
Dictation → Context-awareness.
What context capture sees stays local
Captured context is only ever passed to the LLM cleanup pass you've already chosen — to your local Ollama/Apple model, or to OpenRouter only if you selected it. Denied apps are skipped before any text is read.
Paste behavior
After the final text is produced (and optionally cleaned), WinSTT pastes it at your cursor. This toggle decides whether it also presses a submit key.

falsegeneral.autoSubmitWhen on, WinSTT injects a submit key right after each successful paste — so a dictated chat message ships without a separate Enter press. The submit key and re-paste shortcut are covered under Dictation → After the paste.
File transcription
When you drop an audio file in for batch transcription, this setting picks one or more output formats. It applies to file jobs only, not live dictation.

["txt"]general.fileTranscriptionFormatsChoose any combination of TXT, SRT, VTT, JSON, and CSV. At least one format is always selected. Full details on the batch workflow live in File transcription.
Shared LLM infrastructure
These settings are shared by both LLM features — one Ollama instance, one OpenRouter account.
http://localhost:11434llm.endpointThe Ollama URL used by both features when their provider is Ollama.
""llm.openrouterApiKeyShared across both features. Stored encrypted on your device and never shown again after you enter it. Set and verify it in Integrations.
5000llm.timeoutRequest timeout in milliseconds (range 1000–30000), persisted and wired through IPC.
Timeout is persisted but not enforced
llm.timeout is saved and passed through, but it is not applied at the network layer.
Local LLM cold starts routinely exceed any finite cap, and aborting would paste
un-processed text — so the value is kept only for settings stability.
Related
Model & realtime model
Pick the main and live-preview models that these timing controls drive.
Integrations
Add and verify your OpenRouter API key (and cloud STT/TTS keys) — provider config lives here.
Audio & VAD
Microphone, mute behavior, and the voice-activity tuning that feeds endpoint detection.
File transcription
Batch-transcribe audio files and export TXT or timestamped SRT subtitles.
Audio
Pick your input and output devices, tune the dual-VAD pipeline that decides when you're speaking, and set how the microphone is held between recordings.
General
Recording mode, audio feedback, display language, the visualizer and recording overlay, live-transcription placement, and startup behavior.