ComfyUI Node

XY Image (Soze)

Stitch a batch into a labeled comparison grid

By SozeInc·Created 2 years ago·Updated 3 months ago· 10
XY Image (Soze)
  • images
  • x_labels
  • y_labels
  • z_labels
  • Image
splits
flip_axisFalse
batch_stack_modehorizontal
z_enabledFalse
x_main_label
y_main_label
z_main_label

You've generated a batch sweeping a parameter - a handful of seeds, a run of LoRA strengths, three samplers against four schedulers - and now you're scrubbing through a batch preview one tile at a time trying to remember which image was which setting. That's the exact problem the old A1111 X/Y/Z Plot script solved years ago, and this node is Soze's version for ComfyUI: it takes your batch and tiles it into one labeled grid image instead.

How it works

images is the batch you already generated (assemble it first with something like this pack's Multi Image Batch if it's coming from several branches). splits tells it how many groups to divide that batch into - match this to how many actual variations are in your batch, or the grid comes out lopsided. batch_stack_mode (horizontal/vertical) picks which way the grid lays out, and flip_axis swaps that orientation if the first attempt comes out sideways from what you wanted.

z_enabled adds a third axis on top of the X/Y grid - useful if you're sweeping two parameters at once and want a third dimension (sampler, say) stacked as separate grids rather than just rows and columns.

The label sockets are the detail that makes this more than a bare tiler: x_labels, y_labels, and z_labels accept any type (*), so you feed them the actual values you swept - a list of seeds, floats, or LoRA names - and the node stringifies them onto the grid, so each row and column is labeled with the real value that produced it rather than a bare index you have to cross-reference by hand. x_main_label/y_main_label/z_main_label are the plain-text axis titles.

The inputs and outputs that matter

  • images, splits, batch_stack_mode, flip_axis, z_enabled - required, the grid mechanics.
  • x_labels / y_labels / z_labels - optional, wildcard type, the values that label each row/column.

Output: Image (a list, not a single tile). It's flagged as an output node, so route it into a Save Image or Preview node to actually see the assembled grid - check the preview once to confirm you're looking at the finished grid and not the individual source tiles again.

How to install it

ComfyUI Manager → search "ComfyUI_Soze" → install → restart. Manual:

cd ComfyUI/custom_nodes
git clone https://github.com/SozeInc/ComfyUI_Soze.git
pip install -r ComfyUI_Soze/requirements.txt

then restart. No models or external services - pure image compositing.

Common issues & troubleshooting

Mismatched image resolutions in the source batch break grid-tiling the same way they break any batch operation in ComfyUI - resize to a common size before this node, not after.

If cells land in the wrong place or the grid looks lopsided, splits almost certainly doesn't match your actual batch size - count what you generated and set it to match. This pairs naturally with CSV Reader X Lora if your sweep is a CSV-driven prompt or LoRA comparison: run the sweep, collect the batch, then visualize the whole thing here as one grid instead of scrubbing through results one by one.

Categoryimage

Inputs (11)

NameTypeDefaultDescription
imagesIMAGE
splitsINT
flip_axisCOMBOFalse2 options: False, True
batch_stack_modeCOMBOhorizontal2 options: horizontal, vertical
z_enabledCOMBOFalse2 options: False, True
x_main_labeloptSTRING
y_main_labeloptSTRING
z_main_labeloptSTRING
x_labelsopt*
y_labelsopt*
z_labelsopt*

Outputs (1)

NameTypeDescription
ImageIMAGE