NAI XY 对比图
A comparison grid where every cell is a paid generation
- nai_pipe
- positive
- negative
- core_settings
- advanced_settings
- x_axis
- y_axis
- XY对比大图
- 单元格图像批次
- 单元格报告JSON
- 费用与统计
The A/B test machine of the pack, and the node that will quietly eat your Anlas if you let it. NAIXYPlotV2 takes the full modular pipeline, two axes from NAIXYAxisV2, and generates a labeled grid: every combination of X value and Y value becomes one image. 5×5 grid, 25 images, 25 API calls. That's the whole cost model in one sentence, so read the rest with that in mind.
What it is
Inputs: nai_pipe, positive and negative prompts, core and advanced settings - the same stack every sampler takes - plus x_axis and y_axis from the axis nodes. Then the controls:
base_seed- the seed for the first cell; each subsequent cell getsbase_seed + index. That means a fixed seed sweeps across the grid rather than randomizing per cell, which is what you want for a controlled comparison.max_total_anlas- a hard cap on the whole grid's spend. The node stops before firing if the batch would exceed it.request_delay(default 0.5s) - a pause between calls. Matters for rate-limit safety on big grids.use_cache/cache_max_gb- per-cell caching, so rerunning a grid only pays for cells whose inputs changed.cell_gap,label_height,preview_max_edge- presentation: spacing, label strip height, and the max edge of the preview cells (labels stay readable, cells scale down).
Outputs: XY对比大图 (the assembled labeled grid image), 单元格图像批次 (the individual cells as a batch), 单元格报告JSON (per-cell details), and 费用与统计 (the spend summary).
What it's good at
The genuinely useful comparisons on a cloud API: guidance × sampler, steps × CFG rescale, model × steps, or a prompt-suffix sweep against a seed range. The KB's prompting notes hammer that sampler and guidance choices are image-dependent and you can't reason your way to the right one - you have to look. This node makes looking cheap per cell and expensive in aggregate, so the discipline is to keep axes small.
The cost discipline
This is the node where the "every cell is a paid generation" reality bites hardest. A 3×3 grid is 9 calls; a 6×6 grid is 36. Set max_total_anlas before you run, start with small axes to sanity-check the grid layout and labeling, and use the cache so re-tuning the prompt doesn't re-bill every cell - cells whose inputs (including prompt) are unchanged come back from cache for free.
Install and setup
Part of ComfyUI-NovelAI-GENYTOOLS. Manager search, or:
cd ComfyUI/custom_nodes
git clone https://github.com/XTOGENY/ComfyUI-NovelAI-GENYTOOLS.git
pip install -r ComfyUI-NovelAI-GENYTOOLS/requirements.txt
Restart, set your NovelAI Persistent API Token under NovelAI 2.0: Persistent API Token.
Gotchas
- X and Y axes can't be the same parameter - the node rejects it (comparing guidance to itself is meaningless anyway).
- Each axis maxes at 6 values, enforced here too. 6×6 = 36 paid calls if you don't set a cap.
- The per-cell seed derives from
base_seed + index, so the order of cells matters for reproducibility. Keep your axis values in a stable order. - The
费用与统计output is your invoice. If a grid run cost more than you expected, the report JSON per cell tells you which cells actually went to the API versus hit the cache.
Inputs (15)
| Name | Type | Default | Description |
|---|---|---|---|
| nai_pipe | NAI_PIPE | — | |
| positive | NAI_POSITIVE_PROMPT | — | |
| negative | NAI_NEGATIVE_PROMPT | — | |
| core_settings | NAI_CORE_SETTINGS | — | |
| advanced_settings | NAI_ADVANCED_SETTINGS | — | |
| x_axis | NAI_XY_AXIS | — | |
| y_axis | NAI_XY_AXIS | — | |
| base_seed | INT | 00–4294967295 | — |
| max_total_anlas | FLOAT | 0.000–100000 | — |
| request_delay | FLOAT | 0.50–10 | — |
| use_cache | BOOLEAN | true | — |
| cache_max_gb | INT | 101–100 | — |
| cell_gap | INT | 80–64 | — |
| label_height | INT | 7236–160 | — |
| preview_max_edge | INT | 512256–1024 | — |
Outputs (4)
| Name | Type | Description |
|---|---|---|
| XY对比大图 | IMAGE | — |
| 单元格图像批次 | IMAGE | — |
| 单元格报告JSON | STRING | — |
| 费用与统计 | STRING | — |