FL KSampler XYZ Plot
Sweep steps, CFG and samplers into one labeled grid
- model
- positive
- negative
- latent_image
- vae
- image
- IMAGE
This is the "which settings actually work" node. If you've come from A1111 you'll remember the X/Y/Z plot script - generate the same prompt across a grid of parameter values and eyeball which cell wins. ComfyUI doesn't ship that out of the box, and building it by hand with reroutes and grid nodes is a pain. FL_KSamplerXYZPlot bakes the whole thing into one node: pick two (or three) parameters to vary, give it the values, and it renders a labeled grid so you can compare at a glance.
For a new-ish model where you don't yet know the right sampler or step count, this is the fastest way to stop guessing. The community's settled habit for finding good settings is exactly this - sweep, don't theorize - and a grid node is how you sweep.
How it works
You wire in a model, positive/negative conditioning, and a latent (or an image, via input_type), same as a normal KSampler. Then you choose an x_axis and y_axis from steps, cfg, denoise, sampler_name, or scheduler, and list the values you want to try in x_values / y_values (comma-separated, e.g. 20,30,40 for steps or euler,dpmpp_2m,dpmpp_sde for samplers). It runs a full sample for every combination and stitches the results into a grid with the axis values printed on it. Optionally add a z_axis to stack a third dimension of grids, vertical or horizontal.
The output is a single IMAGE - the finished plot. Save it, zoom in, pick your winner.
The inputs that matter
x_axis/x_valuesandy_axis/y_values- the heart of it. Axis picks the parameter; values is the comma-separated list to try. Numbers forsteps/cfg/denoise, sampler/scheduler names for those axes.z_axis/z_values/z_stack_mode- optional third parameter. Leavez_axisonnonefor a plain 2D grid.steps,cfg,sampler_name,scheduler,denoise- the base values used for whatever you're not sweeping. If you're sweeping steps on X and CFG on Y, these fill in everything else.seed- keep it fixed. A grid only means something if the seed is constant across cells; that's the whole point of a controlled sweep.
Installing it
Ships in the Fill-Nodes pack. ComfyUI Manager: search ComfyUI_Fill-Nodes, install, restart. Manual:
cd ComfyUI/custom_nodes
git clone https://github.com/filliptm/ComfyUI_Fill-Nodes
then restart. The pack prints a big "Machine Delusions" banner on startup - cosmetic, ignore it.
Where people get tripped up
- It re-samples every cell, so cost is multiplicative. A 5×5 grid is 25 full generations. A 5×5 with a 3-deep Z axis is 75. Keep
stepslow while you're exploring the shape of the space, then do a final high-step render on the winning combo. Don't run your first sweep at 50 steps. - Fix the seed or the grid is noise. Different seed per cell and you're comparing different images, not different settings.
- Sweeping the scheduler on a flow-matching model will look broken - because it is. On Flux, Z-Image, and other rectified-flow models,
karrasandexponentialschedulers genuinely fail rather than just underperform, so those cells will look mangled next tobeta/simple. That's the grid telling you the truth, not a node bug. On SD1.5/SDXL the oldkarrasfavorites still hold up. - Ideal step count moves with the sampler. When you sweep samplers against steps, don't expect one column to win everywhere - the best step count differs per sampler. Read the grid as a shortlist to test properly, not a final verdict.
Inputs (20)
| Name | Type | Default | Description |
|---|---|---|---|
| model | MODEL | — | |
| positive | CONDITIONING | — | |
| negative | CONDITIONING | — | |
| seed | INT | 00–18446744073709550000 | — |
| input_type | COMBO | 2 options: latent, image | |
| steps | INT | 201–10000 | — |
| cfg | FLOAT | 7.000–100 | — |
| sampler_name | COMBO | 44 options: euler, euler_cfg_pp, euler_ancestral, euler_ancestral_cfg_pp, heun, heunpp2, +38 | |
| scheduler | COMBO | 9 options: simple, sgm_uniform, karras, exponential, ddim_uniform, beta, +3 | |
| denoise | FLOAT | 1.000–1 | — |
| x_axis | COMBO | 5 options: steps, cfg, denoise, sampler_name, scheduler | |
| x_values | STRING | 20,30,40 | — |
| y_axis | COMBO | 5 options: steps, cfg, denoise, sampler_name, scheduler | |
| y_values | STRING | 7,8,9 | — |
| z_axis | COMBO | 6 options: none, steps, cfg, denoise, sampler_name, scheduler | |
| z_values | STRING | — | |
| z_stack_mode | COMBO | 2 options: vertical, horizontal | |
| latent_imageopt | LATENT | — | |
| vaeopt | VAE | — | |
| imageopt | IMAGE | — |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| IMAGE | IMAGE | — |