Nodes/Comfyui-TOO-Pack/πŸ§ͺ TOO LoRA Grid
ComfyUI Node

πŸ§ͺ TOO LoRA Grid

Audition a folder of LoRAs in one sheet, same seed, no babysitting

By tetsuoo-onlineΒ·Created 9 months agoΒ·Updated about a month agoΒ· 5
πŸ§ͺ TOO LoRA Grid
  • model
  • clip
  • vae
  • positive
  • negative
  • latent_image
  • grid
  • images
β—„loras# path:str_model # ex: my_lora.safetensors:1.0 # ex: my_lora.safetensors:"no lora"β–Ί
β—„seed0β–Ί
β—„steps20β–Ί
β—„cfg7.0β–Ί
β—„sampler_nameβ–Ύβ–Ί
β—„schedulerβ–Ύβ–Ί
β—„denoise1.00β–Ί
β—„grid_cols4β–Ί
β—„grid_padding4β–Ί
β—„add_labelstrueβ–Ί
β—„label_height24β–Ί
β—„font_size30β–Ί
β—„label_color#ffffffβ–Ί
β—„bg_color#111111β–Ί
β—„footer_textβ–Ί

TOO LoRA Grid is a KSampler in disguise: it takes your model, clip, VAE, conditioning and latent like any sampler, but instead of generating one image, it generates one image per LoRA - all with the same seed and settings - and stitches them into a labeled comparison grid. If you've ever spent an evening loading a LoRA, generating, unloading, loading the next, this is the node that does that evening for you in a single queue run.

The killer part is the comparison baseline. The loras widget accepts a special entry form - any_lora.safetensors:"no lora" - which is a null slot: the grid samples that cell without applying any LoRA and labels it whatever you wrote. So you get a no-LoRA reference column right next to your candidates. That's the right way to judge a LoRA: against the base model at the same seed, not against your memory of it. Strength testing works too - list the same LoRA twice at different weights (:0.5 and :0.9) and eyeball the difference directly.

The loras format. One entry per line, lines starting with # are comments:

  • path/to/lora.safetensors - apply at strength 1.0
  • path/to/lora.safetensors:0.8 - apply at explicit strength
  • path/to/lora.safetensors:"label" - null slot, no LoRA, custom label

You can use bare filenames; the node resolves them against your LoRA folders and will even try .safetensors/.pt/.ckpt if you omit the extension. Missing files are logged, not fatal.

The other knobs. Seed, steps, cfg, sampler, scheduler, denoise - all the usual sampler settings, plus grid controls (grid_cols, grid_padding) and label styling (label_height, font_size, label_color, bg_color, and a footer_text you can use to bake the prompt into the sheet). Two outputs: grid (the assembled sheet) and images (the individual cells as a batch). Labels use PIL's default fonts with a fallback chain - in a container, install a font like DejaVuSans or the labels fall back to a chunky bitmap font.

Caching. The node hashes your model/conditioning signatures plus the latent image and caches decoded cells, so re-running with nothing changed is instant. Change any parameter or the latent and it re-samples. Handy, but remember the cache is in-memory and dies with the process.

Install.

cd ComfyUI/custom_nodes
git clone https://github.com/tetsuoo-online/Comfyui-TOO-Pack

or ComfyUI Manager β†’ "Comfyui-TOO-Pack" β†’ restart.

The honest caveats. It's one sample per LoRA - it's an audition tool, not a batch statistics rig. And the usual LoRA rule applies: architecture-bound, so an SDXL LoRA grid on a Flux model is wasted runs (the LoRA concept notes make the architecture-matching point everywhere). This version uses the standard sampler inputs; if your pipeline is built on the modern SamplerCustomAdvanced stack (noise/guider/sampler/sigmas), grab the Advanced variant in the same pack instead. For picking "which of these 12 LoRAs actually does what I want," this is the one.

CategoryπŸ”΅TOO-Pack/utils

Inputs (21)

NameTypeDefaultDescription
modelMODELβ€”
clipCLIPβ€”
vaeVAEβ€”
positiveCONDITIONINGβ€”
negativeCONDITIONINGβ€”
latent_imageLATENTβ€”
lorasSTRING# path:str_model # ex: my_lora.safetensors:1.0 # ex: my_lora.safetensors:"no lora"β€”
seedINT00–18446744073709550000β€”
stepsINT201–10000β€”
cfgFLOAT7.00–100β€”
sampler_nameCOMBO44 options: euler, euler_cfg_pp, euler_ancestral, euler_ancestral_cfg_pp, heun, heunpp2, +38
schedulerCOMBO9 options: simple, sgm_uniform, karras, exponential, ddim_uniform, beta, +3
denoiseFLOAT1.000–1β€”
grid_colsINT41–16β€”
grid_paddingINT40–64β€”
add_labelsBOOLEANtrueβ€”
label_heightINT2412–64β€”
font_sizeINT308–48β€”
label_colorSTRING#ffffffβ€”
bg_colorSTRING#111111β€”
footer_textSTRINGβ€”

Outputs (2)

NameTypeDescription
gridIMAGEβ€”
imagesIMAGEβ€”