Nodes/ComfyUI-NKD-Sigmas-Curve/😺NKD Sigmas Curve
ComfyUI Node

😺NKD Sigmas Curve

NKD Sigmas Curve, the sigma spline editor

By Nekodificador·Created 6 months ago·Updated 11 days ago· 55
😺NKD Sigmas Curve
  • reference_sigmas
  • SIGMAS
  • floats
â—„curve_data{"points": [[0.0, 1.0, 1.0], [1.0, 0.0, 1.0]], "interpolation": "smooth", "tension": 1.0}â–º
â—„steps20â–º
â—„max_sigma1.000â–º

For most of ComfyUI's life your noise schedule was a dropdown. Karras, exponential, beta - pick one, accept the shape, move on. NKD Sigmas Curve (😺NKD Sigmas Curve) is the opposite: it puts the sigma curve on a little canvas right inside the node and lets you draw it by hand. Click to drop control points, drag them around, and the node samples your shape into a standard SIGMAS tensor that plugs into any sampler. You stop picking a scheduler and start being the scheduler.

Why bother? Because where you spend your denoising effort is a real knob. High-sigma steps rough out composition; low-sigma steps lay in fine detail. Stock schedulers give you one fixed compromise, and the author's own demo shows the payoff of moving that effort around - same seed, everything else locked, and just by reshaping the curve he swaps a bare chest for a T-shirt between two generations. That's the pitch: targeted control over composition and detail that no dropdown offers.

How it works

The node maps a normalized [0,1] canvas onto your run. X is step position (0 = first step, 1 = last), Y is sigma magnitude, and the whole thing is scaled by max_sigma. Two interpolation modes: smooth, a NURBS cubic spline where the points approximate the curve and raising an interior point's weight pulls it closer, and linear, plain piecewise straight lines between points. On execution it samples the curve at steps+1 positions and returns a SIGMAS tensor whose last value is always forced to zero - that's a ComfyUI sampler requirement, not a bug.

Widget chores: left-click adds a point, drag moves it, shift+click deletes. Endpoints are locked by default so your curve always starts at full noise and lands on zero, with a toggle to free them, plus a snap-to-steps option and presets saved to your ComfyUI user directory so a favorite shape survives updates.

The inputs that matter

You'll live in the widget and only really touch two numbers:

  • steps (default 20) - how many denoising steps the schedule spans. This overrides the KSampler's step count, because the node is now the source of truth.
  • max_sigma (default 1.0) - the top of the curve. If you know nothing about sigmas, treat it as your new "denoise" dial: lower it and the whole run starts from less noise, which is exactly what lowering denoise does.

Then there's curve_data, the serialized JSON the widget manages (you won't hand-edit it), and the newer reference_sigmas input: feed any other SIGMAS output - a Karras schedule, another curve node - run once, and a ghost curve appears so you can compare your design against it. There's even a "Match" button that copies the reference shape in as editable points, which is the easiest way to start from Karras and bend it instead of drawing blind.

The SIGMAS output is the one that matters: wire it into a KSampler or Custom Sampler's sigmas input. There's also a floats output (the same values as a plain list) for nodes that want per-step float conditioning.

Wiring it up

Here's the catch you must respect: this node takes over scheduling. Set your KSampler to 1.0 denoise and control steps and schedule from here - leave denoise at something else and the sampler rescales your carefully drawn curve, which is the #1 "why is nothing changing" report in the wild. The author also strongly, highly, super recommends pairing it with the RES4LYF pack, the sampler pack that's become the tuning hub of the flow-matching era. Not required - this outputs stock SIGMAS, so it works anywhere - but it's the combination the whole thing was built around.

Install

cd ComfyUI/custom_nodes
git clone https://github.com/Nekodificador/ComfyUI-NKD-Sigmas-Curve

or search NKD Sigmas Curve in ComfyUI Manager. No models to download, no extra Python dependencies - the widget is a prebuilt JS file. One real requirement: it's built on the newer ComfyUI extension API, so you need a recent ComfyUI (the author says V3 API / Nodes 2.0 compatible). On an old install the node simply won't appear.

Gotchas

  • Aggressive curves can bite on flow-matching models. Karras and exponential already fail on those near-straight trajectories because they heavily reshape the sigma curve - hand-drawing an aggressive shape is the same mistake, just with extra steps. Start from a reference like beta or simple and nudge.
  • max_sigma caps at 1.0, and min is 0.001. You're scaling a normalized shape, so that's fine.
  • Forgetting the 1.0 denoise rule makes every test look identical. Put it on a sticky note.

It's a small, focused tool, and that's the point - one knob you own instead of a dropdown you inherit. Draw boring first, get weird later.

Category😺NKD Nodes/Sampling

Inputs (4)

NameTypeDefaultDescription
curve_dataSTRING{"points": [[0.0, 1.0, 1.0], [1.0, 0.0, 1.0]], "interpolation": "smooth", "tension": 1.0}Serialised curve JSON (managed by the curve widget)
stepsINT201–10000Number of sigma steps to generate
max_sigmaFLOAT1.0000.001–1Maximum sigma value — curve top (y=1) maps to this
reference_sigmasoptSIGMASOptional reference sigmas to display as a ghost overlay in the curve editor

Outputs (2)

NameTypeDescription
SIGMASSIGMAS—
floatsFLOAT—