Real-time system audio translation for macOS
Translate any audio playing on your Mac — YouTube, podcasts, meetings, movies — live on screen.
You're watching a YouTube video in Japanese. A podcast in Arabic. A meeting in German. You don't speak these languages — but you want to understand everything, right now.
Live Translator sits quietly in your menu bar, captures whatever audio your Mac is playing, and shows you a live, flowing translation on screen. No copy-pasting, no tab switching, no waiting. Just play audio and read.
It's not a word-by-word subtitler. It uses a live document model — the AI sees the full conversation, maintains context, and produces natural translations that read like a human wrote them.
System Audio → Speech Recognition → AI Translation → Live Overlay
(ScreenCaptureKit) (SFSpeechRecognizer) (OpenAI GPT) (WebKit Panel)
- Real-time translation of any audio on your Mac
- 11 source languages — English, German, French, Spanish, Italian, Japanese, Chinese, Korean, Russian, Arabic, Portuguese
- 12 target languages — translate into any supported language
- Context-aware AI — maintains full conversation context, never loses track
- Live document model — translation grows like a live document, new parts highlighted
- Text-to-Speech — hear translations read aloud (Piper offline or OpenAI voices)
- Multiple AI models — GPT-5, GPT-4.1, GPT-4o, o4-mini, o3, and more
- Floating overlay — dark-themed panel, draggable, always on top
- In-app settings — API key, model, TTS, languages — all configurable from the UI
- No audio drivers needed — uses ScreenCaptureKit (macOS 13+)
- On-device STT — speech recognition works without internet
- Auto-recovery — watchdog detects and recovers from stuck states
- Menu bar app — runs quietly with 🌐 icon in menu bar
- Download → Open DMG → Drag to Applications
- Launch → Setup wizard guides you through everything
- Enter your OpenAI API key (get one here)
- Grant Screen & System Audio Recording permission when prompted
- Play any audio → translations appear live
First launch: If macOS blocks the app, right-click → Open, or run
xattr -cr /Applications/Live\ Translator.app
brew tap umutcetinkaya/tap
brew install --cask live-translatorgit clone https://github.com/umutcetinkaya/live-translator.git
cd live-translator
make install # Create venv + install deps
make models # Download TTS voice models (~580MB)
make run # Launch- Launch → floating panel appears + 🌐 in menu bar
- Click ⚙ Settings → enter your OpenAI API key
- Select source language (what's being spoken) and target language (what you want to read)
- Play any audio → translations appear in real-time
- New translations are highlighted so you always know what just changed
| Control | Action |
|---|---|
| Source / Target dropdowns | Change languages |
| ⚙ Settings | API key, model, TTS provider, voice, speed |
| TTS Off / On | Toggle text-to-speech |
| Clear | Reset translation history |
| ✕ | Quit |
| Menu bar 🌐 | Pause, Show/Hide, Quit |
| Provider | Pros | Cons |
|---|---|---|
| Piper (default) | Free, offline, fast | Robotic voice |
| OpenAI TTS | Natural voices (Nova, Shimmer, Alloy, Echo, Fable, Onyx) | Costs money |
TTS plays through the same process — the app's own voice is automatically filtered from capture. No feedback loops.
| Model | Speed | Cost | Best For |
|---|---|---|---|
| GPT-4o Mini | ⚡ Fastest | ¢ | Daily use |
| GPT-4.1 Nano | ⚡ Fastest | ¢ | Budget |
| GPT-4.1 Mini | 🚀 Fast | $ | Balanced |
| GPT-5 Mini | 🚀 Fast | $ | Latest |
| GPT-4o | 🚀 Fast | $$ | Quality |
| GPT-4.1 | 🚀 Fast | $$ | Quality |
| GPT-5 | 🚀 Fast | $$ | Latest + Quality |
| o4-mini | 🐢 Slow | $$ | Reasoning |
| o3-mini | 🐢 Slow | $$ | Reasoning |
| o3 | 🐢 Slowest | $$$ | Deep reasoning |
| o1 | 🐢 Slowest | $$$ | Deep reasoning |
Recommendation: GPT-4o Mini or GPT-4.1 Nano for real-time translation (fast + cheap).
Live Translator runs two independent agents in parallel:
- Listener — continuously captures system audio via ScreenCaptureKit and transcribes it on-device using SFSpeechRecognizer
- Translator — every ~3 seconds, takes the full accumulated transcript and sends it to OpenAI GPT
The AI is instructed to preserve its previous translation and only append or refine new content. The overlay highlights what changed, so you can always follow along.
This means:
- Context is never lost
- Incomplete sentences get refined next cycle
- The translation reads as a coherent, flowing document
- No disconnected fragments
live-translator/
├── main.py # Entry point + menu bar
├── src/
│ ├── audio_capture.py # ScreenCaptureKit system audio
│ ├── speech_recognizer.py # SFSpeechRecognizer + watchdog + ring buffer
│ ├── translator.py # OpenAI live document translation
│ ├── pipeline.py # Listener + Translator orchestrator
│ ├── overlay.py # WebKit floating panel (HTML/CSS/JS)
│ ├── tts.py # Piper (offline) / OpenAI TTS
│ └── config.py # JSON settings
├── models/ # Piper voice models (downloaded separately)
├── scripts/
│ ├── build_app.sh # Build .app bundle
│ ├── build_dmg.sh # Create DMG installer
│ ├── download_models.sh # Download TTS models
│ ├── notarize.sh # Apple notarization
│ ├── setup_wizard.swift # Native macOS setup wizard
│ └── launcher.c # Native .app launcher
├── assets/ # App icon + demo media
├── Makefile
├── requirements.txt
├── CONTRIBUTING.md
├── SECURITY.md
└── LICENSE
Settings are stored in ~/.live-translator.json and can be changed from the in-app Settings panel:
{
"openai_api_key": "sk-...",
"source_locale": "en-US",
"target_lang": "tr",
"model": "gpt-4o-mini",
"tts_provider": "piper",
"tts_voice": "nova",
"tts_speed": 1.0
}| Problem | Solution |
|---|---|
| "Damaged and can't be opened" | Run xattr -cr /Applications/Live\ Translator.app |
| No audio detected | Grant Screen & System Audio Recording permission, restart app |
| STT stops working | Built-in watchdog auto-recovers within 10 seconds |
| Translation not appearing | Check OpenAI API key in Settings |
| TTS not working | Check TTS provider in Settings |
| App not in dock | By design — it's a menu bar app (🌐) |
- macOS 13 (Ventura) or later
- Python 3.11+ (auto-installed via setup wizard if missing)
- OpenAI API key (get one here)
If Live Translator helps you, give it a ⭐ on GitHub — it helps others find it!
MIT — see LICENSE.
Copyright © 2025 Umut Çetinkaya
- ScreenCaptureKit — macOS audio capture
- SFSpeechRecognizer — on-device speech recognition
- OpenAI API — AI translation
- Piper TTS — offline text-to-speech
- PyObjC — Python ↔ macOS bridge