Same descent either way. The argument is only ever about how the treads are spaced.
One dropdown is the algorithm. The other is the spacing. Almost nobody separates them.
Somebody in a Discord asks which sampler is best. Four people answer with four different strings, one of them is "dpmpp_2m_sde_gpu with karras trust me," and nobody explains anything. That exchange happens every day, and it happens because two separate settings got collapsed into one piece of folklore.
Open the KSampler node in a current ComfyUI build and count. The sampler list in comfy/samplers.py holds 41 entries. The scheduler list holds nine: simple, sgm_uniform, karras, exponential, ddim_uniform, beta, normal, linear_quadratic, kl_optimal. That is 369 pairings sitting in two dropdowns with no tooltip between them.
The split is simple once someone says it out loud.
Denoising walks the image from pure noise down to zero noise across a set of discrete stops. The scheduler chooses where those stops are. The sampler chooses how you get from one stop to the next.
A staircase and a walking style. The scheduler cuts the treads. The sampler is the gait.
Every one of those 41 names is a numerical integration method borrowed from differential equations, and the naming is honest about it. Euler is the plainest possible step: look at the model's prediction, move that far, repeat. Heun takes a trial step, looks again from the new position, and averages the two directions, which costs roughly double the model calls per step and lands more accurately.
The DPM family solves the same equation with methods designed for it specifically. The digits tell you the order and the history: dpmpp_2s is single-step second order, dpmpp_2m is multistep second order and reuses the previous prediction instead of paying for a second model call, dpmpp_3m_sde keeps three.
Two suffixes carry real meaning and are worth memorising. Ancestral samplers inject fresh random noise at every step, which is why euler_ancestral never fully converges: push it to 60 steps and you do not get a more resolved version of the 20 step image, you get a different image. SDE variants are stochastic in a related way. The deterministic ones, plain euler and dpmpp_2m, settle toward a fixed answer as steps increase.
The lineage is documented, not folklore. Diffusers describes its EulerAncestralDiscreteScheduler as ancestral sampling with Euler method steps, based on the original k-diffusion implementation by Katherine Crowson, and notes it "can often generate good outputs in 20 to 30 steps." Its defaults are num_train_timesteps=1000, beta_start=0.0001, beta_end=0.02, beta_schedule="linear", prediction_type="epsilon".
The scheduler is a curve, and the difference between curves is where they spend your steps.
Karras sigmas are the famous one, and Diffusers states the reasoning plainly: they resample the noise schedule by "clustering sigmas more densely in the middle of the sequence where structure reconstruction is critical, while using fewer sigmas at the beginning and end where noise changes have less impact." Turn it on with use_karras_sigmas=True. The documentation adds a caveat people skip: it "should only be used for models trained with Karras sigmas."
ComfyUI's beta scheduler is a beta distribution over the schedule with both shape parameters fixed at 0.6 in the source, which pushes density toward both ends rather than the middle. Different philosophy, same job.
Underneath the curve there is a second, smaller choice that changes results more than its obscurity suggests: which timesteps get sampled at all. Diffusers documents three strategies.
| Spacing | What it does | Example timesteps |
|---|---|---|
leading | Evenly spaced steps | 900, 800, 700 ... 100, 0 |
linspace | Includes first and last, evenly divides the rest | 1000, 888.89, 777.78 ... 111.11, 0 |
trailing | Includes the last step, divides from the end backward | 999, 899, 799, 699 ... 199, 99 |
The docs say trailing "typically produces higher quality images with more details with fewer steps," while adding the honest qualifier that "the difference in quality is not as obvious for more standard step values." So it earns its keep on a five step render and mostly disappears on a thirty step one.
Here is the most concrete thing in this entire guide. Diffusers ships a hand-tuned timestep schedule from NVIDIA's Align Your Steps work, and the SDXL variant is an actual short list of numbers you can paste:
[999, 845, 730, 587, 443, 310, 193, 116, 53, 13]
Ten values. The documentation claims it "can generate a high-quality image in 10 steps." You import AysSchedules, grab StableDiffusionXLTimesteps, and pass it to the pipeline's timesteps argument. The paired sigma version, for schedulers that take sigmas instead, is [14.615, 6.315, 3.771, 2.181, 1.342, 0.862, 0.555, 0.380, 0.234, 0.113, 0.0].
Look at the gaps. From 999 to 845 is 154. From 53 to 13 is 40. The schedule takes enormous strides while the image is still mush and small careful ones once structure exists, which is exactly the intuition Karras sigmas encode, tuned by hand for one model family instead of derived from a formula.
Diffusers publishes its own short list, and it is more useful than any community poll:
TCDScheduler "works well for distilled models."FlowMatchEulerDiscreteScheduler and FlowMatchHeunDiscreteScheduler for FlowMatch models, which is the family Flux belongs to.LCMScheduler on SDXL for realistic images.That is four working recommendations out of 369 possible pairings, published by the people who maintain the implementations. Start there and stop reading Discord.
ComfyUI's KSampler defaults are the reference point every comparison should start from: steps 20, cfg 8.0 with a permitted range of 0.0 to 100.0, denoise 1.0 with a step of 0.01, and a seed field that accepts anything up to 18446744073709551615.
Change one at a time. Sampler alone, with the scheduler and everything else frozen. Then scheduler alone. A grid that varies both at once tells you which cell you liked and nothing about why.
And if your high-CFG renders come out scorched, that is a third dial, not a sampler problem. ComfyUI ships a RescaleCFG node whose multiplier defaults to 0.7 on a 0.0 to 1.0 range, implementing the fix from the paper "Common Diffusion Noise Schedules and Sample Steps are Flawed." Diffusers exposes the same idea as guidance_rescale, and its own example also uses 0.7.
The received wisdom is that sampler choice is a major creative decision. It is not, most of the time. On a well-trained modern checkpoint at 25 to 30 steps, the gap between dpmpp_2m and dpmpp_3m_sde is smaller than the gap between two adjacent seeds. People attribute enormous quality differences to the dropdown because they changed it, got a different image, and read the difference as improvement rather than as a different sample.
The honest counterpoint is that low step counts flip this completely. At 6 or 8 or 10 steps, where distilled models and turbo checkpoints live, the sampler and the schedule are doing most of the work and the wrong pair will visibly fall apart. That is precisely the regime Align Your Steps and the trailing spacing note were written for.
So the rule is about where you are operating. Above 25 steps, pick the documented all-purpose option, leave it, and put your attention into the prompt and the composition. Below 15, the two dropdowns become real controls and deserve a proper grid.
Pick one image you have already made. Rerun it at 10 steps with the AYS schedule, then at 10 steps with your usual scheduler, same seed, same everything. Whichever way that comparison lands, you will have learned more about these two dropdowns in four minutes than a year of copying settings out of chat logs.