H3 Audio Refine dual_model · Bind Separate Tail (T8 EXP)
Handing H3's Audio Refine To A Second Model
- plan
- original_av_latent
- model
- noise
- guider
- sampler
- sigmas
- stage_latent
- model
- noise
- guider
- sampler
- sigmas
- stage_latent
- stage_boundary
- report_json
Some Audio Refine recipes don't refine with the model that made the video. The phase-2 route brings a second model in for the tail pass - maybe a different resolution, maybe a different checkpoint - and that's the route this bind exists to validate. It's the dual_model member of a three-node family whose display names are nearly identical, so check the class name before you wire anything.
The plan it demands is strict
The plan socket is typed H3_T8_AUDIO_REFINE_PHASE2_PLAN, and the builder behind it doesn't negotiate: exactly 4 refine steps, and an audio denoise of 0.35 or 0.50. Those are registered points, not defaults. If you were planning to try 0.6, the plan builder will refuse before this node ever sees it - the phase-2 contract is defined around a second model's geometry and doesn't pretend to be a free-form slider.
Want latitude? That's the dual_clock family: 1–8 refine steps and a denoise anywhere from 0.01 to 1.0. Different plan type, different bind node, same display name. Yes, it's confusing. Let the socket type arbitrate.
What the bind does to your sampling chain
Essentially nothing, on purpose. You feed in model, noise, guider, sampler and sigmas alongside the frozen original_av_latent, the stage_latent and the Setup's setup_report_json. The node verifies the signed plan, the existing Setup controls, the original AV, and the exact mask signature - 0 on video, 1 on audio, the fingerprint of a genuine audio-only tail refine - then returns all five sampling objects unchanged, plus stage_latent and a freshly minted stage_boundary.
If your model chain passes through here and comes out identical, that's success, not a bug.
The abstain behaviour is stated plainly in the node and worth repeating: empty SIGMAS in means a no-sample path out. No model calls, original AV through. The bind will not invent a sampling schedule to keep the graph looking productive.
Inputs and outputs worth naming
plan (typed), original_av_latent (the frozen first pass), model / noise / guider / sampler / sigmas (the second model's sampling stack), stage_latent, setup_report_json.
Out: model, noise, guider, sampler, sigmas, stage_latent, stage_boundary, report_json.
Wire the sampling five plus stage_latent into your sampler - the pack's examples use SamplerCustomAdvanced at CFG 1 - send stage_boundary to MiniMaxH3AudioRefineDualModelStageAuditEXPT8, and put report_json somewhere you'll see it. The boundary isn't decorative: the audit's typed input demands it, so you can't run the second half of the pair without the first.
Install
cd ComfyUI/custom_nodes
git clone https://github.com/T8mars/comfyui-minimax-h3-audio-T8.git minimax-h3-audio-T8
Or search MiniMax H3 Audio T8 in ComfyUI Manager - though Registry and GitHub releases are tracked separately by the author, so if you need a specific version, clone it. Then fully quit ComfyUI and start it again: a browser refresh won't pick up new node classes. There is no pip step, intentionally. The pack declares no extra dependencies so installation can never replace ComfyUI's Torch or CUDA stack, and I'd rather have that than a convenience package. Requirements are a recent ComfyUI with native H3 support, plus your own weights: H3 in models/diffusion_models, Qwen text encoder in models/text_encoders, video and audio VAEs in models/vae.
And a general warning from the README that applies to every graph in this family: don't queue the bundled examples until you've replaced the placeholder models and media. They point at files you don't have, and a red node on your first run is a bad way to learn a node.
Typical failures
- Wrong family. Three Binds, one display name. The plan socket is your lie detector.
- Stale
setup_report_json. It's a receipt of the Setup run. Change a widget and re-run half the graph, and validation fails - as intended. - Swapping
original_av_latentandstage_latent. The error surfaces as a mask or classification complaint, which sends people looking in the wrong place. - A leftover old copy of the pack in
custom_nodes. Older modules can win the import and give you tracebacks for code you don't have installed. One copy.
Inputs (9)
| Name | Type | Default | Description |
|---|---|---|---|
| plan | H3_T8_AUDIO_REFINE_PHASE2_PLAN | — | |
| original_av_latent | LATENT | — | |
| model | MODEL | — | |
| noise | NOISE | — | |
| guider | GUIDER | — | |
| sampler | SAMPLER | — | |
| sigmas | SIGMAS | — | |
| stage_latent | LATENT | — | |
| setup_report_json | STRING | — |
Outputs (8)
| Name | Type | Description |
|---|---|---|
| model | MODEL | — |
| noise | NOISE | — |
| guider | GUIDER | — |
| sampler | SAMPLER | — |
| sigmas | SIGMAS | — |
| stage_latent | LATENT | — |
| stage_boundary | T8_AUDIO_REFINE_STAGE_BOUNDARY | — |
| report_json | STRING | — |