ArtificialGuyBR

Home / Blog / Training LoRAs

Fixed-Seed Checkpoint and LoRA Comparison

A practical methodology for fair Stable Diffusion model comparisons — control variables and read grids honestly.

5 sources cited Training LoRAs

TL;DR


Origin: From Reddit Idea to ComfyUI Workflow

The izolight article opens with a direct reference: "A few days ago I stumbled upon a reddit post with a model testing card" linking to r/StableDiffusion [[1]](https://civitai.com/articles/4474). That post (r/StableDiffusion/comments/1b39b07) is the seed for the entire methodology.

The author then built a ComfyUI implementation with two explicit improvements over the Reddit concept:

  1. Centrally controlled parameters — "I decided to improve this a bit with centrally controlled parameters for the generation" [[1]](https://civitai.com/articles/4474)
  2. LoRA and Lightning LoRA support — "...and support for LoRA and Lightning LoRA" [[1]](https://civitai.com/articles/4474)

The resulting workflow puts "all the input parameters on the left side with the final output (as a preview that can be saved) there too" [[1]](https://civitai.com/articles/4474). This layout keeps the control surface visible while the comparison grid renders.


Methodological Core: One Parameter Set, Many Models

The central principle: every variable that could affect the output must be locked identically across all test cells. For a deeper treatment, see SDXL checkpoint evaluation.

What the Card Actually Tested

The workflow evaluated three SDXL checkpoints, all using the same generation parameters:

CheckpointBaseVersionKey ParametersSource
Realities Edge XLSDXL LightningV7 (BakedVAE)CFG 7, steps 25, DPM++ 2M SDE, seed 1https://civitai.com/images/7804518
Juggernaut XLSDXLV9 + RunDiffusionPhoto 2CFG 7, steps 25, DPM++ 2M SDE, seed 1https://civitai.com/images/7804589
Albedo Base XLSDXLV2.1CFG 7, steps 25, DPM++ 2M SDE, seed 1https://civitai.com/images/7805074

Generation metadata from each model confirms identical parameter values: cfgScale:7, steps:25, sampler:DPM++ 2M SDE, seed:1 [[2]](https://civitai.com/images/7804518) [[3]](https://civitai.com/images/7804589) [[4]](https://civitai.com/images/7805074). All three use SDXL-base architecture — confirmed by their consistent parameters across every published sample.

LoRA Test Suite

The 30 LoRAs span style categories from Lava Style through Chrome Style, covering:

Each was tested with automatic trigger-word injection via the LoRA Auto Trigger node [[1]](https://civitai.com/articles/4474).


Technical Detail: LoRA Auto Trigger Architecture

The LoRA Auto Trigger project is a fork of Extraltodeus/LoadLoraWithTags and adds support for stacked LoRAs from jags111/efficiency-nodes-comfyui [[5]](https://github.com/idrirap/ComfyUI-Lora-Auto-Trigger-Words). It extracts trigger words from two sources:

  1. Civitai API — for models hosted on Civitai
  2. Model training metadata — embedded in .safetensors files when available

This dual-source approach ensures coverage even for LoRAs distributed outside Civitai. The node outputs both civitai_tags_list and meta_tags_list as Python lists, which can be filtered and weighted via the TagsSelector node [[5]](https://github.com/idrirap/ComfyUI-Lora-Auto-Trigger-Words). This provides flexibility in selecting trigger words for each LoRA type.


Version Evolution: Three Iterations

v1 — Baseline with Centrally Controlled Parameters

The initial release established the core architecture: a single ComfyUI workflow where all generation parameters are defined once and propagated to every cell. This eliminated the most common source of comparison artifacts — parameter drift between cells.

v2 — From Concatenation to Average Conditionings

Original prompt handling concatenated text strings: "portrait of a woman" + "soft window light". This created a single token sequence where attention could dilute across unrelated concepts.

v2 introduced average conditionings for Portrait and Close-up categories [[1]](https://civitai.com/articles/4474). The ComfyUI ConditioningAverage node computes separate text embeddings for each prompt component, then blends them into a single vector before feeding the U-Net. This preserves semantic direction from each prompt while preventing token-length penalties.

Note: The article states the change but does not explain the mechanism. The above describes standard ComfyUI ConditioningAverage behavior.

v3 — Automated Trigger-Word Injection

v3 implemented LoRA Auto Trigger [[1]](https://civitai.com/articles/4474) [[5]](https://github.com/idrirap/ComfyUI-Lora-Auto-Trigger-Words). Instead of manual trigger words, the node extracts canonical tags from two sources: Civitai API and .safetensors training metadata.

Why this matters: When comparing LoRAs side-by-side, manual trigger-word inconsistency introduces bias. One LoRA gets its exact canonical trigger; another gets a misspelled or omitted trigger. Auto-trigger standardizes what activates each LoRA, isolating the model itself as the only variable.


Common Errors and Fixes

ErrorCauseFix
Cells produce wildly different compositionsSeed varies between cellsLock a single seed across all cells; the izolight card uses seed 1 [[2]](https://civitai.com/images/7804518)
One LoRA shows no visible effectTrigger word missing or misspelledUse LoRA Auto Trigger (v3) to inject canonical tags from Civitai API or metadata [[5]](https://github.com/idrirap/ComfyUI-Lora-Auto-Trigger-Words)
Portrait prompts dilute subject detailPrompt concatenation creates token-length penaltiesSwitch to ConditioningAverage for prompt blending (v2 behavior) [[1]](https://civitai.com/articles/4474)
Results vary between test runsSampler, steps, or CFG differ per modelDefine parameters centrally once; propagate to every cell
VAE mismatch alters colorsDifferent VAE per checkpointUse each checkpoint's baked VAE; keep all other parameters identical

FAQ

How do you fairly compare two Stable Diffusion checkpoints?

Lock every variable that could affect output: seed, sampler, steps, CFG, resolution, and VAE. Use the same prompt set across both models. The izolight testing card enforces this via centrally controlled parameters [[1]](https://civitai.com/articles/4474).

What parameters should be held constant when comparing LoRAs?

Seed, sampler, steps, CFG, resolution, VAE, and base checkpoint. Trigger words must also be standardized via LoRA Auto Trigger (v3) to avoid manual inconsistency bias [[5]](https://github.com/idrirap/ComfyUI-Lora-Auto-Trigger-Words).

Why use a fixed seed for model comparison grids?

A fixed seed eliminates stochastic variance between cells, so visual differences can be attributed to the model rather than random noise. The izolight card uses seed 1 across all published samples [[2]](https://civitai.com/images/7804518).

What is average conditioning vs concatenation in ComfyUI?

Concatenation joins prompt strings into one token sequence; average conditioning (the ConditioningAverage node) computes separate embeddings for each prompt component, then blends them into a single vector. v2 of the card uses averaging for Portrait and Close-up categories [[1]](https://civitai.com/articles/4474).

How does LoRA Auto Trigger work?

The node extracts canonical trigger words from the Civitai API (for Civitai-hosted LoRAs) and from .safetensors training metadata. It outputs civitai_tags_list and meta_tags_list as filterable Python lists. A fork of Extraltodeus/LoadLoraWithTags with stacked-LoRA support from jags111/efficiency-nodes-comfyui [[5]](https://github.com/idrirap/ComfyUI-Lora-Auto-Trigger-Words).


What the Source Doesn't Reveal

Even with a detailed testing card, methodological gaps remain:


Common Evaluation Pitfalls vs. Card Design

These pitfalls are widely recognized in the Stable Diffusion community. The card addresses several through its design:

PitfallThe Card's Fix
Different seeds per cellSingle fixed seed propagated to all cells
Different samplers/steps/CFG per modelCentrally controlled parameters
Manual trigger-word inconsistencyLoRA Auto Trigger (v3)
Single-prompt verdictMultiple test categories (Portrait, Close-up, etc.)
VAE mismatchEach checkpoint uses its baked VAE; parameters otherwise identical

Sources

  1. Civitai article "Model testing card" by izolight — describes the testing card workflow, version history, and lists models/LoRAs tested. https://civitai.com/articles/4474
  2. Realities Edge XL generation metadata (image 7804518) — shows cfgScale:7, steps:25, sampler:DPM++ 2M SDE, seed:1. https://civitai.com/images/7804518
  3. Juggernaut XL v9 generation metadata (image 7804589) — identical parameter set. https://civitai.com/images/7804589
  4. Albedo Base XL v2.1 generation metadata (image 7805074) — identical parameter set. https://civitai.com/images/7805074
  5. ComfyUI-Lora-Auto-Trigger-Words GitHub repository — documents trigger-word extraction from Civitai API and model metadata. https://github.com/idrirap/ComfyUI-Lora-Auto-Trigger-Words