H3 Conditioning Sync From Latents
The node that rescales your reference images to match an upscaled H3 render
- original_latent
- upscaled_latent
- positive
- negative
- positive
- negative
- width
- height
- scale_x
- scale_y
H3 Conditioning Sync From Latents is the little compatibility shim that makes a deferred H3 upscale chain work without rerunning your reference pipeline. It's the kind of node you'll never touch during a first render and absolutely need the moment you try to upscale a scene - and it exists because upscaling a latent quietly invalidates every reference image you conditioned against.
Here's the situation. In the main chain you render at 960×544 (or whatever your Plan says) and condition with picture refs, keyframes and motion video. When you then run a second pass - the bundled Deferred Upscale + De-Rope workflow, say - the upscaled latent is a different pixel size, and often a different latent size, than the original. Feed the same conditioning back in and your minimax_refs and minimax_keyframes are now misaligned with the canvas. This node fixes exactly that.
How it works
You give it three things: the original latent (original_latent), the upscaled latent whose X/Y scale is the ground truth (upscaled_latent), and the original positive conditioning. It compares the two latents, computes the exact horizontal and vertical scale, and resizes the match-sized picture references and keyframes to line up with the new canvas. method picks the interpolation - bilinear is the default and the one you'll almost never change.
Two things it deliberately does not touch are worth knowing, because they stop you over-thinking it:
- Max-sized pictures stay at their core-defined geometry, since H3 caps those anyway. Resizing them would be pointless.
- Reference time and audio conditioning pass through untouched. The
positiveoutput is conditioning you can hand straight to a fresh Guider for pass 2 - the tooltips hammer this: build a new Guider from the returned conditioning rather than reusing the old one.
The motion_ref_mode enum is where the actual thinking happens. The default conditioning_policy just follows whatever the "Upscale Reference Conditioning" node decided, which is normally exclude_video_keep_audio - the pass-2 source latent already contains the generated motion, so the motion video presentation is dropped and a video-paired audio reference becomes audio-only. The explicit modes (keep_video_native, resize_video) exist for standalone A/B use. Leave it on conditioning_policy until you have a reason not to.
There's an optional negative input; if you connected one for the original render, connect it here too and it gets synchronized by the same scale. Outputs width, height, scale_x and scale_y are just diagnostics - handy if you're wiring an adaptive value elsewhere, but you normally ignore them.
Where it sits in the upscale graph
This is a pass-2 conditioning node, so it lives in the child upscale loop, not the main chain: the upscaled scene latent → this node → new Guider → sampler. One thing to note: a de-rope target may run a longer time axis than the original scene (de-roping re-times frames). Sync accepts that - it only cares about spatial geometry, and only the batch/video channels need to match.
Installing it
It ships in ComfyUI-MiniMaxH3-Contex-Loop. In ComfyUI Manager search "MiniMax H3 Contex Loop" and install, or clone manually from ComfyUI/custom_nodes:
git clone https://github.com/ethanfel/ComfyUI-MiniMaxH3-Contex-Loop.git
Restart ComfyUI. No models are bundled - you still need the MiniMax H3 weights (the MiniMaxAI/MiniMax-H3 repo on Hugging Face; mind the territory license, which excludes the US, EU, UK and South Korea). The node also needs a ComfyUI build with native Add Guide for MiniMax H3 (PR #15439).
Common issues
The most common failure is feeding it the wrong latents - pass the pre-upscale original as original_latent, not the source scene's sampled latent, or the scale math comes out wrong. And if your pass-2 colors look off because references were double-scaled, check that pictures rebuilt from a cache-v2 RGB master at the pass-2 canvas aren't being resized again; sync is meant to leave those alone. When in doubt, leave the defaults, connect positive and negative, and rebuild your Guider from the outputs.
Inputs (6)
| Name | Type | Default | Description |
|---|---|---|---|
| original_latent | LATENT | Original-resolution 24-channel H3 video latent whose conditioning will be synchronized. Its time may differ from a de-rope target. | |
| upscaled_latent | LATENT | Upscaled 24-channel H3 video latent. Its exact X/Y scale drives the conditioning resize; a dilated de-rope time axis is supported. | |
| positive | CONDITIONING | Original H3 conditioning containing minimax_refs and/or minimax_keyframes. Cached max pictures remain at their core-defined geometry. | |
| method | COMBO | bilinear | Spatial interpolation used for match-sized picture refs, eligible video refs, and keyframe latents. Max pictures, time, and audio are unchanged. |
| motion_ref_mode | COMBO | conditioning_policy | conditioning_policy automatically follows Upscale Reference Conditioning. Explicit modes are available for standalone/A-B use. |
| negativeopt | CONDITIONING | Optional negative conditioning. Use the returned negative when rebuilding a CFG Guider. |
Outputs (6)
| Name | Type | Description |
|---|---|---|
| positive | CONDITIONING | Positive conditioning with visual refs/keyframes synchronized to the upscaled latent. |
| negative | CONDITIONING | Negative conditioning synchronized by the same scale, when connected. |
| width | INT | Upscaled video width in pixels. |
| height | INT | Upscaled video height in pixels. |
| scale_x | FLOAT | Exact horizontal latent scale. |
| scale_y | FLOAT | Exact vertical latent scale. |