ComfyUI Node

CustomScheduler

When you want to dictate the denoising, not pick a preset

By BlakeOne·Created 2 years ago·Updated 2 years ago· 17
CustomScheduler
    • SIGMAS
    steps4
    sigma_04.12
    sigma_11.62
    sigma_20.70
    sigma_30.04
    sigma_40.00
    sigma_50.00
    sigma_60.00
    sigma_70.00
    sigma_80.00
    sigma_90.00
    sigma_100.00
    sigma_110.00
    sigma_120.00
    sigma_130.00
    sigma_140.00
    sigma_150.00
    sigma_160.00
    sigma_170.00
    sigma_180.00
    sigma_190.00
    sigma_200.00
    sigma_210.00
    sigma_220.00
    sigma_230.00
    sigma_240.00
    sigma_250.00

    Every scheduler in ComfyUI is just a factory that spits out a list of sigma values - how much noise gets removed at each step. The stock ones (Normal, Karras, sgm_uniform) compute that list for you. CustomScheduler is the rare node that lets you skip the factory and type the numbers yourself. No model to load, no magic, no dependencies: you write a sigma schedule by hand, it hands you the SIGMAS, and you're done. It's the lowest-tech scheduler node on the shelf, and that's exactly its appeal.

    Why would you ever want that? Because sometimes the schedule you need doesn't exist in a dropdown. Papers like Align Your Steps (AYS) publish exact sigma values for their optimized step counts, and people have been hand-coding those into workflows for years. Or you're copying a shared workflow that arrived with a weird sigma list, or you want to pour more denoising effort into the early steps than any preset gives your SD 1.5/SDXL checkpoint. That last one is the honest home turf: this is a DDPM-style-model tool. On flow-matching models (Flux, Z-Image), the KB's samplers essay is blunt that aggressively reshaped sigma curves mostly break things, and the knob that actually pays there is the timestep shift - not manual sigma sculpting.

    How it works

    The mechanism is embarrassingly simple, and the source confirms it. You set steps (an INT, 1 to 25, default 4) and a bunch of sigma_0 through sigma_25 floats. The node grabs steps + 1 of them - sigma_0 through sigma_steps - packs them into a torch tensor, and returns it as the SIGMAS output.

    That +1 is the bit to internalize. A full-denoise sigma schedule for N steps has N+1 entries, because each entry marks a point on the trajectory and you need one more point than jumps. The last entry should be 0 for a full denoise - the README says this outright, and it's the single most important sentence on the page. Leave the last sigma above zero and you're doing a partial denoise, same as img2img at less than 1.0.

    The SIGMAS output plugs into the sigmas input of KSampler (Advanced), or into SamplerCustom / SamplerCustomAdvanced in a full custom-sampling chain. In practice it replaces the BasicScheduler node in that group - BasicScheduler picks a stock schedule, CustomScheduler is where you stop picking and start typing.

    The inputs that matter

    Honestly, there's only steps and the sigma fields, and the only rules are yours:

    • steps - how many denoising steps. Each step consumes one gap between consecutive sigmas.
    • sigma_0 .. sigma_steps - the schedule itself, as floats between 0 and 100. The defaults (4.12, 1.62, 0.7, 0.04, then zeros) demo a 4-step run.

    Two things the node will not do for you: it won't keep your values descending (set sigma_1 above sigma_0 and you're adding noise mid-run), and it won't fill in values you leave at zero. Bump steps to 8 and the widgets for sigma_4+ appear showing 0 - so you get four steps of real denoising and four that do nothing. Fill every sigma you plan to use.

    One quirk from the code: the node's JavaScript hides the sigma widgets you aren't using (that hide/show trick is borrowed from tinyterraNodes, per the README). It only works if the node is still named exactly CustomScheduler - rename it and the widgets stop collapsing. Cosmetic, but it'll puzzle you.

    Installing it

    No model files, no pip deps - the pack is pure node code plus torch, which ComfyUI already ships. Install it like any custom node:

    • ComfyUI Manager: search "CustomScheduler" and hit Install, or
    • cd ComfyUI/custom_nodes && git clone https://github.com/BlakeOne/ComfyUI-CustomScheduler

    Then restart ComfyUI. It'll appear under Add Node → sampling → custom_sampling → schedulers. That's the whole install story; there is no requirements.txt to babysit.

    Where people get burned

    The pitfalls are all numerical, not mechanical. The last sigma must be zero for a full denoise. Values must descend, because nothing enforces it. And the defaults only fill four steps - set steps above 4 and every extra sigma silently defaults to 0, so your "12-step" render is really a 4-step render with dead air. Export the SIGMAS with a debug node and read the list if you're unsure; zeros in the middle mean wasted steps. And if typing twenty-five numbers sounds miserable, the same author's SchedulerMixer builds custom schedules as a weighted average of the built-in ones - often the saner option when you want a shape, not exact figures.

    Categorysampling/custom_sampling/schedulers

    Inputs (27)

    NameTypeDefaultDescription
    stepsINT41–25
    sigma_0optFLOAT4.120–100
    sigma_1optFLOAT1.620–100
    sigma_2optFLOAT0.700–100
    sigma_3optFLOAT0.040–100
    sigma_4optFLOAT0.000–100
    sigma_5optFLOAT0.000–100
    sigma_6optFLOAT0.000–100
    sigma_7optFLOAT0.000–100
    sigma_8optFLOAT0.000–100
    sigma_9optFLOAT0.000–100
    sigma_10optFLOAT0.000–100
    sigma_11optFLOAT0.000–100
    sigma_12optFLOAT0.000–100
    sigma_13optFLOAT0.000–100
    sigma_14optFLOAT0.000–100
    sigma_15optFLOAT0.000–100
    sigma_16optFLOAT0.000–100
    sigma_17optFLOAT0.000–100
    sigma_18optFLOAT0.000–100
    sigma_19optFLOAT0.000–100
    sigma_20optFLOAT0.000–100
    sigma_21optFLOAT0.000–100
    sigma_22optFLOAT0.000–100
    sigma_23optFLOAT0.000–100
    sigma_24optFLOAT0.000–100
    sigma_25optFLOAT0.000–100

    Outputs (1)

    NameTypeDescription
    SIGMASSIGMAS