On-device inference
whisper.cpp and llama.cpp are compiled into the binary through the whisper-rs and llama-cpp-2 crates. There is no inference API client anywhere in the source — no key to paste, none to leak.
Local-first dictation for Windows. Whisper and Qwen run on your own hardware, so the audio, the transcript and the text you paste never leave the machine you installed it on.
OmniVox turns speech into text entirely on your own machine. The models live on your disk, the audio never leaves it, and there is no account, no API key and no telemetry to opt out of.
Whisper, from tiny through large-v3-turbo. Pick the one your hardware can hold — all of them run locally.
Transcribe in any of them, or translate straight into English on the way out.
Once the models are on disk, nothing dials out. The app's content-security policy admits exactly three HuggingFace hosts — the ones that serve model weights — and no other origin at all.
Hold Ctrl + Alt anywhere in Windows and start talking.
The hotkey is registered with the operating system rather than with an app, so it fires the same in your editor, your terminal and the reply box you already had focus in. The pill sits above the taskbar as a 42-pixel slit and expands only while it is listening — nothing to switch to, nothing to switch back from.
Idle 42 px · Listening 148 px
Whisper runs natively on your own CPU or GPU. The audio never leaves the machine.
whisper.cpp, compiled in through whisper-rs — a native binary on your machine, not a wrapper around a hosted API. The catalog runs from tiny to large-v3-turbo, eleven builds in all, and OmniVox matches one to the hardware it finds on first run instead of asking you to guess.
whisper.cpp, the engine underneathFastest, lowest accuracy — good on a machine with no GPU.
The everyday balance of speed and accuracy.
Noticeably better on technical vocabulary and proper nouns.
Best accuracy in the catalog, at large-model speed.
Speech models · main window
Weights stream to a temporary file under a hard size ceiling and are only moved into place once the download completes — so a half-fetched model is never one OmniVox will try to load.
src-tauri/src/models/downloader.rs
Say “voxify” and the transcript comes back as a filled-in prompt.
A local Qwen3 1.7B Q8 reads what you actually said and reshapes it into slots — goal, files, constraints, urgency. Decoding is constrained by a GBNF grammar, so the model can only emit the shape you asked for. It cannot drift into prose, and it cannot invent a field the schema never had.
Qwen3, the model doing the structuringFix the auth middleware so a stale JWT refreshes instead of 401ing.
src/middleware/auth.tssrc/lib/tokens.tsStructured panel · overlay, actual size
The installer is not code-signed. What the install script does instead is check the digest GitHub reports for the file it actually downloaded — a guarantee we can keep.
public/install.ps1
The text arrives in the window you were already working in.
Type simulation rather than paste: OmniVox synthesises the keystrokes into the focused window, then puts back whatever was on your clipboard before it started. Around twenty-five voice commands ride the same path — say “new paragraph” and you get two Shift+Enters, not the words.
Read the source on GitHubVoice commands · main window
Context modes
Vocabulary seeded with the identifiers you say out loud — verifyJWT, Tauri, Qwen3 — so the phonetic pass rewrites what Whisper heard into what you actually type.
Binds to Code.exe · WindowsTerminal.exe
A formal writing style and its own snippets, so “sig” expands to your real sign-off and a dictated reply arrives finished rather than raw.
Binds to OUTLOOK.EXE · Thunderbird.exe
Dictionary rules for the names you use every day, scoped to this mode alone, so a project codename never leaks into the email you send next.
Binds to Obsidian.exe · Notion.exe
Very-casual style — lowercased, trailing periods dropped — plus the short snippets you send all day, expanded as you speak them.
Binds to slack.exe · Discord.exe
A mode is those five things saved together. OmniVox matches the foreground process against each mode’s bindings, so switching windows switches mode — and the modes are yours to define, not a fixed list.
Right-click the pill · menu 196 px, actual size
Privacy architecture
OmniVox has no server, no account and nothing to sign into. Below is where to look if you would rather verify that than take it on faith.
whisper.cpp and llama.cpp are compiled into the binary through the whisper-rs and llama-cpp-2 crates. There is no inference API client anywhere in the source — no key to paste, none to leak.
The Tauri webview's connect-src is 'self' plus exactly three HuggingFace hosts, and they only ever serve model weights. Anything else the app tried to reach would be refused by the browser engine, not by a promise.
connect-src 'self' https://huggingface.co https://cdn-lfs.huggingface.co https://cdn-lfs-us-1.huggingface.coHistory, notes, dictionary entries and your context modes live in omnivox.db in your own app-data folder. Delete a dictation from the History page and it is gone from disk — there is no copy elsewhere.
Cargo.toml and package.json list no analytics SDK, no crash reporter and no auth library. The dependency lists are short enough to read in a minute, which is the whole argument.
The install one-liner checks the SHA-256 that GitHub publishes for the asset it just fetched. Model weights stream to a .part file under a hard size ceiling and are renamed into place only once complete.
The repository is published for exactly one reason: so the five statements above can be checked instead of believed.
Read the sourceRelease history
Each card names the release it landed in. Nothing on this row is planned work, and nothing is a demo that only runs on this page.
Read every release noteNo account, nothing to sign into. The installer is 10 MB because the models are fetched once, on first run, and never again.
irm https://tryomnivox.com/install.ps1 | iexWindows 10 / 11 (x64)4 GB+ RAM · GPU optionalInternet once, to fetch models