MiniMax H3 Dialogue Boundary Analyzer / 对白边界分析 (EXP/T8)
'Did that line actually play here?' — finding speech boundaries locally
- audio
- transcript
- unique_target_found
- clean_exact
- speech_start_seconds
- speech_end_seconds
- extra_before_units
- extra_after_units
- report_json
You generated a line of dialogue, and now you need to know exactly where in the audio it starts and ends - for trimming, for timing against video, for building a master. MiniMaxH3DialogueBoundaryAnalyzerT8 answers that with a local CPU faster-whisper pass: it transcribes your audio, looks for the exact text you expected, and reports the boundary only when it finds exactly one contiguous match. Ambiguous? It tells you so. And it never edits a single sample - this is an analyzer, not an editor.
How it works
You feed it audio and expected_text (the line you believe is in there). It runs faster-whisper (CTranslate2, CPU) with beam_size (default 5) and cpu_threads (default 8). The model directory comes from asr_model_directory - an absolute faster-whisper CTranslate2 directory, or a folder under ComfyUI/models/TTS. Note the tooltip carefully: no model is downloaded automatically. You supply the whisper model yourself; this is a local-only tool, no API, no keys.
The interesting outputs:
unique_target_found-trueonly when exactly one contiguous exact-target sequence was found. This is the gate everything else hangs on.clean_exact- whether that match is clean (no extra garbage welded onto the target).speech_start_seconds/speech_end_seconds- the boundary, when found.extra_before_units/extra_after_units- how much padding surrounds the target.transcriptandreport_jsonfor the full readout.
The honesty you should appreciate
Two deliberate caveats are baked in. First, tail_activity_threshold_dbfs (default −45) only reports post-target signal activity - the tooltip says it plainly: "This is not a VAD or a speech/non-speech decision." Tail energy is not assumed to be speech. Second, if the target text isn't found as one clean contiguous match, the node abstains rather than guessing a boundary from signal levels. For dialogue timing, a wrong start time is worse than no start time, and this node knows it.
Where it fits
This is the measurement side of the speech chain. Pair it with the pack's Speech Verify node for exact-target alignment and Dialogue Safe Master for the mix - the boundary values it produces are exactly the speech_start_seconds those downstream nodes want. It's also a great sanity check: "did H3 actually say the line I prompted, and did it say it once?"
Installing it
From MiniMax H3 Audio T8 (T8mars/T8star, GPL-3.0). Manager search MiniMax H3 Audio T8, or:
cd ComfyUI/custom_nodes
git clone https://github.com/T8mars/comfyui-minimax-h3-audio-T8
restart. No forced pip extras - but this node does need a faster-whisper model on disk, which is the one dependency people forget. And the H3 weights' Community License excludes the US, EU, UK, South Korea.
The trap
unique_target_found = false doesn't mean the line isn't there - it means the transcription didn't produce one clean contiguous match (accents, background noise, or H3 garbling the line will do it). That's the moment to check transcript and see what it did hear. And if asr_model_directory is empty, the node has no model to run: point it at your CTranslate2 directory or models/TTS subfolder first.
Inputs (8)
| Name | Type | Default | Description |
|---|---|---|---|
| audio | AUDIO | — | |
| expected_text | STRING | — | |
| asr_model_directory | STRING | Absolute faster-whisper CTranslate2 directory, or a folder under ComfyUI/models/TTS. No model is downloaded automatically. | |
| language | COMBO | auto | 12 options: auto, Arabic, Chinese, English, French, German, +6 |
| beam_size | INT | 51–20 | — |
| cpu_threads | INT | 81–64 | — |
| unload_after_analyze | BOOLEAN | true | — |
| tail_activity_threshold_dbfs | FLOAT | -45.0-120–0 | Only reports post-target signal activity. This is not a VAD or a speech/non-speech decision. |
Outputs (8)
| Name | Type | Description |
|---|---|---|
| transcript | STRING | — |
| unique_target_found | BOOLEAN | — |
| clean_exact | BOOLEAN | — |
| speech_start_seconds | FLOAT | — |
| speech_end_seconds | FLOAT | — |
| extra_before_units | INT | — |
| extra_after_units | INT | — |
| report_json | STRING | — |