Wenlan
Wenlan is a source-backed AI knowledge base and LLM wiki for AI work: organize documents and decisions into pages you can find, inspect, and review.
翻訳待ち
Hold a key, talk, and let go — clean, ready-to-send text appears wherever you type. Free, private and open source voice typing for Windows. Works offline, no account needed.
翻訳待ち
生産性Rust · TypeScriptGitHub @adityashelke04オンライン所有者未確認
Have you tried it? One tap is enough. No sign-in needed.
Local-first push-to-talk dictation for Windows. Hold a key, speak, release — correctly formatted text appears at your cursor, in any app. No cloud, no account, no telemetry.
翻訳待ち
Loading the full README. The saved excerpt is shown below.
Local-first voice dictation.
Hold a key, speak, release — correctly formatted text appears at your cursor, in any app.
No cloud, no account, no telemetry.
⬇ Download for Windows — one .exe, speech engine included.
All releases → · Docs · Changelog
Status. It runs end to end on Windows 10 and 11 — hotkey, capture,
transcription, formatting, injection and history — and every release is
published on the releases page.
Two things are not done: nothing is code-signed, so Windows will warn you about
an unknown publisher, and the bundled speech engine is CPU-only.Read the full README ↗Local-first voice dictation. Hold a key, speak, release — correctly formatted text appears at your cursor, in any app. No cloud, no account, no telemetry.
openvoice-dictation.vercel.app
⬇ Download for Windows — one .exe, speech engine included.
All releases → · Docs · Changelog
Status. It runs end to end on Windows 10 and 11 — hotkey, capture, transcription, formatting, injection and history — and every release is published on the releases page. Two things are not done: nothing is code-signed, so Windows will warn you about an unknown publisher, and the bundled speech engine is CPU-only.
Most people speak around 150 words a minute and type around 40. That gap is the entire reason dictation exists, and the reason almost nobody uses it is that raw transcription is not writing. It gives you your filler words, no punctuation you did not say out loud, and no idea which app you were talking into.
Whisper transcribes beautifully and formats nothing. Ask it to transcribe someone
writing code and you get use effect for useEffect, cube control for
kubectl, the literal words "open parenthesis", and Git status. — capitalized,
punctuated, and unrunnable.
Those aren't model bugs. They're accurate transcriptions of what you actually said. Fixing them is a text-processing problem, and text processing is deterministic, testable, and improvable one rule at a time.
So OpenVoice treats the speech model as a swappable commodity and puts all its effort into what happens next. That's the whole bet.
you say: "um so we need to call use effect here comma then return null"
you get: "So we need to call useEffect here, then return null"
you say: "cube control get pods" (in a terminal)
you get: "kubectl get pods" (no capital, no period — it runs)
Both of those are real output from ov format, not an illustration — they are
asserted as tests in crates/ov-format/src/lib.rs.
You can run the formatter yourself without a microphone, a GPU, or the GUI:
cargo run -p ov-cli -- format "um so we need to call use effect here comma then return null"
cargo run -p ov-cli -- format "cube control get pods" --profile terminal --trace
It works the same in an email, a chat box, a document or a terminal. What changes is how it formats: OpenVoice knows which app has focus and applies the rules that app deserves.
One window and one floating pill. The window is where you teach it; the pill is the only part you see while you work.
The window comes in three frosted-glass themes — Glacier, Graphite and Lagoon — each in light and dark, picked in Settings → Appearance or left to follow Windows.
Local by default, network by exception. OpenVoice makes exactly two kinds of outbound request, both of which you start, and both are listed here: a speech model you press Download on, and an update check you can switch off (Settings → Updates). Nothing else. The default model ships in the installer, so a fresh install dictates offline without fetching anything. Every crate that touches your microphone, transcripts, keyboard or history is sealed — it has no path to a socket at all, and downloading lives in one separate crate that does. That is checked in CI, not just promised here. Every crate that touches your microphone, your transcripts, your keyboard or your history is sealed: it has no path to an HTTP client, TLS stack or socket library anywhere in its dependency graph. That is checked in CI, not just promised here.
Two honest caveats. The Tauri shell links reqwest transitively, because Tauri
does, so an HTTP client is present in the binary even though no OpenVoice code
calls it. And the update check is a genuine exception to "you asked for it" —
nobody asks to be told about a release. It fetches one signed manifest, carries
no identifier and no usage data, never installs anything on its own, and makes
no request at all when turned off. The reasoning, including why it defaults on,
is in ADR 0005.
This is the beginning of the README. Read the rest at the original. Read the full README ↗