Centurion — Speech In, Subtitles Out
Speech Subtitles, done properly. Centurion is a .NET 10 command-line toolkit that turns audio/video into polished ASS subtitles — and beyond: speaker diarization, machine translation, vocal separation, and even machine dubbing with Qwen3-TTS. Fully local by default, GPU-aware, zero manual tool installs.
Quick Start
# 1. Install the .NET 10 SDK and FFmpeg, then build
dotnet build -c Release
# 2. Transcribe a video intermediate file
Centurion asr demo.mp4 --language en
# 3. Render subtitles
Centurion build demo.centurion.json
Everything else (whisper.cpp, CrispASR, Demucs, models…) is auto-downloaded on first use
Documentation
| Page | What’s inside |
|---|---|
| Quick Start | Prerequisites, install, build & typical workflows |
| Commands | The full command family — convert, asr, ocr, correct, from-script, build with every option |
| Translate | LLM translation, glossary, target-script alignment & karaoke timestamps |
| Dub | Media dubbing with Qwen3-TTS — voice cloning, time alignment, ducking |
| Server | Centurion.Server — run the whole pipeline over a REST API |
| Advanced | Operator micro-commands, quality reports, self-update, localization |
| Features | Subtitle styles, speaker diarization, vocal separation, GPU, non-Latin scripts |
Command Family at a Glance
| Command | What it does |
|---|---|
init |
Interactive setup wizard — detects files, suggests the right chain |
convert |
Entry point: any subtitle file intermediate file |
asr |
Media intermediate through speech recognition |
ocr |
Video/image intermediate through visible text recognition |
from-script |
Media + script timed intermediate file |
correct |
Calibrate timeline & text of an intermediate file |
translate |
Translate an intermediate file (LLM, glossary, script) |
dub |
Intermediate dubbed WAV audio (Qwen3-TTS) |
build |
Exit point: intermediate ASS / SRT / TXT |
serve |
REST API over the pipeline (in-process HTTP) |
validate / migrate |
/ IR schema check & upgrade |
models / providers |
Model registry & provider capability probes |
pipeline-graph / quality |
DAG visualization & per-run quality reports |
update |
Self-update from GitHub releases |
How Is It Built?
Operator-pipeline (DAG) architecture — every stage is an independent, swappable module, executed as a directed acyclic graph with parallel branches, retries and graceful degradation:
┌─ OCR branch: VideoSubFinder frame pick ─► OcrExtract ──────────┐
│ ▼
input ─► FFmpegConvert ─► AudioPreprocess ─► [ VocalSeparation] ─► Transcribe
─► [ Diarization] ─► SentenceSplit ─► TextCleaning ─► [ Alignment] ─► IR (*.centurion.json) ─► build ─► ASS / SRT / TXT
All inference goes through a Provider abstraction (local-first with cloud fallback) — models / providers manage the registry. Projects: Centurion.Models (data) Centurion.Abstractions (contracts) Centurion.Core (engine) Centurion.Cli (CLI, incl. serve HTTP mode) Centurion.Tests. Details in Features.
Contributing
Issues, PRs, and spicy feedback are all welcome! Get familiar with the pipeline/operator structure first, and keep CLI options backward-compatible where possible.
License
MIT License — see LICENSE for details.