ComfyUI Node

SigmoidOffsetScheduler

Where should Chroma spend its denoising steps? This node lets you pick

By silveroxides·Created about a year ago·Updated 4 months ago· 27
SigmoidOffsetScheduler
  • model
  • SIGMAS
steps30
square_k1.00
base_c0.50
start_sigma1.000

Every diffusion sampler walks down a sigma schedule - a list of "how noisy is the latent right now" values. The scheduler is what decides where those steps bunch up, and it quietly controls whether your 30 steps go mostly to blocking out the composition or mostly to polishing skin texture. Most models get a one-size-fits-all curve and you never think about it. Chroma, the Apache 2.0 Flux-architecture community model, is the place where people actually fuss over it - and this node exists because its author, silveroxides (the handle behind the popular Chroma-GGUF quantizations on Hugging Face), wanted a hand-tunable curve for it.

SigmoidOffsetScheduler does one thing: it reshapes the model's native sigma schedule through a sigmoid curve and hands you a SIGMAS tensor you can feed into custom sampling. Install it and it also quietly registers a sigmoid_offset scheduler in ComfyUI's built-in sampler dropdown, so you can get the same curve without touching the custom-sampling graph at all.

How it actually works

Under the hood it's pleasantly boring. The node pulls the model's own sigma range (model_sampling.sigmas), maps your step count onto a sigmoid function, and then samples the model's real sigmas at those points rather than inventing new ones. That's the important part: it's not a schedule from scratch, it's a re-weighting of the schedule the model already ships with, so it stays valid for whatever architecture you feed it. The author calls the whole pack "an attempt at an optimized scheduler for the Chroma architecture" - read that as a small utility, not a revolution.

The sigmoid family matters here specifically because of Chroma's family tree. Flow-matching models (Flux and everything derived from it) train on a nearly straight trajectory, which is why aggressive curves like Karras actively hurt them. A sigmoid is a gentle redistribution of effort, not a distortion - the kind of knob that still respects the straight-line training while letting you tilt where steps land.

The knobs that matter

You only touch three of them, and one you can probably leave alone:

  • base_c - the curve's center. Below 0.5 pushes more steps toward high sigmas (early denoising, composition and layout); above 0.5 pushes them toward low sigmas (late denoising, fine detail). This is the knob you'll actually experiment with.
  • square_k - sigmoid steepness. Higher = steeper, snappier transition; lower = more spread out. Default 1.0 is a reasonable start.
  • start_sigma - rescales the whole schedule so the first step starts lower than the model's true max noise, which gives you a "softer start." Set it to 0.983 to restore the old behavior, 1.0 for no rescaling.

Inputs are model (the same MODEL you're sampling), steps, and those three floats. Output is a single SIGMAS tensor that wires into SamplerCustom's sigmas input - or just skip the node entirely and pick sigmoid_offset from the KSampler scheduler dropdown once the pack is installed.

Installing it

The easiest path is ComfyUI Manager - search for "ComfyUI Sigmoid Offset Scheduler" and hit install. Or clone it manually:

cd ComfyUI/custom_nodes
git clone https://github.com/silveroxides/ComfyUI_SigmoidOffsetScheduler

Restart ComfyUI. That's the whole install: the pack is pure Python with no requirements.txt beyond torch/numpy, which ComfyUI already has. No model downloads, no GGUF files, no heavy dependencies.

The honest verdict

Chroma already produces excellent results with plain Euler and its stock schedule - the official workflow doesn't need this node. Where it earns its keep is when you're chasing a specific look and want to tilt the step distribution without installing RES4LYF (the heavyweight scheduler suite that also supports Chroma, if you want way more knobs than this). If a render feels like it's nailing composition but washing out detail, nudge base_c up. If structure feels mushy, nudge it down. Thirty seconds of tweaking, and if it does nothing for you, the stock scheduler was fine all along.

Categorysampling/custom_sampling/schedulers

Inputs (5)

NameTypeDefaultDescription
modelMODEL
stepsINT301–10000
square_kFLOAT1.000–10Sigmoid steepness. Higher = steeper transition.
base_cFLOAT0.50-5–5Shifts sigmoid curve. <0.5: More steps at high sigmas (early denoising); >0.5: More steps at low sigmas (late denoising).
start_sigmaFLOAT1.0000–1Rescales the sigma to enable softer start. Set to 0.983 for old behaviour. 1.0 = no rescaling.

Outputs (1)

NameTypeDescription
SIGMASSIGMAS