XY Plot
Sweep two parameters into a comparison grid
- pipe
- pipe
The single best way to actually learn what a setting does is to hold everything else still and vary just that setting across a row of images. easy XYPlot automates that. Pick a parameter for the X axis and one for the Y, give each a list of values, and it renders every combination into a labeled grid. It's the ComfyUI answer to A1111's X/Y plot, wired into the Easy-Use pipe system.
Why you'd reach for it
Two questions this answers instantly:
- "What's the right value for X?" Sweep steps from 15 to 40, or cfg from 3 to 9, across a single seed, and read the grid for where quality plateaus. You stop guessing and start looking.
- "Which of these is better?" Put four checkpoints on one axis and three samplers on the other and generate the whole matrix in one run. Comparing by memory across separate generations is unreliable; comparing them side by side in a grid is not.
Because it's built on the Easy-Use pipe, the axes aren't arbitrary strings - they're the actual parameters flowing through your loader and pre-sampling nodes, so the plot changes the real setting and re-runs, rather than faking it.
The inputs that matter
x_axisandy_axis- the two parameters to vary. The menu draws from the pipe:preSampling: steps,preSampling: cfg,preSampling: sampler_name,preSampling: scheduler,preSampling: denoise,preSampling: seed, and loader settings likeloader: ckpt_name,loader: vae_name,loader: clip_skip, and more. Set one axis toNoneto sweep a single parameter as a row.x_valuesandy_values- the list of values for each axis (multiline). For numeric params, list the numbers you want; for things like samplers or checkpoints, list the names. These are the columns and rows of your grid.pipe(optional PIPE_LINE) - the Easy-Use pipe carrying your generation settings. This is what makes the sweep real. The node outputs a modifiedpipethat you run through the rest of the flow to produce the grid.flip_xyswaps which parameter is rows vs columns;grid_spacingsets the gap between cells;output_individualsadditionally emits each cell as its own image, not just the assembled grid.
Installing it
ComfyUI Manager: search ComfyUI Easy Use, install, restart. Or:
cd ComfyUI/custom_nodes
git clone https://github.com/yolain/ComfyUI-Easy-Use
then install the requirements (install.bat on Windows, else pip install -r ComfyUI-Easy-Use/requirements.txt) and restart.
Common issues
- It expects the Easy-Use pipe. The axis choices are the pipe's parameters, so this node is designed to sit in a workflow built from Easy-Use loaders and pre-sampling nodes. If your axes list nothing useful, your
pipeisn't wired (or isn't an Easy-Use pipe). - Your value list has to match the parameter type. Listing
dpmpp_2munder a numericstepsaxis, or a step count under asampler_nameaxis, won't plot. Names for name-params, numbers for numeric ones - and spelled the way ComfyUI spells them. - Big grids cost real time. A grid is X × Y full generations. A 6×6 sweep is 36 images; plan the run accordingly and start with small lists to confirm the axes are right before you commit to a large matrix.
- Odd interactions with the a1111 prompt style. The pack has fixed XYPlot bugs tied to
a1111_prompt_stylebefore, so if a plot behaves strangely with that loader option on, update Easy-Use.
Inputs (8)
| Name | Type | Default | Description |
|---|---|---|---|
| grid_spacing | INT | 00–500 | — |
| output_individuals | COMBO | False | 2 options: False, True |
| flip_xy | COMBO | False | 2 options: False, True |
| x_axis | COMBO | None | 17 options: None, ---------------------, preSampling: steps, preSampling: cfg, preSampling: sampler_name, preSampling: scheduler, +11 |
| x_values | STRING | — | |
| y_axis | COMBO | None | 17 options: None, ---------------------, preSampling: steps, preSampling: cfg, preSampling: sampler_name, preSampling: scheduler, +11 |
| y_values | STRING | — | |
| pipeopt | PIPE_LINE | — |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| pipe | PIPE_LINE | — |