MiniMaxH3LatentLabRefineSigmas
Cut your sigma schedule in two so the refine tail doesn't fight the base pass
- sigmas
- main_sigmas
- refine_sigmas
- total_steps
- switch_step
- refine_steps_effective
- report
The Long Media Sampler's recommended production setting is refine_enabled with 2 refine steps: run the main denoise pass, then a few extra low-noise steps to polish detail. The trick is that "extra steps" isn't magic - it's a sigma-schedule surgery. Something has to take your connected SIGMAS and split them into a main chunk and a refine tail, or the sampler would just re-run the whole schedule. RefineSigmas is that splitter, exposed as a standalone node for people building the two-stage flow by hand.
What it does
Two inputs, six outputs:
sigmas- your full schedule (from any sigma scheduler).refine_steps(default 2) - how many of the final low-noise steps get carved off as the refine tail.
Outputs:
main_sigmas- the bulk of the schedule, up to the split point.refine_sigmas- the low-noise tail.total_steps,switch_step- where the split landed in step terms.refine_steps_effective- what the refine tail actually contains (the effective count, since schedules are discrete).report- a JSON breakdown: sigma values at the start and end of each half, the scheduler source, and the intervals math.
Wire main_sigmas into the main sampling stage, refine_sigmas into the refine stage, and you've got a faithful base/refiner split without running the same denoise twice.
The honest caveats
Two things the output report makes explicit. First, main_return_with_leftover_noise is true - the main pass hands off with leftover noise rather than a fully clean latent, which is what makes the refine a continuation rather than a fresh generation. Second, refine_add_noise is false - the refine stage adds no fresh noise. It continues the same trajectory. That's the whole philosophy of the pack's refine: it's the tail of one schedule, not a separate seed'd pass. If you were imagining refine-as-second-seed, this node is the reality check.
When to use it
You normally don't. The Long Media Sampler does this split internally whenever refine_enabled is on, and its refine_steps input is the same knob. This node exists for the manual diagnostic route - building the two-stage sampler graph explicitly, feeding main_sigmas and refine_sigmas into two sampling stages, and inspecting the split with the report when you're debugging why your refine tail isn't doing what you expected. It's also handy for A/B testing: run with refine at 2 steps vs 4 and the report tells you exactly how many low-noise steps each actually ran.
Install
Ships in ComfyUI-MiniMax-H3-LongMedia. Manager search "MiniMax-H3-LongMedia", or:
cd ComfyUI/custom_nodes
git clone https://github.com/vizart-vj/ComfyUI-MiniMax-H3-LongMedia
restart, with the H3 weights available for the sampling that follows (MiniMaxAI/MiniMax-H3, ~42.5 GB, community license excludes US/EU/UK/Korea).
Troubleshooting
If refine_steps_effective comes back smaller than you asked, your full schedule was too short to carve off that many low-noise steps - raise total steps or lower refine_steps. If the refined output looks unchanged, check that refine_sigmas is actually feeding a second sampling stage and that you're not just discarding it. And if the seam between main and refine shows a jump, remember this node is only the schedule splitter - the seam protection lives in ProtectRefineAV, which is the other half of this two-stage pipeline.
Inputs (2)
| Name | Type | Default | Description |
|---|---|---|---|
| sigmas | SIGMAS | — | |
| refine_steps | INT | 21–1000 | — |
Outputs (6)
| Name | Type | Description |
|---|---|---|
| main_sigmas | SIGMAS | — |
| refine_sigmas | SIGMAS | — |
| total_steps | INT | — |
| switch_step | INT | — |
| refine_steps_effective | INT | — |
| report | STRING | — |