XY Plot Modifier
XY Plot Modifier Is a Label Plus a Diff
- modifiers
- model
- refiner
- detailer
- lora_stack
- clip
- size
- extras
- modifiers
If you've ever built a comparison grid by hand - duplicate the sampler six times, change the LoRA strength, paste the results together - you know the pain this node exists to remove. In the automatic1111 world, XY plot was a checkbox on the script menu. In ComfyUI, grids have always been a DIY project. The Info-Prompt-Toolkit pack's answer is three nodes - Start, Modifier, End - and the Modifier is the one that actually defines what varies.
Think of it as a diff over your base settings. You hand it one change and one label; it doesn't care about the full workflow, because the workflow's baseline lives in the image_info bundle that XY Plot Start supplies. Modifier just says "when you get to my cell, swap these specific values."
What it changes
Every optional input on this node is a field it can override. The ones you'll actually use:
- model, refiner, detailer - swap which model is in play. The classic "same prompt, four checkpoints" grid.
- lora_stack - the LoRA rotation grid: same base model, N LoRAs (or N strengths).
- positive / negative - prompt variation. The "one token changed across 16 images" grid that people keep asking how to build.
- steps, cfg, sampler, scheduler, seed - sampler-grids. Note sampler/scheduler come in as plain strings here; the pack's
Sampler SelectorandScheduler Selectornodes exist precisely to feed them. - size and extras - resolution or metadata variations.
- label - the axis label. Leave it empty and the pack auto-labels from what changed; set it when you want "LoRA: flat" instead of an auto-derived string.
You don't set all of these. You set the one (or two) that your grid's axis is testing. That restraint is the whole design.
Chaining is the mechanism
The one output is modifiers, and it's an array - which is how you build a multi-point axis. Wire the first Modifier's output into the next Modifier's modifiers input, and each one appends its {label, changes} pair to the chain. A chain of five Modifiers = five cells on that axis. The README calls it an "axis-specific change set" array, and that's exactly right.
From there the chain plugs into either x_modifiers or y_modifiers on XY Plot Start. X-chain, Y-chain, and Start does the cross-product. One axis of Modifiers is a row; two axes is the grid.
Installing it
It ships in ComfyUI-Info-Prompt-Toolkit:
cd ComfyUI/custom_nodes
git clone https://github.com/kinorax/comfyui-info-prompt-toolkit.git
cd comfyui-info-prompt-toolkit
pip install -r requirements.txt
or install via ComfyUI Manager by searching the pack title, then restart ComfyUI. No model downloads for the XY nodes - the only prerequisites are your existing models and a recent ComfyUI (≥ 0.17.0), since this pack targets the newer node API.
The trap to dodge
People new to the trio tend to wire Modifier chains into each other and wonder why the grid is tiny. Remember: Modifiers never touch a base image_info - they only describe changes. The actual per-cell image_info construction happens in XY Plot Start. If your cells all look identical, the usual cause is the change you intended (say, a LoRA or prompt) isn't actually connected to a Modifier input - the node happily produces a "no-op" modifier with an empty diff. Chain, then Start, then End, and verify the chain actually carries a change before you burn a batch on it.
Inputs (17)
| Name | Type | Default | Description |
|---|---|---|---|
| modifiersopt | IPT-XYPlotModifier | Modifier array chain input | |
| modelopt | IPT-Model | — | |
| refineropt | IPT-Model | — | |
| detaileropt | IPT-Model | — | |
| lora_stackopt | IPT-LoraStack | — | |
| clipopt | IPT-Clip | — | |
| vaeopt | STRING | — | |
| positiveopt | STRING | — | |
| negativeopt | STRING | — | |
| stepsopt | INT | 0–100000 | — |
| sampleropt | STRING | — | |
| scheduleropt | STRING | — | |
| cfgopt | FLOAT | — | |
| seedopt | INT | -9223372036854776000–9223372036854776000 | — |
| sizeopt | IPT-Size | — | |
| extrasopt | IPT-ImageInfoExtras | — | |
| labelopt | STRING | Optional axis label. Leave empty for auto label. |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| modifiers | IPT-XYPlotModifier | — |