MiniMax H3 Conditioning Upscale
The easy node to forget when you upscale MiniMax H3
- conditioning
- CONDITIONING
MiniMax H3 Conditioning Upscale is the bookkeeping half of rockerBOO's h3-latent-upscaler two-pass pipeline, and it's the node people skip because nothing seems to happen when they wire it. It exists so the thing you'd never think about - the reference images and keyframes riding inside your CONDITIONING - keeps working after you make the video canvas bigger.
Here's the setup. H3 workflows like MiniMaxH3ReferenceToVideo (ref2va) or MiniMaxH3ImageToVideo don't just hand the model a text embedding. They stuff visual latents into the conditioning's metadata - under keys like minimax_refs and minimax_keyframes - so the model can attend to your reference images and keyframes while it generates. Those latents are encoded at whatever resolution you supplied. Now upscale your pass-1 video latent with MiniMaxH3LatentUpscale, and suddenly the conditioning is full of images encoded for a smaller canvas than the one the model is about to denoise. The references render at the wrong relative scale, and the token layout stops lining up with the RoPE rows of the grown frame. Result: pass 2 ignores your references or mangles them.
This node exists to stop that. It walks the conditioning, finds any minimax_refs / minimax_keyframes visual latent blocks, and upscales them with the same interpolator and scale you applied to the video. It updates the latent dimensions alongside, and it leaves audio-kind blocks alone. Cleanest part: if neither key is present - say you're on a plain text-to-video graph - it's a no-op that passes the conditioning through untouched. The pack's README says outright: leave it wired even for t2va graphs, because it costs nothing when there's nothing to do.
Inputs and output
conditioning- your pass-1 CONDITIONING, the same one that fed the pass-1 guider.scale_by- default1.5. Set this to exactly the same value as the pairedMiniMaxH3LatentUpscalenode. They must track each other or the whole point is lost.upscale_method- defaultbilinear. Same rule: mirror the paired node.- Output: CONDITIONING - feed this into a fresh
BasicGuiderfor pass 2. That last step matters and is easy to trip over: the code clones the conditioning, and the README is explicit that you must rebuild the guider from the returned conditioning rather than reusing the one built on the pre-upscale version. A stale guider is carrying the old-shape condition around anyway.
Installing and the usual traps
Same as the rest of the pack - ComfyUI Manager search for h3-latent-upscaler, or:
cd ComfyUI/custom_nodes
git clone https://github.com/rockerBOO/h3-latent-upscaler
restart, done. No pip dependencies. You do need a ComfyUI new enough to have core H3 support (the pack's nodes import comfy.ldm.minimax and use the comfy_api.latest extension API); if nothing from the pack shows up after install, update ComfyUI first.
If your pass-2 output looks like the model forgot your reference entirely, or the reference subject drifts between the two passes, your first suspect is a mismatch: MiniMaxH3ConditioningUpscale's scale_by / upscale_method don't match the MiniMaxH3LatentUpscale next to it. It's the most boring failure in the workflow and the one everyone hits. Second suspect is reusing a pass-1 guider instead of rebuilding it from the upscaled conditioning. Both are five-second fixes. The full two-pass graphs in the repo's example_workflows/ folder show the wiring if you'd rather not rebuild from scratch.
Inputs (3)
| Name | Type | Default | Description |
|---|---|---|---|
| conditioning | CONDITIONING | — | |
| scale_by | FLOAT | 1.500.01–8 | — |
| upscale_method | COMBO | bilinear | 5 options: nearest-exact, bilinear, area, bicubic, bislerp |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| CONDITIONING | CONDITIONING | — |