Sigma Curves
Draw Your Sigma Schedule Like a Waveform Editor
- model
- SIGMAS
Sigma Curves is for the moment the scheduler dropdown stops being enough. It's a canvas editor that plots one draggable point per sampling step, seeded from any registered scheduler - and crucially, seeded from your actual connected model, not a generic shape. You drag points, reshape ranges with a curve-interpolation picker, and out comes a SIGMAS tensor ready for SamplerCustom / SamplerCustomAdvanced.
It's the hand-drawn counterpart to the scheduler list. The scheduler controls how much noise gets removed at each step, and RES4SHO (by WASasquatch, the WAS Node Suite author) already ships a family of detail-biased S-curves - atan_gentle/focused/steep, logistic, cosine, and so on. Sigma Curves is where you stop trusting those names and reshape the thing yourself. That matters more than you'd think: the KB's sampler research keeps finding that flow-matching models "dislike aggressive redistribution of denoising effort," so the ability to see and control the curve beats blindly swapping named presets when a model's defaults look flat or a specific mid-detail range is what you're chasing.
It's genuinely niche - a handful of impressions, barely any community talk. Most people will never need it. But it's the only node in this pack that lets you literally look at the sigma schedule and say "no, more steps here."
How it works
Under the hood it calls ComfyUI's stock BasicScheduler (get_sigmas(model, scheduler, steps, denoise)) - the same node you'd drop on the canvas anyway - then normalizes those sigmas to your model's σ_min/σ_max, so the plot's y-axis is a clean 0-to-1. Each sampling step is a control point: drag it to move it, right-drag a range, pick an interpolation (linear, sigmoid, cosine, smoothstep, ease, exp…) and it re-fills that range. That means you can combine curve archetypes in one schedule - sigmoid head, bezier middle, step tail.
At runtime your normalized values are resampled to whatever step count the consumer requests and denormalized back against the active model's range, so a curve you authored at 20 steps still works correctly at 8 or 60. And a genuinely neat cross-pack detail: the code special-cases RES4LYF's beta57 schedule (beta with alpha 0.5, beta 0.7), because it isn't in ComfyUI's stock scheduler handlers. So this is one of the few places you can use beta57 as a baseline even though it ships in a different pack.
The inputs that matter
- model - required. The node walks your graph back to the model loader to compute the real shape without you running the workflow first. The header tag tells you the truth about what you're looking at:
✓ from your modelor≈ approximate(a synthetic fallback). - scheduler - the baseline shape. Defaults to
normal. - steps and denoise - standard, like a KSampler.
- curve_data - the canvas JSON. Leave it alone; the widget owns it.
Output is a single SIGMAS tensor, wired into SamplerCustom / SamplerCustomAdvanced.
Installing it
ComfyUI Manager (search "RES4SHO"), or:
cd ComfyUI/custom_nodes
git clone https://github.com/WASasquatch/RES4SHO
Restart. No pip dependencies, no model downloads, needs ComfyUI ≥ 1.0.0.
Where people get burned
A fresh node with an empty curve_data just behaves like a regular scheduler - that's the fallback, and it's actually handy for sanity-checking that your baseline is right. Saved curves go to presets/sigma_curves.json and register as sigma_curve_<name> schedulers in every dropdown (KSampler included) after the frontend refreshes node defs, which the node triggers for you. The one thing worth watching: if the real schedule ends at zero, the node preserves a zero-terminated tail so your image fully denoises - don't be surprised when the last point snaps to the floor instead of floating where you left it.
If you're new to this pack entirely, the easiest on-ramp is skipping the canvas and just picking one of the atan_* schedulers it ships. Sigma Curves is the advanced lane.
Inputs (5)
| Name | Type | Default | Description |
|---|---|---|---|
| model | MODEL | — | |
| scheduler | COMBO | normal | 21 options: simple, sgm_uniform, karras, exponential, ddim_uniform, beta, +15 |
| steps | INT | 201–1000 | — |
| denoise | FLOAT | 1.000–1 | — |
| curve_data | STRING | Hand-edited via the canvas widget; not meant for direct entry. JSON of {values: [...], scheduler, steps, ...}. |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| SIGMAS | SIGMAS | — |