ezXY Driver
The grid coordinates behind ComfyUI's DIY XY plots
- x indicies
- y indicies
- iteration
- range
If you've ever wanted an X/Y comparison grid in ComfyUI - same seed across five samplers, or a checkpoint on one axis and a CFG sweep on the other - and you don't want to fight Efficiency Nodes' XY Plot to get it, ezXY Driver is the node that kicks the whole thing off. It doesn't generate images and it doesn't touch your model. All it does is hand you coordinates.
Tell it how many columns and how many rows your grid has, and it spits out index sequences: which column and which row each cell in the grid belongs to. Everything else in the ComfyUI_ezXY pack - String from List, Number from List, Item from Dropdown, Plot Images - exists to consume those indices and turn them into actual values and actual pixels.
How it works
Set column_count and row_count - how wide and how tall your comparison grid is. The driver outputs x indices and y indices, one pair per cell, walking the grid in order. Feed x indices into the index input of a String from List or Number from List node that's holding your column values (checkpoint names, CFG values, whatever you're sweeping), and do the same with y indices against your row values. Because ComfyUI runs a node once per item when it receives a list, that single wire fans out into one execution per grid cell - which is the whole trick behind these DIY XY-plot packs.
iteration gives you a running count of which cell you're on, useful if you want to label cells or feed a counter into something else. range is the total cell count (columns × rows) as a single number - handy to sanity-check against the length of your value lists, or to pipe into Line to Console so you can see at a glance whether your grid actually matches your data.
Inputs and outputs
column_count/row_count- plain integers, 1–999. This is the only thing you configure.x indices/y indices- the per-cell column/row position, as lists. Wire these into theindexinputs of your value pickers.iteration- a running cell counter, also a list.range- total cell count, a single integer.
Installing ComfyUI_ezXY
Easiest path is ComfyUI Manager: search "ComfyUI_ezXY" (or just "ezXY") and install. Manually, it's a plain clone:
cd ComfyUI/custom_nodes
git clone https://github.com/GMapeSplat/ComfyUI_ezXY.git
Restart ComfyUI. No models to download, no extra Python packages called out in the README - it's a pure logic/utility pack.
Common issues & troubleshooting
Read the README before you invest time in a workflow: it opens with "Does not work with current version of Comfyui." That's the author's own words, not a hedge I'm adding. On GitHub, a user in early 2025 was asking permission to fork a single node out of the repo because the main nodes had broken and the dev wasn't around to fix them - so treat this pack as genuinely unmaintained-feeling rather than "actively supported, just niche." If ezXY Driver or its downstream nodes throw errors on a fresh ComfyUI update, that's consistent with what other people have hit, not something you broke.
The pack also ships a runtime patch (autoCastPatch.py, toggleable in config.yaml) that lets int/float/combo sockets connect where ComfyUI's type system would normally refuse - that's what makes wiring x indices straight into another node's number widget possible at all. It's also the most fragile part of the pack; a real crash from that exact file has shown up in the wild when it couldn't cast a value. If something breaks in a way that mentions autoCastPatch.py in the traceback, it's the patch, not your grid logic - try disabling type-casting in config.yaml to isolate it.
Mismatched grid math is the everyday failure: if your column_count/row_count don't match the length of the value lists you're indexing into, you'll cycle back to the start instead of erroring (String from List's wraps output will tell you when that's happening). Check range against your list sizes before you queue a big grid.
Inputs (2)
| Name | Type | Default | Description |
|---|---|---|---|
| column_count | INT | 11–999 | — |
| row_count | INT | 11–999 | — |
Outputs (4)
| Name | Type | Description |
|---|---|---|
| x indicies | INT | — |
| y indicies | INT | — |
| iteration | INT | — |
| range | INT | — |