Dual Ease Cosine Scheduler
A cosine sigma schedule where you control both ends of the curve
- model
- SIGMAS
Every sampler walks a "noise schedule" - the list of sigma values that says how much noise to remove at each step. Karras and friends are canned versions of that curve, and they work, but they're fixed. DualEaseCosineScheduler is for when you want to bend the curve yourself: it generates a cosine-based SIGMAS schedule where you can independently control how much "easing" happens at the start of the curve (rho_start) and at the end (rho_end). Feed it to any sampler that accepts a SIGMAS input and you've replaced the fixed schedules with something you actually tuned.
The math, in plain terms: the schedule builds a cosine curve from sigma_max down to sigma_min over your chosen steps, and the exponent that shapes that curve - the rho - smoothly interpolates from rho_start to rho_end as the curve progresses. A higher rho flattens that end of the curve, which is how you steal sampling effort from one part of the trajectory and give it to the other. The defaults are rho 5.5 at the start and 1.2 at the end, which biases the schedule toward putting more steps in the high-noise region and fewer near the end.
The inputs that matter:
steps- how many sigma values (default 20).sigma_max/sigma_min- the noise range endpoints (defaults 14.61 / 0.029, i.e. Karras's typical range).rho_start/rho_end- the two ease knobs, 0.1–10 and 0.1–20 respectively.model(optional) - plug a MODEL in and it overrides yoursigma_max/sigma_minwith that model's own sampling range. Handy, but surprising if you tuned the sliders and they seem to do nothing.
The output is a SIGMAS tensor, and there's one implementation detail worth knowing: it enforces a strictly decreasing schedule and appends a final zero, Karras-style, so samplers that expect that shape behave. You'll use it inside a custom-sampling block - the pack's own Tiled Sampler accepts SIGMAS, or any SamplerCustom-style node - rather than dropping it into a plain KSampler, which manages its own schedule.
Where people get burned: connecting a model and then wondering why your sigma endpoints are ignored (that's the override above), and expecting a dramatic change when the rho values are close together. This is a subtle tool - small tweaks, evaluate on real images, not an instant-hype scheduler. It's also aimed at classic DDPM/DDIM-style models; on flow-matching models the corpus advice is that aggressively reshaped sigma curves tend to hurt more than help, so test before committing.
Install via ComfyUI Manager (search "WtlNodes") or:
cd ComfyUI/custom_nodes
git clone https://github.com/Scorpiosis0/ComfyUI-WtlNodes.git
then restart ComfyUI. Deps: numpy, scipy, pillow. No models to download.
Inputs (6)
| Name | Type | Default | Description |
|---|---|---|---|
| steps | INT | 201–10000 | — |
| sigma_max | FLOAT | 14.610–1000 | — |
| sigma_min | FLOAT | 0.030–1000 | — |
| rho_start | FLOAT | 5.50.1–10 | — |
| rho_end | FLOAT | 1.20.1–20 | — |
| modelopt | MODEL | — |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| SIGMAS | SIGMAS | — |