Nodes/IndexTTS 2.5 · T8star-Aix/IndexTTS 2.5 多角色 / SRT 生成 · T8star-Aix
ComfyUI Node

IndexTTS 2.5 多角色 / SRT 生成 · T8star-Aix

Dialogue, SRT slots, and auto-ASR in one node

By T8mars·Created 2 months ago·Updated 27 days ago· 58
IndexTTS 2.5 多角色 / SRT 生成 · T8star-Aix
  • model
  • role_library
  • dialogue_script
  • sampling
  • 合并音频
  • 逐句音频
  • 生成报告 JSON
  • 自动回写 SRT
  • 可视化时间轴 JSON
◄seed0►
◄timeline_policyshift►
◄fit_srt_slotsfalse►
◄slot_duration_modepad►
◄fit_tolerance_ms180►
◄batch_gap_ms200►
◄postprocess_presetoff►
◄postprocess_strength1.00►
◄asr_enabledfalse►
◄asr_backendauto►
◄asr_modelbase►
◄asr_deviceauto►
◄asr_threshold0.82►
◄subtitle_timing_modeactual►
◄subtitle_text_modeasr_passed►
◄subtitle_include_roletrue►
◄asr_retry_count0►

This is the workhorse of the whole multi-role flow. It takes the model, a role library (your cast), and a dialogue script (your lines), then synthesizes every line with the right voice, mixes them into one standard AUDIO, and - if you ask - writes you a finished SRT at the same time. If you're building character dialogue, an audiobook, or subtitled video voiceover, this node is where the actual work happens.

How it works

It iterates the script line by line: each line resolves its role, looks up that role's reference audio and emotion in the library, and runs a full IndexTTS inference for that utterance. Outputs are the 合并音频 (mixed master), 逐句音频 (a list of per-line clips, so you can inspect or re-mix individual takes), 生成报告 JSON, plus 自动回写 SRT and 可视化时间轴 JSON when subtitle stuff is enabled.

The inputs that shape it

  • timeline_policy - shift (default) delays any colliding line so nothing overlaps; overlay keeps the original SRT start times and safely mixes the overlap. For timed subtitles you usually want overlay; for plain narration shift.
  • fit_srt_slots / slot_duration_mode - the SRT-fit feature. With slots on, each line tries to land inside its subtitle's time window: native (recommended) allocates target frames to the length regulator in a single inference; natural re-runs with a fitted factor; pad/exact pad or trim to the slot. exact can cut tail consonants, so it's for hard slots only.
  • batch_gap_ms - silence inserted between lines (200 default).
  • postprocess_preset / strength - the same voice-cleanup presets as the standalone post-process node, applied to the mixed master.
  • ASR block - asr_enabled plus backend/model/device/threshold: each line gets transcribed after synthesis and compared against the script. This is the quality gate that catches "it said the wrong thing" per line, automatically.

Subtitle outputs, briefly

subtitle_timing_mode (actual vs original) picks whether SRT times come from the real generated audio or the script's original timestamps. subtitle_text_mode decides what text lands in the SRT: asr_passed (default) replaces a line only when ASR similarity clears the threshold, asr_all replaces everything recognized, original keeps your script text. subtitle_include_role prepends the role name. It's a lot of knobs, but the defaults - actual timing, asr_passed text - are the sane ones: real timestamps, corrected text only when the ASR is confident.

Where people get burned

  • Missing roles - the node validates that every role in the script has a connected voice before queuing. Read that message; it names the role.
  • ASR needs a separate install. The ASR extras (openai-whisper / faster-whisper, plus opencc-python-reimplemented) are optional and don't come with the pack. Without them, asr_enabled errors with a clear "backend not available" message. Install with ComfyUI's own Python:
python -m pip install "openai-whisper>=20250625" "opencc-python-reimplemented>=0.1.7"
  • The fit_srt_slots trap. Target durations that fight natural pacing degrade naturalness - the README says it plainly: "目标时长与自然语速差异过大时仍可能降低自然度." Don't force every line into a slot; reserve exact for subtitle hard slots where the video demands it.
  • transformers must stay <5 - same pack-wide rule, and it's the first thing to check on any cryptic failure here.

Installation

Same as the whole pack: ComfyUI Manager (IndexTTS 2.5 · T8star-Aix), or clone the repo and install requirements with ComfyUI's Python. Weights go in ComfyUI/models/TTS/IndexTTS-2.5. The node itself adds nothing beyond the pack's standard deps - except the ASR extras above, if you enable that path.

CategoryT8star-Aix/Audio/IndexTTS 2.5

Inputs (21)

NameTypeDefaultDescription
modelT8_INDEXTTS25_MODEL—
role_libraryT8_INDEXTTS25_ROLE_LIBRARY—
dialogue_scriptT8_INDEXTTS25_DIALOGUE_SCRIPT—
seedINT00–18446744073709550000—
timeline_policyCOMBOshiftshift 顺延避免重叠;overlay 保留 SRT 起点并安全混音。
fit_srt_slotsBOOLEANfalse仅 SRT 有效;native 单次控制,其他模式保留兼容回退。
slot_duration_modeCOMBOpadpad(推荐)短则补静音、超长保留;natural 不裁剪;native/exact 最后可能裁掉超过槽位的句尾。
fit_tolerance_msINT1800–2000—
batch_gap_msINT2000–5000—
postprocess_presetCOMBOoff6 options: off, voice_clarity, clear_narration, deharsh, warm, normalize
postprocess_strengthFLOAT1.000–1—
asr_enabledBOOLEANfalse—
asr_backendCOMBOauto3 options: auto, openai_whisper, faster_whisper
asr_modelCOMBObase5 options: tiny, base, small, medium, turbo
asr_deviceCOMBOauto3 options: auto, cuda, cpu
asr_thresholdFLOAT0.820–1—
subtitle_timing_modeCOMBOactual2 options: actual, original
subtitle_text_modeCOMBOasr_passed3 options: asr_passed, asr_all, original
subtitle_include_roleBOOLEANtrue—
asr_retry_countINT00–3追加在旧版控件之后以兼容已保存工作流;识别失败只写报告,不阻断音频输出。
samplingoptT8_INDEXTTS25_SAMPLING—

Outputs (5)

NameTypeDescription
合并音频AUDIO—
逐句音频AUDIO—
生成报告 JSONSTRING—
自动回写 SRTSTRING—
可视化时间轴 JSONSTRING—