Docs

Settings, and where cleanup runs

Cleanup is the second pass that punctuates and structures what you said. With nothing configured it runs on rules on your own machine and no text leaves. This page is the settings reference — the chord, the speech model, the dictionary path, the cleanup timeout — and the three ways to give cleanup a language model instead: Deixis's endpoint, your own provider key, or a server such as Ollama on your own hardware, which is deliberately allowed to win over the network rather than fall back to it.

Settings, and where cleanup runs

All optional. With none of these set and no integrations configured, Deixis works fully offline with rules-based cleanup. (Integrations live in config.toml and Settings, not the environment — see the table of everything that leaves, near the top of this file.)

Variable Default Purpose
DEIXIS_MODEL models\ggml-base.en.bin next to the binary, else %LOCALAPPDATA%\Deixis\models\ Path to the whisper model. A source build finds the repo's models\; an installed app downloads to and reads from %LOCALAPPDATA%. small.en is more accurate and ~3× slower to decode — the figure the speech-model picker itself quotes.
DEIXIS_HOTKEY Ctrl+Win The dictation chord: hold to dictate, double-tap for free mode. A chord (Ctrl+Win, Ctrl+Alt+D) or a single key (F9). Case-insensitive; an unparseable value warns and falls back to Ctrl+Win.
DEIXIS_CONFIG %USERPROFILE%\.deixis\config.toml The settings file itself — everything the app writes, and where [[integrations]] and [[buttons]] live.
DEIXIS_DICTIONARY %USERPROFILE%\.deixis\dictionary.toml Path to the user dictionary. Missing file = builtin defaults.
DEIXIS_CLEANUP_ENDPOINT unset Cleanup proxy URL. Unset = rules-only cleanup, no network.
DEIXIS_LOCAL_MODEL_URL unset An OpenAI-compatible server on this machine — http://localhost:11434/v1 for Ollama. Set (with the name below), it wins over DEIXIS_CLEANUP_ENDPOINT rather than falling back to it: the two are alternatives, and an utterance escaping to the network because a stale endpoint outlived the choice that set it would break the only promise this option exists to make. Also Settings → Cleanup.
DEIXIS_LOCAL_MODEL_NAME unset Which model that server loads — qwen3:8b. No default is possible: what exists on this machine is a fact only this machine knows. Named ..._NAME because DEIXIS_MODEL already names the whisper weights. Both halves are required; either alone reads as no local model at all, and cleanup falls back to rules.
DEIXIS_PROVIDER_KEY unset Your own LLM provider key, forwarded to the proxy and never stored. This is the free tier. Takes precedence over the token below.
DEIXIS_CLEANUP_TOKEN unset Managed-tier shared secret; the proxy uses its own key and meters the call.
DEIXIS_CLEANUP_ESCALATION auto When the LLM runs: auto (only an explicit transform request or long unpunctuated dictation), always (every utterance — better prose, ~0.9 s each, and every transcript leaves), never (dictation stops calling the endpoint; translate and notes still do). Also Settings → Cleanup — but note this variable beats the saved setting, so while it is set the panel's radio will not take effect. A value that is not one of the three is ignored in favour of the saved mode, and said so at startup.
DEIXIS_CLEANUP_TIMEOUT_MS 6000 Whole-call budget for a cleanup request. Escalations measure ~0.9 s warm on gemini-3.5-flash-lite via OpenRouter, but a cold provider start was seen near 4 s, and a timeout degrades the utterance to rules silently — hence the headroom. On timeout the rules output is used.

Set for one session:

$env:DEIXIS_CLEANUP_ENDPOINT = "http://127.0.0.1:8787/cleanup"
$env:DEIXIS_PROVIDER_KEY = "sk-..."

Startup prints which mode is active, so you can confirm rather than guess.

Cleanup against a model on your own machine. With a local server configured, cleanup, translation and meeting notes reach an LLM without reaching a network, and nothing is metered — the work is happening on your hardware, so the free trial is a managed-mode thing that never applies. Startup and your account page both report this as its own mode rather than as a missing credential: a local server needs none.

ollama serve                      # in another terminal
ollama pull qwen3:8b
$env:DEIXIS_LOCAL_MODEL_URL  = "http://localhost:11434/v1"
$env:DEIXIS_LOCAL_MODEL_NAME = "qwen3:8b"

There is no fallback to the network if that server is down — deliberately. Cleanup degrades to its rules output, which is the same thing that happens when a cloud endpoint times out, and dictation keeps working either way.

Keep reading

Is voice typing private? Eight things a dictation app can send, and how to check each one

Voice typing can send your audio, your words and even a screenshot. How to check what any dictation app sends, and exactly what Deixis sends.

Speech to text offline: how to keep dictating when the internet goes

How to dictate with no internet on Windows, Mac, Android and iPhone, what offline really covers, what to do before you go, and what still needs a network.

Two keycaps, Ctrl and Win, held down and lit teal from underneath.

Hold a key. Speak. Keep working.

Deixis is free, needs no account, and runs on your own device.

v1.2.2 · 64‑bit Windows 10/11 · macOS 13 on Apple silicon · 51 MB · nothing else to install