Skip to main content

Scheduler Options

The scheduler parameter in the KSampler node determines how noise is added and removed across the diffusion process, i.e., how your model hallucination spirals into a majestic image instead of becoming pixel soup.

Different schedulers shape the trajectory of denoising across timesteps—some ramp up slowly and gently (like a spa day for your U-Net), while others hit it hard and fast (like Monday morning meetings).

⚠️ TL;DR: Choosing the wrong scheduler can make even the best checkpoint and sampler combo underperform. Choose wisely, and don't just throw karras at everything like it's seasoning.


🧭 Available Schedulers

Each of these is a timestep weighting function—a fancy way to say it controls how noise levels change during sampling.

SchedulerDescriptionStrengthsWeaknessesBest Use Case
normalLinear timesteps. Simple, straightforward.Predictable, works well with basic samplers.Not optimized for high-frequency detail.Baseline testing, quick iterations.
karrasSigmoid-inspired distribution from Karras et al. (yes, that Karras). Emphasizes low-noise steps.More steps in low-noise region = sharper results.Needs compatible samplers like dpmpp_*.High-quality render goals, realism checkpoints.
exponentialApplies an exponential weighting curve.Adds flexibility in contrast and detail gradation.May over-emphasize early noise steps.Stylized or abstract renders.
sgm_uniformUniform SDE sampler from Score-Based Generative Modeling.Balanced treatment across steps.Doesn’t favor fine detail as much.Experimental workflows or SGM-style outputs.
simpleEven simpler than normal—fixed intervals.Good for debugging or ultra-fast tests.Crashes and burns with complex prompts.Internal testing, stress scenarios.
ddim_uniformUniform steps used in DDIM (Deterministic Denoising Implicit Models).Consistent, reliable for DDIM.May lack sharpness in fewer steps.DDIM workflows, predictable outputs.
betaUses a beta schedule curve, often for noise variance control.Smooth interpolation, soft gradients.Requires tuning to really shine.Portraits, fantasy art.
linear_quadraticTimesteps follow a linear-to-quadratic curve.Gradual build-up; favors softer transitions.Can appear too “blurred” at low steps.Landscapes, inpainting workflows.
kl_optimalKL divergence optimized scheduler (yes, it’s as nerdy as it sounds).Produces highly optimized, compressed noise profiles.Extremely picky with samplers.Research-level workflows, when min-maxing every pixel.

🛠️ How Each Scheduler Works (In Painstaking Detail)

🔹 normal

  • Curve: Linear (e.g., timestep 1, 2, 3, ..., N).
  • What It Does: Assigns equal weight across timesteps.
  • Why It Matters: Offers the most “average” trajectory. Works fine with samplers like euler, heun, or dpm_fast.
  • Good For: Basic tests, learning workflows, and as a fallback when the rest don’t work.

🔹 karras

  • Curve: Sigmoid-ish. Condenses most denoising toward the lower-noise region (the end).
  • What It Does: Saves more time for fine detail at the end, delaying major denoising until later.
  • Why It Matters: It’s the darling of high-fidelity image samplers (dpmpp_2m, dpmpp_sde, etc.).
  • Good For: Realism, detail-heavy workflows, portraits, concept art.
  • Caution: Pair only with samplers designed to play nicely—otherwise you’ll wonder why your image looks like it went through a microwave.

🔹 exponential

  • Curve: Rapid early steps, diminishing returns.
  • What It Does: Gets most of the denoising done early.
  • Why It Matters: Good for stylized workflows or high-noise, fast-degeneration scenarios.
  • Good For: Abstract renders, anime styles, wild style LoRAs.
  • Watch Out: Might blow past fine details.

🔹 sgm_uniform

  • Curve: Uniform spread, SDE-compliant.
  • What It Does: Applies Score-Based Generative Modeling’s noise treatment uniformly.
  • Why It Matters: Helpful if you’re using an SGM-based model or exploring consistency in variance across timesteps.
  • Good For: Science! Experiments! 🤓

🔹 simple

  • Curve: Dumb as bricks—just flat.
  • What It Does: Applies no intelligence to the steps. A scheduler only in name.
  • Why It Matters: It doesn’t, unless you’re benchmarking something.
  • Good For: Testing custom scheduler integrations.

🔹 ddim_uniform

  • Curve: Uniform timestep schedule tailored to DDIM.
  • What It Does: Equal distribution for deterministic sampling.
  • Why It Matters: Stable results if you're using ddpm or ddim samplers.
  • Good For: Low-step fast generations, consistency over multiple runs.

🔹 beta

  • Curve: Beta-distribution (as in statistics, not “early release”).
  • What It Does: Tightly controls noise variance.
  • Why It Matters: Helpful in smoothing harsh noise transitions.
  • Good For: Soft transitions, background-heavy compositions, vintage-looking styles.

