IndexTTS 2.5 字幕自动回写 · T8star-Aix
Rewrite SRT text and timing after the fact, no re-synthesis needed
- dialogue_script
- 回写 SRT
- 回写报告 JSON
The multi-role generator can hand you a finished SRT, but it bakes its subtitle choices in at generation time - timing mode, text mode, role prefix, all locked in. This node exists to unwind that. It takes the dialogue script plus the generation report from a completed multi-role run and produces SRT text under different rules, with zero new synthesis. You get to try "give me real timestamps instead of the original ones" or "use ASR-passed text only" as many times as you like, without re-running the audio.
The inputs
- dialogue_script - the same parsed script that fed the generator.
- generation_report - the
生成报告 JSONoutput from the multi-role/SRT generate node. This is where the actual audio timings and the per-line ASR results live, so the node needs that specific run's report, not just any report. Feed it the right one and you get real data; feed it a stale one and the timings will be stale too. - timing_mode -
actualuses the real start/end times measured from the final mixed audio;originalkeeps the script's own timestamps. - text_mode -
asr_passed(replace a line's text only when its ASR similarity cleared the threshold, otherwise keep the original),asr_all(replace with everything ASR recognized), ororiginal(keep the script text as-is, always). - include_role - whether the SRT lines carry the
[角色]/角色:prefix.
Outputs: 回写 SRT - the ready-to-save subtitle text (drop it in a Save Text / write node) - and 回写报告 JSON, showing which timing and text decisions were applied per line.
The workflow that makes it shine
The README's suggested shape: run multi-role generation once with ASR enabled, then branch the report and script into both this node and the timeline editor, and experiment with subtitle strategies without re-inferring. In practice that means: generate once, then tune your subtitles until they're right. For an 8-line scene that's the difference between one 40-second generation and a dozen of them.
Gotchas
No install beyond the pack - it's a pure data/reformatting node, no model, no VRAM, no ASR of its own. But two real constraints:
- Garbage in, garbage out.
asr_passedandasr_allare only as good as the ASR results in the report. If you generated withasr_enabledoff, there are no recognition results, and the ASR-dependent text modes have nothing to work with - you'll effectively get original text back. Enable ASR at generation time if you plan to use the text-replacement modes. - It's a subtitle tool, not a truth tool. ASR is an approximation of what was said, not what was intended. When a word is mispronounced in the audio,
asr_allwill happily subtitle the mistake. That's precisely whyasr_passed- replace only when the recognizer is confident the audio matches the script - is the default.
Inputs (5)
| Name | Type | Default | Description |
|---|---|---|---|
| dialogue_script | T8_INDEXTTS25_DIALOGUE_SCRIPT | — | |
| generation_report | STRING | — | |
| timing_mode | COMBO | actual | 2 options: actual, original |
| text_mode | COMBO | asr_passed | 3 options: asr_passed, asr_all, original |
| include_role | BOOLEAN | true | — |
Outputs (2)
| Name | Type | Description |
|---|---|---|
| 回写 SRT | STRING | — |
| 回写报告 JSON | STRING | — |