Sigmoid Offset Scheduler
The S-curve that made Chroma sing
- model
- SIGMAS
Some models just don't like a plain linear schedule. UC_SigmoidOffsetScheduler builds a sigmoid-shaped denoising curve - gentle at the start, aggressive in the middle, gentle at the end - with two knobs to shape how sharp and where the action sits. It was built for the Chroma model, and it's a great reminder that the noise schedule is a real creative input, not just a sampler's behind-the-scenes detail.
The mechanism
A scheduler decides how much noise to remove at each step. Linear removes a constant amount; Karras concentrates the work in the middle. Sigmoid offset is another member of that reshaped-curve family: it produces an S-curve over the denoising trajectory, so the first and last steps make only small changes while the middle steps do the heavy lifting. The shape is controlled by two inputs:
square_k(0–10, default 1) - the sharpness of the transition. Higher values make the denoising transition sharper, closer to a step function.base_c(−5 to 5, default 0.5) - where the curve sits. Negative shifts more denoising early, positive pushes it later.
There's also start_sigma (0–1, default 1), which adjusts the initial denoising strength - 1 leaves it unchanged, and per the pack README this scheduler "retains its model-specific start_sigma adjustment," so it's tuned per model rather than being a global denoise. steps defaults to 30 (range 1–10000), and the node takes a model input because it reads the model's own model_sampling object to build a schedule calibrated to that checkpoint's sigma range - you can't just guess sigmas for a model you haven't inspected.
Output is a single SIGMAS feed, wired into SamplerCustom or any custom-sampling chain (ModelSampling → this → SamplerCustom). For img2img, drop UC_SigmaRescale after it to set your start noise level.
When to reach for it
The README is blunt about provenance: originally made for Chroma. If you're on a flow-matching or Chroma-family checkpoint and a straight schedule leaves you wanting more mid-trajectory definition - or you're chasing that particular look - this is the knob. It's a niche tool, honestly; if you don't have a model that rewards a reshaped curve, the default linear schedule is fine and you're not missing anything. But when a model "feels" wrong at low steps, trying a sigmoid offset is a classic fix before you start blaming the sampler.
Install
Part of ComfyUI-UtilsCollection:
cd ComfyUI/custom_nodes
git clone https://github.com/silveroxides/ComfyUI-UtilsCollection
Restart, or install via ComfyUI Manager (search "UtilsCollection"). No model downloads.
Gotchas
This node is the migration target for the old standalone ComfyUI_SigmoidOffsetScheduler pack - the README explicitly says to remove that pack before accepting ComfyUI's "replace workflow" prompt, or you'll get duplicate/conflicting nodes. The migrated scheduler also registers under the core-compatible ID sigmoid_offset, so it can appear in Core's scheduler selector dropdowns too. And remember: a reshaped sigma curve helps some architectures and actively hurts others - the KB's notes on flow matching warn that aggressive schedules distort straight flow-matching trajectories, so test before you standardize on it.
Inputs (5)
| Name | Type | Default | Description |
|---|---|---|---|
| model | MODEL | — | |
| steps | INT | 301–10000 | — |
| square_k | FLOAT | 1.000–10 | Higher values make the denoising transition sharper. |
| base_c | FLOAT | 0.50-5–5 | Move more denoising earlier or later. |
| start_sigma | FLOAT | 1.0000–1 | Adjust initial denoising strength. 1 leaves it unchanged. |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| SIGMAS | SIGMAS | — |