Nodes/ComfyUI-LG_SamplingUtils/Sigmas Editor ๐ŸŽš๏ธ
ComfyUI Node

Sigmas Editor ๐ŸŽš๏ธ

Drag your noise schedule instead of guessing

By LAOGOU-666ยทCreated 8 months agoยทUpdated 8 months agoยท 193
Sigmas Editor ๐ŸŽš๏ธ
  • sigmas
  • adjusted_sigmas
โ—„sigmas_adjustments[]โ–บ

Here's a workflow thought experiment: on a flow-matching model, the scheduler you pick decides how denoising effort is spread across steps - and there are a dozen schedulers in the dropdown, most of which you've never compared side by side. What if you could just draw the curve instead? That's Sigmas Editor. It takes the sigmas output from any scheduler, plots it as a curve inside the node, and lets you grab control points and drag them. What you draw is what gets sampled.

It's fiddly, it's niche, and for the people who tune this stuff by hand it's genuinely the fastest way to experiment. If you've never wanted to hand-edit a noise schedule, this node won't convert you - but knowing it exists means the next time a workflow says "use custom sigmas," you have a visual way in instead of a raw JSON dump.

How it works

Two halves talking over a websocket. The backend (py/sigmas_editor.py) receives your sigmas, and whenever the input sigmas change, it pushes the curve data to the frontend via PromptServer. The JavaScript (in the pack's web/ folder) draws that curve on a canvas inside the node - sigma value on the Y axis, step on the X - and lets you drag each point. Every drag writes the full adjusted array into the sigmas_adjustments text widget as a JSON string. On execution the backend parses that string, and:

  • if the JSON has the right number of values, it returns them as your adjusted_sigmas;
  • if the lengths don't match (or the JSON is malformed), it silently passes the original sigmas through;
  • if your original schedule ended at 0, the last point is pinned to 0 - you can't invent a final step that does nothing.

Values are clamped to the 0โ€“1 range, which is exactly the range flow-matching sigmas live in - another sign this pack is built for Z-Image/Lumina2 more than for SDXL.

Wiring it up

Because it's a sigmas-level node, it can't sit in front of a plain KSampler - KSampler generates its own sigmas internally. The pack's example workflow (randomness_enhancer_zimage.json) shows the correct shape:

BasicScheduler (steps/denoise) โ†’ SigmasEditor โ†’ SamplerCustom (sigmas input)

A couple of behavioral notes from the code: the canvas is populated the first time you run the graph - before that it just shows "Connect Sigmas Input & Execute Workflow." And when you change the upstream steps or scheduler, the input sigmas change, so the editor resets to the new curve and discards your old drags. That's by design, not a bug.

The inputs that matter

  • sigmas - the schedule to edit, from a scheduler node.
  • sigmas_adjustments - the JSON string widget. Normally you never type here; dragging points fills it. But it's plain text, so you can hand-edit it if you prefer typing [0.9, 0.5, 0.1, 0.0] to dragging dots.

Output: adjusted_sigmas, a SIGMAS tensor for your SamplerCustom.

Installation

Part of ComfyUI-LG_SamplingUtils (the pack's five nodes install together):

cd ComfyUI/custom_nodes
git clone https://github.com/LAOGOU-666/ComfyUI-LG_SamplingUtils.git

or ComfyUI Manager โ†’ search ComfyUI-LG_SamplingUtils โ†’ install, then restart. No Python dependencies; the UI comes from the pack's web/ directory automatically. GPL-3.0, v1.0.2, one Chinese author (LAOGOU-666) - the node got a bug-fix commit in December 2025, so it's maintained, just slowly.

Gotchas

  • It's a SamplerCustom-only node. Plug it into a KSampler workflow and there's nothing to connect. Plan for SamplerCustom up front.
  • Resets when upstream changes. Steps, denoise, scheduler - any change to the input sigmas wipes your edits. Save your curve text if you care about it.
  • The 0โ€“1 clamp means it's tuned for flow models. On sigma-scaled (SD/SDXL) schedules the displayed curve is a different beast; don't be surprised if the geometry looks off.
  • Malformed JSON is silently ignored, so a stray keystroke in the widget just means "no change," not an error you'll notice.
Category๐ŸŽˆLAOGOU/Sampling Utils

Inputs (2)

NameTypeDefaultDescription
sigmasSIGMASInput sigmas schedule to edit
sigmas_adjustmentsSTRING[]JSON array of adjusted sigma values for each step

Outputs (1)

NameTypeDescription
adjusted_sigmasSIGMASโ€”