XYZ Plot
The A1111 grid-maker, reborn as a ComfyUI node
- images
- input_x
- input_y
- input_z
This is the node people install ComfyUI Browser for. If you came from Automatic1111, you know the XYZ Plot script: pick a few settings, give each a list of values, and it runs every combination and lays the results out as a grid so you can actually compare them. XyzPlot-Browser brings that to the node graph - pick up to three widgets anywhere in your workflow, feed it values, and it generates every combination, saves each image, and opens an interactive grid you can click through.
People keep asking "is there an XYZ plot for ComfyUI?" on r/StableDiffusion, and the answers are usually Efficiency Nodes or this one. This version has a nicer payoff than most: instead of a static sheet, you get a clickable web grid that opens inside ComfyUI.
Why it earns its place
The community's core testing discipline is "change one variable at a time with a fixed seed." That's exactly what this automates - same seed, one widget varied, side by side. Prompt tweaks, sampler comparisons, CFG sweeps, a LoRA weight ladder: anything you'd otherwise babysit for ten runs, it does for you in one pass. That's the whole job.
How it works
This one needs its sibling, SelectInputs, because XyzPlot doesn't take raw values for its axes - it takes an INPUT selection that points at a specific widget on a specific node (like the prompt widget of your CLIP Text Encode, or the seed widget of your KSampler).
When you hit run, the node deep-copies the current prompt, rewrites the chosen widget on the chosen node for each value combination, and re-queues those prompts to ComfyUI's own /prompt endpoint. When the graph runs again, the node knows from its hidden xyz_data which X/Y/Z cell it is, and it saves the incoming images as x0_y0_z0_0.jpeg-style files into <output>/<output_folder_name>. Once all combinations have run, it writes a result.json and shows you an interactive HTML grid served by the pack, where you can even score individual cells (scores get logged to a score_log.csv in the output folder).
The inputs that matter
- images - wire this from your sampler/VAE decode. This is the batch that gets saved.
- input_x / input_y (and optional input_z) -
INPUTconnections from a SelectInputs node. Each tells XyzPlot which widget to vary. - value_x / value_y / value_z - the values to try, split by semicolons:
"1girl; 1boy; 1girl, solo". Empty entries are dropped. - output_folder_name - where the grid lands under your output directory. Default
xyz_plot.
There are no outputs; it's a terminal output node.
Gotchas
Three things trip people up. First, values split on ;, so a prompt containing a literal semicolon will break mid-way - pick values that don't use it. Second, when you start a new sweep the node moves the old output folder aside to <name>_old_<timestamp> instead of overwriting, so you'll accumulate orphaned folders if you sweep often. Third, the first run just re-queues the variants - it looks like "nothing happened" until those queued jobs finish and the node runs again to save and build the grid. Patience, or watch the queue.
Install
Install the whole pack:
cd ComfyUI/custom_nodes && git clone https://github.com/talesofai/comfyui-browser
or via ComfyUI Manager → search comfyui-browser. No extra models, no heavy dependencies - the pack's requirements are just requests, numpy, pandas, tqdm, and urllib3. Restart ComfyUI after installing.
Inputs (8)
| Name | Type | Default | Description |
|---|---|---|---|
| images | IMAGE | — | |
| input_x | INPUT | — | |
| input_y | INPUT | — | |
| value_x | STRING | — | |
| value_y | STRING | — | |
| value_z | STRING | — | |
| output_folder_name | STRING | xyz_plot | — |
| input_zopt | INPUT | — |
Outputs (0)
No outputs