Sigmas Editor ๐๏ธ
Drag your noise schedule instead of guessing
- sigmas
- adjusted_sigmas
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.
Inputs (2)
| Name | Type | Default | Description |
|---|---|---|---|
| sigmas | SIGMAS | Input sigmas schedule to edit | |
| sigmas_adjustments | STRING | [] | JSON array of adjusted sigma values for each step |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| adjusted_sigmas | SIGMAS | โ |