Dynamic Sigma Scheduler
Dynamic Sigma Scheduler Hands-On
- SIGMAS
The sigma schedule is the part of your workflow you've probably never touched. ComfyUI's KSampler hides it behind a dropdown - Karras, Normal, beta, take your pick - and for most people that's exactly where it should stay. But the day you want your own curve instead of someone's preset, the dropdown runs out of room. That's what the Dynamic Sigma Scheduler is for: you get a graph drawn right on the node, you click a point, you drag it, and the node hands the KSampler a SIGMAS tensor that matches what you drew. No Python, no math by hand.
It's the headline node in crom8505's ComfyUI-Dynamic-Sigmas pack, a small one (three nodes, one dependency) that got picked up in a March 2026 "releases you missed" roundup. New, light, and exactly one job.
How it works
Internally there's no mystery. The node takes your steps count and builds a tensor of steps + 1 values marching from sigma_start down to sigma_end. Sigma is the noise level at each step - it starts high (a noisy image) and ends low (clean). The curve between the endpoints is what you're editing.
Two ways to shape it. Easiest: reach into the graph on the node and left-click to drop a point, shift+left-click to remove one, drag to move it. The points get stored in a hidden widget and serialized with your workflow, so the curve survives saves and reloads. Alternatively, forget the mouse and just crank the curve_factor slider - positive values keep sigma high longer (denoising effort pushed toward the start of the trajectory), negative values drop it fast then crawl. That's your "Karras-like" vs "long tail" dial, done with one number.
The other widgets are polish. curve_smooth switches between straight lines between your points and smooth interpolation. show_steps reveals a numeric widget for every individual step, so you can type exact values rather than eyeball a curve - handy when you want to chain schedules and need precise overlap. black_theme just toggles the graph between dark and light.
Where to actually use it
The output is a single SIGMAS, and it wires straight into the sigmas input on a KSampler (use KSampler Advanced or a KSampler with the sigmas socket showing). Feed it in and your drawn curve replaces whatever the scheduler dropdown was doing.
One honest caveat, and it's the same caveat the whole community landed on: reshaping sigma curves is a DDPM-model trick. On SD 1.5, SDXL, and every Illustrious/Pony finetune, a curve that concentrates denoising in the middle is a genuine correction. On flow-matching models - Flux, Z-Image, Wan, LTX - the trajectory is already near-straight, and aggressive reshaping tends to make things worse, not better. So if you're on a modern flow model, keep the curve close to a straight line (or skip this node). The README's own starting-point examples reflect this: sigma_start 15.0 for SDXL, 1.0 for Wan/LTX.
Install
ComfyUI Manager: Custom Nodes Manager → search ComfyUI-Dynamic-Sigmas → Install → restart. Or by hand:
cd ComfyUI/custom_nodes
git clone https://github.com/crom8505/ComfyUI-Dynamic-Sigmas.git
cd ComfyUI-Dynamic-Sigmas
pip install -r requirements.txt # installs matplotlib
Then restart ComfyUI. No model downloads, no API keys - the only real dependency is matplotlib, and Manager installs it for you.
Gotchas
- The graph is frontend-only. Clicking and dragging happens in your browser's canvas; the server just recomputes the tensor from your points. That's fine for interactive work, but if you generate headlessly or over the API, the saved curve still applies because it's serialized with the workflow.
- Forget the graph and it's a linear ramp. With no custom points and
curve_factor0, you get a straight line from start to end - which is, as discussed, usually the right answer on flow models anyway. - Chaining schedules: if you want 15→11→7→0, this node ships with a sibling
Concat Sigmasnode in the same pack that joins two schedules seamlessly by dropping the duplicate endpoint step. Set this node'ssigma_endto the next segment'ssigma_startand let Concat stitch them.
Start with the defaults, draw a single point in the middle, and see what it does to a fixed seed. You'll feel the difference in two runs - and finally understand what Karras was doing all along.
Inputs (7)
| Name | Type | Default | Description |
|---|---|---|---|
| steps | INT | 41–100 | — |
| sigma_start | FLOAT | 1.000–100 | — |
| sigma_end | FLOAT | 0.000–100 | — |
| curve_factor | FLOAT | 0.00-100–100 | — |
| curve_smooth | BOOLEAN | false | — |
| show_steps | BOOLEAN | false | — |
| black_theme | BOOLEAN | true | — |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| SIGMAS | SIGMAS | — |