H3 Continuation · HIGH Handoff Only (T8 EXP)
Where the upscaled latent becomes something a sampler can finish
- prepared_phase
- low_boundary
- model
- sampler
- lifted_av
- video_noise
- high_sigmas
- high_restart
- plan
- report_json
Handoff nodes are the ones nobody thanks and everybody needs. This one does no sampling at all, and yet skipping it is the difference between a clean seam and a segment that looks like it was cut in with scissors. It exists because the thing the low pass produced and the thing the high pass needs are not the same object, even though both are "the video".
The problem it solves
Your low-resolution pass finished at step 4 of 8. Its output is clean video in model space plus an audio state. Then the learned 3D latent upscaler grew the video channels to the final canvas. What you now have is an upscaled latent with the wrong noise contract: the high pass cannot simply start descending on it, because the high pass is supposed to keep the accepted prefix of the parent clip clean and untouched, and only noise the fresh tail.
The handoff is where those decisions are made explicit. It pulls the video channels out of the lifted latent, draws fresh high-resolution video noise, restores the original AV coordinates and the clean-source masks, and freezes all of it into a typed restart object.
The bit that confuses everybody
In the older two-model long-video workflow, the continuation context was a latent that got re-noised, and people read "prefix" as "the first 22 frames get noised like everything else". That is not what happens here. The HIGH stage's clean prefix is the accepted picture, and the restart is only the tail. The author's description puts it in one line - HIGH's clean prefix is not the noisy restart - and it is worth reading twice, because if you go looking for noise on the context frames you will convince yourself the node is broken.
Inputs that matter
prepared_phase- the HIGH phase from the conditions node. LOW phases are rejected.low_boundary- the frozen output of the LOW sampler. This is the thing being handed off, not a scale-up.lifted_av- the LATENT from a genuine learned 3D latent upscaler, targeting that stage's output dimensions.modelandsampler- HIGH's own pair, independent of LOW's.video_noise- the NOISE object used for the high-resolution video renoise. The pack's original policy is seed = LOW seed + 1 modulo 2^64, so it is not arbitrary: wire a RandomNoise whose seed you have deliberately set, and check it. If you just drop a second random seed in, the boundary will disagree with the schedule.high_sigmas- optional. Supply it only if you are deliberately rebuilding the tail; if you do, it has to start at the frozen boundary value.
There are three outputs: high_restart (into the HIGH sampling node), plan (echoed, in case you wired the handoff into a branch that needs it), and report_json, which records the video-noise seed, the sampling-call count of zero, and the fact that no learned lift ran inside this node.
Wiring
Plan → conditions (low) → LOW sampler → lift → learned 3D upscaler → HIGH Handoff → HIGH stage → decode.
The channels are the point: the upscaler is external and selected by you. This pack does not download or substitute upscaler weights, and the upscaler is not an RGB model - Topaz or a pixel upscaler in this slot is a different pipeline and will not produce a latent the handoff accepts.
Installing it
cd ComfyUI/custom_nodes
git clone https://github.com/T8mars/comfyui-minimax-h3-audio-T8.git minimax-h3-audio-T8
Fully quit and restart ComfyUI afterwards. Manager search is "MiniMax H3 Audio T8". No pip install is needed: the pack's requirements.txt is deliberately empty so that adding it can never quietly replace ComfyUI's Torch or CUDA stack. You do need a recent Core with native H3 support and the H3 weights, Qwen encoder, video VAE and audio VAE in their standard folders.
Things that will bite you
The lift is the usual suspect. If your lifted_av came from a plain resized latent rather than the learned upscaler, the geometry check fails - which is better than it silently producing a mushy segment, but it does mean the error message shows up on the handoff node while the actual mistake is upstream.
Second: mixing schedules. The optional high_sigmas is for rebuilding this route's own tail. Pasting in a FastH3 distilled table or a HyperFlow split to "speed things up" is not supported here, and the pack's docs are blunt that these are different maths, not interchangeable settings. If you want FastH3's 8-step student, that is a separate set of nodes with its own checkpoints.
Third: if you set the HIGH sampler's seed to a different value from LOW's, that is fine for the sampler - but the video noise for the renoise is governed by video_noise, and the seed+1 policy is what makes two seeds line up. Change one and not the other and the seam tells you.
Inputs (7)
| Name | Type | Default | Description |
|---|---|---|---|
| prepared_phase | T8_CONTINUATION_PREPARED_PHASE | — | |
| low_boundary | T8_PROGRESSIVE_LOW_BOUNDARY | — | |
| model | MODEL | — | |
| sampler | SAMPLER | — | |
| lifted_av | 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 | — |