Star 历史趋势
数据来源: GitHub API · 生成自 Stargazers.cn
README.md

WhisperSubTranslate

English | 한국어 | 日本語 | 中文 | Polski

Turn any video into multilingual subtitles, locally. Drop in a video, generate an SRT with whisper.cpp, then translate it offline with the bundled Hy-MT2 model or with free/paid online engines.

This app creates new subtitles from your video's audio (speech to text). It does not extract embedded subtitle tracks or read on-screen text (no OCR).

Preview

WhisperSubTranslate main UI

Features

  • 100% local speech to text. Your video never leaves your machine, no account, no upload.
  • Offline translation with the bundled Hy-MT2 model, or online engines (MyMemory, DeepL, OpenAI, Gemini) with your own keys.
  • Automatic model download. No Python, no manual setup.
  • Sync repair models (large-v2 Sync and Sync Lite) for videos where normal models drift out of sync.
  • Queue, live progress, and local-only job history.

Getting started

Users

Download the latest portable archive from Releases, extract it, and run WhisperSubTranslate.exe. Extraction runs fully offline on your PC. Translation is optional.

Developers

npm install
npm start
  • Node.js >= 22.12.0 (see engines in package.json; Electron 43 toolchain)
  • whisper.cpp is downloaded during npm install (Windows gets the CUDA build ~700MB plus a Vulkan build ~23MB)
  • FFmpeg is included via npm; the selected GGML model downloads on first use

Linux

sudo apt install cmake build-essential git ffmpeg   # Ubuntu/Debian
npm install   # whisper.cpp is built from source
npm start

For CUDA acceleration, install the NVIDIA CUDA Toolkit before npm install. Manual whisper.cpp build steps are in CONTRIBUTING.md.

  • Linux keyring: API keys are stored via Electron safeStorage (libsecret). Without a keyring daemon (headless SSH session, minimal desktop/WM), saving falls back to legacy AES with a hardcoded key: the app logs an explicit security warning and marks the save as insecure. That storage is not secure - install gnome-keyring (or run in a desktop session with a keyring) to enable secure storage.

Build (Windows)

npm run build-win   # artifacts are emitted to dist2/

Translation engines

Translate subtitles fully offline with the bundled Tencent Hy-MT2 model, or route to free/paid online engines using your own API keys.

EngineOfflineAPI keyCostNotes
Hy-MT2 1.8B (local, default)YesNoFree~1.13GB, VRAM 2GB / RAM 4GB, on-device
Hy-MT2 7B (local)YesNoFree~6.16GB, VRAM 8GB / RAM 12GB, larger model
MyMemoryNoNoFree~50K chars/day per IP
DeepLNoYesFree 500K/monthDeterministic output
OpenAI GPT-5.x (configurable, e.g. gpt-5.6-sol)NoYesPaidDefault model; context-aware
Gemini 3.x (configurable, e.g. gemini-3.6-flash)NoYesFree / low-costRecommended low-cost route (get key)
Claude (configurable, e.g. claude-opus-5)NoYesPaidStrong at context understanding (get key)
Custom OpenAI-compatible providersNoYesVariesBring your own endpoint (OpenRouter, Ollama, vLLM, …)

The local Hy-MT2 engine is the only option that needs no API key, no network, and no per-use cost, so your dialogue never leaves your machine.

Translation quality (offline engine)

WhisperSubTranslate ships Tencent's Hy-MT2 models (1.8B default, 7B optional). Tencent's official evaluation shows the Hy-MT2 family competing with leading commercial translation APIs, and ahead of several of them on some benchmarks.

Hy-MT2 translation benchmark, official Tencent figures, bundled in WhisperSubTranslate

Source: official benchmarks from Tencent: Hy-MT2 repository, technical report, models on HuggingFace. The chart is redrawn from Tencent's official Figure 1, with bundled-model (1.8B/7B) numbers checked against the paper tables. These figures measure the underlying model on standard machine translation benchmarks (WildMTBench, WMT25, FLORES-200, etc.), not a WhisperSubTranslate-specific benchmark.

