MiniMax H3 Easy Second Pass Conditioning
The node that fixes the keyframe mess in H3 two-pass upscaling
- h3_context
- second_pass_video_latent
- second_pass_positive
Why H3 refinement is harder than it looks
The standard way to get a better video out of a diffusion model is a two-pass: render low and fast, then re-encode at a higher resolution and sample again at low denoise. With H3 that plan trips over the keyframes. In I2V and first/last-frame modes, the model's conditioning is built from keyframe images that were resized and VAE-encoded to match the first pass canvas. Reuse those latents at a different resolution and you get a row-count mismatch - the model expects keyframes at the new latent size, and the old ones don't fit. The naive fix (reuse first-pass latents) is exactly wrong.
MiniMaxH3EasySecondPassConditioning exists to rebuild that conditioning correctly for a resolution-changing second pass. It's the node the pack's included MiniMax_H3_Easy_Pass2.json uses to make two-stage H3 refinement work, and without it the pass-2 story falls apart.
Inputs
h3_context- from MiniMax H3 Easy. This carries the original conditioning, the keyframe sources and the H3 video VAE.second_pass_video_latent(LATENT) - the video-only latent from the second pass'sVAEEncode, before it gets joined with audio. It must be the 24-channel video latent; feed it the combined AV latent and the node errors on purpose, because it can't rebuild keyframes from something that already merged the audio track back in.
Output
second_pass_positive(CONDITIONING) - connect to the second pass'sBasicGuiderin place of the original positive. Everything downstream is stock ComfyUI.
How it works
For text-to-video and pure reference generation there are no keyframes to rebuild, so the node copies the existing conditioning through unchanged, preserving any mode-specific metadata. The interesting path is I2V and first/last-frame: it reads the second-pass latent's dimensions, resizes each original keyframe image to that actual canvas (centered crop, same as the first pass uses), and re-encodes it with the H3 video VAE so the keyframe latents land at exactly the new latent resolution. Text conditioning, reference blocks in minimax_refs, token tags and frame indexes are all carried across. In short: same content, new pixel size, no row-count mismatch.
One caveat that bites: rebuilding needs the original keyframe source images, not just the first-pass latents. If the Easy node's context no longer holds them - say you reran a modified graph - the node raises "run the Easy node again" rather than guessing. Keep the first-pass branch alive and wired; this node reads its context.
Wiring it into the pass-2 graph
The included workflow chains: first pass with the Easy loader and Turbo LoRA → split the AV latent with LTXVSeparateAVLatent (that's the LTX-V helper this pack leans on) → decode and resize only the video with ImageResizeKJv2 → VAEEncode at the independent pass-2 megapixel target → MiniMaxH3EasySecondPassConditioning → rejoin video and the original audio latent with LTXVConcatAVLatent → second sample. The starting values are 8 steps full-denoise for pass 1 and 3 steps at 0.25 denoise for pass 2, using a smaller pruned W4A8 transformer for the refinement. Those are presets, not rules - but the second-pass transformer has to support the conditioning mode you're running, so a reference-mode pass-2 needs a Ref2VA-capable model.
Install
Same pack, same story:
cd ComfyUI/custom_nodes
git clone https://github.com/nkxx188/ComfyUI-MiniMaxH3-Easy
or search "MiniMax H3 Easy" in ComfyUI Manager, then restart. The pass-2 workflow additionally needs ComfyUI-KJNodes, VideoHelperSuite, Memory_Cleanup and Easy-Use (all in ComfyUI Manager), plus the pruned W4A8 model and Turbo LoRA. The ratio is kept in sync automatically by MiniMax H3 Easy Aspect Ratio, so the pass-2 composition matches the first pass while its pixel budget stays its own.
Inputs (2)
| Name | Type | Default | Description |
|---|---|---|---|
| h3_context | MINIMAX_H3_CONTEXT | — | |
| second_pass_video_latent | LATENT | — |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| second_pass_positive | CONDITIONING | — |