MiniMax H3 Latent Upscale
Bigger clips without a pixel upscaler in sight
- upscale_model
- latent
- conditioning
- latent
- conditioning
- width
- height
Here's the honest problem with running H3 on a Turing card: the model's native resolutions are heavy, and upscaling a decoded video is a separate, annoying project where every frame has to agree with its neighbors. MiniMax H3 Latent Upscale takes the third path - it enlarges the latent with a small learned upscaler before anything gets decoded, so you render at a modest size and let the upscaler carry you the rest of the way. This is the node that does the enlarging.
It's the second half of the pack's H3 upscale story: Load MiniMax H3 Latent Upscaler hands you the model, this node applies it.
How it works
The upscaler enlarges only the video stream - time and audio pass through exactly. The scale input is a total spatial pixel/token multiplier, and the tooltip is worth reading twice because the math isn't what you'd guess: 2.0 scales H/W by sqrt(2), and 4.0 scales H/W by 2. So it's a pixel-count multiplier, not a per-side multiplier. Output dimensions are rounded up to H3's 2x2 latent patch grid, and the node also reports the resulting aligned pixel width and height so you can wire them into your graph instead of guessing.
There's an optional CONDITIONING input for FL2AV keyframes: when you're conditioning with first/last frame latents, those get upscaled with the same learned model so they stay aligned with the enlarged video. Ref2AV image/video/audio references are left alone, and no text or VAE conditioning stage is rerun - it's a targeted, cheap operation.
The inputs that matter
- upscale_model - from the pack's loader. It's a custom type; nothing else plugs in here.
- latent - the H3 AV latent.
- scale - default
2.0. Remember the semantics: 2.0 ≈ 1.41x per side, 4.0 = 2x per side. Range 1.0–16.0, step 0.1, so it's a continuous dial, not a fixed ladder. - conditioning (optional) - FL2AV conditioning whose keyframe latents should follow the same upscale.
Outputs: latent (upscaled), conditioning (if you fed it, returned aligned), width, height (aligned pixel dimensions).
How to install
cd ComfyUI/custom_nodes
git clone https://github.com/wjie98/comfyui-svdint4
cd comfyui-svdint4
python -m pip install -v --no-build-isolation -e ./kernel
Plus the upscaler weights in models/latent_upscale_models/ (from LBH-123-AI/Minimax_h3_latent_Upscaler). Restart ComfyUI.
The honest take
This is the "render small, upscale latent, decode big" flow that gets H3 onto cards that could never touch native-resolution generation. The classic mistake is thinking scale is a per-side number and wondering why everything came out too wide - think of it as total pixels. And don't stack this node on top of itself; the latent upscaler is learned and expects H3 latents, so running it twice compounds distortion instead of doubling the benefit. One clean pass, then VAE decode.
Inputs (4)
| Name | Type | Default | Description |
|---|---|---|---|
| upscale_model | TURING_UTILS_H3_LATENT_UPSCALE_MODEL | — | |
| latent | LATENT | — | |
| scale | FLOAT | 2.01–16 | Total spatial pixel/token multiplier. For example, 2.0 scales H/W by sqrt(2), while 4.0 scales H/W by 2. Time and audio are preserved. Output H/W are rounded up to H3's 2x2 latent patch grid. |
| conditioningopt | CONDITIONING | Optional FL2AV conditioning whose first/last keyframe latents should follow the same spatial upscale. |
Outputs (4)
| Name | Type | Description |
|---|---|---|
| latent | LATENT | — |
| conditioning | CONDITIONING | — |
| width | INT | Aligned pixel width produced by the upscaled H3 video latent. |
| height | INT | Aligned pixel height produced by the upscaled H3 video latent. |