Nodes/IndexTTS2-PauseControl/IndexTTS 停顿修复
ComfyUI Node

IndexTTS 停顿修复

Don't regenerate the whole take — surgically fix one pause

By lynx-gt·Created about a month ago·Updated about a month ago· 4
IndexTTS 停顿修复
    • audio
    • wav_path
    • log
    task
    custom_task
    segment
    custom_segment0
    round1
    marks
    out_suffix_fixed

    Here's the production scenario: the batch ran, you auditioned the candidates in IndexTTSListen, and the take you like has one pause that's off - 500ms where you wanted 200ms, or a pause that shouldn't be there at all. The impatient move is to re-roll the whole segment and hope. The right move is IndexTTSFix: it edits the pauses on the existing wav, no regeneration, no new seed roulette. Because the pack edits silence directly in the waveform, fixing a pause is the same surgery the generation already does - it just aims at a file you've already approved instead of a fresh inference.

    The inputs

    • task / custom_task - which task directory, same dropdown-plus-manual pattern as IndexTTSListen. The batch node's output task_dir is where your wavs live.
    • segment / custom_segment - which segment (remember: 001 is segment 1).
    • round - which candidate take to fix (1–10, default 1). Fix the take you actually accepted, obviously.
    • marks - the instruction string, comma-separated, two flavors:
      • By index: 2:800, 3:0 - pause #2 → 800ms, pause #3 → delete it (0 means remove). The index refers to the numbered pause records the batch wrote into the manifest, so this only works for segments that had [pause:N] markers.
      • By time: 7.53:500 - whatever pause sits at 7.53 seconds → 500ms. No manifest record needed; if a segment has no markers and you just want to lengthen the gap after a sentence, this is the form you use.
    • out_suffix - default _fixed. The result isn't written over your approved file; it's saved alongside as 001_2_fixed.wav, so you can compare and keep the original.

    Outputs

    audio - the edited wav as a standard ComfyUI AUDIO tensor, straight into PreviewAudio. wav_path - where the fixed file landed. log - a per-pause rundown: current ms → target ms, or "deleted", or a reason a pause was skipped (e.g., no silence to work with). That log is how you confirm the fix actually took.

    The catch worth knowing

    Fixing a pause is bounded by the same physics as generating one: you can extend or shorten an existing silence, and you can delete a pause, but you can't conjure one out of nothing - insertion needs a real silent gap, and the node would rather refuse than carve through speech. Also, in index mode, it looks up each mark's timestamp from the manifest; if the segment had no pause markers, there are no records to index against, and the error message steers you to the time-point form. That's the one non-obvious workflow rule: no markers in the text → use seconds, not indexes.

    Where it sits

    It's the precision tool at the end of the loop:

    IndexTTSBatch → IndexTTSListen → IndexTTSFix → PreviewAudio
    

    Run the batch, listen, accept a round, then fix only the take that's 95% there. Between this and rounds giving you candidates, you rarely have to regenerate anything - which matters, because every regeneration risks a new accent flub or a fresh breathing artifact. Installation is the pack standard: ComfyUI Manager search IndexTTS2-PauseControl, or clone https://github.com/lynx-gt/IndexTTS2-PauseControl into custom_nodes/, python install.py, download the IndexTTS2 weights to ComfyUI/models/index_tts/, restart.

    CategoryIndexTTS

    Inputs (7)

    NameTypeDefaultDescription
    taskCOMBO1 options:
    custom_taskSTRING
    segmentCOMBO1 options: 1
    custom_segmentINT0
    roundINT11–10
    marksSTRING
    out_suffixSTRING_fixed

    Outputs (3)

    NameTypeDescription
    audioAUDIO
    wav_pathSTRING
    logSTRING