XY Inputs: CFG Scale //EasyUse
CFG Scale — grid-search your CFG value instead of guessing
- X or Y
A1111 users had X/Y/Z Plot to sweep a setting across a grid of images and eyeball the differences side by side - it's one of the extension-era features people still say ComfyUI does worse. easy XYInputs: CFG Scale is Easy-Use's answer for one specific axis: it generates an evenly spaced range of CFG values and hands them off as one axis of a comparison grid, instead of you manually re-running the same prompt five times and swapping the number by hand.
Why you'd reach for it
CFG is the single most argued-about slider in the whole stack, and the right value depends entirely on what you're running: 5-9 is the sweet spot on SD 1.5 and SDXL, 4-6 on Pony and Illustrious, and roughly 1 on anything distilled - Flux, Z-Image Turbo, Krea 2 Turbo and their kin, where the guidance is already baked in and a carried-over 7 just burns the image. Rather than trusting a rule of thumb, wire this node in and generate the actual range on your actual prompt and seed. It's also the fastest way to see the failure modes for yourself: too low and the prompt gets ignored, too high and you get the oversaturated, deep-fried look CFG is famous for above roughly 12.
How it works
This node doesn't render anything itself - it just computes a list of CFG values and packages them, tagged as the "CFG Scale" axis, for the pack's easy XY Plot Advanced node to consume. Give it a start value, an end value, and how many steps you want, and it linearly interpolates between the two. Wire its output into the X or Y input of easy XY Plot Advanced (alongside a pipe from your loader), and the plot node runs your workflow once per value, laying the results out as a labeled grid.
The inputs and outputs that matter
batch_count(default 3) - how many CFG values to generate, evenly spaced between your two endpoints. Set to 1 for a single value, higher for a finer sweep - each one is a full generation, so treat this as a multiplier on render time.first_cfg/last_cfg(default 7 → 9) - the range endpoints. The defaults assume an SD 1.5/SDXL-style checkpoint; on a distilled model you'd want a much tighter range hugging 1 (say 0.8 to 2) rather than the wide default, since anything much above 3 tends to burn on those.
The single output is X or Y - plug it into whichever axis you want on easy XY Plot Advanced.
How to install it
ComfyUI Manager: search ComfyUI Easy Use, install, restart. Or by hand:
cd ComfyUI/custom_nodes
git clone https://github.com/yolain/ComfyUI-Easy-Use
Windows: double-click install.bat. Linux/Mac: pip install -r requirements.txt. Restart ComfyUI. No models, no extra dependencies - this node is pure arithmetic feeding a plot.
Common issues & troubleshooting
The node this feeds, easy XY Plot Advanced, needs a pipe input as well as your X/Y - if you only wire this node's output and forget the pipe, the plot has nothing to actually run against. Make sure a loader's pipe output is connected too.
Second, know what you're sweeping before you burn GPU time on it: if your checkpoint is guidance-distilled (Flux Dev, Z-Image Turbo, Krea 2 Turbo, any Lightning/Turbo/Hyper variant), the useful range is tight and close to 1 - a sweep from 5 to 9 will just show you five flavors of burned. Conversely, running a narrow 1-to-2 sweep on a plain SDXL checkpoint will mostly look identical, because that model wants real guidance to do anything. Match the range to the architecture, not the node's defaults.
And a general grid-search caveat worth carrying over: a single sweep on one seed tells you what happened on that seed, not what's reliably better - the standing objection from anyone who's actually run these comparisons is to generate more than one image per value before concluding a difference is real rather than luck.
Inputs (3)
| Name | Type | Default | Description |
|---|---|---|---|
| batch_count | INT | 30–50 | — |
| first_cfg | FLOAT | 7.000–100 | — |
| last_cfg | FLOAT | 9.000–100 | — |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| X or Y | X_Y | — |