sokuji

kizuna-ai-labAGPL-3.0活跃维护

面向双语会议的实时双向语音翻译工具,自动识别说话语言并双向互译,支持云端或完全离线本地运行,覆盖桌面端和浏览器插件。

Real-time two-way speech translation for bilingual meetings — auto-detects the spoken language and translates both directions, cloud or fully offline on-device. Desktop (Windows · macOS · Linux) + browser extension (Chrome · Edge) for Zoom, Meet, Teams & any app.

v0.50.1发布于 2026-11-10 18:02 UTC1,487star +9 / 7 天209fork同步于 2026-11-11 05:46 UTC

怎么上手

由 README 提炼,执行前请确认
git clone https://github.com/kizuna-ai-lab/sokuji.git
cd sokuji && npm install
npm run electron:dev
硬件要求按 README 说明

本地推理使用 WASM 和 WebGPU,依靠现有 CPU 与集成显卡即可运行,README 明确说明无需昂贵 GPU;未给出具体显存或内存数值。桌面端支持 Windows、macOS、Linux,浏览器扩展支持 Chrome、Edge。

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

项目说明

由 README 自动翻译提炼

跨平台实时双向语音翻译工具,自动识别说话语言,支持云端或完全离线本地推理

面向双语会议的实时双向语音翻译工具,自动识别说话语言并双向互译,支持云端或完全离线本地运行,覆盖桌面端和浏览器插件。

核心能力

  • 自动检测说话语言并双向翻译,无需手动切换
  • 本地推理基于 WASM 与 WebGPU,无需 API Key 且完全离线
  • 提供 44 个 ASR、75 个翻译、137 个 TTS 本地模型
  • 内置虚拟麦克风,把翻译音频路由到 Zoom、Meet、Teams 等任意应用
  • 同时捕获麦克风与系统音频,支持实时字幕与双向对话

容易踩的坑

本地推理需先在应用内一键下载模型并缓存到 IndexedDB,首次使用要联网拉取模型;OpenAI Compatible 自定义端点仅 Electron 桌面版支持,浏览器扩展不可用;云端模式需自备各厂商 API Key,密钥仅存本地。

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

最近发版

