Nodes/DemonAlone-nodes-ComfyUI/Scheduler Selector
ComfyUI Node

Scheduler Selector

Nine names, and the one you pick can break a whole model family

By DemonAlone·Created 9 months ago·Updated about 20 hours ago· 6
Scheduler Selector
    • scheduler_name
    • scheduler_name_str
    ◄scheduler_name▾►

    The scheduler is the half of the sampler pair everyone ignores. You picked dpmpp_2m because a tutorial told you to in 2023, you've never once opened the dropdown next to it, and if your renders on a 2026 model look like burnt plastic it's probably that dropdown's fault, not the sampler's.

    Scheduler Selector puts that choice on a wire so you can sweep it - and so you can stop retyping sgm_uniform in three places.

    How it works

    Same pattern as its sampler sibling: one combo, two outputs, two lines of Python.

    def get_scheduler(self, scheduler_name):
        return scheduler_name, scheduler_name
    

    scheduler_name is declared with ComfyUI's scheduler enum type, so it plugs into a converted scheduler widget on a KSampler. scheduler_name_str is a plain STRING carrying the identical text, for anything that wants the name as text - labels, filenames, template nodes, or the pack's Scheduler Selector From String companion.

    The menu comes from comfy.samplers.KSampler.SCHEDULERS at load time, and in the build I checked that's nine entries: simple, sgm_uniform, karras, exponential, ddim_uniform, beta, normal, linear_quadratic, kl_optimal. Note what isn't there: the pack's generator nodes offer a none option so you can skip an axis slot, but this selector doesn't - it always hands out a real schedule.

    What the nine mean, and which one is a trap

    The scheduler decides how much noise gets removed at each step; the sampler decides how. normal is roughly linear. karras (from NVIDIA's EDM paper) concentrates the work in the middle steps, which genuinely helps at low step counts on models that need it. sgm_uniform and its relatives exist because distilled models were trained on them. beta and simple redistribute the least.

    That framing is where the family split lands, and it's the most useful thing on this page:

    • SD 1.5 / SDXL / Illustrious / Pony: karras is the correct default. These predict noise along a curved trajectory, and a reshaped sigma curve is a correction.
    • Flow-matching models - Flux, Z-Image, Klein, Anima: karras and exponential are not "worse", they're broken. A 62-sampler by 16-scheduler sweep on Z-Image Turbo found those two failing across every sampler, and the mechanism given was that the model wants balanced sigmas and dislikes aggressive redistribution of denoising effort. Use beta, simple or linear_quadratic.
    • Distilled checkpoints (Lightning, Turbo, Hyper): match the schedule the student was trained on - usually sgm_uniform. Running a distilled model on Karras at 20 steps is the classic recipe for oversaturated mush.
    • kl_optimal is real and rarely the answer. If you don't know why you'd want it, you don't want it.
    • ddim_uniform is the one you reach for when you're reproducing an old A1111-era recipe and the numbers don't quite match.

    If you install a pack that registers extra schedules - RES4LYF's beta57 is the one people actually use - it can show up in this dropdown, because the list is whatever your backend reports. One corollary worth filing away: some third-party schedules apply their own sigma shift and ignore the workflow's timestep shift, so if shift suddenly "does nothing", suspect the scheduler before the shift node.

    Wiring it

    Right-click the scheduler field on your KSampler → Convert widget to input → connect the typed output. For a sweep, feed the scheduler from an iterator alongside the sampler and the labels from the string output, so each cell of the grid is labelled with the schedule that produced it rather than with your memory of what you queued.

    Install

    cd ComfyUI/custom_nodes
    git clone https://github.com/DemonAlone/DemonAlone-nodes-ComfyUI
    cd DemonAlone-nodes-ComfyUI
    pip install -r requirements.txt
    

    Or find DemonAlone-nodes-ComfyUI in ComfyUI Manager, install, restart. Nothing to download beyond the pack; the only pip dependency is piexif, used by unrelated image nodes. It appears as Scheduler Selector under utils.

    Things that go wrong

    The whole pack is missing after install. The usual cause: piexif never got installed. It's imported at the top of image_utilites.py, so a failed import kills the package before any node registers - including this one, which doesn't use it at all. Run the pip line and restart.

    You swept schedulers and three cells came back black or as noise. karras and exponential on a flow-matching model can fail outright, not just look worse. That's a result, not a bug - note it and drop them from the sweep.

    The scheduler output is wired but nothing changed. Confirm you converted the widget on the same node that actually samples. Multi-KSampler graphs - base pass plus refiner, or a hires-fix pass - frequently end up with the wire on one and the old value still baked into the other, which reads as "sweeping did nothing" when half the output was never swept.

    Categoryutils

    Inputs (1)

    NameTypeDefaultDescription
    scheduler_nameCOMBO9 options: simple, sgm_uniform, karras, exponential, ddim_uniform, beta, +3

    Outputs (2)

    NameTypeDescription
    scheduler_namesimple,sgm_uniform,karras,exponential,ddim_uniform,beta,normal,linear_quadratic,kl_optimal—
    scheduler_name_strSTRING—