从源码构建需 Rust stable、Node.js 18+、macOS 13+ 或 Windows 10+;各引擎需自备对应 API Key,Qwen 仅新加坡区域可用且必须手动指定源语言;TTS 默认关闭,双向模式下 TTS 会被自动禁用以防回声。
my-translator
phuc-ntMIT更新放缓跨 macOS 和 Windows 的实时语音翻译桌面应用,本地运行无需服务器,用自己的 API key 完成语音识别与翻译,并免费合成语音。
Real-time speech translation — macOS & Windows, free TTS, no server, your API keys only
git clone https://github.com/phuc-nt/my-translator.git
cd my-translator
npm install
npm run tauri buildmacOS 支持 Apple Silicon 与 Intel,Windows 需 10/11;本地 MLX 离线模式仅限 Apple Silicon。README 未说明显存或内存要求。
Tauri 桌面实时语音翻译工具,直连 API 无中转服务器,密钥自持
跨 macOS 和 Windows 的实时语音翻译桌面应用,本地运行无需服务器,用自己的 API key 完成语音识别与翻译,并免费合成语音。
核心能力
- 捕获系统音频或麦克风,16kHz PCM 流式转写翻译
- 内置 Soniox、OpenAI Realtime、Qwen、本地 MLX 四种引擎
- 双向翻译模式自动识别说话方并互译两种语言
- Edge、Google、ElevenLabs 三家 TTS 朗读译文
- 支持自定义术语表与双面板原文译文对照显示
容易踩的坑
- v0.9.1最新正式版2026-07-11 · 2026-07-11 08:16 UTC
Fixed — engine picker no longer traps users
- Cloud engines stay selectable without a key. Soniox / OpenAI were disabled in the engine dropdown until a valid key was entered — a catch-22, since you had to select the engine to add its key. All key-based engines (Soniox, OpenAI, Qwen) are now selectable with a highlighted "cần API key" hint; the session is still blocked at Start until the key is present.
- Local MLX detected by hardware, not binary arch. On an Apple Silicon Mac running the x64 build (Rosetta), the app reported arch "x86_64" and wrongly disabled Local MLX. It now asks the real CPU via
sysctl hw.optional.arm64, so Local works regardless of which build you installed. Local MLX is also no longer hard-disabled on unsupported machines — it shows a clear warning and is blocked at Start.
Docs
- Added a "which build do I download?" table (Apple Silicon vs Intel vs Windows) to the README and release notes — several users had installed the x64 Mac build on Apple Silicon.
Full Changelog: https://github.com/phuc-nt/my-translator/compare/...v0.9.1
- v0.9.02026-07-10 · 2026-07-10 23:51 UTC
查看更新说明
⬇️ Which file do I download?
Your machine Download Mac Apple Silicon (M1/M2/M3/M4) MyTranslator_0.9.0_aarch64.dmgMac Intel (pre-2020) MyTranslator_0.9.0_x64.dmgWindows MyTranslator_0.9.0_x64-setup.exeOn a Mac? → About This Mac → "Chip": says Apple = aarch64, says Intel = x64. Other files (
.app.tar.gz,.sig,latest.json) are for the auto-updater — no need to download.
First tagged release since v0.7.3 — also ships everything in the v0.8.0 section below (local/online TTS providers, Read mode, custom Vietnamese voices).
Changed — Main UI redesigned around 3 activities
- Activity switcher
[🎙 Live | 📖 Đọc | 📚 Thư viện]replaces the Live/Read toggle and the separate Sessions screen. Each space shows only its own controls; a live session keeps running in the background while you browse Thư viện (red badge on the Live tab). - Live toolbar consolidated from ~15 buttons to: status line (engine · languages · audio-source dropdown), transcript, and a footer with one primary [▶ Bắt đầu/Dừng] button, TTS, and a ⋯ menu (copy, clear, font size, text color, dual-view, compact, shortcuts). Audio source is now a dropdown — ⌘1/2/3 still switch it.
- Two window modes: ⤢ toggles between the compact overlay and an expanded (~900×640) window that's comfortable for Đọc and Thư viện. Each mode remembers the size you resize it to.
- Toolbar auto-hides while translating (3s idle → hidden; move the mouse or hover the top edge to reveal). Toggle it off in the ⋯ menu. Manual Compact remains.
- Đọc quick voice picker — change the active TTS voice right in the Read panel; "Chỉnh thêm…" deep-links to Settings → TTS.
- Shortcut cheat-sheet — press
?(or ⋯ → Phím tắt). - Minimize button removed from the toolbar (⌘M still works).
Technical
- New
src/js/ui-shell.jsowns activity navigation, the ⋯/dropdown popover helper, window modes (localStorage persistence), and the unified chrome hide/show used by both auto-hide and manual Compact. sessions-viewremoved; its list/viewer markup now lives in the Thư viện panel.mode-toggleremoved;_readModekept as a legacy alias ofgetActivity()==='read'.- Transcript scrolling moved from
#transcript-containerto#transcript-content(container is now a flex column hosting the status/action rows).
Full Changelog: https://github.com/phuc-nt/my-translator/compare/...v0.9.0
- Activity switcher
- tts-models-viVietnamese TTS models (custom)2026-07-08 · 2026-07-08 14:40 UTC
查看更新说明
Custom Vietnamese Piper (VITS) neural TTS voices for the Local (Offline) TTS provider. Each archive is self-contained (model + tokens + espeak-ng-data). Downloaded on demand by the app; SHA-256 verified. Voices contributed by @quanhieu (nghimestudio/nghitts).
- v0.7.2v0.7.2 — Qwen LiveTranslate Flash + Settings reorg2026-05-26 · 2026-05-26 13:54 UTC
查看更新说明
Changes
- Qwen engine migrated from Omni Plus to LiveTranslate Flash (
qwen3-livetranslate-flash-realtime). Server-side VAD replaces the prior RMS-based client VAD; text-only modality; 60+ supported languages via an explicit picker (mirrors mobile v0.4.3). Free preview tier on DashScope international (Singapore region only). - Settings reorganized per engine (mobile parity): only the active engine's API key section is shown. Soniox-only features (Custom Context, Strict language detection, Endpoint delay) hide when engine ≠ Soniox. TTS tab hides when engine is cloud-realtime (OpenAI/Qwen). Engine hints collapsed into a single dynamic line.
- Qwen single-panel transcript: Live Flash returns translation only (no source ASR channel), so the dual-panel view is force-collapsed to single when Qwen is active — no more empty source pane with grey provisional noise.
- Source picker hides "Auto-detect" on Qwen: Live Flash stalls when source language is "auto" on real mic input. Source language now defaults to English and snaps to a real entry when switching to Qwen.
- Two-way mode disabled on Qwen (already disabled on OpenAI). Cloud realtime engines are one-way only.
Documentation
- Installation guides (macOS + Windows, EN + VI) updated with 3 new engine-specific Settings screenshots (
setting_soniox.png,setting_openai.png,setting_qwen.png). EN macOS guide gained the previously VI-only Qwen setup section.
Technical
src-tauri/src/commands/qwen_realtime.rsrewritten 486 → 264 LOC. URL switched toqwen3-livetranslate-flash-realtime. RMS-VAD state,commit_turn,rms_int16all removed. New session payload requestsmodalities=["text"], setsinput_audio_transcription.language+translation.language, and disables turn-detection (server handles it).response.text.textsnapshots emit as provisional;response.text.doneemits final with dedupe onresponse_id.src/js/qwen-realtime-client.jsrewritten 148 → 90 LOC. Provisional buffer is full snapshot assignment (Live Flash sendstext + stashevery tick, not deltas).connect({ apiKey, sourceLanguage, targetLanguage })— output queue and source provisional callback dropped.src/js/qwen-langs.js(new): 60-entry language list shared shape with mobile'sQWEN_LANGS. No "auto" option._updateModeUIinsrc/js/app.js: per-engine visibility for key sections, Soniox-only blocks, and the TTS tab (with active-tab fallback to Translation).TranscriptUI.providerconverted to getter/setter so changing provider live-strips the.dual-viewCSS class._render()forces_renderSinglewhen provider='qwen'._renderSingletreats Qwen provisional as a target stream (seg-translatedclass) instead of dim italic.- Removed
qwen_audio_outputfrom settings (struct, defaults, JS DEFAULT_SETTINGS).#[serde(default)]at struct level handles existing settings.json without migration.
Caveats
- DashScope keys must be created in Singapore region; other regions hit a different endpoint and fail with
WebSocket erroron Start. - Existing Qwen-Omni users will need to switch source-language picker off "Auto" and may need to re-confirm target language (the auto-snap defaults to Vietnamese if their previous code isn't in the 60-language list).
Full Changelog: https://github.com/phuc-nt/my-translator/compare/...v0.7.2
- Qwen engine migrated from Omni Plus to LiveTranslate Flash (
- v0.6.02026-05-13 · 2026-05-13 15:31 UTC
查看更新说明
New Features
- OpenAI Realtime translation provider: added
gpt-realtime-translate(May 2026 GA) as a third translation engine alongside Soniox and Local MLX. The model streams translated text and translated speech audio over a single WebSocket — no separate TTS step required, and lower end-to-end latency than text-only providers. - 13 output languages supported: en, es, pt, fr, de, it, ru, hi, id, vi, ja, ko, zh.
- Signed + notarized macOS DMG: builds are now signed with Developer ID and notarized through Apple's notary service — installs without the
xattrworkaround on first launch.
Bug Fixes
- Dual-panel routing: in dual view, the OpenAI source transcript now reliably lands in the left (source) column and the translation in the right column. Previous heuristic-based routing dropped the translation into the source column when whisper transcription lagged behind translation output.
- Source/target final pairing: whisper transcription and translation streams finalize at different cadences. A queue now pairs each source final with its matching translation final so the saved transcript stays aligned.
Caveats
- Cost:
$0.07/min ($4/hr) — about 34× Soniox at provider list rates (measured on a 5-min Japanese→Vietnamese test against the GA endpoint). Charged to your own OpenAI account; a cost warning is shown in Settings. - Two-way mode and the custom TTS provider toggle are unavailable while OpenAI Realtime is selected (audio comes natively from the model).
- Thai is not in the supported output set; Thai users should stay on Soniox or Local MLX.
- Source transcript may pause during long speaker pauses (e.g. applause breaks) — translation keeps working but the source column can stall. Under investigation.
Technical
- Added a
rubato-based 16k → 24k polyphase upsampler in the Rust audio pipeline so the existing 16kHz capture path can feed the model's 24kHz s16le input requirement. - New Tauri commands:
openai_realtime_start,openai_realtime_send_audio,openai_realtime_stop— the WebSocket lives in Rust because browsers can't set theAuthorizationheader on WebSocket handshakes. - New JS modules
openai-realtime-client.js(mirrors the Soniox client callback shape) andopenai-audio-output-queue.js(Web Audio API streaming player for the 24kHz output stream). - Explicit
providerflag on transcript UI replaces the previous heuristic detection, fixing the dual-panel routing regression. - Added
scripts/build-notarized.shfor local notarized builds (readsAPPLE_*env vars from a gitignored.env).
Full Changelog: https://github.com/phuc-nt/my-translator/compare/...v0.6.0
- OpenAI Realtime translation provider: added
用户点评
登录用户的真实使用记录,可按版本和硬件筛选还没有人点评。第一个说出真实体验的人最有价值。
My Translator is a real-time speech translation desktop app built with Tauri. It captures audio directly from your system or microphone, transcribes it, and displays translations in a minimal overlay — with no intermediary server involved.
📖 Installation guides: macOS (EN) · macOS (VI) · Windows (EN) · Windows (VI)
⬇️ Which build do I download?
Grab the matching file from the latest release:
| Your machine | File |
|---|---|
| Mac Apple Silicon (M1/M2/M3/M4) | MyTranslator_<ver>_aarch64.dmg |
| Mac Intel (pre-2020) | MyTranslator_<ver>_x64.dmg |
| Windows | MyTranslator_<ver>_x64-setup.exe |
On a Mac, check → About This Mac → Chip: Apple M-series →
aarch64, Intel →x64. Macs from late 2020 on are almost all Apple Silicon. The.app.tar.gz,.sig, andlatest.jsonfiles are for the built-in auto-updater — you don't download those.
How It Works
┌── ☁️ Soniox (text) ──┐
System Audio / Mic → 16kHz PCM ─────┼── ⚡ OpenAI Realtime (text+🔊) ─┼─→ Overlay UI
├── 🌏 Qwen LiveTranslate Flash (text only) │
└── 🖥️ Local MLX (text, offline) ─┘
↓ (optional, text engines)
TTS (Edge / Google / ElevenLabs) → 🔊
Four translation engines, pick what fits your call:
| Feature | Detail |
|---|---|
| Engines | ☁️ Soniox · ⚡ OpenAI Realtime · 🌏 Qwen LiveTranslate Flash · 🖥️ Local MLX |
| Latency | ~2 s (Soniox / OpenAI) · ~4 s (Qwen) · ~10 s (Local) |
| Languages | 70+ source → any target (Soniox), 13 targets (OpenAI), 60+ source+target (Qwen), JA/EN/ZH/KO → VI/EN (Local) |
| Cost | ~$0.12/hr (Soniox) · ~$4/hr (OpenAI, includes voice) · Free preview (Qwen, text-only) · Free (Local) |
| TTS | 3 providers for Soniox / Local (Edge free, Google, ElevenLabs) — OpenAI streams its own voice (off by default), Qwen text-only |
| Platform | macOS (ARM + Intel) · Windows · Local mode = Apple Silicon only |
| Signed | ✅ macOS signed & notarized |
| Auto-Update | ✅ Built-in, check & install from Settings |
📊 Detailed head-to-head: OpenAI Realtime vs Soniox benchmark — speed, quality, cost, and translation-mechanism comparison from a 5-min real-world test.
Features
📖 Dual Panel View
Two display modes:
- Single (default) — Translation text only, clean and focused
- Dual — Source | Translation side-by-side, each panel scrolls independently
Toggle with the panel button (bottom-right on hover).
🔄 Smart Scroll
Auto-scroll only when you're at the bottom. Scroll up to read old content without being yanked back down.
🔤 Quick Font Size
A- / A+ floating controls (bottom-right on hover). Font size adjustable up to 140px — great for presentations.
🔄 Two-Way Translation
Translate conversations between two languages simultaneously — ideal for bilingual meetings.
- One-way: Source language → Target language (e.g., Japanese → Vietnamese)
- Two-way: Language A ↔ Language B (e.g., Vietnamese ↔ Japanese) — the app detects who is speaking and translates to the other language automatically
Setup for video calls (Zoom, Google Meet, MS Teams):
- Audio Source: Both (System + Mic)
- Translation Type: Two-way
- Set Language A and Language B
Note: TTS narration is automatically disabled in two-way mode to prevent audio feedback loops (TTS output → mic recapture → re-translation).
🎙️ TTS Narration
Read translations aloud in one-way mode — 3 providers:
| Edge TTS ⭐ | Google Chirp 3 HD | ElevenLabs | |
|---|---|---|---|
| Cost | Free | Free 1M chars/mo | ~$5/mo+ |
| Quality | ★★★★☆ Neural | ★★★★★ Near-human | ★★★★★ Premium |
| Vietnamese | ✅ 2 voices | ✅ 6 voices | ✅ Yes |
| Setup | None | Google Cloud API key | API key |
| Speed control | ✅ | ✅ 0.5x–2.0x | ❌ |
TTS is OFF by default — toggle with the TTS button or ⌘ T.
📖 TTS guide: English · Tiếng Việt
📖 Custom Translation Terms
Define how domain-specific words should be translated:
Original sin = Tội nguyên tổ
Christ = Kitô
Pneumonia = Viêm phổi
Add terms in Settings → Translation → Translation terms. Great for religious, medical, or technical content.
⚡ OpenAI Realtime Mode
Single-call streaming translation via OpenAI's gpt-realtime-translate (May 2026 GA). Returns translated text and translated speech audio over one WebSocket — no separate TTS step, lower end-to-end latency, more idiomatic output. Trade-off: ~$4/hr, charged to your own OpenAI account. 13 target languages: en, es, pt, fr, de, it, ru, hi, id, vi, ja, ko, zh.
Two-way mode and the custom TTS toggle are unavailable while OpenAI Realtime is selected (audio is native).
🌏 Qwen LiveTranslate Flash Mode
Alibaba DashScope qwen3-livetranslate-flash-realtime — streams translated text (no native voice) on Qwen's free preview tier, with a 60-language picker matching the mobile app. Server-side VAD handles turn detection, so it works with mic / system audio / both. Translation-only display (no source-transcript panel; the model doesn't expose ASR). Get a key from Alibaba Cloud Bailian (Singapore region only — other regions hit a different endpoint and fail).
Source language must be picked explicitly (auto-detect is disabled on this engine — Live Flash stalls on real mic input when source is "auto"). Two-way mode and the custom TTS toggle are also disabled while Qwen is selected.
🖥️ Local Mode (Apple Silicon only)
Experimental offline mode using MLX + Whisper + Gemma — runs 100% on-device. JA/EN/ZH/KO → VI/EN.
Privacy
Your audio never touches our servers — because there are none.
- App connects directly to APIs you configure — no relay, no middleman
- You own your API keys — stored locally, never transmitted elsewhere
- No account, no telemetry, no analytics — zero tracking
- Transcripts saved as
.mdfiles locally, per session
Tech Stack
- Tauri 2 — Rust backend + WebView frontend
- ScreenCaptureKit — macOS system audio
- WASAPI — Windows system audio
- cpal — Cross-platform microphone
- Soniox — Real-time STT + translation
- OpenAI Realtime Translate —
gpt-realtime-translate(text + native voice) - MLX — On-device Whisper + Gemma for offline mode
- Piper via sherpa-onnx — Local offline neural TTS (on-device, no network)
- Edge TTS — Free neural TTS (default)
- Google Cloud TTS — Chirp 3 HD (near-human quality)
- ElevenLabs — Premium TTS
Build from Source
git clone https://github.com/phuc-nt/my-translator.git
cd my-translator
npm install
npm run tauri build
Requires: Rust (stable), Node.js 18+, macOS 13+ or Windows 10+.
Star History
License
MIT