😺NKD Sigmas Equalize
Steps and how hard to equalize
- profile
- SIGMAS
- floats
If Sigmas Calibrate is the expensive half of this pack, Equalize is the free half - and the one you'll actually sit and play with. It takes the measured profile and hands you a SIGMAS tensor where the steps are distributed by how much the image is really changing, rather than by a formula someone picked for a different model family.
It's a separate node for a practical reason: calibrating is a full sampler run, rescheduling is arithmetic on a 50-float list. Split, the slow part stays cached while you A/B step counts in seconds.
How the redistribution works
The profile is the reference sigma list plus one measured change value per interval. Equalize weights each interval by delta ^ equalize, builds a cumulative curve of those weights, then drops steps sample points at even shares along it, interpolating inside whichever reference interval each point lands in. The endpoints are pinned - first reference sigma in, 0 out - so the sampler always gets a valid, strictly decreasing schedule.
That single exponent gives you the whole range:
equalize = 0- every weight becomes 1 and you get the reference scheduler merely resampled tosteps. Nothing changes; handy as a control.equalize = 1- points land at equal shares of total image change, so every step does the same amount of work. Equal arc length along the x0 path, independent of whichever scheduler you calibrated from.- In between - density is the per-step change raised to that power. The default
0.5is the soft version, and a sane starting point.
Why you don't just max it out
This is the part to understand before you crank the slider. Change is measured as latent RMS, where fine detail at low sigma is numerically tiny next to the early composition moves. Push equalize to 1 and the tail gets starved - the last few steps, the ones fixing hands and eyes, get no schedule room. The author says it plainly: start around 0.5 and compare.
Match it to your architecture, too. On flow-matching models the community verdict is that aggressive redistribution of denoising effort hurts - Karras and exponential failing universally across a thousand-image sweep is the same thing wearing a different name, because a straight trajectory has nothing to fix. On Flux or Z-Image I'd stay in the 0.2–0.5 band; keep the big values for SDXL-family models, where a reshaped curve was always doing real work.
Inputs and outputs
Three inputs, and only two of them need thought.
profile comes straight out of Calibrate. steps is the length of the schedule you get back - this is your actual step count now, so the sampler's own steps widget stops mattering. equalize is the 0-to-1 knob described above, in 0.05 increments.
On the output side, SIGMAS goes into the sigmas input of SamplerCustom or SamplerCustomAdvanced. A plain KSampler won't take it - no sigmas socket. And because you're supplying the schedule directly, whatever scheduler and step count are set on that sampler are decorative.
The second output, floats, is the same numbers as a plain float list. Less decorative than it sounds if you use the author's other packs - he wires float lists like this into per-step reference-weight ramps in NKD Klein Tools, so schedule and reference strength move together.
You can also feed SIGMAS into the Sigmas Curve node's optional reference_sigmas input and hit Match - your schedule appears as an editable ghost curve you drag by hand. Measure, equalize, redraw: that round trip is the most useful thing in the pack.
Install
Same pack, one install. ComfyUI Manager → search NKD Sigmas Curve → install → restart. Manually:
cd ComfyUI/custom_nodes
git clone https://github.com/Nekodificador/ComfyUI-NKD-Sigmas-Curve
No Python dependencies beyond what ComfyUI ships, no model downloads, no npm build - the JS widget comes pre-built in the repo. Python 3.10+ and a current ComfyUI, since it targets the V3 node API.
Where people get burned
- A
SIGMASinput overrides the sampler's scheduler - all of it. If you swapped in Equalize and your images look worse, don't start tuning the scheduler dropdown. It isn't being read. stepshere wins, and it interacts with everything. Going from 20 to 12 steps atequalize0.8 isn't "fewer steps," it's a different set of noise levels entirely. Change one knob at a time.- Sanity check first. Set
stepsequal to yourcalib_stepsandequalizeto 0 - you should get your reference scheduler back nearly unchanged. If not, the problem is upstream in Calibrate. - Watch the console. It prints the resulting sigmas and the before/after max/min ratio of per-step change, so you can see the flattening instead of guessing.
- Step-distilled models gain nothing here. Lightning, Turbo and DMD checkpoints are trained against one specific schedule; this won't improve them and can actively break them.
Inputs (3)
| Name | Type | Default | Description |
|---|---|---|---|
| profile | NKD_SIGMA_PROFILE | — | |
| steps | INT | 201–10000 | Steps of the output schedule |
| equalize | FLOAT | 0.500–1 | 0 = reference schedule as is · 1 = every step changes the image equally |
Outputs (2)
| Name | Type | Description |
|---|---|---|
| SIGMAS | SIGMAS | — |
| floats | FLOAT | — |