Powder Grid Saver
Labeled LoRA comparison grids, the easy way (Powder Grid Saver)
- images
- grid_image
- saved_paths
The Powder Grid Saver is the payoff node of the E2GO "Powder" pack. Everything upstream - the Lora Loader fanning out model copies, the prompts fanning out combinations - produces an image batch that is genuinely hard to read as raw thumbnails. This node turns that batch into a labeled grid with the model name, the LoRAs, and the prompt printed under each cell, and saves it to disk with a JSON sidecar. If you do LoRA comparisons or prompt batches with any regularity, you'll wonder how you lived on raw contact sheets.
The killer feature is that it's wire-light. Give it images, optionally the same lora_info and prompts strings the rest of the pack produces, and it figures the labels out.
How it works
The node stitches your images into a grid - either Horizontal (Loras as columns) or Vertical (Loras as rows) - with configurable gap, font size, and a Dark or Light background. Each cell can carry the model name, LoRA names, and the prompt, truncated by prompt_max_chars. The seed option is thoughtful: with a batch larger than one, it prints Seed: N [i/batch] so you can reproduce a specific cell later.
The genuinely clever bit is style detection. Grid Saver automatically finds the Powder Styler node in your workflow through ComfyUI's hidden prompt graph - no extra wires needed. The show_style_prompt switch then decides how the style appears in the label: OFF appends just the style name ("a portrait of a warrior [Cinematic, Dark Fantasy]"), ON assembles the full style text ("cinematic lighting, a portrait of a warrior, film grain"). Style metadata always lands in the JSON regardless of the switch.
It also extracts sampler, scheduler, steps, CFG, and seed from any sampler node in the workflow for the JSON metadata - including the Flux split nodes (KSamplerSelect, Flux2Scheduler, RandomNoise, CFGGuider) - so you don't have to wire settings in manually. When you connect the seed input, the JSON additionally gets per-image seeds and batch_indices for reproducing individual cells.
The inputs that matter
- images - the batch to grid. From your VAE Decode.
- layout / background / gap / font_size - grid cosmetics.
- show_prompts / show_lora_names / show_seed / show_style_prompt - what the labels show.
- filename_prefix / subfolder / add_model_to_filename / save_json - output naming and the JSON sidecar.
Optional wire-ins: lora_info, prompts, negative_prompts (for labels), and seed.
Outputs are grid_image (the assembled grid as an IMAGE, previewable) and saved_paths (where the files went).
Installation
Same one-install-for-all as the rest of the pack:
cd ComfyUI/custom_nodes
git clone https://github.com/E2GO/e2go-comfyui-nodes.git e2go_nodes
Restart ComfyUI, or install via ComfyUI Manager by searching e2go_nodes / E2GO. No extra pip dependencies; the pack targets ComfyUI 0.17+.
Common issues
Three things to know. First, this is an output node that always runs when queued (IS_CHANGED returns NaN), so it will re-save every time - that's normal, don't fight it. Second, the automatic sampler-metadata extraction works by scanning the workflow for sampler nodes; if your metadata looks wrong, check which sampler node it found - it grabs from any sampler in the graph, so if you have an unused one lying around, that's what it reports. Third, custom fonts: drop a .ttf into e2go_nodes/fonts/ and it's picked up automatically; without one you get the system default, which is fine but bland.
The one genuinely fiddly part: labels only show what you feed it. If you skip the prompts / lora_info wires, the cells will still grid up but without the per-cell text that makes comparison grids useful. The pack's example workflow shows the full wiring, and it's worth importing once to see it working.
Inputs (19)
| Name | Type | Default | Description |
|---|---|---|---|
| images | IMAGE | — | |
| layout | COMBO | 2 options: Horizontal (Loras as columns), Vertical (Loras as rows) | |
| background | COMBO | 2 options: Dark, Light | |
| gap | INT | 100–100 | — |
| font_size | INT | 3612–100 | — |
| show_model_name | BOOLEAN | true | — |
| show_lora_names | BOOLEAN | true | — |
| show_prompts | BOOLEAN | true | — |
| prompt_max_chars | INT | 10010–500 | — |
| show_seed | BOOLEAN | false | — |
| show_style_prompt | BOOLEAN | false | — |
| filename_prefix | STRING | grid | — |
| subfolder | STRING | grids | — |
| add_model_to_filename | BOOLEAN | true | — |
| save_json | BOOLEAN | true | — |
| lora_infoopt | STRING | — | |
| promptsopt | STRING | — | |
| negative_promptsopt | STRING | — | |
| seedopt | INT | — |
Outputs (2)
| Name | Type | Description |
|---|---|---|
| grid_image | IMAGE | — |
| saved_paths | STRING | — |