MiniMax H3 Refine Pass
Upscale the video, leave the soundtrack alone
- model
- positive
- negative
- latent
- LATENT
There are two ways to get a higher-res H3 render: sample big and slow, or sample fast at the native canvas and let a second pass refine. MiniMax H3 Refine Pass is the second option - the "two-pass" that the Creator's upscale: "two_pass" setting turns on. It takes the first pass's sampled AV latent, upscales the video half, and re-samples it partway down the schedule while leaving the soundtrack un-noised.
It's an MiniMax/internal node, written into the graph by the renderer (render.emit) when two-pass output is on. You set it from the Creator UI, not by hand.
How it works
H3's latent is a nested pair - video and audio, sampled together. Refine Pass unpacks it, upscales only the video half to your target width/height (bicubic, in latent space), and keeps the audio half untouched. Then it re-samples: how far down the schedule is the denoise (default 0.5), and there's a clever bit - the audio enters the first step pre-divided by (1 - starting sigma) so the zero-noise lerp puts it back exactly where the first pass left it. The soundtrack survives the refinement intact; only the picture gets the second opinion.
denoise is the whole game here, and the tooltip is blunt about the edge: it must stay strictly under 1.0. At 1.0, nothing of the first pass survives and the audio compensation divides by zero-ish math that breaks the carry-through. If the first pass is good, 0.5 keeps its structure while sharpening detail; push toward 0.7–0.8 and you're essentially re-generating, which defeats the point.
Inputs and output
model,positive,negative- the sampler stack, re-run at the higher resolution.latent- the first pass's sampled AV latent, at the native canvas. That detail matters: this node upscales from native, so feed it the native-res pass, not something already scaled.width/height- the target, defaults 1344×768. These are the resolution you're refining to.seed,steps(20),cfg(1.0),sampler_name,scheduler- the refinement sampler. Defaults match the main H3 recipe (res_multistep, simple).denoise- 0.5 default, the schedule slice described above.
Output is a single LATENT - the refined AV pair, ready to go through the reel node's decode like any other pass.
Why you'd use it
Two-pass exists for the classic hires-fix reason: sampling natively at 768 is fast, and refining a good base up to 1344 costs far less than sampling 1344 from scratch. On H3's heavy 33B transformer, that difference is real wall-clock time, and it's the reason the Creator offers it as the default upscale mode. It's also the only sane way to get detail on cards that don't fit 768p comfortably. Just keep denoise in the sensible band - the whole design assumes the first pass is worth keeping. Install is the shared pack install: ComfyUI Manager → search "H3 Creator Palette", or git clone https://github.com/z3rofeels/ComfyUI-H3-Creator-Palette into custom_nodes/, restart, hard-refresh. ComfyUI 0.34.0+ required.
Inputs (12)
| Name | Type | Default | Description |
|---|---|---|---|
| model | MODEL | — | |
| positive | CONDITIONING | — | |
| negative | CONDITIONING | — | |
| latent | LATENT | The first pass's sampled AV latent, at the native canvas. | |
| width | INT | 134432–8192 | — |
| height | INT | 76832–8192 | — |
| seed | INT | 00–18446744073709550000 | — |
| steps | INT | 201–200 | — |
| cfg | FLOAT | 1.000–30 | — |
| sampler_name | COMBO | 44 options: euler, euler_cfg_pp, euler_ancestral, euler_ancestral_cfg_pp, heun, heunpp2, +38 | |
| scheduler | COMBO | 9 options: simple, sgm_uniform, karras, exponential, ddim_uniform, beta, +3 | |
| denoise | FLOAT | 0.500.01–0.99 | How much of the schedule the refinement runs. Strictly under 1.0: at 1.0 nothing of the first pass survives, and the audio carry-through divides by (1 - the starting sigma). |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| LATENT | LATENT | — |