Nodes/comfyui-indextts25-t8/IndexTTS 2.5 可视化时间轴编辑 · T8star-Aix
ComfyUI Node

IndexTTS 2.5 可视化时间轴编辑 · T8star-Aix

Hand-edit your multi-role timing as JSON, watch it render as colored tracks

By T8mars·Created 14 days ago·Updated a day ago· 25
IndexTTS 2.5 可视化时间轴编辑 · T8star-Aix
  • dialogue_script
  • 编辑后的台词脚本
  • 时间轴预览 JSON
  • 可视化时间轴
timeline_edits_json

The multi-role generator decides timing for you. This node lets you take over. You feed it a dialogue script, edit each line's start/end milliseconds, role, language, and speed as JSON, and it returns a validated script you can hand back to the generator - plus a rendered IMAGE timeline you can preview. It's the manual-nudge node for when a line lands 200ms late and you'd rather fix it than regenerate the whole scene.

How the loop works

  1. Connect a dialogue script. Run the node once with timeline_edits_json empty - it validates your script and gives you the 时间轴预览 JSON output, which contains every line with its current start_ms/end_ms, role, text, language, and duration factor.
  2. Copy that JSON's lines array, edit the numbers by hand, paste it back into timeline_edits_json.
  3. Re-run. The node validates strictly (line numbers must be complete and non-repeating), then outputs:
    • 编辑后的台词脚本 - a T8_INDEXTTS25_DIALOGUE_SCRIPT you can reconnect to the multi-role/SRT generate node for a re-mix on the new timeline.
    • 时间轴预览 JSON - the authoritative edited timeline, in milliseconds.
    • 可视化时间轴 - a standard IMAGE of per-line colored tracks. Wire it into ComfyUI's native Preview Image and you get a scrollable, visual check of overlaps and gaps.

A real edited line looks like:

{"line": 1, "role": "角色A", "text": "第一句。", "language": "ZH", "duration_factor": 1.0, "start_ms": 500, "end_ms": 2100}

Why it's better than it sounds

Editing timing as JSON sounds programmer-hostile, but it's the honest format for a graph editor - and the preview image is the thing that makes it usable. You see the colored tracks, spot the overlap, fix the millisecond, re-run. The strict validation (complete, non-repeating line numbers) means malformed edits fail at queue time with a specific message instead of silently producing a corrupted mix. The README even has the full round-trip pattern: timeline editor → generator → done, with ASR reports flowing into the subtitle rewrite node so you can tune subtitles separately from the audio.

Gotchas

Nothing exotic - ships with the pack (Manager search IndexTTS 2.5 · T8star-Aix or the repo clone), no model load, no VRAM. Two things to actually watch:

  • The generator's timeline_policy still applies downstream. If you hand an edited timeline to the generator and it's set to shift, conflicting lines get delayed anyway, defeating your hand-tuning. Use overlay when you've hand-placed lines and want them respected.
  • Text edits here are just for the mix. Change a line's text in the timeline JSON and the regenerated audio says the new words - but if you're also running ASR proofreading, the ASR is comparing against this text, so keep the script and the timeline in sync or you'll get confusing pass/fail results.
CategoryT8star-Aix/Audio/IndexTTS 2.5

Inputs (2)

NameTypeDefaultDescription
dialogue_scriptT8_INDEXTTS25_DIALOGUE_SCRIPT
timeline_edits_jsonSTRING先运行节点取得预览 JSON;复制 lines 数组后修改并填回。时间单位为毫秒。

Outputs (3)

NameTypeDescription
编辑后的台词脚本T8_INDEXTTS25_DIALOGUE_SCRIPT
时间轴预览 JSONSTRING
可视化时间轴IMAGE