Nodes/ComfyUI-MiniMaxH3-Easy/MiniMax H3 Easy Second Pass Conditioning
ComfyUI Node

MiniMax H3 Easy Second Pass Conditioning

The node that fixes the keyframe mess in H3 two-pass upscaling

By nkxx188·Created 20 days ago·Updated a day ago· 548
MiniMax H3 Easy Second Pass Conditioning
  • 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's VAEEncode, 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's BasicGuider in 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 ImageResizeKJv2VAEEncode 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.

CategoryMiniMax H3 Easy

Inputs (2)

NameTypeDefaultDescription
h3_contextMINIMAX_H3_CONTEXT
second_pass_video_latentLATENT

Outputs (1)

NameTypeDescription
second_pass_positiveCONDITIONING