JR MiniMax H3 Progressive Guided Sampler (Experimental)
JR MiniMax H3 Progressive Guided Sampler
- model
- positive
- noise
- sampler
- sigmas
- latent_image
- vae
- output
- status
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
vaefails 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=3of 8 turbo steps is three cheap evaluations plus the lift; the author's own 5090 note haslowres_scale=0.5roughly tying their old dual-sampling chain for speed, with0.6their preferred quality/adherence compromise once0.65started bending adherence. A/B againstlowres_scale=1.0before you believe any speed claim.
Inputs (11)
| Name | Type | Default | Description |
|---|---|---|---|
| model | MODEL | — | |
| positive | CONDITIONING | — | |
| noise | NOISE | — | |
| sampler | SAMPLER | — | |
| sigmas | SIGMAS | — | |
| latent_image | LATENT | Final-resolution empty H3 video + empty or fully locked audio. | |
| transition_step | INT | 31–10000 | Number of low-resolution denoiser evaluations; must be smaller than total steps. |
| lowres_scale | FLOAT | 0.500.25–1 | Spatial scale only. 1.0 bypasses the transition for a native Euler A/B baseline. |
| transition_seed_offset | INT | 10–18446744073709550000 | — |
| aggressive_memory_cleanup | BOOLEAN | false | — |
| vaeopt | VAE | Same H3 VIDEO VAE used for keyframes; required for their low-stage re-encoding. |
Outputs (2)
| Name | Type | Description |
|---|---|---|
| output | LATENT | — |
| status | STRING | — |