ComfyUI Node

MMH3 Sample Params

Pack the Whole Two-Stage Sampler Setup Into One Node

By bbaudio-2025·Created 9 days ago·Updated 2 days ago· 0
MMH3 Sample Params
  • model_high
  • sigma_high
  • sampler_high
  • model_low
  • sigma_low
  • sampler_low
  • sample_params
cfg_high1.0
cfg_low1.0

Two-stage sampling is one of those things everyone ends up doing on video models and nobody enjoys wiring. The Wan 2.2 crowd landed on the same compromise: run the high-noise stage with your full-quality model, then take a cheaper path on the low-noise stage - speed LoRA, lower steps, different sampler - because the early steps decide composition, lighting and motion, and the tail is mostly cleanup. On H3 you can do the same, and this node is where those settings live.

It is a config node. It samples nothing. It bundles a HIGH stage and an optional LOW stage into one opaque sample_params object for MMH3 Temporal Extend Video.

How the two stages divide the work

Both stages are fed by a split sigma schedule - the high and low halves of a SplitSigmas node. The HIGH stage runs from sigma_max down to the split sigma with noise injection, exactly like the start of a normal generation. The LOW stage then runs from the split sigma to zero with no noise added, continuing from the HIGH stage's final x0 prediction rather than from the noisy trajectory.

That detail matters. At a nonzero sigma the sampler's trajectory still carries that sigma's noise, so it's a poor thing to hand off. The x0 prediction is the model's clean estimate, and in the frozen zones this pack creates via noise masks, x0 holds the pristine carried-over content. So the LOW stage re-noises that clean estimate to the split sigma (with seed + 1) and denoises it the rest of the way - the same idea as two chained SamplerCustom nodes on a split schedule, with the handoff done for you.

The inputs

Four are required and they're all HIGH stage: model_high, sigma_high, sampler_high, cfg_high. Feed the model from your H3 UNET loader (through whatever LoRA loader you use), sigma_high from the high output of SplitSigmas, sampler_high from a KSamplerSelect.

cfg_high applies when negative conditioning is connected. H3 turbo/step-distilled LoRAs are the common case here and they run at CFG 1, which is also the default - so if you never connect a negative prompt, leave it alone.

The optional half is the LOW stage: model_low, sigma_low, sampler_low, cfg_low. This is where you make the cheap-vs-quality decision, and it's a genuinely useful one on H3: high stage on the full model, low stage with a speed LoRA or a different sampler. cfg_low defaults to cfg_high when you leave it unconnected.

Two rules, both enforced:

  • All three low inputs together, or none. Connect model_low without sigma_low and you get a validation error telling you exactly that. Leave all three unconnected and the bundle simply carries no LOW stage - a perfectly valid, HIGH-only setup.
  • The split sigma must be shared. sigma_low's first sigma has to equal sigma_high's last, which is what you get for free by using both outputs of one SplitSigmas. Get it wrong and the run stops with a message naming both values and suggesting SplitSigmas.

The single output is sample_params, a custom MMH3_SAMPLE_PARAMS link. It goes into the Extend Video node's sample_params input, or into its optional 2nd_sample_params if you're setting up the refinement pass.

Wiring it in practice

A minimal H3 pattern: UNETLoader → (optional LoraLoaderModelOnly) → BasicSchedulerSplitSigmas, with a KSamplerSelect for the sampler. On H3 you also want the flow-matching sigma shift handled - the pack's example workflow uses ComfyUI's MiniMaxH3SigmaShift and sa_solver. Then feed HIGH the model/sampler/high sigmas, and LOW the other model/sampler plus the low sigmas.

This follows the plumbing convention that runs through most utility packs: bundle the values once and send them down one wire instead of dragging model, sampler, sigmas and cfg across the canvas repeatedly. The cost is opacity - you can't inspect the bundle on the link - so when a run behaves oddly, check that both sigma halves really came from the same SplitSigmas node.

Install

ComfyUI Manager → search Comfyui-MMH3-UltimateExtend → install → restart, or:

cd ComfyUI/custom_nodes
git clone https://github.com/bbaudio-2025/Comfyui-MMH3-UltimateExtend

No pip install step; the pack has no Python dependencies of its own. You need a ComfyUI new enough to include MiniMax H3 support and the comfy_api.latest node schema, and you need H3 weights plus the video/audio VAEs from the usual ComfyUI model folders - the H3 weights themselves are geofenced by MiniMax's community licence (no US, EU, UK or South Korea).

Two errors worth knowing in advance

model_low / sigma_low / sampler_low must be connected together, or all left unconnected to skip the LOW stage. - you connected two of three. Also note you can't "half enable" the LOW stage by connecting only a model: it silently isn't a LOW stage unless all three are there.

sigma_low's first sigma does not match sigma_high's last sigma (0.48 vs 0.52) - use SplitSigmas so both schedules share the split sigma - you built two separate schedulers and they don't agree at the seam.

One expectation to set: the LOW stage is a continuation, not a second opinion. A low stage with a wildly different sampler and CFG will visibly fight the high stage's x0 rather than refining it - the pack treats LOW as a way to change cost, not to change look.

Categorymodel/latent/minimax

Inputs (8)

NameTypeDefaultDescription
model_highMODELDiffusion model for the HIGH stage (noise injection, sigma_max -> split sigma).
sigma_highSIGMASSigma schedule for the HIGH stage - e.g. the 'high' output of SplitSigmas; its LAST sigma is the split sigma.
sampler_highSAMPLERSampler for the HIGH stage.
cfg_highFLOAT1.00–100CFG of the HIGH stage (applies when negative conditioning is connected).
model_lowoptMODELDiffusion model for the optional LOW stage (no noise added, split sigma -> 0). ALL THREE low inputs must be connected together to enable the LOW stage.
sigma_lowoptSIGMASSigma schedule for the optional LOW stage - e.g. the 'low' output of SplitSigmas; its FIRST sigma must equal sigma_high's last (split) sigma.
sampler_lowoptSAMPLERSampler for the optional LOW stage.
cfg_lowoptFLOAT1.00–100CFG of the LOW stage (applies when negative conditioning is connected). Defaults to cfg_high when unconnected.

Outputs (1)

NameTypeDescription
sample_paramsMMH3_SAMPLE_PARAMSConnect to the 'sample_params' input of 'MMH3 Temporal Extend Video'.