WinSTT logoWinSTT
Settings

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.

Processing tunes the live preview, endpoint timing, LLM cleanup, context, and paste behavior.

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.

Use Main Model For Realtimedefault false
quality.useMainModelForRealtime

Drive 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.

Update Intervaldefault 0.02
quality.realtimeProcessingPause

Minimum 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.

Init Realtime Afterdefault 0.2
quality.initRealtimeAfterSeconds

Seconds 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.

Early Transcription On Silencedefault 0.2
quality.earlyTranscriptionOnSilence

Seconds 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.

Smart Endpointdefault true
quality.smartEndpoint

AI 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.

Detection Speeddefault 2.0
quality.smartEndpointSpeed

Multiplier 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.

Lower values finalize faster; raise them if WinSTT keeps cutting off natural pauses.
ControlTriggered byRangeDefault
End-of-sentence pauseTranscript ends with . ! ?0.1–5.0s, step 0.050.45
Mid-sentence pauseTranscript ends with an ellipsis …0.1–10.0s, step 0.12.0
Unknown-sentence pauseNo clear terminator0.1–5.0s, step 0.051.3
End-of-sentence pause (s)default 0.45
quality.endOfSentenceDetectionPause

Silence to wait after a clear terminator (., !, ?). The shortest of the three — a finished sentence rarely needs a long wait.

Mid-sentence pause (s)default 2.0
quality.midSentenceDetectionPause

Silence 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.

Unknown-sentence pause (s)default 1.3
quality.unknownSentenceDetectionPause

Fallback 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.

The LLM settings showing the Dictation toggle, a provider and model picker, tone presets, modifier chips, and a prompt playground.
Two features: dictation cleanup and transforms, each with its own provider, model, and prompt.

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.

Apple Intelligence appears only on macOS Apple Silicon; the option is hidden on other platforms but a value persisted from another machine is still accepted.
ProviderWhere it runsSetupCost
OllamaLocal — on your machineInstall Ollama, pull a modelFree
OpenRouterCloudAdd an API key in IntegrationsPer token
Apple IntelligenceLocal — on-device (macOS)macOS on Apple Silicon onlyFree
Providerdefault ollama
llm.dictation.provider

ollama, 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.

Model (Ollama)default ""
llm.dictation.model

The 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.

Thinking Effort (Ollama)default medium
llm.dictation.thinkingEffort

off, 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.

Model (OpenRouter)default ""
llm.dictation.openrouterModel

Encoded as modelId or modelId@providerSlug. An empty string means OpenRouter Auto (let the router choose). Used only when the provider is OpenRouter.

Fallback Model (OpenRouter)default ""
llm.dictation.openrouterFallbackModel

Retried 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:

Each parameter is omitted from the request when the chosen model does not list it in its supported parameters.
ParameterSetting keyValuesDefault
Reasoning effortllm.dictation.reasoningEffortlow / medium / highmedium
Verbosityllm.dictation.verbositylow / medium / highmedium
Max output tokensllm.dictation.maxOutputTokensinteger or nullnull (model decides)

Dictation cleanup

When dictation cleanup is on, every transcription is passed through your chosen presets before it lands at your cursor.

Raw transcription → cleaned text, in a pill.
Enableddefault false
llm.dictation.enabled

Activate 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.

Presetsdefault [{ "key": "neutral" }]
llm.dictation.presets

An 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.

neutral is the universal base; the other four layer their register on top of it.
ToneWhat it does
neutralPolish only — fix punctuation and obvious errors, keep your voice (the default)
formalLift the register to professional, complete sentences
friendlyWarmer, more conversational phrasing
technicalPrecise, jargon-aware wording
casualRelaxed, everyday phrasing

Modifiers (independent)

Modifiers stack on top of the tone in any combination. Some carry an intensity level.

level is valid only for concise and summarize. translate carries a target language instead of a level.
ModifierLevelsWhat it does
conciselight / medium / highTrim filler and tighten phrasing
summarizelight / medium / highCondense to the key points
reorderReorder ideas into a logical flow
restructureReshape into cleaner paragraphs/lists
rewordForClarityRephrase confusing passages for readability
translatelanguage pickerTranslate 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:

  1. Polish base

    A universal foundation (clean punctuation, fix obvious errors) is included once per prompt — the same base every tone builds on.

  2. Tone

    Your single chosen tone (formal / friendly / technical / casual) layers its register on top of the base. neutral adds nothing beyond the base.

  3. Modifiers

    Each enabled built-in and custom modifier is appended, each with its level or intensity hint where it has one.

  4. 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:

OpenRouter and Apple Intelligence have no cold-start banner.
OutcomeSeverityInline action
Ollama unreachableWarningRetry now (or install Ollama if missing)
Model not foundWarningOpen the model manager to pull it
Model load failedErrorOpen 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.

Select text, hit the hotkey, it's rewritten in place.
Enableddefault false
llm.transforms.enabled

Activate transforms. Like dictation, runs only with a configured model for the active provider.

Global Hotkeydefault ""
llm.transforms.hotkey

A single global hotkey for the transforms feature. Empty by default (no hotkey). Press LCtrlLShiftP (example) to run a transform on your selection.

Custom Promptsdefault []
llm.transforms.prompts

Your list of text transforms. Each entry carries its own system prompt and an optional per-transform hotkey.

Each transform entry has these fields:

FieldWhat it is
idStable slug; built-ins use kebab-case (e.g. polish)
nameDisplay name shown in the list
promptFull system prompt; your selection is the user turn, the model returns only the rewritten text
hotkeyKey combo (e.g. LCtrl+LShift+P); empty = reachable only from the Transforms UI
builtinApp-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.

The Context awareness section with a header toggle switched on, a Context-scope switcher set between Black list and Allow list, and the matching app allow/deny list below.
Feeds focused-window text into the LLM cleanup prompt. Off by default — opt in per the in-app dialog.
Context Awarenessdefault false
general.contextAwareness

Off 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.

Deny-List
general.contextDenyList

Apps 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.

The Paste Behavior section with the Auto-Submit After Paste toggle, switched off.
Auto-Submit fires a submit key right after each paste — off by default.
Auto-Submit After Pastedefault false
general.autoSubmit

When 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.

The File Transcription section with its output-format selector.
Choose one or more batch-export formats.
File Transcription Formatsdefault ["txt"]
general.fileTranscriptionFormats

Choose 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.

Ollama Endpointdefault http://localhost:11434
llm.endpoint

The Ollama URL used by both features when their provider is Ollama.

OpenRouter API Keydefault ""
llm.openrouterApiKey

Shared across both features. Stored encrypted on your device and never shown again after you enter it. Set and verify it in Integrations.

Timeoutdefault 5000
llm.timeout

Request 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.

On this page