Free, local-first, open-source desktop app for Windows and macOS. Drop any spoken video, get a faithful transcript and an SRT ready for DaVinci Resolve. Translation is optional; AI-assisted text review is opt-in.
- Free. Not a trial, not a free tier.
- Local. Video stays on your computer. Works offline after the first model download.
- Open source. Inspect the code. No vendor lock-in.
- Any spoken language. Auto-detect, then output subtitles in the language you choose.
- Built for an edit. Contextual translation (previous + current + next line). SRT shaped for Resolve, not a social shortcut.
- AI stays optional. The OpenAI BYOK review sends text and editorial context only after consent. Audio and video never leave the computer.
Installers are on GitHub Releases.
| Platform | File |
|---|---|
| Windows 10 / 11 | .exe / .msi |
| macOS (Apple Silicon and Intel) | .dmg |
You also need FFmpeg on your system (the app does not bundle it):
# Windows (reopen Subber after installing)
winget install Gyan.FFmpeg# macOS
brew install ffmpegOn first launch Subber prepares Python, packages, and models by itself. A dedicated GPU is optional: CPU works, GPU is faster.
- Drop a video.
- The app transcribes (and translates if the output language differs).
- Under
exports/, you get one source SRT or two SRT files when a translation exists, plus the expected TXT and JSON. Save changes always overwrites them with the current final text and never creates revisions.
The folder selected at creation remains the project root: video-sub.json describes the project, exports/ contains only usable deliverables, and .subber/ contains internal WAV, sidecar and AI report files.
When an AI or manual correction changes source text and the output is translated, Subber locally refreshes only affected translated segments that were not manually edited, then publishes the single updated final SRT.
You can edit the transcript, exclude off-topic segments without destroying the source, keep a glossary of protected terms, review structured AI suggestions inline, and optionally burn styled captions into an exported video (up to 4K). New transcriptions use word-level timing to keep SRT cues close to actual speech and prevent overlaps.
Every SRT can be imported manually into Resolve. Subber can also import the SRT (and source video when available) directly into the current Media Pool folder when DaVinci Resolve Studio exposes its external scripting API.
The first action imports the canonical SRT. Later saves overwrite that same file, and importing again refreshes the existing Media Pool item in place instead of creating another subtitle version. The source video is not duplicated.
In Resolve Studio, set Preferences → System → General → External scripting using to Local, restart Resolve, and open a project before pressing Import in DaVinci. Resolve Free does not expose the external API required by the standalone bridge; Subber selects the SRT in Explorer/Finder so it can be dragged into the Media Pool or timeline.
Troubleshooting: docs/davinci.md.
Transcription, translation, formatting and video export are local. The optional OpenAI source audit runs only after explicit consent and sends the transcript text, timestamps, ASR confidence, project context, glossary and preset. It does not send audio, video or local paths, uses your own API key and requests provider storage to be disabled.
Current implementation status and remaining roadmap: PROGRESS.md.
Prerequisites: Node.js 20+, Rust stable. On Windows: WebView2 and Visual Studio Build Tools with the Desktop C++ workload plus the Windows 11 SDK.
git clone https://github.com/AndreaZero/subber.git
cd subber
npm install
npm run tauri devProduction installer:
npm run tauri buildArtifacts land in src-tauri/target/release/bundle/. Build Windows installers on Windows. Build the macOS .dmg on a Mac.
More detail: docs/build.md. Release notes: docs/release.md.
Issues and pull requests are welcome. Keep the pipeline as:
video → FFmpeg audio → transcribe locally → contextual translation if languages differ → SRT → export
Do not use Whisper task=translate as the only output. Do not send video to a cloud API.