Nodes/comfyui-indextts25-t8/IndexTTS 2.5 字幕自动回写 · T8star-Aix
ComfyUI Node

IndexTTS 2.5 字幕自动回写 · T8star-Aix

Rewrite SRT text and timing after the fact, no re-synthesis needed

By T8mars·Created 14 days ago·Updated a day ago· 25
IndexTTS 2.5 字幕自动回写 · T8star-Aix
  • dialogue_script
  • 回写 SRT
  • 回写报告 JSON
generation_report
timing_modeactual
text_modeasr_passed
include_roletrue

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 生成报告 JSON output 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 - actual uses the real start/end times measured from the final mixed audio; original keeps 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), or original (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_passed and asr_all are only as good as the ASR results in the report. If you generated with asr_enabled off, 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_all will happily subtitle the mistake. That's precisely why asr_passed - replace only when the recognizer is confident the audio matches the script - is the default.
CategoryT8star-Aix/Audio/IndexTTS 2.5

Inputs (5)

NameTypeDefaultDescription
dialogue_scriptT8_INDEXTTS25_DIALOGUE_SCRIPT
generation_reportSTRING
timing_modeCOMBOactual2 options: actual, original
text_modeCOMBOasr_passed3 options: asr_passed, asr_all, original
include_roleBOOLEANtrue

Outputs (2)

NameTypeDescription
回写 SRTSTRING
回写报告 JSONSTRING