🧪 手工提示词单项测试
The X/Y/Z plot ComfyUI never shipped
- ControlNet图像
- ControlNet图像2
- ControlNet图像3
- ControlNet图像4
- ControlNet图像5
- ControlNet图像6
- ControlNet图像7
- ControlNet图像8
- 表格图像
- 图片列表
- 测试标签
What it's for
If you came from A1111, the thing you miss is X/Y/Z Plot. If you didn't, here's the pitch: you want to know whether CFG 5, 7 or 9 suits a new checkpoint, and the honest way to find out is to render the same prompt at all three and look. In ComfyUI that used to mean three samplers, three sets of wires, and a folder of images named by whatever.
ManualPromptSingleFactorTest does it in one node: fix everything, pick one variable, give it a list of values, hit queue. It samples each variant, tiles the results into a labelled contact sheet, and hands you both the sheet and the individual images. "Single factor" is the right constraint - one axis at a time is the only way you can attribute a difference to something.
How it works
The node doesn't orchestrate a subgraph; it is the pipeline. It instantiates ComfyUI's own core nodes internally - checkpoint, LoRA, CLIP and VAE loaders, text encode, ControlNet load and apply, empty latent, KSampler, VAE decode - then walks a job list where each job is one cell of the sheet. Models are cached across jobs by identity, so sweeping CFG on one checkpoint loads it exactly once, and conditioning is only re-encoded when the prompt text actually changes.
The sheet is built with PIL: one row, equal cells, 4px gutters, its own PNG. It also writes prompt/workflow metadata into every saved file, so dragging an output back onto the canvas restores the graph that made it - the only reason a sweep stays reproducible after the fact.
Picking the axis
测试项目 (Test item) is the axis, and there are eight: CFG, Checkpoint, 步数 (steps), 随机种子 (seed), 分辨率 (resolution), 骨架图 (pose images), 正向提示词 and 反向提示词 (positive/negative prompt).
测试值列表 (value list) is where values go - comma- or newline-separated, full-width , included. CFG gets 5, 7, 9; steps gets 10, 20, 28; resolution gets 512*512, 512x768, 768×1024 (it normalises x, * and ×, and rounds each side to a multiple of 8, saying so in the console).
Two of the eight modes are different and this is where people get stuck:
- Checkpoint mode doesn't read the value list at all. You multi-select via 基准Checkpoint plus 基准Checkpoint2–8, and 测试项目数量 decides how many of those slots the UI shows. It errors clearly if every slot is left on None.
- 正向提示词 / 反向提示词 modes also ignore the value list. You fill the extra prompt boxes (正向提示词2–8 / 反向提示词2–8), and again 测试项目数量 caps how many slots count. Empty slots are skipped, so you can fill three and test three.
随机种子 mode is the odd one: a single number makes it roll that many random seeds itself; a list is used literally, though a single value above 64 is treated as one literal seed.
The rest of the setup
基准Checkpoint, 基准CFG, 基准步数, 种子, 采样器, 调度器, 宽度, 高度 and CLIP跳过层 are the fixed baseline the axis varies against - these matter more than they look, because a sweep at the wrong base resolution tells you nothing. LoRA, 可选CLIP/CLIP类型 and 可选VAE are optional; a unet-only checkpoint needs the last two or the node refuses to run.
There's also an optional ControlNet path: 可选ControlNet plus ControlNet图像 through ControlNet图像8, with 强度/开始/结束. The 骨架图 mode instead takes a folder of pose images in 测试值列表 - first line the directory, optional second line a max count - and walks it, preferring files named openpose or pose and skipping depth/lineart/softedge output. Genuinely nice if you keep a pose pack around.
启用Hires放大 does an A1111-style two-pass: sample, latent-upscale by Hires倍数 with Hires方法 (nearest-exact by default, matching A1111's Latent upscaler), then a second pass at Hires步数 and Hires降噪. Turn it on only when sharpness is part of the question - at 0.52 denoise it changes the image enough to muddy the axis you're testing.
Outputs
表格图像 is the contact sheet. 图片列表 is the individual images as a list - the one to feed the hand-repair node, and why the pack's nodes compose. 测试标签 is a parallel list like cfg=7 or pose=openpose_03.png, which is what you want beside a preview once you've forgotten which cell was which.
With 单独保存每张 on (default true) each cell is written under output/mcl_test/ with an A1111-style parameters block in the PNG text chunk, plus the grid as 00_grid. It's an output node, so everything lands in the queue history for comparison.
Install
Same clone as the rest of the pack; this node pulls in no extra Python packages.
cd ComfyUI/custom_nodes
git clone https://github.com/kukuxz007/comfyui-t2i-tester.git
Restart ComfyUI and it's under 自定义工作流. Everything you sweep has to already be in your normal model folders - the dropdowns are built from ComfyUI's own model lists. Through ComfyUI Manager, search the Registry for ComfyUI T2I Tester.
Two practical gotchas
The sheet is also one row wide. Eight cells at 768px each is a ~6.2k-pixel PNG that most viewers squash into unreadability - three or four values per sweep is the sweet spot, and better methodology anyway. (On the Nodes 2.0 frontend a widget here may look unlabelled or oddly placed: the pack ships its own JS to show and hide the extra slots, and widget-manipulating packs are what that Vue rewrite broke elsewhere. The legacy canvas is the safe way to run it.)
Inputs (60)
| Name | Type | Default | Description |
|---|---|---|---|
| 正向提示词 | STRING | masterpiece, best quality, 1girl | — |
| 正向提示词2 | STRING | — | |
| 正向提示词3 | STRING | — | |
| 正向提示词4 | STRING | — | |
| 正向提示词5 | STRING | — | |
| 正向提示词6 | STRING | — | |
| 正向提示词7 | STRING | — | |
| 正向提示词8 | STRING | — | |
| 反向提示词 | STRING | low quality, worst quality, blurry | — |
| 反向提示词2 | STRING | — | |
| 反向提示词3 | STRING | — | |
| 反向提示词4 | STRING | — | |
| 反向提示词5 | STRING | — | |
| 反向提示词6 | STRING | — | |
| 反向提示词7 | STRING | — | |
| 反向提示词8 | STRING | — | |
| 测试项目 | COMBO | CFG | 8 options: CFG, Checkpoint, 步数, 随机种子, 分辨率, 骨架图, +2 |
| 测试项目数量 | INT | 21–8 | Checkpoint/正向/反向模式下显示的槽位数(含主槽) |
| 测试值列表 | STRING | 7, 8, 9 | 测骨架图:填姿势包目录。测正向/反向提示词请用提示词2~8,不用本框。 |
| 基准Checkpoint | COMBO | None | 1 options: None |
| 基准Checkpoint2 | COMBO | None | 2 options: None, None |
| 基准Checkpoint3 | COMBO | None | 2 options: None, None |
| 基准Checkpoint4 | COMBO | None | 2 options: None, None |
| 基准Checkpoint5 | COMBO | None | 2 options: None, None |
| 基准Checkpoint6 | COMBO | None | 2 options: None, None |
| 基准Checkpoint7 | COMBO | None | 2 options: None, None |
| 基准Checkpoint8 | COMBO | None | 2 options: None, None |
| 基准CFG | FLOAT | 7.00–100 | — |
| 基准步数 | INT | 201–10000 | — |
| 种子 | INT | 00–18446744073709550000 | — |
| 采样器 | COMBO | 44 options: euler, euler_cfg_pp, euler_ancestral, euler_ancestral_cfg_pp, heun, heunpp2, +38 | |
| 调度器 | COMBO | 9 options: simple, sgm_uniform, karras, exponential, ddim_uniform, beta, +3 | |
| 宽度 | INT | 51216–4096 | — |
| 高度 | INT | 51216–4096 | — |
| CLIP跳过层 | INT | 21–12 | — |
| LoRA模型opt | COMBO | None | 1 options: None |
| 模型强度opt | FLOAT | 1.00-20–20 | — |
| CLIP强度opt | FLOAT | 1.00-20–20 | — |
| 可选CLIPopt | COMBO | None | 1 options: None |
| CLIP类型opt | COMBO | stable_diffusion | Anima 的 qwen_3_06b 用 stable_diffusion;Qwen-Image 用 qwen_image |
| 可选VAEopt | COMBO | None | 1 options: None |
| 降噪opt | FLOAT | 1.000–1 | — |
| 可选ControlNetopt | COMBO | None | 1 options: None |
| ControlNet强度opt | FLOAT | 1.000–10 | — |
| ControlNet开始opt | FLOAT | 0.0000–1 | — |
| ControlNet结束opt | FLOAT | 1.0000–1 | — |
| ControlNet图像opt | IMAGE | — | |
| ControlNet图像2opt | IMAGE | — | |
| ControlNet图像3opt | IMAGE | — | |
| ControlNet图像4opt | IMAGE | — | |
| ControlNet图像5opt | IMAGE | — | |
| ControlNet图像6opt | IMAGE | — | |
| ControlNet图像7opt | IMAGE | — | |
| ControlNet图像8opt | IMAGE | — | |
| 单独保存每张opt | BOOLEAN | true | — |
| 启用Hires放大opt | BOOLEAN | false | 一阶采样后潜空间放大再采一次,提升清晰度 |
| Hires倍数opt | FLOAT | 1.751–4 | — |
| Hires方法opt | COMBO | nearest-exact | 5 options: nearest-exact, bilinear, area, bicubic, bislerp |
| Hires步数opt | INT | 201–10000 | — |
| Hires降噪opt | FLOAT | 0.520–1 | — |
Outputs (3)
| Name | Type | Description |
|---|---|---|
| 表格图像 | IMAGE | — |
| 图片列表 | IMAGE | — |
| 测试标签 | STRING | — |