H3 Progressive · HIGH Handoff Only (T8 EXP)
Get the Second Pass's Noise Right, or Watch It Drift
- low_boundary
- model
- sampler
- lifted_av
- high_source
- video_noise
- high_sigmas
- high_restart
- plan
- report_json
The handoff is the joint between two halves of one trajectory, and it's the place where a progressive run either stays coherent or develops the tell-tale softness and instability of a bad seam.
This node builds the HIGH stage's starting state. It draws only the HIGH video noise, restores the original native AV coordinates and the clean-source masks, and returns a typed high_restart for the HIGH sampler. It does not sample, and it does not run the learned lift - that's your upscaler's job, upstream of here.
Inputs that matter
- low_boundary - the frozen LOW artifact. Its receipt carries the plan and the masks; nothing here guesses geometry.
- lifted_av - the output of your learned 3D latent upscaler, fed from Boundary to External Lift Input. The field name means what it says: this must be the actual upscaled latent, not a copy of the boundary.
- high_source - the HIGH-stage clean source latent. This is the anchor that lets HIGH restore clean-source masks, and it's independent of the LOW source on purpose.
- video_noise - a Core noise provider. This is the one people get wrong, so here it is straight from the node description: for the original noise policy, use video_noise seed = (LOW seed + 1) modulo 2^64. The two stages don't share a noise draw; HIGH gets its own, deterministically derived.
- model, sampler - the HIGH stage's own. Independent MODEL, LoRA chain and conditioning are the point of the split.
- high_sigmas (optional) - if you supply a HIGH sigma tail, it must start at the frozen boundary. A tail that begins anywhere else is a discontinuity, and the node will not paper over it.
Outputs: high_restart, plan, report_json. The restart goes to HIGH Sampler Only (and to the HIGH EAV apply node if you're using effects); the plan is there so the rest of the graph reads the same authoritative split the boundary was built with.
There's a small but useful guarantee in the execute path: the node draws the noise from your provider and then checks the provider didn't mutate the source you handed it. If it did, you get an error instead of a silently corrupted run. Good hook.
Wiring
low_boundary ─────────────────┐
model, sampler ───────────────┤
lifted_av (from upscaler) ────┼→ HIGH Handoff Only ─→ high_restart ─→ HIGH Sampler Only
high_source ──────────────────┤
video_noise (LOW seed + 1) ───┘
If you're running a graph where LOW was executed days ago and reloaded from disk, this node is what glues the recovered boundary to the present HIGH stage. That's the Cold_HIGH pattern in examples/workflows/44-progressive-split/.
Install
Manager, search MiniMax H3 Audio T8, or:
cd ComfyUI/custom_nodes
git clone https://github.com/T8mars/comfyui-minimax-h3-audio-T8.git minimax-h3-audio-T8
Restart ComfyUI completely - node registration happens at Python import, so a browser refresh alone won't do it - then reload the page.
No pip packages are installed by the pack: requirements.txt is deliberately inert so it can never swap your Torch/CUDA. You do need a current ComfyUI with native H3 support and the H3 model set in place, plus your own learned 3D latent upscaler for the lift step.
Where people get burned
Reusing the LOW noise seed. It "works" - you get output - but you've broken the noise policy the route was validated with, which shows up as inconsistent grain or an oddly over-sharp seam rather than a crash. LOW seed + 1 is a one-character fix.
Feeding the handoff a boundary and a lift output from different runs. Both carry identity; the node verifies rather than trusting you, and a mismatch is an error. Resist the urge to "just try it" by mixing an old saved LOW with a fresh upscale - that's the exact scenario the SHA-based save/load nodes exist to make impossible.
And don't mistake this for RF. The RF route has its own base/handoff/restart nodes with their own endpoint handling. They look similar on a canvas and they are not interchangeable; on H3, cross-wiring stage contracts is how you end up with an audio stream that quietly rescales.
The usual honesty note applies: full pretrained/effect/continuation qualification for the progressive route is explicitly listed as separate and outstanding. This node does its job mechanically; whether your particular model, LoRA and duration combination produces a good video is not something it claims.
Inputs (7)
| Name | Type | Default | Description |
|---|---|---|---|
| low_boundary | T8_PROGRESSIVE_LOW_BOUNDARY | — | |
| model | MODEL | — | |
| sampler | SAMPLER | — | |
| lifted_av | LATENT | — | |
| high_source | LATENT | — | |
| video_noise | NOISE | — | |
| high_sigmasopt | SIGMAS | — |
Outputs (3)
| Name | Type | Description |
|---|---|---|
| high_restart | T8_PROGRESSIVE_HIGH_RESTART | — |
| plan | T8_PROGRESSIVE_STAGE_PLAN | — |
| report_json | STRING | — |