Studio0808 LiveCaption - Real-Time Web Video Speech Translation & Bilingual Subtitles (Chinese / English / Japanese / Korean / Cantonese)
👉 Live Documentation & Manual: https://begin0808.github.io/LiveCaption/
Studio0808 LiveCaption is a real-time speech recognition and bilingual subtitle translation system designed specifically for browser videos. Running entirely on your local machine, it offers 100% privacy protection and ultra-low latency.
⚠️ Supported Speech Languages: This system uses Alibaba's open-source SenseVoice-Small speech model, which currently supports speech recognition for Chinese (including Cantonese), English, Japanese, and Korean only. European languages such as Spanish, French, German, and Russian are not supported for speech recognition at this time.
Ideal for online learning, accessibility/hearing-assist, foreign language listening training, global live streams, and video conference transcripts.
This system uses real-time sentence-level streaming detection & translation technology, rather than simple post-processed file transcribing or static track extraction:
- Tab Audio Loopback (Lossless & Exclusive Capture):
- Uses Chrome Extension's Offscreen Document and
tabCaptureAPIs to capture the digital audio output of the specific active tab directly. - Advantage: Does not occupy or interfere with system microphone or speakers. It will not record ambient room noise, typing sounds, or audio from other tabs, ensuring pristine audio input for the ASR engine.
- Uses Chrome Extension's Offscreen Document and
- Near Real-time Stream Processing (Dynamic ASR & VAD):
- While playing a video, the browser slices audio and streams it to the Python backend in real-time using binary WebSockets.
- The backend runs an optimized local Silero VAD (Voice Activity Detection) model on the stream to dynamically chunk sentences (detecting short pauses, e.g., 0.5s silence). As soon as a sentence ends, it is immediately dispatched to the local SenseVoice-Small engine.
- Experience: Near-real-time sentence-level captions and translation (showing up about 100ms - 300ms after speech ends) instead of processing the video after it finishes.
- 100% Offline & Privacy-First:
- Supports a fully offline stack: ASR powered by local Sherpa-ONNX, and translation powered by local Ollama (Qwen 2.5 3B recommended). All audio processing and text generation remain strictly on your local machine.
- Hot-Swappable Translation Engines:
- Supports OpenCC for local Traditional/Simplified Chinese conversion, local Ollama offline translation, online DeepSeek API, and a free Google Translate API fallback.
⚠️ Please note: The AI models bundled with the release package (SenseVoice-Small, Silero VAD) handle speech recognition only. Among the translation engines, Ollama must be installed separately and DeepSeek requires your own paid API key. If neither is configured, the system automatically uses free Google Translate and captions still work normally (see "Translation Engine Setup" below).
If you do not want to configure the Python development environment, you can download the pre-compiled, one-click execution offline bundle:
- Download One-Click Offline Bundle (Google Drive)
- Version File:
LiveCaption_V20260621.ZIP(Includes all necessary AI speech models and batch startup files)
- Ultra-Low Latency Tab Audio Capture: Uses a unique Chrome Extension tab audio loopback mechanism to precisely capture audio tracks playing in the active tab without affecting other system audio or recording devices.
- Offline Local AI Speech Recognition: Powered by the Sherpa-ONNX architecture and Alibaba's open-source SenseVoice-Small speech model. Supports Chinese, English, Japanese, Korean, and Cantonese with extremely fast local decoding.
- Flexible Translation Engines: Ships with a free Google Translate fallback that works out of the box; you may optionally install the local Ollama framework (Qwen 2.5 3B recommended) for fully offline translation, or supply an online DeepSeek Cloud API key for near-human quality translation. (Both Ollama and DeepSeek require separate installation or registration.)
- Premium Glassmorphism Subtitle Window: An elegant semi-transparent floating window overlay supporting custom font sizes and colors, mouse click-through, drag-and-drop repositioning, and double-click to reset.
- Multi-Line History Subtitle Scrolling: Retains 0 to 2 lines of historical subtitles, fading and shrinking older lines upward to ensure you don't miss fast-paced speech.
- 100% Offline Privacy & Security: All audio capture, speech recognition, translation, and rendering are done locally. No internet access is required, ensuring absolute privacy.
LiveCaption/
├── backend/ # Python backend server source code
│ ├── docs/ # Documentation website and localization files
│ ├── main.py # Main backend WebSocket server
│ ├── requirements.txt # Python dependencies
│ ├── download_models.py # AI models automatic downloader
│ └── build_release.py # Build and compile release package script
├── extension/ # Chrome browser extension source code
│ ├── manifest.json # Extension manifest file
│ ├── popup.html/js/css # Extension popup controller panel
│ └── offscreen.html/js # Tab audio capture worker context
└── README.md # Project README (Traditional Chinese)
If using the Pre-Packaged Offline Bundle:
- Download and extract
LiveCaption_V20260621.ZIP. - Enter the directory and double-click to run
點我啟動【即時字幕】後端服務.bat. - Once the CMD window displays
INFO: Uvicorn running on http://127.0.0.1:8000, the server is running. Keep this window open.
If running from Source Code (Cross-platform Mac/Windows):
- Ensure Python 3.8+ is installed.
- Enter the
backendfolder and install dependencies:pip install -r requirements.txt
- Download AI models:
python download_models.py
- Launch the server:
python main.py
- Open Chrome and navigate to
chrome://extensions/. - Toggle on the "Developer mode" in the top-right corner.
- Click the "Load unpacked" button in the top-left corner.
- Select the
extensionfolder under this project directory to load. - Confirm that the Studio0808 LiveCaption icon appears in your extension toolbar.
- Go to YouTube or any video hosting site and play a video.
- Click the extension icon in your toolbar, and click 「啟動即時字幕」 (Start Subtitles).
- A Glassmorphism style floating subtitle window will pop up at the bottom of the page, showing real-time transcripts and translations.
After the three steps above, captions already work. The backend tries DeepSeek → Ollama → Google Translate in order and uses the first available engine. If neither of the first two is configured, it falls back to free Google Translate with no extra installation required.
Neither engine below is bundled with the release package — install them only if you need the extra capability:
📌 Important: The Ollama application and the
qwen2.5:3b-instructmodel are NOT included in this project or the release package — you must install and download them yourself. The bundledsherpa-onnx-sense-voice(~228MB) andsilero_vad.onnxhandle speech recognition only, not translation.
- Go to the official Ollama download page and install the Windows / macOS / Linux build for your OS.
Once installed, Ollama runs in the system tray (a llama icon appears) and automatically serves at
http://localhost:11434. - Open a command prompt (Windows: press
Win + R, typecmd; Mac: open Terminal) and pull the translation model (~2GB, roughly 3–15 minutes depending on bandwidth):ollama pull qwen2.5:3b-instruct
- Verify the installation:
If
ollama list
qwen2.5:3b-instructappears in the list, you are set. You can also openhttp://localhost:11434in a browser — seeingOllama is runningconfirms the service is up. - Click the extension icon and confirm "Ollama Server URL" is
http://localhost:11434and "Translation Model Name" isqwen2.5:3b-instruct(both are defaults and usually need no change).
Hardware guidance: The 3B model needs roughly 4GB+ of RAM and runs smoothly on an ordinary office laptop. If you have a discrete GPU (8GB+ VRAM), run ollama pull qwen2.5:7b-instruct for better semantic quality and change "Translation Model Name" in the extension to qwen2.5:7b-instruct.
Note: Keep Ollama running in the background while in use. If the backend detects that Ollama is not running, it automatically skips it and uses a fallback engine so that every caption does not have to wait for a connection timeout.
- Register and log in at the DeepSeek Open Platform.
- Click "Top up" in the left menu to add credit (prepaid billing; a minimum top-up of US$1–5 lasts a very long time).
- Click "API Keys" → "Create new API key", then copy the generated key starting with
sk-(it is shown only once). - Click the extension icon and paste it into the "DeepSeek API Key" field to enable it.
Billing: DeepSeek has no monthly fee or subscription — you are charged purely by tokens used. This system uses the deepseek-v4-flash model by default, whose official list price per 1M tokens is $0.14 input ($0.0028 on cache hit) and $0.28 output. In practice, watching one hour of video costs roughly US$0.01–0.03, so a $2 top-up covers well over 100 hours. Peak hours (09:00–12:00 and 14:00–18:00 Beijing time daily) are billed at 2x. Check the official DeepSeek pricing page for current rates.
⚠️ Model name change: The legacy namesdeepseek-chatanddeepseek-reasonerwere retired on 24 July 2026; the current names aredeepseek-v4-flashanddeepseek-v4-pro. If you are running an older backend build, please update it — otherwise cloud translation will fail and silently fall back to Google Translate.
To modify the Python backend and package it into a .exe executable for Windows distribution:
- Create a
.venvvirtual environment in thebackend/directory and install dependencies. - Under the project root directory, run the compile script:
backend\.venv\Scripts\python.exe backend\build_release.py - The packaged folder will be exported to
backend/dist/LiveCaptionServer/. It is clean of caches and ready to be zipped.
- Reason: Usually happens when reloading the extension while a video is playing, leaving the previous stream unreleased.
- Solution: Press
F5to refresh the video tab, click "Clear all" on the extension error page, and start the subtitle service again.
- Reason: The Voice Activity Detection (VAD) model needs a transient delay (around 100ms) to detect active speech. Quiet or short start words (like "我", "你") can get clipped.
- Solution: In the extension settings under "VAD Settings", increase "Segment Silence Duration" to
0.8seconds and "Max Sentence Duration" to8.0seconds or longer. The latest backend has also lowered the VAD trigger threshold to0.4and minimum speech duration to0.15sfor higher sensitivity.
If you have any questions, bug reports, or feature requests, feel free to open an Issue on GitHub or email us at begin0808@gmail.com.
Copyright © 2026 Studio0808 Maker Lab. All rights reserved.