ComfyUI Extension: comfyui-comparison-grid
Run ComfyUI workflows without the setup
No installs, no CUDA version roulette, no GPU sitting idle on your bill. Bring a workflow and run it in the browser.
A custom ComfyUI node that generates comparison grids in a single node.
Looking for a different extension?
Custom Nodes (0)
README
ComfyUI Comparison Grid
A custom ComfyUI node that generates comparison grids in a single node. Compare any two parameters (LoRA, strength, seed, steps, CFG, sampler, scheduler, denoise) across rows and columns, with labeled cell images and an assembled grid output.
Installation
Clone this repo into your ComfyUI custom_nodes directory:
cd /path/to/ComfyUI/custom_nodes
git clone https://github.com/evandcoleman/comfyui-comparison-grid.git
Restart ComfyUI. The node will appear under image/comparison as Comparison Grid.
How It Works
The Comparison Grid node replaces what would normally be a large multi-node workflow (100+ nodes for a 4x4 grid) with a single node. Internally it:
- Parses row and column axis values
- Pre-loads all needed LoRA weights
- Iterates over every row/col combination, running the full pipeline per cell:
- Applies LoRA (if applicable)
- Samples (KSampler equivalent)
- Decodes via VAE
- Overlays a text label ("row_label | col_label")
- Assembles all cells into a labeled grid image with row/column headers
Node Inputs
Required
| Input | Type | Description |
|-------|------|-------------|
| model | MODEL | Base diffusion model |
| clip | CLIP | CLIP model |
| vae | VAE | VAE for decoding |
| positive | CONDITIONING | Positive prompt conditioning |
| negative | CONDITIONING | Negative prompt conditioning |
| latent_image | LATENT | Starting latent (e.g. from EmptyLatentImage) |
| row_axis | COMBO | Parameter to vary across rows |
| row_values | STRING | One value per line for the row axis |
| col_axis | COMBO | Parameter to vary across columns |
| col_values | STRING | One value per line for the column axis |
| default_lora | COMBO | Default LoRA file (used when lora is not an axis) |
| default_strength | FLOAT | Default LoRA strength |
| default_seed | INT | Default seed |
| default_steps | INT | Default sampling steps |
| default_cfg | FLOAT | Default CFG scale |
| default_sampler | COMBO | Default sampler algorithm |
| default_scheduler | COMBO | Default scheduler |
| default_denoise | FLOAT | Default denoise strength |
| font_size | INT | Label font size |
| font_color | STRING | Label text color (hex, e.g. #FFFFFF) |
| bg_color | STRING | Label background color (hex, e.g. #000000) |
Optional
| Input | Type | Description |
|-------|------|-------------|
| font_path | STRING | Path to a .ttf font file |
| lora_name | * | LoRA filename from an upstream download node |
| lora_N | * | Additional LoRA filenames (dynamic inputs: lora_1, lora_2, ...) |
Outputs
| Output | Type | Description |
|--------|------|-------------|
| cell_images | IMAGE | Batch of all labeled cell images (R*C images, row-major) |
| grid_image | IMAGE | Single assembled grid image with row/column headers |
| num_rows | INT | Number of rows in the grid |
| num_cols | INT | Number of columns in the grid |
Axis Parameters
Any two of these can be used as row/column axes:
| Parameter | Value Format | Example |
|-----------|-------------|---------|
| lora | Filename (from loras/ folder) | my_lora.safetensors |
| strength | Float | 0.5, 0.75, 1.0 |
| seed | Integer | 12345, 67890 |
| steps | Integer | 10, 20, 30 |
| cfg | Float | 1.5, 4.0, 7.0 |
| sampler | Sampler name | euler, dpmpp_2m_sde |
| scheduler | Scheduler name | normal, karras |
| denoise | Float (0-1) | 0.5, 0.75, 1.0 |
Values are entered one per line in the multiline text inputs.
LoRA Integration
LoRA files are loaded from ComfyUI's standard loras/ folder via folder_paths. There are two ways to provide LoRAs:
From the dropdown (non-axis default)
Select a LoRA from the default_lora dropdown. This is used when lora is not one of the axes.
From upstream download nodes (axis or default)
Connect one or more lora_name / lora_N inputs from upstream nodes that output filenames (e.g. comfyui-model-manager's ModelManagerLoRADownload node).
When lora is an axis, the linked LoRA inputs become the axis values automatically, replacing whatever is in the multiline text field. The label for each LoRA is derived from its filename (extracting "Epoch N" patterns when present).
Example Workflow
A minimal workflow with this node:
UNETLoader ─────────────┐
CLIPLoader ──┬──────────┤
| |
CLIPTextEncode(+) ──────┤
CLIPTextEncode(-) ──────┤
VAELoader ──────────────┤
EmptyLatentImage ───────┤
|
ModelManagerLoRADownload ──┐
ModelManagerLoRADownload ──┤
ModelManagerLoRADownload ──┤
ModelManagerLoRADownload ──┤
▼
ComparisonGrid
|
▼
SaveImage
A companion workflow generator script (generate_workflow.py) is available in the LoRA-Testing project that builds this workflow from a simple config.
License
MIT
Run ComfyUI workflows without the setup
No installs, no CUDA version roulette, no GPU sitting idle on your bill. Bring a workflow and run it in the browser.