Sigma Waveform Node
Your scheduler is a shape — this node lets you draw your own
- sigmas
A noise schedule is just a list of sigmas - numbers saying how much noise is left at each denoising step. ComfyUI hands you Karras, beta, normal and a dozen more, but every one of them is a fixed shape baked into a dropdown. The Sigma Waveform Node from the SigmaWaveFormNodes pack throws the dropdown away and turns the schedule into a waveform generator: pick a shape, set an amplitude and frequency, and out comes a SIGMAS sequence you can feed to a sampler. Same idea that drove the A1111 "Detail Daemon" crowd - the people who wanted to sculpt how denoising effort gets spent instead of accepting whatever the scheduler ships.
Honest framing first: this is a tinkerer's node from mid-2024, one commit, never touched since. It's a toy with a genuinely interesting mechanism, not a daily driver. If your workflow is healthy, it won't help you. If you've ever wondered what an image looks like when denoising effort is distributed as a square wave, it's the only sane way to find out.
How it works
Under the hood it's embarrassingly simple, and that's the charm. It samples steps points along a normalized time axis (linspace(0, 1, steps)) and evaluates your chosen waveform there. Then, in order:
- Unidirectional shift - subtracts the minimum so nothing goes negative, then adds
min_sigma. - Damping - multiplies the whole curve by
exp(-damping_factor * t), an exponential decay across the schedule. - Fourier (optional) - a blunt lowpass that keeps the first handful of frequency bins and zeroes the rest.
The result comes back as a float64 tensor that ComfyUI accepts as a SIGMAS input.
The inputs that matter
waveform_type- seven choices: sine (default), sawtooth, square, triangle, rectangular, random, stepped. This is the whole personality of the node.amplitudeandfrequency- how big and how many cycles. Defaults of 3.0 and 0.1 are a sane starting point.steps- length of the sequence (default 60). Match it to the step count you'll actually sample at.enable_unidirectional- keep this on. A schedule with negative noise levels is not a schedule, it's a dare.damping_factorwithenable_damping- the knob that makes output usable. A decaying sine starts hot and fades, which is the closest this node gets to a real schedule. Crank damping and even the weirdest wave becomes vaguely schedulish.min_sigma- floor for the unidirectional shift.apply_fourier- turns on the blunt built-in lowpass. Fine for smoothing, but see the dedicated Fourier Filter Node if you want actual control.horizontal_length- only does anything forstepped; it sets the width of each flat segment.
The single output, sigmas, plugs straight into ComfyUI's native SamplerCustom node, which is the stock node that accepts an arbitrary SIGMAS schedule.
Installing it
Install once and all six nodes in the pack appear. Either way, restart ComfyUI after.
cd ComfyUI/custom_nodes
git clone https://github.com/BenNarum/SigmaWaveFormNode
Or use ComfyUI Manager - search "SigmaWaveFormNodes" and install from there; the pack is published to the Comfy registry.
Good news on dependencies: requirements.txt is just numpy and torch, which every ComfyUI install already has. No model downloads, no CUDA surprises, no transformers-pinning hell. This is one of the rare packs that can't break your environment.
Where people get burned
The big one: this is not a real schedule. A proper sigma list descends - lots of noise early, little late. A sine wave goes up and down, and "unidirectional" only shifts the curve up, it doesn't sort it. Feed a raw, undamped sine into SamplerCustom and it will add noise on the way up and remove it on the way down, alternately. Expect chaotic output; that's the feature, not a bug. Keep enable_damping on and apply_fourier if you want anything resembling normal results.
The random waveform also has no seed, so identical settings give you a different schedule on every run. If you need to compare two generations, that's your confound - pin a seed elsewhere or pick a deterministic shape.
Inputs (10)
| Name | Type | Default | Description |
|---|---|---|---|
| steps | INT | 601–1000 | — |
| amplitude | FLOAT | 3.00.1–100 | — |
| frequency | FLOAT | 0.100.01–10 | — |
| waveform_type | COMBO | sine | 7 options: sine, sawtooth, stepped, square, random, triangle, +1 |
| damping_factor | FLOAT | 0.0300–0.1 | — |
| enable_damping | BOOLEAN | true | — |
| min_sigma | FLOAT | 0.00–10 | — |
| apply_fourier | BOOLEAN | false | — |
| horizontal_length | FLOAT | 0.100–1 | — |
| enable_unidirectional | BOOLEAN | true | — |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| sigmas | SIGMAS | — |