H3 Audio Refine compatibility · Bind Separate Tail (T8 EXP)
The Gatekeeper Before Your H3 Audio Resample
- plan
- original_av_latent
- model
- noise
- guider
- sampler
- sigmas
- stage_latent
- model
- noise
- guider
- sampler
- sigmas
- stage_latent
- stage_boundary
- report_json
H3 ships as one joint audio-video latent - the audio isn't a second pass, it's welded into the denoise. So refining just the audio means taking a frozen video, and running a short extra sampling pass over the audio portion of that latent. This node is what makes that legal in the pack's world: it validates the plan, the original AV and the exact 0-video / 1-audio mask, then stamps a stage_boundary token that tells every downstream node which pass this is.
It's the first of a pair. The second is MiniMaxH3AudioRefineCompatStageAuditEXPT8, which re-checks everything after your sampler has run.
What it does with your sampling chain
Nothing. That's the feature. You feed it the MODEL, NOISE, GUIDER, SAMPLER and SIGMAS that the compatibility Setup produced, plus the stage_latent and the Setup's setup_report_json, and it passes all five of them straight back out untouched, alongside stage_latent and a fresh stage_boundary.
That matters because a lot of "convenience" nodes in this space quietly re-wire your noise or swap a sigma schedule. Here, if the mask on original_av_latent isn't exactly 0 for video and 1 for audio - the signature of a genuine audio-only tail refine - you get an error instead of a silently-different render.
It also documents the abstain path honestly. If the SIGMAS coming in are empty, this stays a no-sample path: zero model calls, original AV through. The bind doesn't invent a schedule to make the graph look busy.
The sockets that matter
plan is the one to get right. It's typed H3_T8_AUDIO_REFINE_COMPAT_PLAN, and the compatibility family is the tightest of the pack's three: the plan builder enforces exactly 4 refine steps and an audio denoise of 0.35 or 0.50. Nothing between. If you want to sweep denoise values you want the dual_clock bind instead, whose plan accepts 1–8 steps and a 0.01–1.0 denoise.
On the inputs, original_av_latent is the frozen first pass and stage_latent is what the tail pass will actually chew on - they are not the same tensor and swapping them is the classic way to get a confusing abort.
On the outputs, wire model, noise, guider, sampler and sigmas into your sampler (the pack's examples use SamplerCustomAdvanced with CFG 1), stage_latent into it as the latent, stage_boundary into the matching audit, and report_json somewhere you'll actually read it. The boundary is the type the audit demands; you can't skip it.
Installing
Search MiniMax H3 Audio T8 in ComfyUI Manager, or do it by hand:
cd ComfyUI/custom_nodes
git clone https://github.com/T8mars/comfyui-minimax-h3-audio-T8.git minimax-h3-audio-T8
Then fully quit ComfyUI - not just refresh the browser - and start it again. The pack's requirements.txt intentionally installs nothing (torch, torchaudio, numpy, Pillow and safetensors come from ComfyUI), so the install step is genuinely short. You'll want a recent ComfyUI with native H3 support, and weights placed separately: H3 main model in models/diffusion_models, Qwen text encoder in models/text_encoders, video/audio VAEs in models/vae.
Things that actually go wrong
- Stale
setup_report_json. It's a receipt of the run that produced the plan. Change something upstream, re-run only half the graph, and the bind refuses. Re-run the Setup node. - Wrong family. The three Bind nodes in this family read almost identically in the node search. Check the class name, and let the typed
plansocket do the arguing for you. - Expecting the bind to approve the result. It doesn't. It signs a boundary. Approval is the audit, then the Quality Gate, then your own ears.
- A leftover old copy of this pack in
custom_nodes. Two installs means the older one can win and you'll debug a traceback from Python code you don't even have.
Inputs (9)
| Name | Type | Default | Description |
|---|---|---|---|
| plan | H3_T8_AUDIO_REFINE_COMPAT_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 | — |