Live speech translation as a desktop subtitle overlay. Murmur AI listens to a microphone or computer audio, sends audio to your speech-to-text endpoint, translates sentence-by-sentence through an OpenAI-compatible LLM endpoint, renders clean subtitles, and can speak the translation aloud.
AI handoff for Claude Code / Codex
This repository is open-source oriented. Do not commit personal
.envfiles, local absolute paths, private runtime folders, API keys, or machine-specific model paths. Keep release defaults generic. Voice output is packaged through the built-innativeTTS fallback and optionalvoice-runtime/resources. The translation LLM is intentionally not bundled; recommend Gemma 4 E4B Instruct and let users connect it through Ollama, llama.cpp, LM Studio, or another OpenAI-compatible endpoint.
- Live subtitles. Speech is segmented into low-latency chunks and rendered as a transparent subtitle overlay.
- OBS browser overlay. Add
http://127.0.0.1:49152/overlay.htmlas an OBS Browser Source for stream captions. - Packaged voice output. Release builds include a built-in
nativeTTS fallback. You can also use Kokoro or another OpenAI-compatible speech endpoint. - Bring-your-own AI. STT, translation, and optional higher-quality TTS are endpoint-driven.
- Noise gate. Adjustable gate in settings reduces false captures from background noise.
- Computer audio. Windows supports native loopback. macOS requires a loopback device such as BlackHole for system audio.
For a good local experience, use:
- Machine: Mac mini M4 with 16GB RAM or better.
- Speech-to-text:
whisper.cppwith a fast Whisper model. - Translation: Gemma 4 E4B Instruct through Ollama (
gemma4:e4b), llama.cpp, LM Studio, or another OpenAI-compatible server. - Voice: built-in
nativeTTS for zero setup, or Kokoro for higher-quality local AI speech.
Murmur AI does not ship Gemma 4 E4B, Whisper models, or other LLM weights. Download and run those separately according to their licenses. Google documents Gemma 4 E4B as part of the Gemma 4 family, and Hugging Face hosts it as google/gemma-4-E4B.
microphone / computer audio
-> AudioWorklet capture + adjustable noise gate
-> VAD utterance segmentation
-> PCM16 WAV -> STT endpoint
-> sentence splitting
-> translation worker pool
-> app subtitles + OBS Server-Sent Events overlay
-> ordered TTS playback
The Electron main process starts a local HTTP service on 127.0.0.1. The renderer owns audio capture and subtitle UI. The service owns STT routing, translation workers, TTS routing, settings, and the OBS event stream.
Download the latest GitHub release:
- macOS Apple Silicon:
Murmur.AI-0.2.1-mac-arm64.dmg - Windows x64:
Murmur.AI-0.2.1-win-x64.exe
Open the app once. It creates its config folder automatically:
- macOS:
~/Library/Application Support/Murmur AI/.env - Windows:
%APPDATA%\Murmur AI\.env
Most users can configure endpoints from the in-app settings panel instead of editing .env manually.
See the full step-by-step guide: docs/first-time-setup.md.
Minimal local path:
- Install Murmur AI.
- Start a Whisper-compatible STT endpoint.
- Open
settings->Local AI Setup. - Use
Ollama Gemma 4 E4Bto pullgemma4:e4b, or usellama.cpp Gemma 4 E4Bto install llama.cpp and start the recommended GGUF. - Confirm the displayed download sizes before starting model downloads.
- Click
useorstartso Murmur AI fills the Translation LLM endpoint and model automatically. - Leave
voiceoff until captions work. - Click
Start.
Example .env:
MURMUR_AI_STT_ENGINE=http
MURMUR_AI_STT_ENDPOINT=http://127.0.0.1:8081/inference
MURMUR_AI_STT_MODEL=
MURMUR_AI_LLM_ENDPOINT=http://127.0.0.1:11434/v1/chat/completions
MURMUR_AI_LLM_MODEL=gemma4:e4b
MURMUR_AI_LLM_API_KEY=
MURMUR_AI_TTS_ENGINE=auto
MURMUR_AI_NOISE_GATE=45Murmur AI ships with a native TTS engine:
- macOS: uses the system speech synthesizer and returns WAV audio to the app.
- Windows: uses installed SAPI voices through PowerShell and returns WAV audio.
- Linux: attempts
espeak-ngwhen available.
For higher quality local AI speech, run Kokoro or another OpenAI-compatible /v1/audio/speech server and set:
MURMUR_AI_TTS_ENGINE=http
MURMUR_AI_TTS_ENDPOINT=http://127.0.0.1:8880/v1/audio/speech
MURMUR_AI_TTS_MODEL=kokoroVoice settings include language, voice picker, preview sentence, and a Preview button.
Configuration can be edited in the app from settings or in .env. See .env.example for a fully annotated template.
| Variable | Default | Purpose |
|---|---|---|
MURMUR_AI_HOST |
127.0.0.1 |
Local service bind address |
MURMUR_AI_PORT |
49152 |
Local service port |
MURMUR_AI_WORKERS |
2 |
Concurrent translation workers |
MURMUR_AI_NOISE_GATE |
45 |
Voice gate strength, 0 to 100 |
MURMUR_AI_STT_ENGINE |
http |
http, whisperkit, or auto |
MURMUR_AI_STT_ENDPOINT |
http://127.0.0.1:8081/inference |
Speech-to-text endpoint |
MURMUR_AI_LLM_ENDPOINT |
local OpenAI-compatible URL | Translation endpoint |
MURMUR_AI_LLM_MODEL |
gemma4:e4b |
Recommended local translation model |
MURMUR_AI_LOCAL_AI_PROVIDER |
empty | ollama or llama.cpp when configured from the app |
MURMUR_AI_LLAMA_CPP_SERVER_PATH |
empty | App-managed or user-selected llama-server path |
MURMUR_AI_LLAMA_CPP_HF_MODEL |
ggml-org/gemma-4-E4B-it-GGUF:Q4_K_M |
Recommended llama.cpp Gemma GGUF reference |
MURMUR_AI_TTS_ENGINE |
auto |
auto, native, managed, or http |
MURMUR_AI_TTS_ENDPOINT |
http://127.0.0.1:8880/v1/audio/speech |
Optional higher-quality TTS endpoint |
MURMUR_AI_TTS_MODEL |
kokoro |
Speech model name for HTTP TTS |
MURMUR_AI_TTS_VOICE_XX |
per-language | Optional voice id for language XX |
MURMUR_AI_VOICE_RUNTIME_ROOT |
empty | Optional packaged managed voice runtime folder |
Start Murmur AI, then add an OBS Browser Source:
http://127.0.0.1:49152/overlay.html
Useful URL parameters:
| Parameter | Default | Meaning |
|---|---|---|
source=0 |
shown | Hide the original-language line |
scale=1.3 |
1 |
Font size multiplier |
hold=7000 |
6000 |
Subtitle hold time in milliseconds |
offset=120 |
48 |
Distance from the bottom edge |
macOS. Microphone permission is requested on first use. For computer audio, install a loopback device such as BlackHole, route system audio into it, then select that device as the input.
Windows. Computer audio uses native system loopback. Microphone capture uses standard OS permissions.
Linux. Not formally released yet. Core capture and HTTP endpoint plumbing are portable, but packaging is not tested.
Murmur AI는 한국어 음성을 영어로, 또는 영어 음성을 한국어로 실시간 번역하는 자막 오버레이입니다.
whisper.cpp또는 호환 STT 서버를 실행합니다.- Gemma 4 E4B Instruct 모델을 Ollama, llama.cpp, LM Studio 같은 OpenAI 호환 서버로 실행합니다.
- 앱의
settings에서 STT endpoint, LLM endpoint, model name을 입력합니다. - 자막이 먼저 정상 작동하는지 확인한 뒤
voice를 켭니다. - macOS에서 컴퓨터 소리를 번역하려면 BlackHole 같은 loopback 장치가 필요합니다. 마이크 입력만 사용할 때는 필요하지 않습니다.
권장 장비는 Mac mini M4 16GB 이상입니다. Gemma 4 E4B 모델은 앱에 포함되어 있지 않으며 사용자가 직접 내려받아 실행해야 합니다.
git clone https://github.com/eisenjimmy/LiveAITranslate.git
cd LiveAITranslate
npm install
npm startUseful commands:
npm run check
npm run build:mac
npm run build:winRepository layout:
src/main.js Electron shell, permissions, window controls
src/service.js Local HTTP service, STT/TTS engines, translation workers
src/translation-worker.js Context-aware LLM translation worker
src/preload.cjs Renderer bridge
src/renderer/index.html App UI and subtitle layer
src/renderer/app.js Capture, VAD, chunking, playback
src/renderer/overlay.html OBS overlay
assets/readme/ README banner graphics
voice-runtime/ Optional managed voice runtime resources
Murmur AI has no account system, telemetry, analytics, or database. If you run local STT, LLM, and TTS endpoints, audio and text stay on your machine. If you configure hosted endpoints, the relevant audio/text is sent to those endpoints.
STT endpoint unreachable means your STT server is not running at the configured URL. Start the server or update MURMUR_AI_STT_ENDPOINT.
No translation usually means the LLM endpoint or model name is wrong. Use settings -> detect, or check curl http://127.0.0.1:49152/api/status.
No voice output can be tested from settings -> Voice Output -> Preview. Use native for built-in speech or configure a reachable HTTP TTS endpoint.
macOS computer audio is silent because macOS does not expose system audio directly. Use BlackHole or another loopback device.
Issues and pull requests are welcome. Keep changes scoped, avoid heavy frameworks, and run npm run check before submitting. See CONTRIBUTING.md.