Add and translate video captions between English and Kinyarwanda
# 🎬 Captioneer
Add and translate video captions between **English and Kinyarwanda** —
timestamps preserved. Captioneer can translate existing subtitle files **and**
generate captions straight from a video's audio. It runs translation models
**locally** and ships a slot for a **Rwanda-built model from Digital Umuganda /
mbazaNLP** so you can compare a global model against a Kinyarwanda specialist.
## What it does
- **Subtitle file → translated subtitles.** Open `.srt`/`.vtt`, translate every
cue, download the result. Timing never changes.
- **Video → captions → translation.** Upload a video/audio file; Whisper ASR
transcribes it into timestamped cues, which you then translate.
- **YouTube / URL → captions.** Paste a video link; Captioneer grabs the video's
own captions if present (fast), otherwise downloads the audio (via `yt-dlp`)
and transcribes it — then translate as usual. If a site blocks the download
(bot-check), `yt-dlp` retries through alternate YouTube player clients
(`android`/`web`/`tv` by default — configurable via `YT_DLP_PLAYER_CLIENTS`)
before giving up.
- **Two engines, side by side.** NLLB-200 (global, runs on-device) and a
Digital Umuganda / Mbaza NLLB finetune (Kinyarwanda specialist).
- **Clip trimming.** Pick a start/end range on the timeline to export or burn
just that section instead of the whole video.
- **Burn captions into the video.** Render the translated subtitles into the
video with ffmpeg and download a finished `.mp4` (uploaded video or URL,
full-length or trimmed to a range).
- **Dub the audio.** Replace the video's original audio with synthesized
speech in the translated language (Meta MMS-TTS), instead of or alongside
burned-in captions. Per-cue speech that overflows its time slot is sped up
(capped at 1.6x) to fit; a cue that finishes early just leaves silence.
- **Live mic → captions.** Talk into the mic and captions fill in every few
seconds (rolling ~4s windows over a websocket) — then translate as usual.
Not instant transcri …