Schedulers: The denoising algorithms behind image generation

The denoising algorithms that guide diffusion models from noise to image, each with different speed and quality tradeoffs.

Introduction

The scheduler parameter (sometimes called "sampler") defines the mathematical algorithm that guides the denoising process in diffusion models. Each scheduler follows a different denoising trajectory, affecting image quality, generation speed, and the character of the output.

Schedulers determine how noise is removed over time. Some remove noise in large, aggressive steps, producing results faster. Others take smaller, more precise steps that refine detail at the cost of speed. The choice of scheduler can visibly change the output even when all other parameters stay identical.

Schedulers are supported on SD 1.5, SDXL, FLUX, and community models built on these architectures. Third-party models like Recraft, Ideogram, Kling, and Luma handle their denoising internally and do not expose scheduler selection. If you're using one of these models, you can skip this parameter.

Request structure

The scheduler parameter is a string passed at the top level of your generation request.

[
  {
    "taskType": "imageInference",
    "model": "civitai:101055@128078",
    "positivePrompt": "A dreamy portrait of a woman in a misty forest at dawn",
    "scheduler": "DPM++ 2M Karras",
    "steps": 30,
    "width": 1024,
    "height": 1024
  }
]

If you omit scheduler, the model uses its default algorithm. For most models, this default produces solid results, so you only need to specify a scheduler when fine-tuning output characteristics.

Reading scheduler names

Scheduler names follow a pattern. Once you understand the components, any name becomes readable:

Base algorithm:

  • DPM++ (Diffusion Probabilistic Models++): An improved family of probabilistic solvers. The ++ denotes a newer generation that's faster and more accurate than the original DPM.
  • Euler: A numerical ODE solver. Simple and fast. One of the quickest schedulers available.
  • Heun: A second-order version of Euler. It runs two evaluations per step (predict then correct), producing more accurate results at roughly double the cost.
  • LMS (Linear Multi-Step): Uses information from previous steps to improve accuracy. Slower to converge than Euler but can be more precise.
  • UniPC (Unified Predictor-Corrector): A solver that combines prediction and correction in each step. Designed to produce quality output at very low step counts.
  • DDIM (Denoising Diffusion Implicit Models): One of the earliest schedulers. Deterministic and fast, but generally surpassed by newer options.

Order suffix:

  • 2M (second-order, multi-step): Uses information from multiple steps and runs two evaluations per step. Better accuracy, slightly slower.
  • 2S (second-order, single-step): Two evaluations per step but no cross-step memory. Faster than 2M but less accurate.
  • 3M (third-order, multi-step): Three evaluations per step with cross-step memory. The most accurate DPM++ variant, best at higher step counts (40+).

Noise schedule:

  • Karras: An improved noise schedule from Nvidia research that distributes the denoising effort more efficiently. Most visible at lower step counts (10-25) where the default schedule wastes steps.
  • Exponential: An alternative noise schedule that allocates more denoising to early steps. Similar goals as Karras, sometimes better for high-step-count runs.
  • Beta / Uniform: Other noise schedule variants with different distribution curves.

Stochastic modifier:

  • SDE (Stochastic Differential Equations): Adds controlled randomness at each step. Produces more organic, natural-looking textures but prevents exact reproducibility. A scheduler with SDE in the name never fully converges.
  • Ancestral (or a in names like Euler a): Re-introduces a small amount of noise after each denoising step. Like SDE, this prevents convergence and produces varied output across runs.

So when you see DPM++ 2M SDE Karras, you can read it as: DPM++ base algorithm, second-order multi-step solver, with stochastic noise injection, using the Karras noise schedule.

Deterministic vs. stochastic schedulers

Schedulers fall into two broad categories that affect output character:

Deterministic schedulers (DDIM, DPM++ 2M Karras, UniPC) produce the same result every time given the same seed and parameters. These schedulers converge: they reach a point where more steps produce no visible improvement. They tend to generate cleaner lines and more precise structures, making them strong choices for architectural scenes, product renders, and any case where consistency matters.

Stochastic schedulers (Euler Ancestral, DPM++ 2M SDE, DPM++ 3M SDE) introduce controlled randomness at each step. These schedulers never converge because new noise is injected in each step, so more steps produce different output, not necessarily better output. This produces more organic textures and natural-looking variation, which works well for portraits, landscapes, and artistic output. The tradeoff is that results vary between runs even with the same seed.

Scheduler and step count interaction

Schedulers interact with the steps parameter in different ways. Some schedulers converge quickly and produce diminishing returns above 25-30 steps, while others continue improving up to 50+ steps.

  • Fast-converging (Euler, UniPC, LCM): Good results at 15-25 steps. Higher counts add minimal improvement.
  • Detail-oriented (DPM++ 3M, DPM++ 2M SDE): Continue refining up to 40-50 steps. The extra time is most visible in textures and fine detail.
  • Ancestral/stochastic: Quality improves with steps, but the output also becomes more varied. Higher step counts don't guarantee "better" results, just different ones.

When optimizing for speed (batch processing, real-time applications), pair a fast scheduler like Euler or UniPC with 15-20 steps. When quality matters more than speed, use DPM++ 2M Karras or DPM++ 3M Exponential with 30-50 steps.

Tips

  1. Start with DPM++ 2M Karras. It's the most reliable general-purpose scheduler across SD 1.5 and SDXL. Good balance of speed and quality at 25-30 steps.
  2. Use deterministic schedulers for reproducible work. If you need the same seed to produce identical output every time, avoid ancestral and SDE variants — they inject randomness that makes exact reproduction impossible.
  3. Lower step counts for prototyping. When iterating on prompts, use Euler at 15 steps for fast previews. Switch to a higher-quality scheduler once you've locked your prompt and seed.
  4. Don't assume more steps = better. Deterministic schedulers converge at 30-40 steps. Beyond that, you're spending compute for no visible improvement. Stochastic schedulers never converge, so extra steps just produce different variations.
  5. Check the model's recommended scheduler. Community models on Civitai often list a preferred scheduler. Using the one the model was trained or tested with tends to produce the best results.