Sigma Curve (WepeNerd)
Stop accepting whatever the scheduler dropdown gives you
- sigmas
Every sampler in ComfyUI is downstream of one thing you rarely get to touch: the list of sigma values it walks through. Karras, exponential, sgm_uniform, beta - all of them are just different shapes for that list. Sigma Curve hands you the graph and lets you draw the shape yourself, then spits out a SIGMAS you can feed anywhere.
Why bother? Because the dropdown is a fixed menu for a moving target. Karras is the correct answer on SDXL and a well-documented failure on flow-matching models, where the trajectory is already near-straight and aggressively redistributing denoising effort actively hurts. If what you actually want is an Align Your Steps schedule, or a flux shift baked in as a curve, or Karras that only starts aggressive and then goes flat, this is the node.
How it works
The curve stores points as [x, y] - x is 0..1 along the schedule, y is sigma as a fraction of sigma_max. That relative storage is the nice part: change sigma_max and the whole curve rescales, change steps and the shape survives, because the curve is just sampled at evenly spaced positions.
interpolation controls how points are joined. log smooth (default) is a monotone Hermite spline in log-sigma space, which is why exponential-looking schedules need only a handful of points; smooth is monotone cubic in linear space; linear is straight lines. None of them overshoot between points, which matters - a curve that rises in the middle is a curve your sampler will render as garbage, and the node warns you in the corner if that happens.
With end_at_zero on (the ComfyUI convention), you get one sigma per step plus a final 0 appended, so a 20-step run outputs 21 values.
The inputs that matter
steps- how many samples get taken off the curve. The shape doesn't change with it, so you can tune at 20 and render at 40.sigma_max- the top of the graph. This is the one people get wrong. Points are relative to it, so the value has to match the model family: ~14.61 is the SD 1.5 / SDXL default that ships in the box, and flow models (Flux, SD3, Wan) want 1.0. Mismatch it and you've just told the sampler to start from a nonsense noise level.sigma_min- only used by presets and as the floor of the Log view. It does not clamp your output, so drawing below it is legal.interpolation,end_at_zero- as above.curve- the JSON the canvas writes for you. There's no reason to hand-edit it; the point of the node is that you never type sigma values again.
One output: sigmas (SIGMAS). It goes into SamplerCustom or SamplerCustomAdvanced, or anything else with a sigmas input. The dots on the graph are the exact values it will emit, one per step, so you can see your schedule rather than guess at it.
The toolbar is where the node earns its keep. Preset drops in a fitted Karras, Exponential, Poly-exponential, Linear, Align Your Steps (SDXL), Flow shift 3, Flow shift 6 or Cosine schedule and sets a matching interpolation. Log flips the view so the low-sigma tail stops looking like a flat line. Copy puts the numbers on your clipboard as a plain list, and Paste takes a list like 14.6, 6.3, 3.7, …, 0 and rebuilds the curve from it - the fastest way to steal a schedule someone posted.
Install
ComfyUI Manager → search WepeNerd, or:
cd ComfyUI/custom_nodes
git clone https://github.com/WepeNerd/ComfyUI-WepeNerd
python -m pip install -r ComfyUI-WepeNerd/requirements.txt
Restart, hard-refresh, and find it under WepeNerd/Sampling. The drag-and-drop graph is a browser extension, so a stale frontend cache is the usual "the node exists but the canvas is empty" fix.
Where people get burned
Fighting a distilled model with a hand-drawn curve. Lightning, Turbo, Hyper and their kin were trained against one specific noise schedule; a custom curve hands them noise levels they never saw. Distilled checkpoints want the schedule they shipped with, not your art project.
Drawing Karras onto a flow model. This is the single biggest misuse of a node like this. On Flux/Z-Image-class models the advice is conservative schedules plus timestep shift, and the flow shift 3/6 presets here are the honest expression of that - a curve that redistributes denoising effort the way Karras does is what the sweeps keep finding broken.
Assuming the shift knob still applies. Some schedulers carry their own sigma shift and ignore your workflow's. If a custom curve seems to do nothing, check what else in the graph is fighting it.
Forgetting sigma_max on a flow model. Everything downstream looks broken and the curve is fine. It's 1.0, not 14.61.
Inputs (6)
| Name | Type | Default | Description |
|---|---|---|---|
| steps | INT | 201–1000 | — |
| sigma_max | FLOAT | 14.6150.0001–1000 | — |
| sigma_min | FLOAT | 0.02920.00001–1000 | Used by presets and as the floor of the log view. |
| interpolation | COMBO | log smooth | 3 options: log smooth, smooth, linear |
| end_at_zero | BOOLEAN | true | Append a final 0 sigma after the curve's steps. |
| curve | STRING | {"v":1,"points":[[0,1],[0.2,0.416169],[0.575,0.05547],[0.85,0.007782],[1,0.001996]],"log":false,"snap":true} | — |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| sigmas | SIGMAS | — |