A sampler is the algorithm that removes noise from the image step by step. A scheduler decides how big each of those steps is. In ComfyUI and Stable Diffusion WebUIs you pick both, so "DPM++ 2M Karras" means the DPM++ 2M sampler running on the Karras noise schedule. For most SDXL-style models, DPM++ 2M with Karras at 20–30 steps is a safe default. For Flux-style models, Euler with the Simple scheduler is the usual starting point.
This guide explains what each common sampler and scheduler does, which pairs work for which model family, and how to test them yourself without guessing. As of 20 October 2026, it reflects the names in ComfyUI's current source code.
What is the difference between a sampler and a scheduler?
A diffusion model starts from pure noise and removes a bit of it at each step until an image is left. Two separate choices control that process:
- The sampler (solver) is the maths used to take each step. Euler takes a simple first-order step. Heun and DPM++ 2M look at more information per step, so they can reach a clean image in fewer steps.
- The scheduler (noise schedule) sets how much noise is removed at each step. Some schedules spread the steps evenly. Others, like Karras, spend more of the step budget on fine detail near the end.
The ComfyUI community wiki puts it simply: the scheduler controls the number of denoising steps and how strong each step is, while the sampler is the strategy that carries them out. The two are independent. You can run almost any sampler on almost any scheduler. Older WebUIs fused them into one dropdown name ("DPM++ 2M Karras"), which is why people often mix the terms up.
Other settings matter just as much:
| Setting | What it controls | Typical range |
|---|---|---|
| Sampler | How each denoising step is calculated | Euler, DPM++ 2M, UniPC… |
| Scheduler | How noise is spread across the steps | Karras, Simple, Beta, Normal… |
| Steps | How many denoising steps run | 4–8 (distilled), 20–40 (base models) |
| CFG / guidance | How strongly the image follows the prompt | 1 (Flux-style), 4–8 (SDXL-style) |
| Seed | The starting noise | Any number; fix it when testing |
Which samplers does ComfyUI include?
ComfyUI's comfy/samplers.py currently lists more than 40 samplers and nine schedulers. You will only ever need a handful. Here are the ones worth knowing, grouped by how they behave:
Euler and Euler a
Euler is the simplest and fastest sampler. It takes one model call per step and converges, which means more steps give a cleaner version of the same image. It is the default for many modern flow-matching models, including Flux.
Euler a (euler_ancestral) adds fresh noise at every step. That makes results more varied and often softer, but it never fully converges. Raise the step count and the image keeps changing instead of sharpening. Good for exploration, bad for reproducing a result.
Heun
Heun is a second-order method: it calls the model twice per step. You get higher accuracy per step, but each step costs about double. It is useful when you want quality at low step counts and do not mind the extra time.
DPM++ 2M and DPM++ 2M SDE
DPM++ 2M (dpmpp_2m) is a multistep solver from the DPM-Solver++ paper. Its authors report high-quality guided samples in 15 to 20 steps, compared with the 100 to 250 steps DDIM generally needs. It is the classic all-rounder for SD 1.5 and SDXL.
DPM++ 2M SDE (dpmpp_2m_sde) adds a stochastic (noise-injecting) element. Many users find it gives more texture and detail. Like Euler a, it does not converge as cleanly, and it is slower.
DPM++ 3M SDE
A third-order version. It can produce very detailed images but needs more steps to settle, usually 30 or more. Treat it as a specialist option.
UniPC, DDIM, LCM and the rest
- UniPC (
uni_pc) is a fast predictor-corrector solver that does well at low step counts. - DDIM is the original fast sampler from 2020. It is reliable, but it needs many more steps than DPM++ for the same quality.
- LCM is only for Latent Consistency Model checkpoints or LoRAs, which are built to run in about 4 to 8 steps.
- Names ending in
_gpurun the noise generation on the GPU. Names ending in_cfg_ppuse a modified guidance method (CFG++), so they need lower CFG values.
What do the schedulers do?
ComfyUI's scheduler list in its source code is: simple, sgm_uniform, karras, exponential, ddim_uniform, beta, normal, linear_quadratic and kl_optimal.
| Scheduler | How it spaces the steps | Use it for |
|---|---|---|
| Normal | Follows the model's own training timesteps | Safe baseline for SD 1.5 / SDXL |
| Karras | Large steps early, small steps near the end (from Karras et al., 2022) | Sharp detail with DPM++ samplers |
| Exponential | Noise falls off exponentially | Smooth images and clean backgrounds; can lose fine detail |
| Simple | Evenly spaced across the model's sigmas | Flux and other flow-matching models |
| SGM Uniform | Uniform spacing in the style of Stability's SGM code | Lightning/Turbo distilled SDXL models |
| DDIM Uniform | Uniform spacing matched to DDIM | DDIM sampler |
| Beta | Concentrates steps at the start and end of denoising | A strong all-round choice for many newer models |
| Linear Quadratic | Linear early, quadratic later | Added for the Mochi video model; niche for images |
| KL Optimal | Schedule derived to minimise error between steps | Experimental; worth testing at low step counts |
Beta comes from the 2024 paper Beta Sampling is All You Need. Its authors used spectral analysis to show that the largest changes in an image happen at the very start and very end of denoising, so they put more steps there. Karras comes from Tero Karras and colleagues' 2022 paper Elucidating the Design Space of Diffusion-Based Generative Models, which became the basis of the k-diffusion samplers most WebUIs use.
Which sampler and scheduler should I use for each model?
There is no single "best" pair. It depends on how the model was trained. These are sensible starting points, not rules:
| Model family | Sampler | Scheduler | Steps | CFG |
|---|---|---|---|---|
| SD 1.5 | DPM++ 2M | Karras | 20–30 | 6–8 |
| SDXL / Pony / Illustrious | DPM++ 2M or Euler a | Karras | 25–35 | 5–7 |
| SDXL Lightning / Turbo | Euler or DPM++ SDE | SGM Uniform | 4–8 | 1–2 |
| Flux Dev | Euler | Simple or Beta | 20–30 | 1 (guidance ≈ 3.5) |
| Flux Schnell | Euler | Simple | 4 | 1 |
| Chroma / Z-Image-style base models | Euler or Res Multistep | Simple or Beta | 20–30 | 3–5 |
| LCM checkpoints or LoRAs | LCM | SGM Uniform or Simple | 4–8 | 1–2 |
Two of these come straight from ComfyUI's own examples: Flux Schnell is "a distilled 4 step model", and the FP8 Flux Dev checkpoint should run at CFG 1.0 (Flux uses a separate guidance value instead). Always check the model card first. When the model's authors publish recommended settings, theirs beat any general table.
How do I compare samplers properly? (Step by step)
Guessing from other people's screenshots doesn't work, because the seed and prompt change everything. Run a controlled test instead:
- Fix everything except one setting. Same prompt, same seed, same resolution, same CFG.
- Pick three or four candidates. For example: Euler + Simple, DPM++ 2M + Karras, DPM++ 2M SDE + Karras, and UniPC + Beta.
- Use a fair step count. Start at 20 steps for base models, or the model's own count for distilled models.
- Generate a grid. In ComfyUI, an XY Plot custom node or a batch of KSamplers sharing one seed works well. In Forge or A1111, use the X/Y/Z Plot script.
- Judge at full size. Look at hands, eyes, text, fabric and background noise, not just the thumbnail.
- Then sweep steps. With the winner, try 15, 25 and 40 steps. If 25 and 40 look the same, stay at 25 and save time.
- Write it down. Save the winning combo per checkpoint. A pair that is great for SDXL can be wrong for Flux.
Why do my images look noisy, burnt or blurry?
Most sampler problems come from a mismatch, not from a "bad" sampler:
- Grainy or noisy: too few steps for that sampler, or an SDE/ancestral sampler that needs more steps. Add 5 to 10 steps or switch to a converging sampler like DPM++ 2M.
- Burnt, over-saturated colours: CFG is too high, or you are using a
_cfg_ppsampler with normal CFG values. Lower CFG. - Blurry or washed out on Flux: CFG is set above 1 on a guidance-distilled model, or you are using Karras where the model expects Simple or Beta.
- Image changes every time you add steps: you are on an ancestral (
_a) or SDE sampler. That is expected behaviour. - Lightning/Turbo models look fried: they need very few steps (4–8) and low CFG. Running them at 30 steps hurts.
Do I need to set samplers on a hosted AI image generator?
Usually not. Samplers and schedulers matter most when you run open-weight checkpoints yourself in ComfyUI, Forge or A1111. Hosted generators run each model with settings chosen by the model's provider, so you focus on the prompt, the aspect ratio and the references.
That is how Kenerate AI works. As of 20 October 2026, the studio runs open models such as Flux 2 Klein Base 9B (5.25 credits per image), Flux Dev (4.2 credits), Flux Schnell (1.05 credits), Chroma (5 credits) and Z-Image Base (3.5 credits) alongside closed models, without sampler or step dropdowns. If you want to try a model before setting up a local workflow, the online Flux generator and Stable Diffusion online pages are a quick way to see what it can do. If your images are off, the prompt is the bigger lever there. The prompt enhancer rewrites a short idea into a detailed prompt.
| Local (ComfyUI / Forge) | Hosted (e.g. Kenerate) | |
|---|---|---|
| Sampler and scheduler choice | Full control | Set by the provider |
| Custom LoRAs and checkpoints | Any | The models offered |
| Hardware | Your GPU | None needed |
| Best for | Fine-tuning a look, research | Fast results, many models in one place |
What are the quick takeaways?
- Sampler = how each step is taken. Scheduler = how big each step is.
- DPM++ 2M + Karras is the classic SD 1.5 / SDXL default. Euler + Simple (or Beta) is the classic Flux default.
- Ancestral and SDE samplers never fully converge, so use them for variety, not for reproducing an image.
- Distilled models (Schnell, Lightning, LCM) need few steps and low CFG.
- Test with a fixed seed and a grid. Trust the model card over generic advice.
Sources
- ComfyUI source code,
comfy/samplers.py(sampler and scheduler names): https://github.com/comfyanonymous/ComfyUI/blob/master/comfy/samplers.py - ComfyUI Wiki, Sampler node: https://comfyui-wiki.com/en/comfyui-nodes/sampling/sampler
- Lu et al., DPM-Solver++: Fast Solver for Guided Sampling of Diffusion Probabilistic Models: https://arxiv.org/abs/2211.01095
- Karras et al., Elucidating the Design Space of Diffusion-Based Generative Models: https://arxiv.org/abs/2206.00364
- Lee et al., Beta Sampling is All You Need: https://arxiv.org/abs/2407.12173
- ComfyUI Examples, Flux: https://comfyanonymous.github.io/ComfyUI_examples/flux/






