Voice dictation and translation that stay on your computer. Press a hotkey in any app, speak or type, and the finished text is written back into the input box you were using.
LiveLingo 2.0 is a rewrite around one small window, the composer. The 1.x translator overlay is gone; its last
release is tag v1.4.2.
- Summon with a global hotkey (default
Ctrl+Alt+T). The composer opens above the input box you were in. - Say it or type it. Press
⌘D(Ctrl+Don Windows) or click the microphone to start talking, and press it again to stop; there is nothing to hold. You can also paste text or import a WAV recording. The other actions have shortcuts too, shown next to them in the menus:⌘1/⌘2/⌘3pick the output,⌘Lswaps the language,⇧⌘Ccopies,⌘Nstarts a new draft,⌘Rrecent drafts,⌘Oimport,⌘Sexport,⌘Eenlarges or restores the window,⌘,settings. Drag the right edge, the bottom edge or the corner to resize the window, or use the enlarge button next to close. The source header's Clear button stops recording and empties the entire current draft;⌘N/Ctrl+Ndoes the same. - Pick what is written, with one control: Clean up (fillers, repetitions and homophone errors removed, meaning untouched), Translate to English / Chinese, or Original. Your original words stay visible and can be restored for any sentence.
- Press Enter. The result goes into the app you came from. If that window is gone, nothing is typed anywhere else; copy still works.
Cleanup is checked by a fidelity gate: a rewrite that adds facts, drops negations or numbers, or drifts from what you said is rejected and that sentence keeps your words. Cleanup can be switched off in Settings; the composer then offers only Translate and Original.
While recording, cleanup is a live preview. After stopping, the whole text is summarized and polished; writing waits until that processing ends. Customize the final polish requirements in Settings → Voice, or restore the default. Invalid requirements fall back to the built-in ones; a rejected final result keeps the passage preview with a notice.
Model names appear briefly when recording starts or the active processing model changes. Click the Local / Cloud chip to inspect what this window actually used. Speech uses X-ASR 480 ms plus Qwen3-ASR 0.6B; cleanup uses Qwen3.5 4B. The fast/quality translation choice selects Hy-MT2 1.8B/7B and does not change the speech recognizer.
Imported recordings become a read-only timeline that goes through the same cleanup and translation, and can be exported as SRT.
- Speech recognition, cleanup and translation run locally. Audio never leaves the machine. The speech models are loaded in the background when the app starts, which takes about 1.5 GB of memory until they have been idle for 30 minutes; turn that off in Settings → Voice to load them only when you summon the composer.
- Cloud models are off by default. In Settings → Privacy and cloud you can switch translation and cleanup to your own
OpenAI-compatible endpoint (for example Microsoft Foundry) separately. Only the text of that step is sent; the
endpoint must be
https; the API key is kept in the system secret store, not in a file. A cloud failure is shown, never silently retried on the local model. - Models are downloaded only after you agree, from their original hosts, and verified against pinned SHA256 hashes.
- Recent drafts are kept in memory only and are gone when the app exits.
- The installed app looks for updates on the GitHub releases of this repository (at start and every few hours) and
downloads a newer version in the background. Nothing you wrote or said is part of that request. Set
Update.UpdateUrlto an empty string insettings.jsonto turn it off. - The output and translation direction last chosen for an app are remembered for that app (identifier and the two
choices only, in
preferences.jsonon this device; never titles, text or recordings). Turn it off, or forget one app or all of them, in Settings.
| Role | Model | Size |
|---|---|---|
| Live recognition | X-ASR 480 ms streaming (zh-en) | ~130 MB |
| Settled recognition and recording import | Qwen3-ASR 0.6B | ~880 MB |
| Speech boundaries | Silero VAD | <1 MB |
| Cleanup | Qwen3.5 4B Q4_K_M | ~2.7 GB |
| Translation (balanced) / (quality) | Hy-MT2 1.8B / 7B Q4_K_M | ~1.1 GB / ~4.6 GB |
| Runtime | llama.cpp b11980 | ~16–24 MB |
Licenses are listed in THIRD_PARTY_NOTICES.md.
- Target hardware: Apple M2 or newer with 16 GB, or an equivalent Windows 11 PC. macOS 12+ and Windows 10/11.
- macOS needs Accessibility (to type into other apps) and Microphone permission.
- The interface is drawn by the system web view: WKWebView on macOS, WebView2 on Windows (Windows 11 includes it; how the runtime reaches Windows 10 is not decided yet).
- Developed and measured on an M3 Pro (36 GB). Not yet verified: an M2/16 GB machine (memory with all models resident, latency), anything running on Windows beyond a successful build and bundled native libraries, and a real Foundry/OpenAI endpoint.
- Recording import reads uncompressed WAV only. m4a/mp3 need a platform decoder that is not built yet.
- The project license is not chosen yet; there is no
LICENSEfile.
dotnet tool restore
dotnet run --project src/LiveLingo.Desktop # run
./build.sh Test # unit tests with coverage gates
./build.sh ProbeVoice --ProbeCorpus poc/voice-dictation/corpus # end-to-end voice probe (downloads models)See CONTRIBUTING.md for the project layout, build targets and rules.
- Composer design
- Implementation plan and progress
- UI prototype v3 (open
index.htmlin a browser) - Evidence behind the choices: voice dictation design, translation POC report
