Media → Subtitles → Translation, all-in-one. One engine, three frontends: PyQt6 GUI, Textual TUI, plain CLI.
SubForge is a single tool for the whole subtitle pipeline. Feed it audio, video,
or a .srt file and it can transcribe, translate, and mux the result back into
a video — without leaving your machine.
- 🎙️ Audio / video →
.srt— transcribe withfaster-whisper - 🌍
.srt→.srt— translate subtitles to any supported language - 🎞️ Video +
.srt→ video — mux as a soft track or burn in hard subs - ⚡ All-in-one — raw video in, translated subbed video out
- 🖥️ PyQt6 GUI — drag-and-drop on the desktop
- 🧑💻 Textual TUI — same workflow over SSH / headless servers
- ⌨️ CLI — for scripting and pipelines
# install (with uv or pip)
uv pip install -e .
# 1. GUI
subforge
# 2. TUI
subforge --tui
# 3. CLI: video in → translated burned-in video out
subforge movie.mkv --to ru --burn -o movie.ru.mp4| Layer | Library |
|---|---|
| ASR | faster-whisper |
| Translation | deep-translator (LibreTranslate / Google / DeepL / Yandex) |
| Video / mux | ffmpeg-python (shells out to ffmpeg) |
| Subtitles | srt |
| GUI | PyQt6 |
| TUI | textual |
| CLI | argparse + rich |
System requirement: ffmpeg available on $PATH.
subforge <input> [options]
modes (auto-detected from extension; override with --mode):
transcribe audio/video → .srt
translate .srt → .srt
mux video + .srt → video (soft or burn)
all video → translated subbed video
options:
--from LANG source language (default: auto)
--to LANG target language (default: ru)
--model MODEL whisper model size: tiny|base|small|medium|large
--burn burn-in hardsub instead of soft mux
--keep-audio keep extracted .wav next to the source
-o, --output PATH explicit output path
--tui launch Textual TUI
See ROADMAP.md.
MIT (planned).
Author: @yumiaura