Skip to content
AGIBuildPublic

About

LiveLingo is a real-time translation input plugin for multilingual teams on Slack. It translates as you type, adapts tone and terminology before send, and keeps conversations natural without context switching. Built for low latency, local-first privacy, and seamless cross-language collaboration.

Resources

Contributing

Stars

0 stars

Watchers

0 watching

Forks

Repository files navigation

LiveLingo

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.

Composer prototype

How it works

  1. Summon with a global hotkey (default Ctrl+Alt+T). The composer opens above the input box you were in.
  2. Say it or type it. Press ⌘D (Ctrl+D on 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 / ⌘3 pick the output, ⌘L swaps the language, ⇧⌘C copies, ⌘N starts a new draft, ⌘R recent drafts, ⌘O import, ⌘S export, ⌘E enlarges 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+N does the same.
  3. 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.
  4. 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.

Privacy

  • 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.UpdateUrl to an empty string in settings.json to 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.json on this device; never titles, text or recordings). Turn it off, or forget one app or all of them, in Settings.

Models

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.

Requirements and status

  • 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 LICENSE file.

Build and test

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.

Design

About

LiveLingo is a real-time translation input plugin for multilingual teams on Slack. It translates as you type, adapts tone and terminology before send, and keeps conversations natural without context switching. Built for low latency, local-first privacy, and seamless cross-language collaboration.

Resources

Contributing

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages