H3 RefMod Step Curve
Fade your reference in across denoising steps, not output frames
- model
- mods
- model
There are three different "curves" floating around the RefMod pack, and this node owns the one people usually mean when they say "I want the reference to kick in late." Apply H3 RefMod's curve_direction only shapes weight across the reference's own frames. H3 RefMod Step Curve is the other axis entirely: it re-mixes the ref latents per denoising step, over the actual generation timeline, by sitting between your model loader and the sampler.
Early steps (high sigma) set global structure and identity; late steps (low sigma) paint fine texture. So the same envelope vocabulary - constant, concept_at_start, concept_at_middle, concept_at_end, concept_at_ends - now means something about when during generation the ref is strong, which is the axis refs actually respond to.
How it works
The node takes a MODEL in and hands a cloned, wrapped MODEL out - wire it Load Model → H3 RefMod Step Curve → sampler model. It attaches a per-step mixing wrapper through ComfyUI's patcher-extension hooks (an outer-sample wrapper that records the run's schedule start plus a diffusion-model wrapper that applies the envelope, sharing a ContextVar so the two stay in sync). Each denoising step, the wrapper transforms the ref latents that are marked in the current payload; empty payloads pass straight through, and nothing is retained between calls, so chained Step Curve nodes compose cleanly instead of leaking state. If you set constant, that's effectively pure passthrough - nothing gets re-mixed.
The docstring is refreshingly careful about what this can't promise: early/late weighting can change the result, but there's no guarantee it isolates composition, identity, texture, or any particular semantic. Treat it as a lever, not a surgical tool.
Inputs that matter
- curve_direction -
constant(default) = full ref at every step.concept_at_startholds refs strong in the early steps then releases them;concept_at_endopens weak and locks full strength late (identity detail refined at the very end); middle and ends variants follow. Olddecrease/increasevalues still resolve. - curve_shape - how strength travels between endpoints: linear, ease, sigmoid/tanh, quadratic, cubic, exponential, stair, elastic, bump, dip.
- curve_value - the endpoint strength (both endpoints for
constant/at_ends, otherwise the named end). 1.0 = full ref there. - override - instead of the widgets, use a
step_curveconfig baked into a mod by Fix H3 RefMod Config. Needs the optionalmodsinput connected; falls back to the manual widgets with a console note if no mod carries one.
Install
ComfyUI Manager (search "ComfyUI-MiniMaxH3Mod") or clone into custom_nodes/:
cd ComfyUI/custom_nodes
git clone https://github.com/Luisacaotica/ComfyUI-MiniMaxH3Mod
Restart; the light deps (safetensors, numpy, Pillow) install via the Manager. You need real MiniMax H3 weights + its video VAE in a current ComfyUI - remember the community licence excludes the US, EU, UK and Korea from local weights.
Common issues
The most common mistake is expecting this node to place a concept at a time in the output video - it can't, and neither can Apply's curve; ref tokens aren't bound to output time. If you want "identity shows up at frame 40," neither curve is the tool. The other gotcha is that chained Step Curve nodes each attach their own wrapper (the code deliberately sequences a unique key per attach), so stacking two with opposite curves is valid - but check your console, because each attach prints what it did, and a workflow saved under old node names with decrease/increase values still needs a resolve pass. If nothing visibly changes at constant, that's expected - you asked for passthrough.
Inputs (6)
| Name | Type | Default | Description |
|---|---|---|---|
| model | MODEL | The H3 model to patch. Returned unchanged apart from the per-step ref-mixing wrapper. | |
| override | BOOLEAN | false | Use the step_curve fixed into a mod's own metadata (by 'Fix H3 RefMod Config') instead of the curve widgets. Needs the mods bundle connected to the optional 'mods' input below. Off (default) = use the manual widgets. If no mod carries a saved step_curve it falls back to the manual widgets and prints a note. |
| curve_direction | COMBO | constant | Strength envelope over the DENOISE timeline (the one temporal axis refs actually respond to): 'constant' (default) = full ref at every step — pure passthrough, nothing is re-mixed. 'concept_at_start' holds refs at full strength in the early steps (high sigma — composition and identity set first) and releases them toward the final steps (clean texture, no ref grain); 'concept_at_end' opens weak and locks full strength in the late steps (identity detail refined at the very end of denoising); 'concept_at_middle' peaks mid-denoise; 'concept_at_ends' holds the extremes and dips mid-denoise. Old 'decrease'/'increase' values still resolve. |
| curve_shape | COMBO | linear | How the per-step strength travels between its endpoints (linear / ease / sigmoid / tanh / quadratic / cubic / exponential / stair / elastic / bump / dip). Only matters when curve_direction != constant. |
| curve_value | FLOAT | 1.000–1 | Endpoint strength ('user input'): both endpoints for 'constant' and 'concept_at_ends', the start for 'concept_at_start', the end for 'concept_at_end', the mid peak for 'concept_at_middle'. 1.0 = full ref there. |
| modsopt | H3_REF_MODS | Optional bundle, only read when 'override' is on: the first mod carrying a saved step_curve config supplies this node's curve. Leave unconnected when override is off. |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| model | MODEL | — |