dots.tts 字幕与多角色工程 · T8star-Aix
Project — render a whole subtitle file into dubbed audio, crash-proof and resumable
- model
- speaker_map
- sampling
- 工程音频
- 时间轴与报告 JSON
This is the node that turns dots.tts from "nice TTS" into "actual dubbing pipeline." T8_DotsTTS_Project takes a TXT, SRT, or WebVTT script, renders every line with the right voice, fits each line to its subtitle timing, and writes the whole thing out as a project - audio files, a normalized timeline, and a checkpoint you can resume. It's the engine under the pack's subtitle and multi-character features, and T8_DotsTTS_BatchQueue is just this node pointed at a folder of projects at once.
Paste your subtitle content straight into source_text. The default shows the format it expects - an SRT-ish block with role prefixes:
1
00:00:00,000 --> 00:00:02,000
[旁白] 2026 年,T8 发布。
project_kind is auto and sniffs whether you gave it a timed subtitle or plain text; project_name names the project (and the checkpoint). The voice assignment comes from the optional speaker_map (a T8_DotsTTS_SpeakerMap output), and pronunciation is the same dictionary format as the Pronunciation node, applied to every line.
The mechanism is where this earns its keep. Each subtitle entry or text segment is synthesized independently and saved into segments/, with an atomic checkpoint.json updated after every segment. With resume on (the default), segments that already succeeded - and whose audio files are still valid - are skipped on re-run. max_retries (default 2) retries a failed segment before giving up on it, and a per-segment failure is isolated rather than killing the whole project. Deterministic seeds derived from your starting seed mean a retried segment reproduces the same output, so a resume isn't a lottery.
The other half is timing and delivery. subtitle_fit_mode (shrink default) adapts each line's duration to its subtitle slot - shrink pitch-preserves speed changes when speech overflows the slot, fit aligns everything, none keeps original duration, trim cuts explicitly. The timeline.json records original duration, output duration, speed ratio, and overflow_ms for every line, so you can see exactly where the fit was fudged. Outputs are project_audio (the mixed master, WAV by default) and project_info JSON with the timeline and report. The project also writes master.wav and a normalized timeline.srt to disk.
Export options: audio_formats accepts a comma list (wav,mp3,flac), target_lufs does two-pass EBU R128 loudness normalization (set 0 to disable), and video_path lets you remux the result back onto a video's audio track. Pure WAV needs no FFmpeg; MP3/FLAC/LUFS/video remux require FFmpeg on PATH or an explicit ffmpeg_path. The pack does not download FFmpeg for you.
Where people get burned
- Missing FFmpeg is the top one. WAV works, then someone enables MP3 or LUFS and gets a failure. Either set
ffmpeg_pathor install FFmpeg yourself. - Resume only helps if you don't change the inputs. The "retry failed only" path (in BatchQueue) requires the config fingerprint to match; change the speaker map and the old checkpoint won't apply.
- Timing fits are a warning system. If
overflow_msis huge and the audio sounds sped up, your subtitle timing is too tight for the line - that's a script problem, not a node problem.
Installation is the pack install (Manager → dots-tts-t8, or clone + pip install -r requirements.txt), a downloaded SOAR or MF 2-Steps model, and optionally FFmpeg on PATH.
Inputs (19)
| Name | Type | Default | Description |
|---|---|---|---|
| model | T8_DOTS_TTS_MODEL | — | |
| source_text | STRING | 1 00:00:00,000 --> 00:00:02,000 [旁白] 2026 年,T8 发布。 | — |
| project_name | STRING | subtitle.srt | — |
| project_kind | COMBO | auto | 3 options: auto, subtitle, text |
| language | COMBO | inherit | 27 options: inherit, auto_detect, none, ZH, EN, YUE, +21 |
| seed | INT | 420–4294967295 | — |
| pronunciation | STRING | 2026 => 二零二六 T8 => T 八 | — |
| max_segment_tokens | INT | 12016–512 | — |
| segment_gap_ms | INT | 2000–10000 | — |
| max_retries | INT | 20–10 | — |
| resume | BOOLEAN | true | — |
| subtitle_fit_mode | COMBO | shrink | 4 options: shrink, fit, none, trim |
| audio_formats | STRING | wav | 逗号分隔:wav,mp3,flac |
| target_lufs | FLOAT | 0.0-36–0 | — |
| video_path | STRING | — | |
| ffmpeg_path | STRING | — | |
| output_dir | STRING | — | |
| speaker_mapopt | T8_DOTS_TTS_SPEAKER_MAP | — | |
| samplingopt | T8_DOTS_TTS_SAMPLING | — |
Outputs (2)
| Name | Type | Description |
|---|---|---|
| 工程音频 | AUDIO | — |
| 时间轴与报告 JSON | STRING | — |