🔹 linear_quadratic

  • Curve: Starts linear, ends quadratic.
  • What It Does: Gracefully builds up noise decay, almost like a cinematic pan.
  • Why It Matters: Creates more natural gradients and transitions.
  • Good For: Scenic illustrations, dreamy atmospheres.

🔹 kl_optimal

  • Curve: Custom-fitted for minimizing Kullback-Leibler divergence.
  • What It Does: Matches denoising to information-theoretic optimal paths.
  • Why It Matters: This is for math nerds and research papers. Optimized for minimal image loss.
  • Good For: Quantitative benchmark work, precision-tuned generation.
  • ⚠️ Danger: May explode (metaphorically) if used with incompatible samplers.

🧪 Compatible Sampler Pairings (Summary Table)

SchedulerBest Samplers
normaleuler, heun, dpm_fast, ddpm
karrasdpmpp_2m, dpmpp_sde, dpmpp_2s_ancestral
exponentialeuler_ancestral, heunpp2, dpm_adaptive
sgm_uniformdpmpp_sde, heun, ddpm
simpledpm_fast, ddpm, euler
ddim_uniformddpm, dpm_adaptive, simple
betadpmpp_2m_cfg_pp, heun, dpmpp_sde_gpu
linear_quadraticeuler_cfg, heunpp2, dpmpp_2s_ancestral_cfg_pp
kl_optimaldpmpp_sde, dpmpp_sde_gpu, dpmpp_2m

Want to learn more about samplers? Check out even more documentation here!


🧠 Pro Tips

  • Consistency across renders: If your results suddenly start melting like wax fruit, check if the scheduler changed on accident.
  • Experimentation: Each scheduler interacts differently with steps and denoise strength. Keep those constant if you want valid A/B tests.
  • Match your scheduler to your sampler: Treat them like best friends. Or frenemies—either way, they’ve got chemistry, so don’t mismatch.

🔥 What-Not-To-Do-Unless-You-Want-a-Fire

Because sometimes, you just want to watch your GPU cry.

❌ Don’t Mix karras With Non-Compatible Samplers

If you're out here trying to use karras with euler or heun, just... no. They weren't designed to play nice. You’re essentially asking a potato to run a sprint. You will get mud (i.e., blurry results and artifacts).

🔥 Symptom: Images that are either grotesquely smooth or inexplicably noisy.
👎 Why: karras expects samplers like dpmpp_2m, dpmpp_sde, etc., that understand its fancy "low-noise priority" scheme.

❌ Using kl_optimal Without a Degree in Statistical Thermodynamics

Yes, it's called “optimal,” but if you're not pairing it with the correct KL-aware samplers or you're running 4 denoise steps hoping for a miracle, you're not optimizing anything—you’re inviting entropy.

🔥 Symptom: Either nothing renders, or you get something that looks like modern art... but not in a good way.
👎 Why: KL-optimal schedules assume high sampler precision and lots of steps.

❌ Cranking Scheduler + Sampler Settings Without Adjusting Denoise

Let’s say you picked karras and dpmpp_2m, great. But then you leave your denoise at 0.9 and wonder why everything looks like it was pulled from a VCR in 1993.

🔥 Symptom: Overbaked, grainy images with lost details and lighting gone rogue.
👎 Why: These schedulers require thoughtful denoise balancing—especially around 0.4–0.7.

❌ Assuming All Schedulers Are Created Equal

They’re not. You wouldn't put diesel in a Tesla, right? (Okay, maybe you would. That's why this section exists.)

🔥 Symptom: Dull, inconsistent results even with high-quality checkpoints.
👎 Why: The scheduler directly influences how well the sampler interprets latent space. Compatibility is key.

❌ Running High-Step linear_quadratic Without Patience or a Coffee IV

Yes, it can be buttery smooth—but it’s slow. Like slow-cooker slow. If you’re in a 30-step render using that with dpmpp_2s_ancestral_cfg_pp, congrats—you’ve now entered ComfyUI retirement mode.

🔥 Symptom: Performance bottlenecks and render times that rival cooking a turkey.
👎 Why: Heavy step weighting + high step count = latency hell.

❌ Blindly Copy-Pasting Settings From Some Random Reddit Workflow

Just because "some guy" posted a great result with sgm_uniform and heunpp2 doesn’t mean your project—or checkpoint—is compatible.

🔥 Symptom: Mild panic as every output is just slightly wrong.
👎 Why: Context matters. That workflow might use a LoRA, specific VAE, or niche base model.


🧯 Golden Rule: The Scheduler Is Not a Skin Cream

Don't just apply it and hope for the best. It’s not surface-level—it controls the soul of the denoising arc. Treat it with respect. Or better yet, RTFM (which you're doing right now, so gold star for you).