MiniMax H3 Speech Conditioning / 语音条件 (EXP/T8)
The node that turns 'speak this line in this voice' into H3 conditioning
- clip
- video_vae
- audio_vae
- voice_profile
- speech_plan
- speech_guard
- positive
- av_latent
- conditioned_prompt
- spoken_text
- plan_json
- report_json
H3 doesn't have a separate TTS model. Speech, dialogue and vocals are all generated by the same joint AV transformer that draws the picture - which is why this pack's speech nodes work the way they do. MiniMaxH3SpeechConditioningT8 is the front door of that speech pipeline: it takes your text, your voice choice, and your clip/VAEs, and builds the native H3 conditioning that a sampler turns into audible speech. And it does it without loading a model - this node is pure conditioning assembly, so it's cheap to run and easy to iterate on.
This is the node that decides which voice-generation route H3 uses:
- Described voice - you describe the voice in words; it goes down the T2VA route.
- Reference voice - you supply a voice profile built from a reference audio clip; it uses the Ref2VA route with a dark image as the visual anchor, since there's no real picture content.
The README is explicit that this upstream "TTS" is H3 generative audio, not deterministic phoneme TTS - think of it as the model acting out the line, not synthesizing it phonetically.
The inputs that matter
clip,video_vae,audio_vae- the standard H3 model pieces. Wire the same ones the rest of your workflow uses.voice_profile- anH3_T8_VOICE_PROFILE(built by the pack's voice profile nodes, or from a reference clip).speech_plan- anH3_T8_SPEECH_PLANholding the text, speaker and timing for this segment.segment_index(0) - which segment of the plan to render.render_seconds(10) - the H3 render window. The tooltip is the important part: it's aligned to the 17n+5 frame grid and is not inferred from text length. Set it explicitly.resolution(32) - the audio latent resolution (32/64/128).speech_guard(optional) - wire the guard fromMiniMaxH3SpeechGuardT8here so an abnormal exit can release models.
The outputs
positive (CONDITIONING) feeds your sampler; av_latent is the empty joint AV latent to start sampling from. The text diagnostics - conditioned_prompt, spoken_text, plan_json, report_json - let you verify the model saw exactly what you intended before you burn a sampling run.
How it sits in the workflow
The canonical speech graph is: plan → Conditioning → sampler → audio-only decode → release. The pack's starter examples live in examples/workflows/05-speech-dialogue/ - 2026-08-10_H3_Speech_Described_Stock20_EXP.json for a described voice, 2026-08-10_H3_Speech_Reference_Clone_Stock20_EXP.json for a reference/clone voice. Recommended order of battle: get a described voice working first, then add a reference clip, then multi-speaker.
Install
Same pack as everything here - ComfyUI Manager, search "MiniMax H3 Audio T8", or
cd ComfyUI/custom_nodes
git clone https://github.com/T8mars/comfyui-minimax-h3-audio-T8
then restart. No extra pip packages for this node; you still supply the H3 model, clip, VAEs and any reference audio yourself.
Where people get tripped
- render_seconds is not "how long the line is." It's the H3 window and snaps to 17n+5 frames. Too short and the line gets cut, not auto-extended.
- Expecting phoneme-perfect lip sync. The pack says it plainly: exact lip sync needs a dedicated lip/facial retarget tool after H3, not this node.
- Treating clone as a guarantee. The pack's own multilingual validation found clone WER medians of 0 but a mean of 0.78 across its historical set - some clones add extra or off-target speech. Reference voice is a strong hint, not a locked identity.
It's an experimental node (everything speech in this pack is), so test on a single short segment before committing to a full dialogue render.
Inputs (9)
| Name | Type | Default | Description |
|---|---|---|---|
| clip | CLIP | — | |
| video_vae | VAE | — | |
| audio_vae | VAE | — | |
| voice_profile | H3_T8_VOICE_PROFILE | — | |
| speech_plan | H3_T8_SPEECH_PLAN | — | |
| segment_index | INT | 00–9999 | — |
| render_seconds | FLOAT | 10.005.17–15.08 | Explicit H3 render window. It is aligned to 17n+5 frames and is not inferred from text length. |
| resolution | COMBO | 32 | 3 options: 32, 64, 128 |
| speech_guardopt | H3_T8_SPEECH_GUARD | — |
Outputs (6)
| Name | Type | Description |
|---|---|---|
| positive | CONDITIONING | — |
| av_latent | LATENT | — |
| conditioned_prompt | STRING | — |
| spoken_text | STRING | — |
| plan_json | STRING | — |
| report_json | STRING | — |