Nodes/MiniMax H3 Audio T8/MiniMax H3 Speech Verify & Align / ASR校验裁切 (EXP/T8)
ComfyUI Node

MiniMax H3 Speech Verify & Align / ASR校验裁切 (EXP/T8)

ASR verification and exact-target trimming

By T8mars·Created 20 days ago·Updated a day ago· 807
MiniMax H3 Speech Verify & Align / ASR校验裁切 (EXP/T8)
  • audio
  • voice_profile
  • audio
  • transcript
  • text_similarity
  • speaker_similarity
  • accepted
  • report_json
expected_text
verify_modeoff
asr_model_directory
languageauto
min_similarity0.85
beam_size5
cpu_threads8
unload_after_verifytrue
strictfalse
pre_padding_seconds0.12
post_padding_seconds0.25
speaker_check_modeoff
speaker_model_directory
min_speaker_similarity0.86
unload_speaker_after_verifytrue
peak_limit_dbfs-1.0

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 applies pre_padding_seconds (0.12) and post_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 under ComfyUI/models/TTS. Required when verification is on, and it errors explicitly if missing rather than silently skipping.
  • beam_size (5) and cpu_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.

CategoryT8/MiniMax H3/Speech/Experimental

Inputs (18)

NameTypeDefaultDescription
audioAUDIO
expected_textSTRING
verify_modeCOMBOoff3 options: off, verify_only, trim_exact_target
asr_model_directorySTRINGAbsolute faster-whisper CTranslate2 directory, or a folder name under ComfyUI/models/TTS. Required only when verification is enabled.
languageCOMBOauto12 options: auto, Arabic, Chinese, English, French, German, +6
min_similarityFLOAT0.850–1
beam_sizeINT51–20
cpu_threadsINT81–64
unload_after_verifyBOOLEANtrue
strictBOOLEANfalse
pre_padding_secondsFLOAT0.120–2
post_padding_secondsFLOAT0.250–2
speaker_check_modeCOMBOoff3 options: off, report_cosine, require_threshold
speaker_model_directorySTRINGLocal WavLM X-Vector model directory. A voice_profile with a reference is also required when speaker checking is enabled.
min_speaker_similarityFLOAT0.860–1Dataset-dependent EXP threshold; report_cosine does not gate output.
unload_speaker_after_verifyBOOLEANtrue
peak_limit_dbfsFLOAT-1.0-24–0Final attenuation-only peak protection; never boosts quiet speech.
voice_profileoptH3_T8_VOICE_PROFILE

Outputs (6)

NameTypeDescription
audioAUDIO
transcriptSTRING
text_similarityFLOAT
speaker_similarityFLOAT
acceptedBOOLEAN
report_jsonSTRING