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
From the blog
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.
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 · also for Windows