LC Sigma Curve
Hand-draw the noise schedule your sampler actually runs
- sigmas
- sigmas
- curve
Every sampler runs on a noise schedule - a list of sigma values deciding how much noise gets removed at each step - but the stock ComfyUI UI hands you a dropdown of fixed names and never shows you the list. LC Sigma Curve is the scheduler dropdown, unboxed. It builds that list from scratch, draws it as a little graph under its widgets, and lets you drag knots on it. No MODEL socket, no model files, nothing to load: just numbers out.
Why bother? Because by 2026 the scheduler dropdown stopped being a safe shortcut. On flow-matching models like Flux, WAN, or Krea, aggressive reshaped schedules like Karras fail across the board, and the tuned schedules people actually name - beta57, bong_tangent, AYS-style curves - mostly live inside third-party sampler packs. LC Sigma Curve hands you those shapes as plain sigma lists with no extra install - the schedule becomes a variable you can actually edit.
How it works
There's no model, so the curve needs a ceiling you supply: sigma_max is a "fake top." For flow models (Flux / Krea / WAN) that's 1.0; for SDXL it's roughly 14.6 - the author's own tooltips say both. The built-in presets rebuild their schedule math to fit between your sigma_max and sigma_min: simple/linear/normal straight falls, Karras (rho 7), exponential, sgm_uniform, ddim_uniform, beta/beta57, kl_optimal, and shapes like ays, gits, and bong_tangent, the two-stage tangent RES4LYF made famous. The descending toggle keeps the list falling with no upticks and pins the final value to 0, which is what a sampler expects.
The working curve is just a comma list, and the graph below the widgets is a live view of it. Drag a knot and the node flips the preset to Custom and stops treating it as a named schedule from then on. In smooth edit mode a drag blends neighboring knots; in spike mode it moves only the one you grabbed.
The inputs that matter
- preset - the dropdown of built-in scheduler names plus any curves you've saved (and from_input, see below).
- sigma_max - set this right or the whole schedule is off by a factor: 1.0 for flow models, ~14.6 for SDXL. This is the one beginners get burned on.
- total_steps - how many steps the output represents. Right-click and "Convert to input" to drive it from a Sampler Configure or a pipe.
- edit_mode / smooth_radius / descending / curve - how you sculpt.
curveis the comma list that becomes the source of truth once you're on Custom. - save_name + save_curve - to write the curve to disk on the next run.
Outputs are sigmas (SIGMAS), which you wire into an Advanced sampler's sigmas socket, and curve (STRING) - the same formatted list as text, handy for pasting somewhere or saving.
The optional sigmas input pairs with the from_input preset: wire in a curve produced elsewhere and the node displays it, resampled to your total_steps, after the first queue. It's the inspect-and-tweak mode, and the one case where the graph only shows itself after a run.
Saving and reloading curves
Flip save_curve on with a save_name and queue once - saving doesn't auto-queue. The JSON lands in the pack's web/sigma_curves/ folder (that's where the shipped code and the current README put it; older UI hints may say assets/, but since v1.25.3 it's web/ only, because that folder is served to the UI). Saved names get appended to the preset dropdown so you can rebuild the exact shape later.
Gotchas worth knowing
Custom is never rebuilt on the next queue - if you bump total_steps while a preset says Custom, the node resamples your existing sculpted list rather than regenerating the named schedule. So set total_steps first, or re-pick the named preset to rebuild. And because the curve graph is drawn by browser-side JavaScript, hard-refresh the browser after a pack update or the plot can lag behind the node.
Installing
From ComfyUI Manager (search "ComfyUI_LC123_nodes") or:
cd ComfyUI/custom_nodes
git clone https://github.com/lonecatone23/ComfyUI_LC123_nodes
Restart ComfyUI. No extra pip packages and no model downloads - the pack runs on ComfyUI's own env (torch/numpy). If it won't load, make sure __init__.py sits directly in custom_nodes/ComfyUI_LC123_nodes/ and isn't nested one level deeper.
If you've spent any time wondering why your carefully chosen scheduler doesn't look like it's doing anything, this is the node that lets you see - and edit - the thing you were guessing at. Get sigma_max right for your model family and the rest of it is just dragging dots.
Inputs (11)
| Name | Type | Default | Description |
|---|---|---|---|
| preset | COMBO | simple | from_input = optional sigmas socket (after a run). Named presets rebuild. Custom keeps your comma list / graph sculpt. |
| total_steps | INT | 201–10000 | Step count. Convert to input to wire from Sampler Configure / pipe. Named preset rebuilds; Custom resamples the current curve. |
| sigma_max | FLOAT | 1.000–1000 | Fake top. Flow models (Krea / Flux / WAN) use 1.0. SDXL is ~14.6. |
| sigma_min | FLOAT | 0.00000–100 | Floor before the final 0 is appended on built-in presets. |
| edit_mode | COMBO | smooth | smooth = drag one knot and blend neighbors. spike = move one knot only. |
| smooth_radius | INT | 10–3 | Neighbor window for smooth mode (0 = spike-like). |
| descending | BOOLEAN | true | Keep the list falling (no upticks). Not a straight line. |
| curve | STRING | Comma list. Source of truth when preset is Custom. Graph sits below this row. | |
| save_name | STRING | Filename under assets/sigma_curves/ (no extension). | |
| save_curve | BOOLEAN | false | On run, write save_name.json into assets/sigma_curves/. |
| sigmasopt | SIGMAS | Incoming curve. Used when preset is from_input. Graph updates after the first queue. |
Outputs (2)
| Name | Type | Description |
|---|---|---|
| sigmas | SIGMAS | — |
| curve | STRING | — |