Practical TL;DR of Samplers
Iteration Speed (How Long 1 Step Takes)
| How much slower | Sampler |
|---|---|
| 1x | euler, euler_cfg_pp, euler_ancestral, euler_ancestral_cfg_pp, dpm_fast, dpmpp_2m, dpmpp_2m_cfg_pp, dpmpp_2m_sde, dpmpp_2m_sde_gpu, dpmpp_3m_sde, dpmpp_3m_sde_gpu, ddpm, lcm, ipndm, ipndm_v, deis, res_multistep, res_multistep_cfg_pp, res_multistep_ancestral, res_multistep_ancestral_cfg_pp, gradient_estimation, gradient_estimation_cfg_pp, er_sde, sa_solver, ddim, uni_pc, uni_pc_bh2 |
| 2x | heun, dpm_2, dpm_2_ancestral, dpmpp_2s_ancestral, dpmpp_2s_ancestral_cfg_pp, dpmpp_sde, dpmpp_sde_gpu, seeds_2, sa_solver_pece, exp_heun_2_x0, exp_heun_2_x0_sde |
| 3x | heunpp, seeds_3 |
For example, it takes the same amount of time to run euler for 20 steps and to run dpmpp_sde for 10 steps.
Notes on more special samplers:
dpm_fastswitches between theDPM-3,DPM-2, andDPM-1algorithm in a way that the total time spent is the same aseulerif you set the same amount of steps, while each step may take differing amounts of time.dpm_adaptiveignores the scheduler and decides how many steps to run on its own.
Noisy Samplers That Keep Change Composition
ddpmrestartseedssa_solver(_pece)- Any sampler with
ancestral (A)in the name - Any sampler with
sdein the name
Generally, these samplers beat their non-composition-changing brethren if you use higher step counts.
Opinionated Sampler Choices
How many steps to use concretely obviously depends on the model. However in general:
- Note the
eulerfamily will generally be slightly blurrier. Consider using it if that's preferrable, or using a distilled model, or in other nicher situations. - Consider non-noisy samplers (ODE) when using low-medium step count.
res_multistepis usually a sane default for most situations.gradient_estimationoruni_pccan be a bit sharper / more saturated.
- Consider noisy samplers (SDE) when using medium-high step count.
er_sdeis usually a sane default for most situations.sa_solver(_pece)can be a bit sharper / more saturated.- As of 16/Mar/2026, in ComfyUI, all
ancestralsamplers are broken on flow matching models excepteuler_ancestralanddpmpp_2s_ancestral. This is due to missing scaling by a renoising coefficient.
- Try
_cfg_ppvariants when available to see if you prefer them. Start withcfg=1and nudge it slightly higher to e.g.1.5if coherency issues appear. - As of 16/Mar/2026, in ComfyUI, all
cfg_ppsamplers are broken on flow matching models excepteuler_cfg_pp. This is due to missing a scaling factor of \(\alpha_t=1-\sigma_t.\) - Consider
lcmor a noisy sampler when using distilledsdxl, such asdmd2, hyper, turbo. (These used techniques distinct from newer distills such asZIT, Flux.2-[klein]-base, Flux.2-[klein], etc. which is whysdxldistills wants lots of noise.)
Common Misconceptions
Euler sampler is the worst one.
While euler is indeed the "most inaccurate" sampler (details #here), accuracy is not directly related to whether the final output is aesthetically pleasing to you.
DPM++ 2M takes longer than Euler.
Practically false. dpmpp_2m does more calculations yes, but at most that's a few extra milliseconds - which is nothing when the time spent running the model each step takes seconds.
Since bpth dpmpp_2m and euler run the model exactly once each step, they are effectively the same speed. This is also why #iteration speed nicely separates into 1x, 2x, 3x etc brackets - samplers that run the model once, twice, or thrice per step fall into those brackets respectively.
DPM++ 2M uses more VRAM than Euler.
Practically false. dpmpp_2m needs to additionally store the previous image latent yes, but those are tiny. Assuming you're using Flux2 VAE, the one that produces the largest latents on the market right now, the latent for a 1024x1024 still only takes ~0.5MB of vram.