WhisperLive is a Windows desktop app that captures your system audio, transcribes it with OpenAI Whisper, translates it live, and shows the result in an always-on-top subtitle overlay — for meetings, videos, streams, and calls in any language.
Disclaimer: Unofficial, community-maintained. Built on OpenAI Whisper (via faster-whisper); not affiliated with or endorsed by OpenAI. Maintained as a personal hobby — use as-is, no support guaranteed.
If whisper-burner saves you time, please consider sponsoring to keep it maintained.
System audio ──► Whisper API ──► live transcript ──► translation ──► always-on-top overlay
(WASAPI loopback) (Docker) (SRT stream) (DeepL/Google/free) (draggable caption box)
WhisperLive listens to whatever is playing on your PC, transcribes it in near real-time, optionally translates each line, and renders both the original and the translation in a floating caption box you can place over any window. Every session is saved as SRT.
- Real-time captions from system audio (WASAPI loopback capture — no microphone needed)
- Live translation into any language — DeepL, Google Translate, or the free Docker/deep-translator backend
- Always-on-top overlay — draggable, auto-sizing caption box with pause and language chips
- Bilingual display — original text + translation, side by side
- Built-in Claude assistant — ask questions about the live session transcript
- Session save — raw, translated, and final SRT written to
~/whisper.live/sessions/ - Runs unpackaged, self-contained, no admin required
- Windows 10 build 22621 (22H2) or later
- .NET 9 Desktop Runtime
- Docker Desktop — runs the Whisper ASR/translate API
- GPU (optional, recommended): NVIDIA GPU + NVIDIA Container Toolkit for faster-than-real-time transcription
Everything is driven from the interactive menu:
git clone https://github.com/nkmnhan/whisper-burner.git
cd whisper-burner
.\whisper.cmd1. Start the Whisper API backend → menu [6] Manage API → choose CPU/GPU, model, then Start.
The API runs at http://127.0.0.1:5000 (GET /health, POST /transcribe, POST /translate).
2. Build & run the app → menu [3] Run app (debug) or [4] Build release.
On CPU, use the
smallmodel for near-real-time captions.medium/large-v3need a GPU to keep up.
App settings live at ~/whisper.live/settings.json (edit in the Settings page):
| Setting | Notes |
|---|---|
Model |
tiny / base / small / medium / large-v3 / turbo. Default small. |
ChunkDurationSeconds |
Audio chunk length sent per request. Default 5. |
Language |
Source language or auto. |
EnableTranslation, TranslationProvider, TranslationTargetLanguage |
docker (free), google, or deepl. |
EnableAssistant |
Claude session assistant on/off. |
Backend behavior is controlled by env vars on the Docker container (see whisper.cmd → Manage API):
| Env | Notes |
|---|---|
WHISPER_MODEL |
Model preloaded at startup. |
NUM_WORKERS |
Concurrent transcriptions. GPU: 2. CPU: 1 (more just splits cores). |
LOG_RESULT |
true streams each transcription's text to the container logs for monitoring. |
- Capture —
RecordingServicerecords system audio via WASAPI loopback and chunks it into in-memory WAV. - Transcribe —
TranscriptionClientPOSTs each chunk to the Docker Whisper API (/transcribe). - Display —
SubtitleServicede-duplicates and streams SRT to disk; the UI and overlay bind toTranscriptViewModel. - Translate —
TranslationServicetranslates each segment in the background and fills it into the caption in place.
The Docker container runs api_server.py (FastAPI + faster-whisper). Transcription is the heavy step; use a GPU for real-time performance.
| Model | VRAM (GPU) | Notes |
|---|---|---|
small |
~2 GB | Default — near real-time on CPU |
medium |
~5 GB | More accurate; GPU recommended |
turbo |
~8 GB | Fast + accurate (GPU) |
large-v3 |
10–15 GB | Highest accuracy (GPU) |
The project's original workflow — transcribe a folder of videos and burn the subtitles into MP4 with ffmpeg — is kept as a separate legacy component, documented on its own so it isn't confused with the real-time app:
➡️ docs/legacy-whisper-burner.md
It still ships in scripts/batch/ and works, but it is no longer the focus.
whisper-burner/
├── whisper.cmd # interactive launcher (app, API, batch, models)
├── docker/
│ ├── Dockerfile # python:3.12-slim + ffmpeg + faster-whisper
│ ├── docker-compose.yml # gpu / cpu profiles
│ ├── api_server.py # FastAPI ASR + translate API (the app's backend)
│ ├── batch_transcribe.py
│ └── translate_srt.py
├── src/WhisperLive/ # WinUI 3 real-time translation app (primary product)
├── scripts/
│ ├── app/ # build-release.cmd, run-app.cmd, create-shortcut.cmd
│ ├── api/ # start-whisper-{cpu,gpu}.cmd
│ ├── batch/ # process-videos.ps1 + launchers (legacy burner)
│ └── models/ # download-models.ps1
├── docs/superpowers/specs/ # design specs
├── videos/ # legacy batch input; output/ holds generated SRT + MP4
└── models/ # Whisper model cache (auto-populated)
Captions lag behind / stop appearing — the backend is slower than real-time. Use small on CPU or switch to the GPU profile; watch LOG_RESULT=true logs to confirm throughput.
docker compose can't connect — Docker Desktop isn't running.
API changes not taking effect — api_server.py is volume-mounted; restart the container (whisper.cmd → Manage API → Reset), no rebuild needed. Rebuild only after Dockerfile/dependency changes.