AD_MinMax_Ref2_generate_refine
The low-noise detail pass your MiniMax H3 video is missing
- context
- stage_info_data2
- sigmas
- refined_latent
- segment_video
- merged_video
Let's be straight about what this node is before you go hunting for it: AD_MinMax_Ref2_generate_refine is not a standalone sampler you drop into any graph. It's one leg of a specific, multi-stage way of running MiniMax H3 (the open 33B omni-modal video model) inside ComfyUI-Apt_Preset - the "generate a long scene in stages, then refine" workflow the pack's author has been building toward all year. If you found this page, you're probably already running that workflow and wondering what the second half of it actually does.
The two-pass idea
The short version: your first pass (AD_MinMax_Ref2_generate, or the FL2 variant) produces structure - composition, motion, the rough idea. This node takes that finished first-pass latent and runs one more low-noise sampling pass on top of it to put detail back in. It's not a re-roll. The tooltip on refine_mode says it plainly: "Initialize this one low-noise pass from the current first-pass latent." Same seed, same conditioning, far fewer steps, very low denoise. That's the whole trick - you're sharpening, not reimagining.
refine vs latent_scale
Two modes under refine_mode:
refine(default) - resamples the first-pass latent at low denoise with a short step count.refine_denoisedefaults to 0.3,refine_stepsto 8. That's the standard "detail restoration" shape: enough noise to re-draw textures, not enough to change what's happening.latent_scale- for when you also want more resolution, not just more detail. It splits the full sigma schedule atlow_sigma_start_step, upscales the first-pass latent bylatent_scale(1.3 default, up to 4x) using a MiniMax H3 latent upscaler frommodels/latent_upscale_models, then samples only the low-sigma tail of the schedule. The high-sigma half already ran in the first pass.
There's also refine_model, an optional image upscaler (models/upscale_models) that takes the decode → upscale → re-encode route instead of working purely in latent space. The author's advice, baked into the tooltip, is to leave it on None or use a 1x model if you're chaining multiple stages - a pixel-space round trip can break the latent continuity that multi-stage generation depends on.
The inputs you'll set
The inputs you'll actually touch day to day: refine_mode, refine_denoise, refine_steps, and (only in latent_scale mode) latent_scale and low_sigma_start_step. The rest is context. motion_context (None / 22 / 39) decides whether the previous stage's refined tail frames are chained into this one for motion continuity - 22 frames is the default and the sane place to start. fps matches your first pass.
Wiring and outputs
Wire-up matters more than sliders here. context must be a RUN_CONTEXT coming off the same stage's first-pass node, and stage_info_data2 is the FLOW_STAGE_INFO carrying the previous stage's refined latent. Skip that and you get a deliberate, readable error - the node checks that stage indices line up, that the data2 channel actually holds a refined latent, and that the model/VAE/audio-VAE are present in context. If you're on stage 1 there's no previous refined segment, and that's fine; if you're on stage 3 and the data2 latent is missing, it raises rather than silently producing a jump cut.
Outputs: refined_latent (a LATENT tagged with the export tail and seed - this is what the next stage consumes, or what goes into your flow's data2 channel), segment_video (just this stage's trimmed clip), and merged_video (the running join so far). The boundary between stages gets repaired and the context-overlap frames trimmed before you ever see the video.
Installing it
Install is the whole-pack route: clone the repo into custom_nodes, double-click install.bat for the dependencies (it's a fat list - pandas, scipy, onnxruntime and friends - and only installs what's missing), restart ComfyUI.
git clone https://github.com/cardenluo/ComfyUI-Apt_Preset.git
ComfyUI Manager also finds it if you search "ComfyUI-Apt_Preset". Budget for the H3 model plus its separate video and audio VAE checkpoints plus, if you use latent_scale, an H3 latent upscaler - this node pulls none of those out of thin air. And remember the H3 community licence excludes the US, EU, UK and South Korea from running the local weights; if that's you, none of this runs at all, no matter how well you wire it.
One honest warning: this is the newest, least-tested corner of the pack (the staged-loop nodes landed around September 2026 and the README is CN-first). Expect rough edges. But the idea - separate the expensive structural pass from a cheap low-noise detail pass so you can chain long scenes without blowing VRAM - is sound, and it's the reason people tolerate the setup cost.
Inputs (12)
| Name | Type | Default | Description |
|---|---|---|---|
| context | RUN_CONTEXT | — | |
| stage_info_data2 | FLOW_STAGE_INFO | — | |
| fps | FLOAT | 241–120 | — |
| motion_context | COMBO | 22 | 3 options: None, 22, 39 |
| refine_mode | COMBO | refine | Initialize this one low-noise pass from the current first-pass latent. |
| refine_model | COMBO | None | Optional image upscaler before the second pass. None resamples the first-pass latent directly. Use None or a 1x model for multi-stage latent continuity. |
| refine_denoise | FLOAT | 0.300–1 | Denoise strength for the second sampling pass. |
| refine_steps | INT | 81–10000 | Number of steps for the second sampling pass. |
| latent_model | COMBO | (place MiniMax H3 3D models in models/latent_upscale_models) | 1 options: (place MiniMax H3 3D models in models/latent_upscale_models) |
| latent_scale | FLOAT | 1.301–4 | MiniMax H3 latent upscale multiplier between the two sigma ranges. |
| low_sigma_start_step | INT | 40–10000 | Start the latent-scale refinement from this step of the full sigma schedule; the first pass has already completed its full schedule. |
| sigmasopt | SIGMAS | — |
Outputs (3)
| Name | Type | Description |
|---|---|---|
| refined_latent | LATENT | — |
| segment_video | VIDEO | — |
| merged_video | VIDEO | — |