Manual scheduler
A calculator for your noise schedule — type the formula, get SIGMAS
- model
- SIGMAS
Your sampler, but with a formula instead of a menu
In ComfyUI a "scheduler" is really just a curve - a list of noise levels, one per step, telling the sampler how much noise to strip out each round. Karras, simple, exponential, sgm_uniform: all differently-shaped curves with catchy names. The Manual scheduler from sigmas_tools_and_the_golden_scheduler skips the menu. You write the curve yourself as a math formula, and the node evaluates that formula once per step to build a SIGMAS tensor. If you've ever stared at the scheduler dropdown and thought "I want something between those two, but not either of them," this is the node you were looking for.
The pack is by Extraltodeus, a long-time community dev who's also behind depthmap2mask and CLIP Token Injection - pure-Python, no model downloads, just math.
What you actually set
The node takes model and steps, plus a single text box, custom_sigmas_manual_schedule, and an sgm toggle. The formula box is the whole show. When it runs, these variables are in scope:
sigmax/sigmin- the model's actual max and min sigma, read straight off the loaded checkpointx- goes from 1 (first step) to 0 (last step)y- the reverse, 0 → 1phi- the golden ratio, ~1.618, pluspi,cos,sin,sqrts- total steps;j- current step index (0-based);f- a normalized reversed-Fibonacci value
The default formula is a cosine curve between sigmax and sigmin, which is a decent place to start. Two formulas from the README that are actually proven in the field:
# gentle, works well with dpmpp2m
max([x**phi*s/phi, sigmin])
# nice with lms, euler and dpmpp2m
x**((x+1)*phi)*sigmax + y**((x+1)*phi)*sigmin
The sgm toggle adds one step to the schedule and drops the last, which aligns the curve to the SGM "trailing" style - handy if you're stacking a distilled LoRA that was trained on an sgm_uniform schedule.
Where people get burned
The README claims this uses eval() with "the math module fully imported." Neither is quite true - the source actually runs your formula through asteval, a sandboxed interpreter (good, that's safer than raw eval()), and only cos, sin, sqrt and pi are available. So a formula using log() or exp() will fail with a printed error, and the node fills the schedule with NaN - your sampler will then throw or produce garbage. If that happens, simplify the formula or stick to the documented functions.
Also keep the sampler's steps matching this node's steps. The SIGMAS output is exactly as long as what you set here, and the KSamplerAdvanced sigmas input expects a schedule that matches its own step count.
Install
ComfyUI Manager → Install Custom Nodes → search sigmas_tools_and_the_golden_scheduler, or:
cd ComfyUI/custom_nodes
git clone https://github.com/Extraltodeus/sigmas_tools_and_the_golden_scheduler
Restart ComfyUI. No weights to download. If the pack errors on import, see the pack's real dependency situation: requirements.txt lists only asteval, but the code also imports matplotlib and scipy, so on a minimal install you may need pip install matplotlib scipy asteval.
Wiring it in
Take the SIGMAS output and feed it into the sigmas input of a KSamplerAdvanced (or the CustomSampler path), replacing the built-in scheduler. You now have a noise schedule nobody else's workflow has - which is the point.
Inputs (4)
| Name | Type | Default | Description |
|---|---|---|---|
| model | MODEL | — | |
| custom_sigmas_manual_schedule | STRING | ((1 - cos(2 * pi * (1-y**0.5) * 0.5)) / 2)*sigmax+((1 - cos(2 * pi * y**0.5 * 0.5)) / 2)*sigmin | — |
| steps | INT | 200–100000 | — |
| sgm | BOOLEAN | false | — |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| SIGMAS | SIGMAS | — |