XY Inputs: Lora //EasyUse
Lora — sweep LoRAs across an XY plot grid
- optional_lora_stack
- X or Y
When you've got five LoRAs and no idea which one - or which strength - actually looks best, you stop eyeballing and make a grid. easy XYInputs: Lora is the axis feeder for Easy-Use's XY plot: it produces one axis of a comparison grid where each cell swaps in a different LoRA (or a different strength of the same one), and the plot renders them side by side with labels. It's the difference between generating twelve images and squinting at your filenames, and getting a single labeled contact sheet you can actually read.
This is the honest way to answer "how strong should I run this LoRA?" A LoRA at 0.6 versus 0.9 versus 1.2 can be the difference between "adds the style" and "melts the face," and the only reliable way to see that is to hold everything else fixed and vary the one thing.
How it works
It doesn't generate anything by itself. It builds a list of LoRA configurations - names, model strengths, CLIP strengths - and outputs them as an X_Y axis object. You plug that into the X (or Y) input of easy XYPlot / easy XYPlotAdvanced, and the plot node runs your base workflow once per entry, changing only the LoRA down that axis, then tiles the results with the value printed on each. Pair a Lora axis on X with a different axis (say seed, or CFG) on Y and you get a full matrix.
The inputs and outputs that matter
input_mode-Lora Names(each column is just a different LoRA at the default strength) orLora Names+Weights(each column carries its own model/CLIP strength). Pick the second when you want to sweep strength, not just swap files.lora_count- how many entries the axis has (up to 10). This sets how many columns/rows you get.model_strength/clip_strength- the global default strengths applied to every entry, unless you override per-entry.lora_name_1 … lora_name_10with theirmodel_str_N/clip_str_N- the individual slots. Fill as many as yourlora_count. Leaving one atNonegives you a useful baseline "no LoRA" cell for comparison.
Optional: optional_lora_stack to prepend an existing LoRA stack (so every cell shares a common base), and display_trigger_word to print trigger words on the labels. Output is a single X or Y (X_Y type) - wire it into the plot node's axis input.
How to install it
Ships in ComfyUI-Easy-Use. ComfyUI Manager: search ComfyUI-Easy-Use, install, restart. Manually:
cd ComfyUI/custom_nodes
git clone https://github.com/yolain/ComfyUI-Easy-Use
then install.bat (Windows) or pip install -r ComfyUI-Easy-Use/requirements.txt, and restart. No models needed - it reads your existing models/loras folder.
Common issues & troubleshooting
Nothing plots. This node is only an axis; on its own it produces no image. It has to feed an easy XYPlot node, and that plot node has to be driving an actual generation graph. If your canvas is empty, you've wired the axis but not connected it to the plot, or the plot to a sampler.
Blank cells / "None" columns. A slot left at None renders as a no-LoRA cell - sometimes that's what you want (a baseline), sometimes it means you set lora_count higher than the number of LoRAs you actually filled. Match the two.
Grid explodes / takes forever. Every cell is a full generation. A 10-wide Lora axis crossed with a 10-tall second axis is 100 renders. Keep counts modest while you're exploring, and remember a big grid on a rented GPU is a real bill.
Strengths don't vary. If you meant to sweep strength but every cell looks identical, check that input_mode is set to Lora Names+Weights - in plain Lora Names mode the per-entry strength fields are ignored and everything runs at the global default.
Inputs (36)
| Name | Type | Default | Description |
|---|---|---|---|
| input_mode | COMBO | 2 options: Lora Names, Lora Names+Weights | |
| lora_count | INT | 30–10 | — |
| model_strength | FLOAT | 1.00-10–10 | — |
| clip_strength | FLOAT | 1.00-10–10 | — |
| lora_name_1 | COMBO | 1 options: None | |
| model_str_1 | FLOAT | 1.00-10–10 | — |
| clip_str_1 | FLOAT | 1.00-10–10 | — |
| lora_name_2 | COMBO | 1 options: None | |
| model_str_2 | FLOAT | 1.00-10–10 | — |
| clip_str_2 | FLOAT | 1.00-10–10 | — |
| lora_name_3 | COMBO | 1 options: None | |
| model_str_3 | FLOAT | 1.00-10–10 | — |
| clip_str_3 | FLOAT | 1.00-10–10 | — |
| lora_name_4 | COMBO | 1 options: None | |
| model_str_4 | FLOAT | 1.00-10–10 | — |
| clip_str_4 | FLOAT | 1.00-10–10 | — |
| lora_name_5 | COMBO | 1 options: None | |
| model_str_5 | FLOAT | 1.00-10–10 | — |
| clip_str_5 | FLOAT | 1.00-10–10 | — |
| lora_name_6 | COMBO | 1 options: None | |
| model_str_6 | FLOAT | 1.00-10–10 | — |
| clip_str_6 | FLOAT | 1.00-10–10 | — |
| lora_name_7 | COMBO | 1 options: None | |
| model_str_7 | FLOAT | 1.00-10–10 | — |
| clip_str_7 | FLOAT | 1.00-10–10 | — |
| lora_name_8 | COMBO | 1 options: None | |
| model_str_8 | FLOAT | 1.00-10–10 | — |
| clip_str_8 | FLOAT | 1.00-10–10 | — |
| lora_name_9 | COMBO | 1 options: None | |
| model_str_9 | FLOAT | 1.00-10–10 | — |
| clip_str_9 | FLOAT | 1.00-10–10 | — |
| lora_name_10 | COMBO | 1 options: None | |
| model_str_10 | FLOAT | 1.00-10–10 | — |
| clip_str_10 | FLOAT | 1.00-10–10 | — |
| optional_lora_stackopt | LORA_STACK | — | |
| display_trigger_wordopt | BOOLEAN | Trigger words showing lora model pass through the model's metadata, but not necessarily accurately. |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| X or Y | X_Y | — |