InverseSquaredScheduler
Spend your diffusion steps where the detail lives
- model
- SIGMAS
A scheduler decides where in the denoising process you spend your steps. Most stock schedulers spread them evenly or front-load them. InverseSquared does the opposite - it crams resolution into the end of the trajectory, when the model is locking in fine detail, and skims through the early composition-heavy steps. If you've ever felt like your last few steps do all the visible work, this is the scheduler that formalizes that feeling.
The name is the mechanism: it maps a linear step index t through (1 - t²)², then uses that to index into your model's own sigma grid. The result is a schedule that's fine-grained near the end and coarse at the start, built entirely from sigmas the model already knows - nothing invented, no extra model files.
Inputs and wiring
Three inputs, all boring:
model- the scheduler reads the sigma range from your model'smodel_sampling, so no separate config.steps(default 20, range 3–1000) - how many sigmas to emit.denoise(default 1.0) - drop below 1.0 for img2img-style short schedules; the node internally computes the full schedule then slices off the tail.
The output is a SIGMAS tensor, which gives you two ways to use it. In a KSampler you can't wire a SIGMAS input (it takes a scheduler name), so there the pack registers this same schedule as a string - just type or pick inverse_squared in the scheduler dropdown. If you're on a custom-sampling setup, wire the SIGMAS output into the scheduler input of SamplerCustom or its KSampler-advanced equivalents.
The honest take
Here's the caveat you need before you get excited: flow-matching models (Chroma, FLUX, SD3) have taught the community to be suspicious of aggressive sigma reshaping. Karras and exponential fail across the board on those architectures because they distort a near-straight trajectory. InverseSquared is a milder beast - it reshuffles which of the model's existing sigmas you visit rather than inventing new noise levels - but it's still a redistribution of effort. So treat it as a tool to A/B, not a default. On a fixed seed, compare it against the stock simple or normal schedules at the same step count, and keep whichever your eye actually prefers.
Installing
Part of the ComfyUI-ClybsChromaNodes pack, no dependencies:
cd /path/to/ComfyUI/custom_nodes
git clone https://github.com/Clybius/ComfyUI-ClybsChromaNodes.git
# restart ComfyUI
Or ComfyUI Manager → search "ComfyUI-ClybsChromaNodes". Once it's loaded, the inverse_squared name appears in every scheduler dropdown and the node sits under sampling/custom_sampling/schedulers.
One more thing
The same file ships PrintSigmas, a one-input debug node that prints whatever SIGMAS pass through it to the console and hands them on unchanged. If you're debugging a custom-sampling chain, drop it inline and look at the terminal - it's the cheapest way to see what your schedule actually contains.
Inputs (3)
| Name | Type | Default | Description |
|---|---|---|---|
| model | MODEL | — | |
| steps | INT | 203–1000 | — |
| denoise | FLOAT | 1.000–1 | — |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| SIGMAS | SIGMAS | — |