Nodes/ComfyUI_JR_MiniMaxH3Node/JR MiniMax H3 Neural Latent Upscaler
ComfyUI Node

JR MiniMax H3 Neural Latent Upscaler

Upscaling H3 in latent space, the honest way (neural checkpoint required)

By Goldlionren·Created 21 days ago·Updated about 9 hours ago· 28
JR MiniMax H3 Neural Latent Upscaler
  • video_latent
  • video_latent
  • status
resize_modescale
scale1.50
target_megapixels2.00

Pixel-space upscaling of a 24fps video is a slog: decode, upscale every frame, re-encode, and eat the artifacts. The JR MiniMax H3 Neural Latent Upscaler takes the smarter route - upscale the video latent before it ever reaches the VAE. You sample once at a modest resolution, run this node on the video latent stream, then pass-2 sample at the higher latent resolution for detail the first pass never had. It's the two-pass latent upscaling pattern that's become standard for big video models, applied to H3's specific latent layout.

The mechanism: the node discovers H3's 16× VAE spatial compression and the DiT's 2×2 patching from ComfyUI's native H3 classes, so its output is guaranteed to land on the right alignment (latent dims divisible by 2, pixel dims by 32). Internally it runs a user-supplied H3-specific 3D neural checkpoint over the video latent - B/C/T, input dtype/device, and LATENT metadata are all preserved - and it processes long latents in temporal chunks, but it never does temporal interpolation. After inference it uses ComfyUI's model-specific unload API to drop the upscaler from GPU rather than nuking everything with a global unload.

The two resize modes

  • scale - linear multiplier on both width and height. 1.5x ≈ 2.25× the pixel area (a ~0.9MP one-pass result becomes ~2.0MP).
  • megapixels - target the pixel-space MP you want after VAE decode, keeping your aspect ratio and picking the closest legal size. Want a 2.0MP result? Say so directly.

The README's example: sample at 0.9MP, use scale=1.5 → about 2.0MP, or skip the math and set megapixels=2.0 directly.

The catch that's actually the point

It needs an H3-specific 3D neural checkpoint placed in ComfyUI/models/latent_upscale_models/. The node does not download one and it will not silently fall back to nearest/bilinear/bicubic when one is missing - it errors clearly. If you see a missing-model error, that's the fix: put a compatible checkpoint in that folder. Check the checkpoint's own license; a 3D latent upscaler for H3 is a distinct artifact from the base model weights.

Install & wiring

cd ComfyUI/custom_nodes
git clone https://github.com/Goldlionren/ComfyUI_JR_MiniMaxH3Node
<your-comfyui-python> -m pip install -r ComfyUI_JR_MiniMaxH3Node/requirements.txt

or ComfyUI Manager → search ComfyUI_JR_MiniMaxH3Node. Input is a plain H3 video LATENT ([B,24,T,H,W]) - so in a full AV workflow you split first: AV latent → Split AV Latent → video_latent → this node, then rebuild with the untouched audio stream via the AV Latent Builder. Outputs: upscaled video_latent plus a status string.

Troubleshooting

  • "No latent upscaler model" - you didn't drop the checkpoint in models/latent_upscale_models/, or it's not the H3-specific 3D type. There is no fallback path by design.
  • Re-feeding the packed AV latent errors - this node only accepts the plain video latent. Split it first.
  • No visible quality gain - latent upscaling preserves what the first pass had; if pass one was too low-res to hold detail, start higher. The pack's own field notes suggest ~0.6MP as a rough floor for a decent upscale source, an experience-based guideline rather than an official limit.
CategoryJR MiniMax H3/Latent

Inputs (4)

NameTypeDefaultDescription
video_latentLATENT
resize_modeCOMBOscale2 options: scale, megapixels
scaleFLOAT1.501–4
target_megapixelsFLOAT2.000.01–64

Outputs (2)

NameTypeDescription
video_latentLATENT
statusSTRING