For long videos (1hr+), MyMemory's daily limit can cause slowdowns. Use Gemini, DeepL, or a configured GPT model instead.

Speech recognition models

Models download on demand into _models/. NVIDIA GPUs use CUDA, other Vulkan-capable GPUs (AMD, Intel) use Vulkan, and CPU is the fallback. Pick a size that fits your GPU.

ModelSizeVRAMSpeedNotes
tiny~75MB~1GBFastestBasic
base~142MB~1GBFastGood
small~466MB~1GBMediumBetter
medium~1.5GB~2GBMediumGreat
large-v3~3GB~4GBSlowBest transcription
large-v3-turbo (default)~809MB~2GBFastBest all-round
large-v2 Sync~4.4GB~4.5GBSlowSeparate engine; fixes subtitle sync
large-v2 Sync Liteshared~3GBSlowSame file as Sync, int8, lower VRAM

Sync and Sync Lite use a separate Faster-Whisper engine (auto-downloaded once; engine archive ~1.4GB, model file ~3GB, ~4.4GB combined) and share the same model file, so one download covers both. Use them only when normal models drift out of sync; they are most accurate on non-English video (Japanese, Korean, Chinese). English is usually fine with large-v3-turbo.

VRAM figures for whisper.cpp models are with GGML optimization, much lower than PyTorch Whisper (~10GB for large). Sync figures are from the Faster-Whisper benchmark.

Language support

  • UI: Korean, English, Japanese, Chinese, Polish
  • Translation targets (15): ko, en, ja, zh, es, fr, de, it, pt, ru, hu, ar, pl, tr, fa
  • Audio recognition: 100+ languages via whisper.cpp

Data storage

Everything stays local under your user data folder. Nothing is uploaded.

DataLocation
Settings & API keys%APPDATA%\whispersubtranslate\translation-config-safe.json
Job history%APPDATA%\whispersubtranslate\history.json (up to 200 entries)
Error logs%APPDATA%\whispersubtranslate\logs\errors.log
Models%APPDATA%\whispersubtranslate\_models (user data folder; non-ASCII Windows accounts fall back to C:\Users\Public\WhisperSubTranslate\_models)

API keys are stored locally with OS-level safe storage, and the config is never committed or bundled. Job history is optional (toggle in Settings) and capped at 200 entries.

Portable data layout

By default models, caches, and settings live under %APPDATA% (system SSD). To keep everything on a USB stick / external drive, create a portable-data/ folder next to the executable (or set the WHISPER_PORTABLE_DATA environment variable to a folder path) — the app then redirects its userData there.

Contributing

Pull requests are welcome. See CONTRIBUTING.md for branch naming, commit style, the manual test checklist, and the manual whisper.cpp build. To add a UI language or translation target, see the Translation Guide.

Help translate the app UI on Weblate; translatable UI strings live in locales/*.json.

Translation status

Contributors

Thanks to everyone who helps make WhisperSubTranslate better.

Blue-B matbgn AtillaTahak

Support

If this project saves you time, supporting it directly helps with bug fixes, model reliability, and new translation options.

GitHub Sponsors Buy Me A Coffee PayPal

Acknowledgments

See THIRD_PARTY_NOTICES.md for the full list of bundled/downloaded components and their licenses.

License

GPL-3.0. External APIs and services (DeepL, OpenAI, Gemini, etc.) require compliance with their own terms.

关于 About

A free, local desktop app to extract subtitles (SRT) from video and translate them into any language — unlimited use, no signup, no cloud.
desktop-appelectronhy-mt2javascriptlocal-firstmachine-translationofflineprivacyspeech-to-textsrtsubtitle-generatorsubtitlestranslationvideowhisperwhisper-cpp

语言 Languages

JavaScript86.1%
CSS8.7%
HTML5.2%

提交活跃度 Commit Activity

代码提交热力图
过去 52 周的开发活跃度
165
Total Commits
峰值: 78次/周
Less
More

核心贡献者 Contributors