Nodes/ComfyUI_LC123_nodes/LC Sigma Curve
ComfyUI Node

LC Sigma Curve

Hand-draw the noise schedule your sampler actually runs

By lonecatone23·Created about a month ago·Updated about 20 hours ago· 12
LC Sigma Curve
  • sigmas
  • sigmas
  • curve
presetsimple
total_steps20
sigma_max1.00
sigma_min0.0000
edit_modesmooth
smooth_radius1
descendingtrue
curve
save_name
save_curvefalse

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. curve is 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.

CategoryLC123/sampling

Inputs (11)

NameTypeDefaultDescription
presetCOMBOsimplefrom_input = optional sigmas socket (after a run). Named presets rebuild. Custom keeps your comma list / graph sculpt.
total_stepsINT201–10000Step count. Convert to input to wire from Sampler Configure / pipe. Named preset rebuilds; Custom resamples the current curve.
sigma_maxFLOAT1.000–1000Fake top. Flow models (Krea / Flux / WAN) use 1.0. SDXL is ~14.6.
sigma_minFLOAT0.00000–100Floor before the final 0 is appended on built-in presets.
edit_modeCOMBOsmoothsmooth = drag one knot and blend neighbors. spike = move one knot only.
smooth_radiusINT10–3Neighbor window for smooth mode (0 = spike-like).
descendingBOOLEANtrueKeep the list falling (no upticks). Not a straight line.
curveSTRINGComma list. Source of truth when preset is Custom. Graph sits below this row.
save_nameSTRINGFilename under assets/sigma_curves/ (no extension).
save_curveBOOLEANfalseOn run, write save_name.json into assets/sigma_curves/.
sigmasoptSIGMASIncoming curve. Used when preset is from_input. Graph updates after the first queue.

Outputs (2)

NameTypeDescription
sigmasSIGMAS
curveSTRING