XY Inputs: Sampler/Scheduler //EasyUse
Sampler/Scheduler (ComfyUI Easy Use) — build a sampler comparison grid
- X or Y
This is the node that answers "which sampler and scheduler should I actually use for this model?" - by generating the grid and looking, instead of guessing. You hand it a list of samplers and schedulers, plug it into Easy Use's XY Plot, and it renders the same seed and prompt once per combination into a labeled sheet. The systematic sampler sweep, packaged as one node.
It's part of ComfyUI Easy Use by yolain, an efficiency pack built on the older TinyTerra nodes that extends ComfyUI's XY-plotting well past stock. This node is a feeder - it doesn't plot anything itself. It builds one axis of a grid.
Why you'd reach for it
ComfyUI's dropdown has grown past 60 samplers and 16 schedulers, and "which one" has no single answer anymore. The honest guidance is to take the pair off your model card first. But when the card is silent, or you're chasing the last few percent, a sweep is how the community decides - grid every reasonable option on a fixed seed and read the winners off. That's the format this node produces.
One caveat before you burn the compute: a sweep is a shortlist, not a verdict. The "best" pair shifts with subject matter - a favorite euler + beta57 for photoreal loses to res_2m + simple for anime, same run. Read a grid as "the five that don't fall apart," not "cell 14 is correct."
How it works
Three things drive it:
target_parameter- picksampler,scheduler, orsampler & scheduler; this decides what varies along the axis. "sampler & scheduler" pairs them, so each cell is a specific sampler with a specific scheduler rather than a full cross.input_count- how many entries to compare, 1 to 30. This reveals that manysampler_N/scheduler_Nslots.sampler_1…30andscheduler_1…30- the actual choices. Samplers offer the full ComfyUI list (euler, euler_ancestral, dpm_2, heun, lms, and dozens more); schedulers offersimple,sgm_uniform,karras,exponential,beta,normal,linear_quadratic,kl_optimaland more, plusNone.Noneis your "leave this slot empty," handy when you setinput_counthigh.
The single output is X or Y (type X_Y). It plugs into the X or the Y input of the Easy Use XY Plot node. Feed one into X and another XY-Inputs node into Y for a full 2D grid; feed just one for a single row or column.
The part the grid won't tell you
The node renders images; it doesn't know diffusion theory. Here's what makes a grid actually readable:
Lock your seed. The whole point is changing one variable while everything else holds. If the seed drifts, you're comparing noise, not settings - the single most important habit in all of ComfyUI debugging.
Mind converging vs ancestral samplers. Converging ones (euler, dpm++ 2M, ddim, unipc) settle on a stable image, so their cells are honest comparisons. Ancestral ones (euler_ancestral, dpm++ sde) inject fresh noise every step and never settle - their cells differ partly because of the sampler and partly because they're just a different image. Fine to include, just know what you're looking at.
Don't waste cells on Karras or exponential on a flow-matching model. On Flux, Z-Image, Klein, Anima and other rectified-flow models, karras and exponential don't merely underperform - they fail across the board, because those models train on a near-straight trajectory that an aggressively reshaped noise schedule distorts rather than corrects. On SD 1.5 / SDXL and their finetunes (Illustrious, Pony, NoobAI) it's the opposite - karras is the classic default and belongs in the sweep. Know your checkpoint's architecture family before you fill the slots.
Watch the combinatorics
input_count goes to 30. A 30-by-30 grid is 900 generations of the same prompt - a long coffee break, most of it wasted on combinations you could rule out on paper. Start narrow, five or six candidates that suit your model, and widen only if the winners are close. Confirm a shortlist; don't brute-force the dropdown.
Installing it
It ships with the whole pack:
- ComfyUI Manager - search ComfyUI Easy Use (or
ComfyUI-Easy-Use), install, restart. - Manual -
cd ComfyUI/custom_nodes && git clone https://github.com/yolain/ComfyUI-Easy-Use, install requirements (install.baton Windows, orpip install -r requirements.txt), restart.
No model downloads. It isn't standalone: you need the Easy Use XY Plot node to plug into, and a real generation pipeline (an easy pre-sampling / kSampler setup) behind that. Drop it on the canvas alone and nothing happens - it's an input, not a workflow.
If nothing renders
The usual culprits: the X or Y output isn't connected to the XY Plot node, or the pipeline downstream of XY Plot isn't wired to a sampler at all. Leftover slots default to None, which is fine, but a grid of all-None produces nothing. And if a whole column comes out fried garbage, you probably swept karras/exponential onto a flow-matching model - the theory biting, not a bug.
Inputs (62)
| Name | Type | Default | Description |
|---|---|---|---|
| target_parameter | COMBO | 3 options: sampler, scheduler, sampler & scheduler | |
| input_count | INT | 11–30 | — |
| sampler_1 | COMBO | 45 options: None, euler, euler_cfg_pp, euler_ancestral, euler_ancestral_cfg_pp, heun, +39 | |
| scheduler_1 | COMBO | 10 options: None, simple, sgm_uniform, karras, exponential, ddim_uniform, +4 | |
| sampler_2 | COMBO | 45 options: None, euler, euler_cfg_pp, euler_ancestral, euler_ancestral_cfg_pp, heun, +39 | |
| scheduler_2 | COMBO | 10 options: None, simple, sgm_uniform, karras, exponential, ddim_uniform, +4 | |
| sampler_3 | COMBO | 45 options: None, euler, euler_cfg_pp, euler_ancestral, euler_ancestral_cfg_pp, heun, +39 | |
| scheduler_3 | COMBO | 10 options: None, simple, sgm_uniform, karras, exponential, ddim_uniform, +4 | |
| sampler_4 | COMBO | 45 options: None, euler, euler_cfg_pp, euler_ancestral, euler_ancestral_cfg_pp, heun, +39 | |
| scheduler_4 | COMBO | 10 options: None, simple, sgm_uniform, karras, exponential, ddim_uniform, +4 | |
| sampler_5 | COMBO | 45 options: None, euler, euler_cfg_pp, euler_ancestral, euler_ancestral_cfg_pp, heun, +39 | |
| scheduler_5 | COMBO | 10 options: None, simple, sgm_uniform, karras, exponential, ddim_uniform, +4 | |
| sampler_6 | COMBO | 45 options: None, euler, euler_cfg_pp, euler_ancestral, euler_ancestral_cfg_pp, heun, +39 | |
| scheduler_6 | COMBO | 10 options: None, simple, sgm_uniform, karras, exponential, ddim_uniform, +4 | |
| sampler_7 | COMBO | 45 options: None, euler, euler_cfg_pp, euler_ancestral, euler_ancestral_cfg_pp, heun, +39 | |
| scheduler_7 | COMBO | 10 options: None, simple, sgm_uniform, karras, exponential, ddim_uniform, +4 | |
| sampler_8 | COMBO | 45 options: None, euler, euler_cfg_pp, euler_ancestral, euler_ancestral_cfg_pp, heun, +39 | |
| scheduler_8 | COMBO | 10 options: None, simple, sgm_uniform, karras, exponential, ddim_uniform, +4 | |
| sampler_9 | COMBO | 45 options: None, euler, euler_cfg_pp, euler_ancestral, euler_ancestral_cfg_pp, heun, +39 | |
| scheduler_9 | COMBO | 10 options: None, simple, sgm_uniform, karras, exponential, ddim_uniform, +4 | |
| sampler_10 | COMBO | 45 options: None, euler, euler_cfg_pp, euler_ancestral, euler_ancestral_cfg_pp, heun, +39 | |
| scheduler_10 | COMBO | 10 options: None, simple, sgm_uniform, karras, exponential, ddim_uniform, +4 | |
| sampler_11 | COMBO | 45 options: None, euler, euler_cfg_pp, euler_ancestral, euler_ancestral_cfg_pp, heun, +39 | |
| scheduler_11 | COMBO | 10 options: None, simple, sgm_uniform, karras, exponential, ddim_uniform, +4 | |
| sampler_12 | COMBO | 45 options: None, euler, euler_cfg_pp, euler_ancestral, euler_ancestral_cfg_pp, heun, +39 | |
| scheduler_12 | COMBO | 10 options: None, simple, sgm_uniform, karras, exponential, ddim_uniform, +4 | |
| sampler_13 | COMBO | 45 options: None, euler, euler_cfg_pp, euler_ancestral, euler_ancestral_cfg_pp, heun, +39 | |
| scheduler_13 | COMBO | 10 options: None, simple, sgm_uniform, karras, exponential, ddim_uniform, +4 | |
| sampler_14 | COMBO | 45 options: None, euler, euler_cfg_pp, euler_ancestral, euler_ancestral_cfg_pp, heun, +39 | |
| scheduler_14 | COMBO | 10 options: None, simple, sgm_uniform, karras, exponential, ddim_uniform, +4 | |
| sampler_15 | COMBO | 45 options: None, euler, euler_cfg_pp, euler_ancestral, euler_ancestral_cfg_pp, heun, +39 | |
| scheduler_15 | COMBO | 10 options: None, simple, sgm_uniform, karras, exponential, ddim_uniform, +4 | |
| sampler_16 | COMBO | 45 options: None, euler, euler_cfg_pp, euler_ancestral, euler_ancestral_cfg_pp, heun, +39 | |
| scheduler_16 | COMBO | 10 options: None, simple, sgm_uniform, karras, exponential, ddim_uniform, +4 | |
| sampler_17 | COMBO | 45 options: None, euler, euler_cfg_pp, euler_ancestral, euler_ancestral_cfg_pp, heun, +39 | |
| scheduler_17 | COMBO | 10 options: None, simple, sgm_uniform, karras, exponential, ddim_uniform, +4 | |
| sampler_18 | COMBO | 45 options: None, euler, euler_cfg_pp, euler_ancestral, euler_ancestral_cfg_pp, heun, +39 | |
| scheduler_18 | COMBO | 10 options: None, simple, sgm_uniform, karras, exponential, ddim_uniform, +4 | |
| sampler_19 | COMBO | 45 options: None, euler, euler_cfg_pp, euler_ancestral, euler_ancestral_cfg_pp, heun, +39 | |
| scheduler_19 | COMBO | 10 options: None, simple, sgm_uniform, karras, exponential, ddim_uniform, +4 | |
| sampler_20 | COMBO | 45 options: None, euler, euler_cfg_pp, euler_ancestral, euler_ancestral_cfg_pp, heun, +39 | |
| scheduler_20 | COMBO | 10 options: None, simple, sgm_uniform, karras, exponential, ddim_uniform, +4 | |
| sampler_21 | COMBO | 45 options: None, euler, euler_cfg_pp, euler_ancestral, euler_ancestral_cfg_pp, heun, +39 | |
| scheduler_21 | COMBO | 10 options: None, simple, sgm_uniform, karras, exponential, ddim_uniform, +4 | |
| sampler_22 | COMBO | 45 options: None, euler, euler_cfg_pp, euler_ancestral, euler_ancestral_cfg_pp, heun, +39 | |
| scheduler_22 | COMBO | 10 options: None, simple, sgm_uniform, karras, exponential, ddim_uniform, +4 | |
| sampler_23 | COMBO | 45 options: None, euler, euler_cfg_pp, euler_ancestral, euler_ancestral_cfg_pp, heun, +39 | |
| scheduler_23 | COMBO | 10 options: None, simple, sgm_uniform, karras, exponential, ddim_uniform, +4 | |
| sampler_24 | COMBO | 45 options: None, euler, euler_cfg_pp, euler_ancestral, euler_ancestral_cfg_pp, heun, +39 | |
| scheduler_24 | COMBO | 10 options: None, simple, sgm_uniform, karras, exponential, ddim_uniform, +4 | |
| sampler_25 | COMBO | 45 options: None, euler, euler_cfg_pp, euler_ancestral, euler_ancestral_cfg_pp, heun, +39 | |
| scheduler_25 | COMBO | 10 options: None, simple, sgm_uniform, karras, exponential, ddim_uniform, +4 | |
| sampler_26 | COMBO | 45 options: None, euler, euler_cfg_pp, euler_ancestral, euler_ancestral_cfg_pp, heun, +39 | |
| scheduler_26 | COMBO | 10 options: None, simple, sgm_uniform, karras, exponential, ddim_uniform, +4 | |
| sampler_27 | COMBO | 45 options: None, euler, euler_cfg_pp, euler_ancestral, euler_ancestral_cfg_pp, heun, +39 | |
| scheduler_27 | COMBO | 10 options: None, simple, sgm_uniform, karras, exponential, ddim_uniform, +4 | |
| sampler_28 | COMBO | 45 options: None, euler, euler_cfg_pp, euler_ancestral, euler_ancestral_cfg_pp, heun, +39 | |
| scheduler_28 | COMBO | 10 options: None, simple, sgm_uniform, karras, exponential, ddim_uniform, +4 | |
| sampler_29 | COMBO | 45 options: None, euler, euler_cfg_pp, euler_ancestral, euler_ancestral_cfg_pp, heun, +39 | |
| scheduler_29 | COMBO | 10 options: None, simple, sgm_uniform, karras, exponential, ddim_uniform, +4 | |
| sampler_30 | COMBO | 45 options: None, euler, euler_cfg_pp, euler_ancestral, euler_ancestral_cfg_pp, heun, +39 | |
| scheduler_30 | COMBO | 10 options: None, simple, sgm_uniform, karras, exponential, ddim_uniform, +4 |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| X or Y | X_Y | — |