5 个版本v0.50.1
  1. v0.50.1最新正式版2026-11-10 · 2026-11-10 18:02 UTC

    Organization accounts: choose who pays

    • Organization members can choose whether a session uses the organization's balance or their own from the account panel. The title bar shows the selected payer and its balance; during a session, it stays with that session's payer. (#703)
    • The account panel shows organization and personal balances, the amount available after running-session reservations, estimated remaining hours, and each side's spending over the last 30 days. (#703)
    • Clear notices explain when an organization is out of money, paused, or no longer includes the member, with top-up guidance for organization owners. These notices are localized in all supported app languages. (#703)
    • Accounts outside an organization keep the same session requests, balances, and notices as before. (#703)

    Full Changelog: https://github.com/kizuna-ai-lab/sokuji/compare/v0.50.0...v0.50.1

    • chore(release): v0.50.1
    • Merge pull request #706 from kizuna-ai-lab/fix/org-account-locales
    • fix(i18n): localize organization account panel and payer labels
  2. v0.50.02026-11-10 · 2026-11-10 16:51 UTC
    查看更新说明

    Organization accounts: choose who pays

    • Organization members can choose whether a session uses the organization's balance or their own from the account panel. The title bar shows the selected payer and its balance; during a session, it stays with that session's payer. (#703)
    • The account panel shows organization and personal balances, the amount available after running-session reservations, estimated remaining hours, and each side's spending over the last 30 days. (#703)
    • Clear notices explain when an organization is out of money, paused, or no longer includes the member, with top-up guidance for organization owners. These notices are localized in all supported app languages. (#703)
    • Accounts outside an organization keep the same session requests, balances, and notices as before. (#703)

    Full Changelog: https://github.com/kizuna-ai-lab/sokuji/compare/v0.49.0...v0.50.0

    • chore(release): v0.50.0
    • Merge pull request #703 from kizuna-ai-lab/feat/org-payer
    • docs(wallet): a docstring on every declaration in the usage helper
    • docs(wallet): docstrings on the usage helper's public surface
    • fix(account): keep the request refs current after commit, not during render
    • fix(account): another identity's figures may not survive the switch
    • fix(account): a superseded usage response may not paint or cache over a newer one
    • fix(account): a stale-refresh, a per-render fetch and an invented zero
    • fix(account): tell 'no usage' apart from 'not known yet'
    • feat(account): choose the payer in the panel, and show both sides' usage
    • Merge pull request #705 from kizuna-ai-lab/fix/soniox-reserve-rates
    • fix(soniox): mirror the backend's new session budget rates and $1.00/h cap
    • Merge pull request #704 from kizuna-ai-lab/chore/drop-form-factor-log
    • chore(diagnostics): drop the output form-factor log line
    • chore(diagnostics): drop the output form-factor log line
    • refactor(account): compute what sessions hold in one helper
    • fix(payer): keep a switch held in memory when another document clears or removes the key
    • i18n(zh): say "reserved" (预留/預留) for what running sessions hold, as the web dashboard does
    • style(account): style the held line under the organization's balance
    • feat(account): show the organization's committed balance, not what is left after holds
    • fix(payer): keep the switch working when the storage cannot hold it
    • test: give the repository-wide import check a 30 s timeout
    • fix(payer): hide the payer line for a running session started with no payer
    • fix(payer): show the running session's payer, not the live switch
    • fix(wallet): warn once on a malformed organization or personal wallet; share the payer field in voice library requests
    • fix(session): keep every organization refusal as itself mid-session; move payerBalance out of the storage module
    • fix(account): do not invent a $0 personal balance; tidy organization refusals
    • fix(account): organization payer gate, notice params and payer display
    • chore(i18n): keep the escaped invisible characters in screenContext
    • feat(account): show organization and personal balances
    • fix(session): organization refusals on voice preview and mid-session reissue
    • feat(session): organization refusal notices
    • fix(session): carry the payer to the voice preview and read it from the shape
    • feat(session): choose who pays before Start
    • fix(account): type personal expiringSoon as the backend sends it
    • feat(account): read organization and personal balances
    • Merge pull request #701 from kizuna-ai-lab/docs/readme-demo-video-v2
    • docs(readme): use re-cut demo video (no clipped sentences)
    • Add language options to README
    • Update README.md
    • Merge pull request #700 from kizuna-ai-lab/docs/readme-demo-video-url
    • docs(readme): replace demo video with 0.49.0 recording
    • Merge pull request #699 from kizuna-ai-lab/docs/readme-demo-video
    • docs(readme): add looping demo GIF, remov
  3. v0.49.02026-11-06 · 2026-11-06 19:44 UTC
    查看更新说明

    Automatic reconnect when the connection drops

    • When the connection to Soniox or Qwen drops mid-session, for example when a VPN or proxy switches or Wi-Fi blinks, Sokuji now reconnects on its own. The status line shows "Reconnecting…", then "Connection lost and restored" appears in the conversation, and the conversation and the session timer carry on. (#693)
    • Works with Kizuna AI's managed Soniox and Qwen, which fetch new credentials for the reconnect, and with your own Soniox key. (#693)
    • A connection that stays open but stops answering is now noticed and reconnected, on Soniox and on Qwen. Before, the session could sit silent until you stopped it. (#693)
    • Read-aloud comes back after a reconnect: its connection is renewed together with the transcription. (#693)
    • If the network stays down for more than 30 seconds, the session ends with "Connection lost" and the conversation stays on screen. What was said while the connection was down is not translated afterwards. (#693)

    Soniox: the app's own voice is no longer transcribed

    • When Sokuji reads a translation aloud through this computer's speakers, it now tells Soniox what it is about to say, so the microphone picking up that playback no longer turns into a new line that gets translated again. In face-to-face mode this removes the loop of the app translating its own voice: in our tests, stray lines from the app's own speech went from 51 to 1. (#687)
    • On by default; the switch is in Soniox's advanced settings. In Both mode with separate sessions it is not used. (#687)

    Full Changelog: https://github.com/kizuna-ai-lab/sokuji/compare/v0.48.0...v0.49.0

    • chore(release): v0.49.0
    • Merge pull request #693 from kizuna-ai-lab/feat/session-reconnect
    • docs(session): Qwen's reissue limit is four a minute (#692)
    • docs(session): name the reissue residuals, and what Qwen's limit of 2 a minute now costs (#692)
    • fix(session): a session-started retry asks again after its wait whether the run is still open (#692)
    • fix(qwen): a token fetched ahead of a stepped-back clock leaves the cache (#692)
    • docs(session): a Qwen reconnect's token is minted since its drop, and session-started is retried while open (#692)
    • fix(qwen): session-started is tried again while its connection is open (#692)
    • fix(qwen): a managed reconnect always dials a token minted since its drop (#692)
    • docs(spec): Qwen's liveness probe, its push-to-talk commit wait and their measurement (#692)
    • fix(qwen): a connection that stays open and answers nothing reconnects as a stall (#692)
    • fix(status): a screen reader can still read the reconnect's attempt and seconds (#692)
    • fix(soniox): a reconnect opens a fresh TTS socket, so speech comes back (#692)
    • test: pin the reconnect's frame, the throttled detail and the reissue role (#692)
    • docs(soniox): the stall threshold cites its measurement (#692)
    • fix(status): the reconnect line's live region stays steady while its seconds tick (#692)
    • fix(session): a success read past the deadline's time is taken, and the attempt contract says so (#692)
    • fix(qwen): a close during an attempt's handshake follows the live close policy (#692)
    • fix(soniox): shared Both drops gap audio before the mixer, so none reaches the new socket (#692)
    • fix(soniox): session-started is tried again while its connection is open (#692)
    • docs(spec): Qwen reissues take their place before the mint (#692)
    • docs: no internal names or channels in the reconnect spec and plan (#692)
    • fix(soniox): a 429 reconnects unless it says the quota is used up (#692)
    • docs(session): the flap limits and the reissued key's window in the spec (#692)
    • fix(locales): screenContext keeps its escaped soft hyphen and zero-width space (#692)
    • fix(soniox): a reissued key's window is counted on the client's clock from the answer, and a connect still going when it closes is given up (#692)
    • fix(session): the restored n
  4. v0.48.02026-11-04 · 2026-11-04 19:15 UTC
    查看更新说明

    Palabra AI: the whole voice library, and your own voice

    • Choose any of Palabra's built-in voices for the translation the other side hears and the one you hear, not only Default Low and Default High. Each voice has a preview button. (#684)
    • Create your own voice from a recording or an audio file, then pick it like any other voice. You can also delete voices you made. (#684)
    • Works with both kinds of Palabra credentials: Platform API key and App Client ID/Secret. (#684)
    • The voice list is kept while the app is open, so going back to the settings no longer reloads it. (#684)

    Browser extension: tab capture on older installs

    • On some installs that once ran an older version, starting a session failed every time with "Extension has not been invoked for the current page". Updating fixes this. (#683)
    • When Chrome refuses to capture a tab, the message now tells you to click the Sokuji icon on the meeting tab, which is what grants the capture. (#683)

    Soniox: new transcription model

    • Real-time transcription now uses Soniox's stt-rt-v6 model. Soniox is retiring the previous model on December 15. (#685)

    Full Changelog: https://github.com/kizuna-ai-lab/sokuji/compare/v0.47.0...v0.48.0

    • chore(release): v0.48.0
    • Merge pull request #685 from kizuna-ai-lab/chore/soniox-stt-v6
    • Merge pull request #684 from kizuna-ai-lab/feat/palabra-voice-library
    • test(palabra): a padded https sample url is used trimmed
    • feat(soniox): transcribe with stt-rt-v6
    • fix(palabra): preview the first sample at a usable https address
    • fix(palabra): read a voice's nested fields defensively
    • fix(palabra): a voice-list entry must be an object with a voice id
    • fix(palabra): mask a credential of any length; a null list item is a typed error
    • fix(palabra): address the review on #684
    • fix(palabra): the remembered list stays right under overlap, failures and changes
    • feat(palabra): remember the voice list for the app session
    • fix(palabra): typed error for an empty answer; https only for samples and uploads
    • fix(palabra): clone languages read as names; deleting a processing voice stays quiet; long recordings kept
    • docs(palabra): verified with both credential types against the live API
    • feat(palabra): voice library in Palabra's settings; CSP for voice uploads
    • feat(palabra): create and delete voices, with processing state
    • feat(palabra): voice picker with built-ins, own voices and previews
    • feat(voice-library): optional sample language in the clone review step
    • feat(palabra): voice source, clone languages, credential hook
    • feat(palabra): voices REST client
    • feat(palabra): voice ids are any string, stored with a name
    • docs(palabra): voice library implementation plan
    • docs(palabra): voice library design approved
    • docs(palabra): filters are language and gender only (owner ruling)
    • docs(palabra): voice library design (task #47)
    • Merge pull request #683 from kizuna-ai-lab/fix/tab-capture-grant
    • fix(extension): only the missing permission points at the icon
    • fix(extension): tab capture survives a panel setting old builds left on
    • Merge pull request #682 from kizuna-ai-lab/fix/tts-catalog-voice-type
    • refactor(soniox): the TTS catalog declares its own VoiceOption
    • Merge pull request #674 from kizuna-ai-lab/release/v0.47.0
  5. v0.47.02026-10-31 · 2026-10-31 06:29 UTC
    查看更新说明

    Echo cancellation now removes Sokuji's own speech

    Sokuji only echo cancellation removes Sokuji's translated speech again, so the translation no longer comes back through your microphone when you use speakers. On Linux, where this is the only mode, you get the benefit automatically. Translations also start playing sooner, and the delay no longer grows during a session. (#673)

    Face-to-face: every translation is spoken

    • If someone switches to the other person's language mid-conversation, the translation of those sentences is now read aloud, in the voice and on the output of its language. This applies to Soniox face-to-face and shared Both. (#671)
    • These sentences have their own replay button and karaoke highlight. (#671)
    • In face-to-face settings, the two speech rows are now named by language, so it is clear which device plays which translation. (#671)

    Doubao AST 2.0

    • A pause no longer triggers a false "Speech playback is degraded" notice. (#672)

    Full Changelog: https://github.com/kizuna-ai-lab/sokuji/compare/v0.46.5...v0.47.0

    • chore(release): v0.47.0
    • Merge pull request #673 from kizuna-ai-lab/fix/output-context-sinks
    • fix(audio): a rebuild a switch overtook reports no failure
    • fix(audio): a switch that never answers cannot hold recovery off
    • Merge pull request #672 from kizuna-ai-lab/fix/ast2-empty-clip
    • fix(audio): a sink's rebuild cap counts a run, and a hung rebuild retries
    • fix(audio): a sink's switch resolves only if the sink moved
    • fix(volcengine_ast2): a page of an unknown Ogg stream version is the decoder's, not silence
    • fix(volcengine_ast2): only whole header pages count as silence; anything past them goes to the decoder
    • fix(audio): the outlets play through contexts the echo canceller hears
    • test(audio): a sink that never ran sees a state change too
    • feat(audio): a context sink recovers from a vanished device
    • feat(audio): a context sink switches device on a new context
    • feat(audio): an output sink on its own AudioContext
    • docs(audio): plan the output context sinks
    • docs(audio): design the output context sinks
    • Merge pull request #671 from kizuna-ai-lab/feat/f2f-language-routing
    • fix(volcengine_ast2): a clip of Opus header pages alone is silence, not a decode failure
    • fix(soniox): a core's two voices number a row's audio entries together
    • fix(playback): a replay's voice comes from an entry that will play, else the row's own
    • fix(playback): forward the clip's voice from the app's playback port; replay from an entry that will play
    • feat(contract): a row keeps the audio another leg's voice read for it — audio.voice
    • chore(face-to-face): the tooltip names one choice, device and side together, as the list is
    • chore(face-to-face): say the row's tooltip plainly — pick the device and the side the listener wears
    • fix(face-to-face): an auto source keeps the generic row name; foreign chunks never enter the held text
    • feat(face-to-face): name each speech row by where its language's translation plays
    • feat(soniox): read a translation in the voice of its language, face-to-face and shared Both

用户点评

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

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

    README 原文

    未翻译

    Why Sokuji?

    Built by Kizuna AI Lab — we use AI to break language and accessibility barriers, creating genuine human connections. "Kizuna" (絆) means "bond" in Japanese, and Sokuji (即時) is our flagship tool to make real-time communication possible across any language.

    Sokuji is a cross-platform live speech translation app for desktop and browser. It supports Local Inference — on-device ASR, translation, and TTS powered by WASM and WebGPU, with no API key required, no expensive GPU needed, fully offline, and completely private. It also integrates with cloud providers including OpenAI, Google Gemini, Palabra.ai, Kizuna AI, Doubao AST 2.0, Soniox, and OpenAI-compatible APIs.


    How It Works

    graph LR
        A["🗣️ You speak<br/>(any language)"] --> B["🎙️ Sokuji"]
        B --> C{"Choose one"}
        C -->|"☁️ Cloud"| D["OpenAI · Gemini<br/>Palabra · Doubao..."]
        C -->|"🖥️ Local"| E["On-device AI<br/>ASR → Translate → TTS<br/>(fully offline, no GPU)"]
        D --> F["🔊 Translated voice"]
        E --> F
        F --> G["💻 Zoom · Teams · Meet<br/>Discord · Any app"]
    
        style A fill:#4a9eff,stroke:#357abd,color:#fff
        style B fill:#10a37f,stroke:#0d8a6a,color:#fff
        style C fill:#ff9f43,stroke:#e88a2e,color:#fff
        style D fill:#6c5ce7,stroke:#5a4bd1,color:#fff
        style E fill:#00b894,stroke:#009d7e,color:#fff
        style F fill:#fd79a8,stroke:#e56b96,color:#fff
        style G fill:#636e72,stroke:#525c60,color:#fff
    
    Providers8 — OpenAI, Gemini, Palabra.ai, Kizuna AI, Doubao AST 2.0, Soniox, OpenAI Compatible, Local Inference
    Local Models44 ASR models, 75 translation models, 137 TTS models
    Languages99+ (speech recognition) · 55+ (translation) · 53 (text-to-speech)
    PlatformsLinux · Windows · macOS · Chrome · Edge
    PrivacyLocal Inference = 100% on-device, no API key, no internet

    Demo

    https://github.com/user-attachments/assets/f48e2bee-4cad-4b40-b551-8ba59fb5652a


    Install

    Sokuji is available as a Desktop App and a Browser Extension — same features, different reach.

    Desktop AppBrowser Extension
    FeaturesAll features identicalAll features identical
    Use withAny app with mic input — Zoom, Teams, Discord, Slack, games, OBS, and moreWeb-based meeting platforms — Google Meet, Teams, Zoom, Yandex Telemost, Discord, Slack, Gather.town, Whereby, Jitsi Meet
    InstallDownload & installZero install — add from store
    PlatformsWindows · macOS · LinuxChrome · Edge · Brave (coming soon)

    Desktop App

    Download from the Releases page:

    PlatformPackage
    WindowsSokuji-x.y.z.Setup.exe
    macOS (Apple Silicon)Sokuji-x.y.z-arm64.pkg
    macOS (Intel)Sokuji-x.y.z-x64.pkg
    Linux (Debian/Ubuntu x64)sokuji_x.y.z_amd64.deb
    Linux (Debian/Ubuntu ARM64)sokuji_x.y.z_arm64.deb

    Browser Extension

    1. Download sokuji-extension.zip from the Releases page
    2. Extract the zip file
    3. Go to chrome://extensions/ and enable "Developer mode"
    4. Click "Load unpacked" and select the extracted folder

    Build from Source

    git clone https://github.com/kizuna-ai-lab/sokuji.git
    cd sokuji && npm install
    npm run electron:dev        # Development
    npm run electron:build      # Production
    

    Two-Way Translation for Bilingual Meetings

    Two people, two languages, one conversation. Sokuji auto-detects which language is being spoken and translates it into the other — in both directions, in real time. Set Language A and Language B, capture system audio and microphone together, and everyone follows along.

    • Auto language detection — no manual switching mid-conversation
    • Both directions at once — mic + system audio in a single session
    • Live subtitles — share your screen so the other side reads along too
    • Works in Zoom, Google Meet, Teams, Discord, or any app (desktop), and directly inside web meeting platforms (browser extension)

    Powered by Soniox two-way mode — 60+ languages, 3,600+ language pairs.


    Features

    Local Inference (Edge AI)

    Run everything on your device — no API keys, no internet, no expensive GPU, complete privacy. Powered by WASM and WebGPU, Sokuji runs efficiently on any modern browser using your existing CPU and integrated graphics.

    • 44 ASR models (23 offline + 10 streaming + 11 WebGPU including Whisper, Cohere Transcribe, Voxtral, Granite Speech) covering 99+ languages
    • 75 translation models — 69 Opus-MT language pairs + 6 multilingual LLMs (Qwen 2.5 / 3 / 3.5, Hunyuan-MT 1.5, TranslateGemma) with WebGPU
    • 137 TTS models across 53 languages (Piper, Piper-Plus, Coqui, Mimic3, Matcha, MMS, VITS, Supertonic engines)
    • One-click model download with IndexedDB caching

    Cloud Providers

    ProviderKey Feature
    OpenAIgpt-realtime-mini / gpt-realtime-1.5 · 10 voices · configurable turn detection (Normal / Semantic / Disabled) · noise reduction · 60+ languages
    Google GeminiDynamic model selection (audio/live models) · 30 voices · built-in turn detection · 34 language variants
    Palabra.aiWebRTC low-latency · voice cloning · auto sentence segmentation · partial transcription translation · 60+ source / 40+ target languages
    Kizuna AISign in and go — API key managed by backend · same OpenAI models with optimized defaults
    Doubao AST 2.0Speech-to-speech with speaker voice cloning · bidirectional Chinese↔English · Ogg Opus audio output
    SonioxReal-time speech-to-speech · one-way & two-way translation (auto-detects speaker language) · 60+ languages / 3,600+ pairs · 200 voices (filter by gender, age, accent, use case, style) · voice cloning · bring-your-own-key
    OpenAI CompatibleBring your own endpoint — any OpenAI Realtime API-compatible service (Electron only)
    Local InferenceFully offline · ASR → Translation → TTS on-device · no API key · no GPU required

    Audio

    • Translate your voice — speak in your language, others hear the translation as if you spoke it natively
    • Translate others' voice — capture meeting audio (extension) or any system audio (desktop) and get real-time translated subtitles
    • Virtual Microphone — route translated audio to Zoom, Meet, Teams, or any app
    • Real-time Passthrough — monitor your own voice while recording
    • AI Noise Suppression — removes background noise, keyboard sounds, and other distractions
    • Echo Cancellation — built-in with modern Web Audio API

    Interface

    • 30 languages — fully localized UI
    • Simple Mode — streamlined setup for non-technical users
    • Advanced Mode — waveform display and detailed controls

    Privacy

    Your audio stays on your device — if you choose Local Inference, nothing ever leaves.

    • Cloud mode connects directly to provider APIs — no intermediary servers
    • API keys stored locally only, never transmitted to us
    • Local Inference processes everything on-device with zero network requests
    • Anonymous usage analytics via PostHog

    Tech Stack


    Contributing

    We welcome contributions! Please read our Contributing Guidelines before getting started.


    License

    AGPL-3.0

    Sponsors

    Support

    Acknowledgments

    For detailed model licenses, see THIRD_PARTY_NOTICES.md.