MiniMax H3 Speech Verify & Align / ASR校验裁切 (EXP/T8)
ASR verification and exact-target trimming
- audio
- voice_profile
- audio
- transcript
- text_similarity
- speaker_similarity
- accepted
- report_json
H3 generates speech jointly with the picture, which means it can absolutely misspeak - drop a word, mispronounce a name, or tack a few extra syllables onto the front of a line. You won't hear it until you're listening back at the end of a render. MiniMaxH3SpeechVerifyT8 is the safety net: it transcribes your generated audio with a local ASR model, scores it against the text you asked for, and - in exact-target mode - trims away a Ref2VA lead-in so the spoken line starts where it's supposed to. Think of it as the QC pass you'd otherwise do by ear, automated and gated on numbers.
How it works
The node runs optional CPU faster-whisper verification. It's all local, no API call, no key. Give it audio and expected_text, pick a verify_mode:
off- pass-through, no ASR.verify_only- transcribe, report similarity, don't touch the audio.trim_exact_target- the clever one. The node removes the Ref2VA lead-in only when the complete requested text is found in order in the transcript, then appliespre_padding_seconds(0.12) andpost_padding_seconds(0.25) around the matched span. If the words aren't all there, it refuses rather than cutting something that isn't what you asked for.
The transcript match is scored as text_similarity against your min_similarity threshold (0.85 default), and you can additionally enable speaker_check_mode with a local WavLM X-Vector model to score speaker_similarity against a voice_profile's reference - useful when you're cloning and want proof the voice held. accepted is the boolean output you can wire into a gate: false means the render didn't pass your bar, and you decide whether to re-roll.
The inputs that matter
verify_mode,expected_text,min_similarity- the core contract.asr_model_directory- an absolute faster-whisper CTranslate2 directory, or a folder name underComfyUI/models/TTS. Required when verification is on, and it errors explicitly if missing rather than silently skipping.beam_size(5) andcpu_threads(8) - faster-whisper decode knobs; bump threads if transcription is the slow part.peak_limit_dbfs(-1 = off) - attenuation-only peak protection. The tooltip says it plainly: it never boosts quiet speech.
Outputs: audio (possibly trimmed), transcript, text_similarity, speaker_similarity, accepted, and report_json for the audit trail.
Installing and what it needs
Same pack, one-time install: ComfyUI Manager → "MiniMax H3 Audio T8", or git clone https://github.com/T8mars/comfyui-minimax-h3-audio-T8 into custom_nodes and restart. The pack itself has no mandatory pip deps, but verification pulls in faster-whisper and its CTranslate2 model files - a CPU CTranslate2 conversion, not the giant full-whisper checkpoint. min_speaker_similarity's tooltip even warns it's a "dataset-dependent EXP threshold; report_cosine does not gate output" - i.e. that number is a hint, not a verdict. The model files are yours to provide; the pack doesn't fetch them.
Common issues
The classic failure is enabling a verify mode without pointing at a real ASR directory - you get a hard error, which is the intended fail-closed behaviour, not a bug. Second most common: strict mode. With strict on, an imperfect match is treated more severely, which is great for production and annoying when you're testing with a name the ASR keeps mangling. When that happens, read the transcript in report_json before blaming the node - usually the ASR heard it fine and your threshold was just too optimistic.
Inputs (18)
| Name | Type | Default | Description |
|---|---|---|---|
| audio | AUDIO | — | |
| expected_text | STRING | — | |
| verify_mode | COMBO | off | 3 options: off, verify_only, trim_exact_target |
| asr_model_directory | STRING | Absolute faster-whisper CTranslate2 directory, or a folder name under ComfyUI/models/TTS. Required only when verification is enabled. | |
| language | COMBO | auto | 12 options: auto, Arabic, Chinese, English, French, German, +6 |
| min_similarity | FLOAT | 0.850–1 | — |
| beam_size | INT | 51–20 | — |
| cpu_threads | INT | 81–64 | — |
| unload_after_verify | BOOLEAN | true | — |
| strict | BOOLEAN | false | — |
| pre_padding_seconds | FLOAT | 0.120–2 | — |
| post_padding_seconds | FLOAT | 0.250–2 | — |
| speaker_check_mode | COMBO | off | 3 options: off, report_cosine, require_threshold |
| speaker_model_directory | STRING | Local WavLM X-Vector model directory. A voice_profile with a reference is also required when speaker checking is enabled. | |
| min_speaker_similarity | FLOAT | 0.860–1 | Dataset-dependent EXP threshold; report_cosine does not gate output. |
| unload_speaker_after_verify | BOOLEAN | true | — |
| peak_limit_dbfs | FLOAT | -1.0-24–0 | Final attenuation-only peak protection; never boosts quiet speech. |
| voice_profileopt | H3_T8_VOICE_PROFILE | — |
Outputs (6)
| Name | Type | Description |
|---|---|---|
| audio | AUDIO | — |
| transcript | STRING | — |
| text_similarity | FLOAT | — |
| speaker_similarity | FLOAT | — |
| accepted | BOOLEAN | — |
| report_json | STRING | — |