Tutorials / XY Plot: 3 - Complex variations
Welcome to this third tutorial of the XY Plot series!
Here we are going to see a few advanced techniques, to make virtually anything vary, for example models or any value in a combo widget.
To achieve that, we will use 3 different methods:
- simple: with dedicated nodes, for checkpoints / LoRAs / samplers / schedulers
- versatile: adaptable to any kind of model (or combo widget)
- with the
Output Confignode: to standardize your workflow, and keep parameters separated
Each of these approaches will generate the same results: depending on your specifity, pick the one that matches your specific needs.
Tip
In the following, we vary checkpoints vs a fixed list of seeds. If you prefer to have a new set of random seeds each time you want, just replace the corresponding
List: ftom Multilinenode withList: Random Seeds.
Tutorial sections:
- Expected results
- Part 1 - Simple: with a dedicated node (for checkpoints, LoRAs, samplers, schedulers)
- Part 2 - Versatile: any model (or combo widget)
- Part 3 - With the
Output Confignode - TL;DR / Conclusion
And as always, if you do not want to follow all the steps, you can jump directly to the conclusion.
Expected results
If you use the exact same parameters:
- checkpoints:
sd_xl_base_1.0,Juggernaut-XI-byRunDiffusion - seeds:
156680208700286,715168739510668,568208062071311
You should get the same result:

Part 1 - Simple: with a dedicated node (for checkpoints, LoRAs, samplers, schedulers)
Tip
Here we use the
List: Checkpointsnode, that allows to select any number of checkpoints (from your ComfyUImodels/checkpointsfolder), and get a list of file names.
Similar nodes exist for: LoRAs, samplers, schedulers.
Load either workflow - part 1.json or workflow - part 1.png into ComfyUI.
Important:
- in the
List: Checkpointsnode, select a few checkpoints from your env- in the example, I use SDXL 1.0 and Juggernaut XL v11
- ensure the widget
with file extension?is unchecked, as we will add the extension later
Execute the workflow.
What should be noticed
Note
we have chosen to not include the
.safetensorsextension in the input: it would have been displayed in the row headers, making them too long. Of course, you can keep it, and skip the following.
To append the .safetensors extension:
- we use a
Format: Stringnode, to add the extension to thedim1 valueoutput of theQueuenode - but by simply doing so, we cannot pipe the text output to the
Load Checkpointnode, why?- the
chkpt_namewidget does not accept any string, but a string that exists in the list
- the
- so to bypass this limitation we simply convert the text output to Any, thanks to the
Convert to Anynode
Note
You can read more about the Any output in the XY Plot core concepts, and the 2nd tutorial of the
Output Confignode
Lessons learned
- combo widgets (as
chkpt_nameinLoad Checkpoint) do not accept simple strings- a workaround is to use an output with type Any (
"*")- should we have included the
.safetensorsin the first input, we could have dropped theFormat: StringandConvert to Anynodes, because theXY Plot: Queueoutputs are themselves of type Any - but this wouldn't be great in terms of display in the grid
- should we have included the
- a workaround is to use an output with type Any (
- the checkpoint list is connected to
dim1, notdim2, for a performance reason- for the test: just switch dim1 / dim2 and check the processing time (more in the core concepts page)
Part 2 - Versatile: any model (or combo widget)
While it is usually simpler to use the List nodes dedicated to checkpoints / LoRAs / samplers / schedulers, there are some cases where we need to use a more versatile approach:
- we want to vary another type of model / value from a combo widget
- we have stored the list as a separate text file (e.g. test case), and prefer to re-use it, rather than manually selecting the values
This short part will cover exactly that, to show how you can adapt the XY Plot to many specific cases.
Load either workflow - part 2.json or workflow - part 2.png into ComfyUI.
Important:
- in the first input list, adjust to checkpoints that are available in your ComfyUI instance
- do no add the
.safetensorsextension, it will be added automatically
Execute the workflow.
Lessons learned
By using a List: String or List: Multiline, we can basically send any value, as long as we ensure it matches the destinastion widget.
You can use this approach for any combo widget, in particular when loading models, or any value in a combo widget.
Important
Be very cautious about the values you set in input: by using the Any type, we bypass the standard ComfyUI type checks, so the workflow may fail if the values are incorrect.
Part 3 - With the Output Config node
Here we use the ComfyLab Output Config node, to keep our workflow and values separated.
Load either workflow - part 3.json or workflow - part 3.png into ComfyUI.
Copy one of the output config - part 3.* files, adjust the checkpoints to your env, and load it into the Output Config node.
Execute the workflow.
As expected, we have strictly the same results as in Part1 and Part 2.
What should be noticed
- the output config file is available in 3 different formats: JSON, JSON5 and YAML
- we have replaced the input lists by a single
Output Confignode- we've also added more outputs to the config file: CFG, steps, sampler, ... quite a lot indeed
- of course, we could have used 2 different
Output Confignodes, one for the XY Plot itself, and another one for the other values: it's up to you to define how you want to standardize your configs
- note how the
Output Confignode auto-detects the type from output values:- for example,
cfgis written without quotes, so it's detected as a float - but for combo widgets (sampler, scheduler), we have to force type to be Any (
*)
- for example,
Tip
We won't go into details here about the configuration file itself, but you can find more information in the corresponding node reference and the dedicated tutorials.
TL;DR / Conclusion
In this tutorial, we have covered 3 different methods to vary checkpoints (or many other things):
- simple one, using a dedicated node: applicable to checkpoints, LoRAs, samplers, schedulers
- a more versatile one, that should adapt to many of your use cases: use a
List: from StringorList: from Multiline - one using the
Output Confignode, to standardize your workflow and keep the values separated
Tip
You can find more examples in the wiki.
If you have any suggestion on how to improve this wiki, feel free to open a discussion.
Thank you for reading, enjoy!

