IndexTTS 候选试听
IndexTTSListen
- round1
- round2
- round3
- log
Batch generation gives you rounds candidates per segment - three takes of segment one, three of segment two, and so on - and the whole point of having candidates is that you pick the good one. Doing that by hunting through output/批量生成_20260807_120000/ in a file manager is misery. IndexTTSListen is the listening booth: point it at a task, pick a segment, get the three rounds as separate AUDIO outputs you can wire into PreviewAudio nodes, and - the part that makes it a pipeline node rather than a glorified player - mark the winner as accepted.
The inputs
task_dir- the batch node'stask_diroutput, wired in. This is the preferred path, and a wired value wins over the dropdown. If you're not wiring it,task(a dropdown populated by the pack's bundled JS) orcustom_task(type the path) work instead.segment/custom_segment- which segment to audition. The dropdown is populated from the task's manifest, so it lists actual segment numbers rather than making you guess. A quick note on the numbering since it trips people up:001_1.wavis segment 1, round 1 - the leading zeros are the segment, the last number is the take, and the error message when you get it wrong says exactly that.accept_round- the workflow meat. 0 (default) means "just listen, change nothing." Set it to 1, 2, or 3 and the node writes an accepted flag for that round into the task'smanifest.json. That's how the downstream nodes (SRT generation, final assembly) know which take is canonical. It's a one-shot action: run withaccept_round=2, the manifest records round 2 as accepted, and the log confirms it.
Outputs
Three AUDIO tensors, round1, round2, round3 - wire each into its own PreviewAudio and you've got a side-by-side listening rig. If a round's file doesn't exist you get a short silent placeholder instead of a crash, and the log tells you what happened. There's also a log string for status, including current acceptance flags per round.
One thing the log will nag you about: if you ran rounds=4 or higher, the node shows you only the first three rounds. The extras exist on disk (004_4.wav...) - the UI just doesn't surface them - so if your best take is hiding in round 5, you'll have to listen to it the file-manager way.
Where it fits
IndexTTSLoader → IndexTTSBatch (rounds=3) → IndexTTSListen → PreviewAudio ×3
Generate, audition, accept. Then IndexTTSSrt reads the accepted picks from the manifest and produces the final audio plus subtitles, and IndexTTSFix handles the one take that's almost right but has a single pause out of spec. That's the whole production loop, and Listen is the human-in-the-middle step that makes it work - the node where you're supposed to slow down and actually listen.
Troubleshooting
- "任务目录为空" (task directory empty) - you haven't run a batch yet, or the path didn't come through. Run IndexTTSBatch first; wired
task_diris the most reliable path. - A segment shows all-placeholder silence - the files genuinely don't exist; check whether the batch actually generated that segment (or got interrupted before it).
- You can't remember which round you accepted - the log prints the acceptance state, and it's also sitting in
manifest.jsonunder that segment'sroundsentries.
Installation is shared with the whole pack: ComfyUI Manager, search IndexTTS2-PauseControl (or git clone https://github.com/lynx-gt/IndexTTS2-PauseControl into custom_nodes/, run python install.py, restart), and the ~11.8GB IndexTTS2 weights into ComfyUI/models/index_tts/.
Inputs (6)
| Name | Type | Default | Description |
|---|---|---|---|
| task | COMBO | 1 options: | |
| custom_task | STRING | — | |
| segment | COMBO | 1 options: 1 | |
| custom_segment | INT | 0 | — |
| task_dir | STRING | 接收「批量生成」节点的 task_dir 输出(连线传入时优先于 task/custom_task) | |
| accept_round | INT | 00–3 | 验收标记:0=仅试听不改状态;1/2/3=标记该轮通过验收(写入任务 manifest.json,供后续流程选用) |
Outputs (4)
| Name | Type | Description |
|---|---|---|
| round1 | AUDIO | — |
| round2 | AUDIO | — |
| round3 | AUDIO | — |
| log | STRING | — |