Nodes/ComfyUI_JR_MiniMaxH3Node/JR MiniMax H3 Progressive Guided Sampler (Experimental)
ComfyUI Node

JR MiniMax H3 Progressive Guided Sampler (Experimental)

JR MiniMax H3 Progressive Guided Sampler

By Goldlionren·Created about a month ago·Updated about 22 hours ago· 50
JR MiniMax H3 Progressive Guided Sampler (Experimental)
  • model
  • positive
  • noise
  • sampler
  • sigmas
  • latent_image
  • vae
  • output
  • status
transition_step3
lowres_scale0.50
transition_seed_offset1
aggressive_memory_cleanupfalse

MiniMax H3's whole trick is that text, images, video and audio share one context - which is exactly why a naïve "generate small first" sampler breaks. If you half the canvas, what happens to your reference image? To your first and last frame? To the audio you're driving the clip with?

JR MiniMax H3 Progressive Guided Sampler (Experimental) is the answer to that, and it's the version most H3 users actually want. Same trick as the plain Progressive Sampler - a few Euler evaluations at reduced spatial scale, a neural lift of the predicted clean video x0, then the rest of the same sigma schedule at full resolution - but the native minimax_refs, native minimax_keyframes and a fully locked audio branch all survive the transition.

How the guides survive the switch

  • Independent references (minimax_refs, e.g. from the native Reference-to-Video path) live on their own spatial grid. The low stage keeps their block structure, order, sizes and tensors untouched - they are not downscaled to the low canvas. Good for fidelity, bad for speed: reference tokens don't shrink with your target canvas, so a ref-heavy prompt barely benefits from the smaller draft.
  • Keyframes (minimax_keyframes, first/last frame) do share the target grid, so for the low stage the node decodes the clean keyframe latent with your video VAE, area-downscales in pixel space, and re-encodes it at the low canvas. The high stage then uses your original conditioning untouched - no upscaled approximation overwrites it. That round trip costs one generation of VAE loss.
  • Locked audio stays exact. With a fully locked audio mask (the JR Audio Driven Latent Builder's job), the low stage gets clean audio as its inpaint anchor, the transition re-anchors on that same clean audio rather than a noisy resume state, and the input audio latent comes out bit-for-bit intact.

You can combine all three, and the sampler will accept it. Whether your checkpoint was trained for that combination is another question, and sometimes the answer is no.

Inputs and outputs

Same shape as the plain Progressive Sampler: model, positive, noise, sampler, sigmas, latent_image, plus transition_step, lowres_scale, transition_seed_offset, aggressive_memory_cleanup. Two things differ. latent_image is documented as final-resolution empty H3 video + empty or fully locked audio - the video branch must be empty noise, the audio branch empty (generated) or locked (given). And there's a new optional vae: if you use video keyframes with lowres_scale < 1 you must connect the same H3 video VAE you encoded those keyframes with - not the audio VAE. It's only used for that low-stage re-encoding, and at lowres_scale: 1.0 it isn't touched.

transition_step (default 3) is how many evaluations run small; lowres_scale (default 0.5) is the spatial factor. Which is why lowres_scale: 1.0 is the right first move: a native Euler baseline with no upscaler and no re-encoding, proving the graph is correct before you chase speed. Outputs are output (the full-res H3 AV LATENT) and status, and the status string is the thing to read - it reports the grid change, per-stage evaluation counts, seeds, timings, how many refs and keyframe blocks it found, and whether audio ended up locked or generated.

Install

ComfyUI Manager → search ComfyUI_JR_MiniMaxH3Node, or clone and pip-install with the same Python that runs ComfyUI:

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

requirements.txt is one line, imageio-ffmpeg>=0.5. The optional RTX file installs nvidia-vfx and is only for the pack's post-processing node - irrelevant here. Restart ComfyUI and hard-refresh the browser afterwards.

The weight you can't skip lives in ComfyUI/models/latent_upscale_models/: a user-supplied H3 latent-upscaler checkpoint whose filename contains h3 and upscal (the community reference is LBH-123-AI/Minimax_h3_latent_Upscaler). Nothing downloads it, there's no interpolation fallback, and a missing file is a hard error. Upstream you need the matching H3 checkpoint for your mode: FL2VA for text/image-to-video with keyframes, REF2VA for reference-driven work.

Common issues

  • "Connect the same H3 VIDEO VAE used to encode keyframes … (not the audio VAE)." The pack runs a compatibility probe; a mismatched or absent vae fails closed instead of silently producing mush.
  • "Nonempty audio requires a fully locked audio mask from JR Audio Driven Latent Builder." You can't hand this node an audio latent and hope. Lock it, or leave it empty and let H3 generate audio.
  • Mask rejections. Video mask all ones; audio mask all zeros (locked) or all ones with empty audio. Soft or partial masks, hard-prefix continuation and an already-sampled video latent are refused - that's the legacy/sequential path.
  • Wrong sampler or schedule. Standard Euler with no churn, official RandomNoise or DisableNoise, and a full schedule from sigma 1 down to 0 with denoise 1. Anything else errors before sampling starts.
  • It didn't get faster. Count your refs and count how many steps are actually small. transition_step=3 of 8 turbo steps is three cheap evaluations plus the lift; the author's own 5090 note has lowres_scale=0.5 roughly tying their old dual-sampling chain for speed, with 0.6 their preferred quality/adherence compromise once 0.65 started bending adherence. A/B against lowres_scale=1.0 before you believe any speed claim.
CategoryJR MiniMax H3/Sampling

Inputs (11)

NameTypeDefaultDescription
modelMODEL
positiveCONDITIONING
noiseNOISE
samplerSAMPLER
sigmasSIGMAS
latent_imageLATENTFinal-resolution empty H3 video + empty or fully locked audio.
transition_stepINT31–10000Number of low-resolution denoiser evaluations; must be smaller than total steps.
lowres_scaleFLOAT0.500.25–1Spatial scale only. 1.0 bypasses the transition for a native Euler A/B baseline.
transition_seed_offsetINT10–18446744073709550000
aggressive_memory_cleanupBOOLEANfalse
vaeoptVAESame H3 VIDEO VAE used for keyframes; required for their low-stage re-encoding.

Outputs (2)

NameTypeDescription
outputLATENT
statusSTRING