my-translator

phuc-ntMIT更新放缓

跨 macOS 和 Windows 的实时语音翻译桌面应用,本地运行无需服务器,用自己的 API key 完成语音识别与翻译,并免费合成语音。

Real-time speech translation — macOS & Windows, free TTS, no server, your API keys only

v0.9.1发布于 2026-07-11 08:16 UTC1,321star417fork同步于 2026-11-07 07:30 UTC

怎么上手

由 README 提炼,执行前请确认
git clone https://github.com/phuc-nt/my-translator.git
cd my-translator
npm install
npm run tauri build
硬件要求按 README 说明

macOS 支持 Apple Silicon 与 Intel,Windows 需 10/11;本地 MLX 离线模式仅限 Apple Silicon。README 未说明显存或内存要求。

支持 Apple Silicon
下载:源码 zip·GitHub Releases(安装包)本站不镜像安装包

项目说明

由 README 自动翻译提炼

Tauri 桌面实时语音翻译工具,直连 API 无中转服务器,密钥自持

跨 macOS 和 Windows 的实时语音翻译桌面应用,本地运行无需服务器,用自己的 API key 完成语音识别与翻译,并免费合成语音。

核心能力

  • 捕获系统音频或麦克风,16kHz PCM 流式转写翻译
  • 内置 Soniox、OpenAI Realtime、Qwen、本地 MLX 四种引擎
  • 双向翻译模式自动识别说话方并互译两种语言
  • Edge、Google、ElevenLabs 三家 TTS 朗读译文
  • 支持自定义术语表与双面板原文译文对照显示

容易踩的坑

从源码构建需 Rust stable、Node.js 18+、macOS 13+ 或 Windows 10+;各引擎需自备对应 API Key,Qwen 仅新加坡区域可用且必须手动指定源语言;TTS 默认关闭,双向模式下 TTS 会被自动禁用以防回声。

内容由模型根据 README 生成,可能不完整或不准确,以官方文档为准。看原文 README

最近发版

5 个版本v0.9.1
  1. 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

  2. v0.9.02026-07-10 · 2026-07-10 23:51 UTC
    查看更新说明

    ⬇️ Which file do I download?

    Your machineDownload
    Mac Apple Silicon (M1/M2/M3/M4)MyTranslator_0.9.0_aarch64.dmg
    Mac Intel (pre-2020)MyTranslator_0.9.0_x64.dmg
    WindowsMyTranslator_0.9.0_x64-setup.exe

    On 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.js owns 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-view removed; its list/viewer markup now lives in the Thư viện panel. mode-toggle removed; _readMode kept as a legacy alias of getActivity()==='read'.
    • Transcript scrolling moved from #transcript-container to #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

  3. 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).

  4. 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.rs rewritten 486 → 264 LOC. URL switched to qwen3-livetranslate-flash-realtime. RMS-VAD state, commit_turn, rms_int16 all removed. New session payload requests modalities=["text"], sets input_audio_transcription.language + translation.language, and disables turn-detection (server handles it). response.text.text snapshots emit as provisional; response.text.done emits final with dedupe on response_id.
    • src/js/qwen-realtime-client.js rewritten 148 → 90 LOC. Provisional buffer is full snapshot assignment (Live Flash sends text + stash every 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's QWEN_LANGS. No "auto" option.
    • _updateModeUI in src/js/app.js: per-engine visibility for key sections, Soniox-only blocks, and the TTS tab (with active-tab fallback to Translation).
    • TranscriptUI.provider converted to getter/setter so changing provider live-strips the .dual-view CSS class. _render() forces _renderSingle when provider='qwen'. _renderSingle treats Qwen provisional as a target stream (seg-translated class) instead of dim italic.
    • Removed qwen_audio_output from 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 error on 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

  5. 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 xattr workaround 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 the Authorization header on WebSocket handshakes.
    • New JS modules openai-realtime-client.js (mirrors the Soniox client callback shape) and openai-audio-output-queue.js (Web Audio API streaming player for the 24kHz output stream).
    • Explicit provider flag on transcript UI replaces the previous heuristic detection, fixing the dual-panel routing regression.
    • Added scripts/build-notarized.sh for local notarized builds (reads APPLE_* env vars from a gitignored .env).

    Full Changelog: https://github.com/phuc-nt/my-translator/compare/...v0.6.0

用户点评

登录用户的真实使用记录,可按版本和硬件筛选
共 0 条

    还没有人点评。第一个说出真实体验的人最有价值。

    README 原文

    未翻译

    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 machineFile
    Mac Apple Silicon (M1/M2/M3/M4)MyTranslator_<ver>_aarch64.dmg
    Mac Intel (pre-2020)MyTranslator_<ver>_x64.dmg
    WindowsMyTranslator_<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, and latest.json files 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:

    FeatureDetail
    Engines☁️ Soniox · ⚡ OpenAI Realtime · 🌏 Qwen LiveTranslate Flash · 🖥️ Local MLX
    Latency~2 s (Soniox / OpenAI) · ~4 s (Qwen) · ~10 s (Local)
    Languages70+ 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)
    TTS3 providers for Soniox / Local (Edge free, Google, ElevenLabs) — OpenAI streams its own voice (off by default), Qwen text-only
    PlatformmacOS (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):

    1. Audio Source: Both (System + Mic)
    2. Translation Type: Two-way
    3. 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 HDElevenLabs
    CostFreeFree 1M chars/mo~$5/mo+
    Quality★★★★☆ Neural★★★★★ Near-human★★★★★ Premium
    Vietnamese✅ 2 voices✅ 6 voices✅ Yes
    SetupNoneGoogle Cloud API keyAPI 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 .md files locally, per session

    Tech Stack


    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