Nodes/ComfyUI_Fill-Nodes/FL KSampler XYZ Plot
ComfyUI Node

FL KSampler XYZ Plot

Sweep steps, CFG and samplers into one labeled grid

By filliptm·Created 3 years ago·Updated about 22 hours ago· 630
FL KSampler XYZ Plot
  • model
  • positive
  • negative
  • latent_image
  • vae
  • image
  • IMAGE
seed0
input_type
steps20
cfg7.00
sampler_name
scheduler
denoise1.00
x_axis
x_values20,30,40
y_axis
y_values7,8,9
z_axis
z_values
z_stack_mode

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_values and y_axis / y_values - the heart of it. Axis picks the parameter; values is the comma-separated list to try. Numbers for steps/cfg/denoise, sampler/scheduler names for those axes.
  • z_axis / z_values / z_stack_mode - optional third parameter. Leave z_axis on none for 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 steps low 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, karras and exponential schedulers genuinely fail rather than just underperform, so those cells will look mangled next to beta/simple. That's the grid telling you the truth, not a node bug. On SD1.5/SDXL the old karras favorites 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.
Category🏵️Fill Nodes/Ksamplers

Inputs (20)

NameTypeDefaultDescription
modelMODEL
positiveCONDITIONING
negativeCONDITIONING
seedINT00–18446744073709550000
input_typeCOMBO2 options: latent, image
stepsINT201–10000
cfgFLOAT7.000–100
sampler_nameCOMBO44 options: euler, euler_cfg_pp, euler_ancestral, euler_ancestral_cfg_pp, heun, heunpp2, +38
schedulerCOMBO9 options: simple, sgm_uniform, karras, exponential, ddim_uniform, beta, +3
denoiseFLOAT1.000–1
x_axisCOMBO5 options: steps, cfg, denoise, sampler_name, scheduler
x_valuesSTRING20,30,40
y_axisCOMBO5 options: steps, cfg, denoise, sampler_name, scheduler
y_valuesSTRING7,8,9
z_axisCOMBO6 options: none, steps, cfg, denoise, sampler_name, scheduler
z_valuesSTRING
z_stack_modeCOMBO2 options: vertical, horizontal
latent_imageoptLATENT
vaeoptVAE
imageoptIMAGE

Outputs (1)

NameTypeDescription
IMAGEIMAGE