Nodes/D2 Nodes ComfyUI/D2 XY Plot Easy
ComfyUI Node

D2 XY Plot Easy

The one-node XY plot that finally makes parameter grids painless

By da2el-ai·Created 2 years ago·Updated about a month ago· 66
D2 XY Plot Easy
  • reset
  • index
  • remaining_time
  • xy_seed
  • progress_bar
  • d2_pipe
  • grid_pipe
  • positive
  • negative
  • ckpt_name
  • ckpt_type
  • seed
  • steps
  • cfg
  • sampler_name
  • scheduler
  • denoise
  • x_other
  • y_other
  • x_annotation
  • y_annotation
  • status
  • index
positive
negative
ckpt_name
unet_name
ckpt_type
seed0
steps20
cfg7.00
sampler_name
scheduler
denoise1.00
x_type
x_list
y_type
y_list
auto_queuetrue
start_index0

If you've ever tried to test "which of these 12 checkpoints, at 3 CFGs, gives me the look I want," you know the pain: 36 runs, a pile of untracked images, and a spreadsheet. D2 XY Plot Easy collapses the whole thing into one node. It's the sampler-parameter XY plot for people who don't want to build a multi-node plot rig - you pick what varies on X and Y, type your lists, hit queue, and the node runs the whole grid and hands a complete comparison to D2 XY Grid Image.

How it works

It's a KSampler config plus an XY runner fused together. You set the base generation parameters (prompt, negative, checkpoint, seed, steps, cfg, sampler, scheduler, denoise) directly on the node, then choose what the X and Y axes vary via x_type / y_type. The axis options are the sampler's own knobs - positive, negative, ckpt_name, seed, steps, cfg, sampler_name, scheduler, denoise - plus STRING, INT, and FLOAT for feeding arbitrary values through the x_other / y_other outputs. ckpt_type picks whether ckpt_name (a checkpoint file) or unet_name (a diffusion model) is the one being plotted.

Each queue execution pulls one cell of the grid: row = X value, column = Y value. With auto_queue on (default), it queues the exact number of runs needed automatically - you press queue once and walk away. start_index lets you resume from a specific cell, and the Reset button zeroes the internal index when you stop midway and want to start over.

The outputs you'll use

The node emits a lot, but the wiring is simple:

  • d2_pipe - one wire into D2 KSampler. Carries the current cell's parameters.
  • grid_pipe - one wire into D2 XY Grid Image. Carries the axis annotations and the status signal that tells the grid when to assemble.
  • The individual positive, negative, seed, steps, cfg, etc. - pass-throughs if you want the values elsewhere.
  • x_other / y_other - where the STRING/INT/FLOAT axis values come out. Wire these into whatever input they vary.
  • x_annotation / y_annotation / status / index - mostly for advanced plumbing; the grid node gets them via grid_pipe.

For prompt comparisons specifically: set x_type to positive, and the node treats the first line of x_list as the search text that every subsequent line replaces in the base prompt. So put a placeholder on line one, then your variants:

__hair__
blonde hair,
black hair,

With a base prompt containing __hair__, you get one row per variant (the first row is the unchanged baseline). Same logic works with x_type: negative. If you'd rather swap entire prompt blocks, use x_type: STRING and route x_other into a D2 KSampler's positive instead.

Installing

Part of D2 Nodes ComfyUI:

cd ComfyUI/custom_nodes
git clone https://github.com/da2el-ai/D2-nodes-ComfyUI

or search "D2 Nodes ComfyUI" in ComfyUI Manager. No model downloads.

The gotchas

  • The pipe overrides the widgets. If you feed this node's output into a KSampler whose widgets show different values, the pipe wins. That's by design.
  • Reset before re-running. Stop a grid midway and the internal index keeps counting. Hit Reset (or raise start_index) or your second run starts at the wrong cell.
  • auto_queue off means manual. With it off, nothing auto-queues - you press queue per cell. That's occasionally useful for selective runs, but forgetting it is how people think the node is broken.

If you want full generality - plotting LoRA strengths, model merges, arbitrary conditioning - the plain D2 XY Plot is the bigger hammer. But for "test sampler settings / prompts / steps / CFG," D2 XY Plot Easy is the one you'll reach for, because it's the only plot in the pack that doesn't require you to build the plumbing yourself.

CategoryD2/XY Plot

Inputs (22)

NameTypeDefaultDescription
positiveSTRING
negativeSTRING
ckpt_nameCOMBO0 options:
unet_nameCOMBO0 options:
ckpt_typeCOMBO2 options: stable_diffusion, diffusion
seedINT00–18446744073709550000
stepsINT201–10000
cfgFLOAT7.000–100
sampler_nameCOMBO44 options: euler, euler_cfg_pp, euler_ancestral, euler_ancestral_cfg_pp, heun, heunpp2, +38
schedulerCOMBO9 options: simple, sgm_uniform, karras, exponential, ddim_uniform, beta, +3
denoiseFLOAT1.000–1
x_typeCOMBO13 options: none, positive, negative, ckpt_name, seed, steps, +7
x_listSTRING
y_typeCOMBO13 options: none, positive, negative, ckpt_name, seed, steps, +7
y_listSTRING
auto_queueBOOLEANtrue
start_indexINT0
resetoptD2_BUTTON
indexoptD2_XYPLOT_INDEX
remaining_timeoptD2_TIME
xy_seedoptD2_SEED
progress_baroptD2_PROGRESS_BAR

Outputs (18)

NameTypeDescription
d2_pipeD2_TD2Pipe
grid_pipeD2_TGridPipe
positiveSTRING
negativeSTRING
ckpt_name*
ckpt_typeSTRING
seedINT
stepsINT
cfgFLOAT
sampler_name*
scheduler*
denoiseFLOAT
x_other*
y_other*
x_annotationD2_TAnnotation
y_annotationD2_TAnnotation
statusSTRING
indexINT