D2 XY Plot Easy Mini
The XY plot that auto-queues a full grid — checkpoint, prompt, seed, steps, you name it
- reset
- index
- remaining_time
- xy_seed
- progress_bar
- d2_pipe
- grid_pipe
- positive
- negative
- ckpt_name
- ckpt_type
- x_other
- y_other
This is the flagship node of the D2 pack and the one worth installing the pack for. XY Plot Easy Mini runs a full grid of generations on its own: you give it sampler settings plus an x_list and y_list, it figures out every combination, queues them one after another, and feeds each run into the same KSampler - swapping in the right value for each cell. auto_queue means you hit Queue once and walk away while it burns through the whole grid.
If you've ever built an XY plot with Efficiency Nodes or Essentials and then fought with index bookkeeping, this is the friendlier version: the loop state lives inside the node, and a D2 Grid Image downstream stitches the results into a labeled grid. Mini is the trimmer sibling of D2 XY Plot Easy - same engine, fewer output slots, smaller node on the canvas. For most people, Mini is the right one.
The inputs that matter
The top half is just KSampler settings: positive, negative, seed, steps, cfg, sampler_name, scheduler, denoise. Then:
ckpt_name/unet_name/ckpt_type-ckpt_type = stable_diffusionusesckpt_name;diffusionusesunet_name. The chosen name comes out on theckpt_nameoutput.x_type/y_type- what each axis varies:none,positive,negative,ckpt_name,seed,steps,cfg,sampler_name,scheduler,denoise, orSTRING/INT/FLOAT(free-form values that come out onx_other/y_other).x_list/y_list- the values, one per line.auto_queue- on: it queues every combination for you. Off: you click Queue manually (still keeps its place viastart_index).reset- a button to restart the index when you stop mid-grid.
Outputs: d2_pipe (a bundle for D2 KSampler - one wire carries model, prompts, and all sampler params), grid_pipe (for D2 XY Grid Image), plus positive, negative, ckpt_name, ckpt_type, x_other, y_other.
How the loop works
It computes x_len × y_len combinations and processes all of x before advancing y (so x is the fast axis). Each execution outputs the current cell's values - that's the trick that makes it work: the same node, run repeatedly, with its state tracked by the frontend. With auto_queue on, it keeps queuing until the grid is done.
Two behaviors worth knowing. When x_type/y_type is positive or negative, the first line of the list is the search string and each subsequent line replaces it - a built-in prompt S/R. And when the type is STRING/INT/FLOAT, values come out on x_other/y_other instead of being applied internally, which is how you drive nodes the plot doesn't know about.
Installing
Part of the D2-nodes-ComfyUI pack - install the pack, not the node.
- ComfyUI Manager → search "D2-nodes-ComfyUI" → Install → restart.
- Or
cd ComfyUI/custom_nodes && git clone https://github.com/da2el-ai/D2-nodes-ComfyUIand restart.
Dependencies: piexif, charset-normalizer, no model downloads. Pack gotcha: v32.0.0+ requires the newer ComfyUI V3 schema; older ComfyUI → pre-32.0.0 release. Delete the old standalone ComfyUI-d2-xyplot-utils pack if you have it - it merged in here.
Notes and gotchas
d2_pipe values override whatever's set directly on the KSampler, so if you change steps on the sampler and have steps as an axis, the axis wins. Put the heavy axis (like ckpt_name, which reloads a model per cell) on y, since y advances slowest. And if you stop mid-grid, hit reset before re-queueing, or it resumes from where it stopped - which is sometimes exactly what you want.
Inputs (22)
| Name | Type | Default | Description |
|---|---|---|---|
| positive | STRING | — | |
| negative | STRING | — | |
| ckpt_name | COMBO | 0 options: | |
| unet_name | COMBO | 0 options: | |
| ckpt_type | COMBO | 2 options: stable_diffusion, diffusion | |
| seed | INT | 00–18446744073709550000 | — |
| steps | INT | 201–10000 | — |
| cfg | FLOAT | 7.000–100 | — |
| sampler_name | COMBO | 44 options: euler, euler_cfg_pp, euler_ancestral, euler_ancestral_cfg_pp, heun, heunpp2, +38 | |
| scheduler | COMBO | 9 options: simple, sgm_uniform, karras, exponential, ddim_uniform, beta, +3 | |
| denoise | FLOAT | 1.000–1 | — |
| x_type | COMBO | 13 options: none, positive, negative, ckpt_name, seed, steps, +7 | |
| x_list | STRING | — | |
| y_type | COMBO | 13 options: none, positive, negative, ckpt_name, seed, steps, +7 | |
| y_list | STRING | — | |
| auto_queue | BOOLEAN | true | — |
| start_index | INT | 0 | — |
| resetopt | D2_BUTTON | — | |
| indexopt | D2_XYPLOT_INDEX | — | |
| remaining_timeopt | D2_TIME | — | |
| xy_seedopt | D2_SEED | — | |
| progress_baropt | D2_PROGRESS_BAR | — |
Outputs (8)
| Name | Type | Description |
|---|---|---|
| d2_pipe | D2_TD2Pipe | — |
| grid_pipe | D2_TGridPipe | — |
| positive | STRING | — |
| negative | STRING | — |
| ckpt_name | * | — |
| ckpt_type | STRING | — |
| x_other | * | — |
| y_other | * | — |