The ideaDub a video without uploading it
Dabuj transcribes speech, translates it, and, eventually, re-voices it with synthetic speakers, producing a dubbed audio or video file. It runs as a small local web application: you start it from a terminal, your browser opens, and the processing happens on your own CPU or GPU.
It is not a cloud service and it is not a wrapper around one. When every selected provider is a local one, nothing about your media leaves the machine, no uploads, no API calls, no telemetry.
MotivationThe upload is the problem
Commercial AI dubbing services require you to upload your media to someone else's computer. That is a poor fit for unreleased footage, confidential interviews, medical or legal recordings, client work under NDA, or simply anything you would rather keep private.
Dabuj exists to make that upload unnecessary. Every other design decision in the project, local model runtimes, CPU-only support, a cloud master switch that defaults to off, follows from that one constraint.
HonestyWhat works today
This is alpha software at v0.1.0. The transcription vertical slice works end to end; everything after it is scaffolded but not yet built. Rather than bury that, here is the whole capability list:
| Capability | Status |
|---|---|
| Media probing, any FFmpeg-supported container | Implemented |
| Audio extraction and conversion | Implemented |
| Local speech recognition (faster-whisper) | Implemented |
| Automatic language detection with confidence | Implemented |
| Word-level timestamps | Implemented |
| Timestamped, speaker-aware transcript model | Implemented |
| Project format with schema versioning | Implemented |
| Export to JSON, SRT, WebVTT and TXT | Implemented |
| Model manager, download, verify, remove | Implemented |
| Hardware detection and profile recommendation | Implemented |
| CLI, transcribe, models, doctor, system-info | Implemented |
| Incremental cache and checkpoint/resume | Implemented |
| Local web UI, REST and WebSocket API | Experimental |
| Speaker diarization | Planned, v0.3 |
| Local translation and glossary | Planned, v0.4 |
| Text to speech and voice mapping | Planned, v0.5 |
| Multi-speaker dubbing and duration matching | Planned, v0.6 |
| Audio mixing and video muxing | Planned, v0.7 |
| Background and music preservation via source separation | Planned, v0.8 |
Nothing in the documentation describes functionality that does not exist. Anything marked as planned is a plan, not a promise. For a project whose whole pitch is trust, a README that oversells would undermine the product it is describing.
Language coverage follows the same logic. Dabuj is tested against English, German and Czech, but the list is not hard-coded, it is read from the capabilities of whichever model you have selected, so installing a model with wider coverage widens the list in the UI. Dabuj will not offer a language the active model does not actually support.
PipelineOne core, two front ends
The CLI and the web UI call the same application services. There is no business logic in the frontend and no duplicated pipeline hiding behind the CLI, which is what makes it credible that both will keep working as the later stages land.
In practice that is four commands:
# What is in this file?
dabuj probe interview.mkv
# Transcribe it. The model is downloaded on first use, after asking.
dabuj transcribe interview.mkv --language auto
# Pick a specific model and force CPU
dabuj transcribe interview.mkv --model whisper-small-int8 --device cpu
# Export
dabuj export <project-id> --format srt --output subtitles.srtOr dabuj start, which brings up the local server on 127.0.0.1:7860 and opens your browser. If the port is taken, it picks the next free one.
ReachGenuinely usable without a GPU
A tool that only runs on a workstation with 12 GB of VRAM would miss most of the people who need the privacy guarantee. So hardware detection produces a recommended profile, and the profile picks quantisation and model size to match:
| Profile | Target machine | Approach |
|---|---|---|
| Low | Office laptop, no discrete GPU | Quantised int8 models on CPU |
| Balanced | Modern CPU, 16 GB RAM, 4–8 GB VRAM | Good quality at reasonable speed |
| High | 8–12 GB VRAM, 32 GB RAM | Larger models, better accuracy |
| Ultra | Workstation | Best available, quality over speed |
Profiles are recommendations, not constraints. Every individual setting, model, runtime, device, precision, quantisation, beam size, can be overridden. Dabuj never assumes CUDA.
GuaranteesPrivacy as behaviour, not a promise
"Local-first" is easy to claim and easy to quietly break. The concrete commitments:
- Binds to 127.0.0.1 only. Not reachable from your network unless you explicitly enable that.
- Telemetry is off, and there is no code to send any. The distinction matters, a setting can be flipped, missing code cannot.
- Transcript text and media contents are never written to logs. The most common accidental leak in a media pipeline, closed deliberately.
- Cloud providers are opt-in behind a master switch that is off by default, with no silent fallback. If a local model fails, Dabuj tells you instead of reaching for the network.
LicensingMIT covers the code, not the models
Dabuj ships no model weights. Models are downloaded on request into your application data directory and can be removed at any time, and the first run tells you exactly how large a download is before starting it. Nothing pulls a multi-gigabyte model without asking.
The MIT licence on the repository covers the source code only. Downloaded AI models carry their own licences, some of which restrict commercial use. Every model Dabuj can install is listed with its licence, size and verified source, so the answer to "can I use this at work" is a lookup rather than a guess.
BuildBoundaries drawn before the features
Most of the pipeline does not exist yet, which makes the module layout the load-bearing decision. Each later stage has a place to land that does not require rewriting the ones already shipped:
backend/src/dabuj/
├── domain/ Pure data model: transcripts, speakers, media, languages
├── media/ The FFmpeg boundary, all media I/O goes through here
├── hardware/ Machine detection and the profile recommendation engine
├── models/ Model catalog, registry and secure downloader
├── providers/ Pluggable ASR / diarization / translation / TTS backends
├── pipeline/ Stages, cache keys, checkpoints, progress, cancellation
├── projects/ On-disk project format and schema migrations
├── export/ SRT, WebVTT, JSON, TXT writers
├── jobs/ Local job queue and worker
├── application/ Services shared by the CLI and the API
├── api/ FastAPI routes and WebSocket endpoints
└── cli/ Command-line interfaceThree of those are doing quiet but real work. media/ is a single FFmpeg boundary, so every container quirk is handled in one place rather than scattered through the pipeline. providers/ is what makes "local or cloud, your choice" a configuration rather than a fork, translation and TTS plug in beside speech recognition instead of being bolted on. And pipeline/ owns cache keys, checkpoints and cancellation, which is why a long transcription can resume instead of starting over.
There is a versioned on-disk project format with schema migrations from v0.1.0, before there was anything to migrate. That is the sort of thing that is nearly free to add early and genuinely painful to retrofit once other people have projects on disk.
DirectionTranscription first, dubbing last
The order is deliberate: every stage depends on the transcript being right, so the transcript shipped first and complete rather than as a stub to be revisited.
| Version | Focus |
|---|---|
| v0.1 | Transcription vertical slice, CLI, project format, exports, shipped |
| v0.2 | Web UI, job progress over WebSocket, model manager UI |
| v0.3 | Speaker diarization and the speaker editor |
| v0.4 | Local translation, glossary, translation editor |
| v0.5 | Local TTS, voice mapping, previews |
| v0.6 | Multi-speaker dubbing, duration matching |
| v0.7 | Audio mixing, video muxing, multiple audio tracks |
| v0.8 | Source separation to preserve music and effects |
| v0.9 | Installer, benchmarking, performance work |
| v1.0 | Stable transcription → translation → dubbing workflow |
BoundariesWhat it deliberately isn't
- Not a hosted service. There is no instance to sign up for. Running it yourself is the product, not a fallback tier.
- Not finished. At v0.1.0 you get transcription, subtitles and a project format. If you need dubbing this week, this is not it yet.
- Not a voice cloning tool. Cloning is not implemented, and if it is added it will require explicit confirmation that you have permission to clone the voice in question. Dabuj is a localisation tool, not an impersonation tool.
That last one is a design position rather than a missing feature. The same technology that dubs a training video into Czech will happily forge someone's voice, and the difference between the two is consent, so the project treats it as a gate rather than an afterthought.
Dabuj also processes media that may be copyrighted, confidential, or contain identifiable human voices. Having the rights to the content you put through it is the operator's responsibility, and the documentation says so out loud rather than leaving it implied.
Transcribe, translate and dub on your own machine, with nothing uploaded anywhere, today that means transcription end to end, and the rest is marked as the plan it is.
MIT for the source. The models you download are not MIT, so check their licences before shipping commercial work through it.