An extension for Forge Neo and ComfyUI

Local image generation,
minus the busywork.

Image Bench cuts the corners of the standard Stable Diffusion WebUI workflows. Batches, model comparisons, picking the best images, upscales and edits all happen in one window built around your images, and the whole process gets an order of magnitude more fun.

Runs on Forge Neo ComfyUI
01 — Tour

Twelve tabs, one window.

Image Bench is the window you work in. It runs Forge Neo or ComfyUI in the background, in a tab of its own, and drives it for you. Click through the tabs.

Image Bench — Generate
Image Bench Generate tab
01Generate

The controls you touch most, in one compact screen and synced both ways with Forge Neo or ComfyUI: prompt, model, LoRAs, sampling, size and Hires. fix. Switch between txt2img, img2img and Inpaint, and follow a batch on the session filmstrip.

02 — Workflow

One gallery, two trays and a ring of actions.

A generated still life on an image card
parameters send trays delete generate

The Generated tab

Every image you generate lands here, grouped by batch, with its prompt, seed and model attached. Explorations and upscales get tabs of their own, and every image remembers how it was made. While a batch runs, a filmstrip in the Generate tab follows it too.

The trays

Drag the ones that matter into the Concept tray or the Image tray. Trays persist, take color markings and comments, and are saved with your project.

The action rim

Hold Ctrl over any image and a ring of actions opens around it. Reuse its parameters, upscale it, send it to img2img, ControlNet or your editor. One gesture, every action.

No file manager. No clipboard.

Upscaling one image.

Now multiply by every image you keep.

Six steps → one key.

In the WebUI
  1. 01Find the image in the file system
  2. 02Copy its seed and prompt back into the UI
  3. 03Enable Hires. fix
  4. 04Generate
  5. 05Disable Hires. fix
  6. 06Randomize the seed again
In Image Bench

Press U pointing to the image in a tray.

Or click Upscale on its action rim. Seed, prompt and Hires. fix are handled for you, and the result lands in the Upscaled tab.

03 — Prompt history

Compare your prompt with the ones before it.

The Generate tab remembers the last 16 prompts you generated with. Each of them gets a numbered button above the prompt field. Click a number to see that prompt as a diff against the one you have now: removed text is struck through, added text is highlighted.

The prompt field showing an earlier prompt as a diff: a removed phrase struck through in red, the new phrase highlighted in green. Above it are the history buttons, the Variants dropdown and the fork button
1

Generate as usual. Each generation adds its prompt and negative prompt to the list. If you generate with a pair that is already anywhere in the list, that entry moves back to the front.

2

Read the changes by phrase. Prompts are split at commas and line breaks, and phrases are matched with their weights ignored. A phrase you reworded is compared word by word.

3

Go back with the Use button. It copies the selected prompts back into their fields. The list is saved with your project and comes back when you open it.

4

Fork the prompts worth keeping. Older prompts drop off the list. The fork button next to Diff saves the selected one as a named variant, which stays until you remove it. Variants are compared and used just like history entries.

04 — Editors

Built for precision. Your editor draws the masks.

Image Bench has no brush, on purpose. Masks come only from a real graphics editor: make a selection in Photoshop, Krita or GIMP and send it. The image, mask or reference goes straight into Forge Neo or ComfyUI, and the result comes back as a new layer.

This needs the Image Bench plugin for your editor. Download it from the built-in manual (Library › Manual › Editors) and install it in Photoshop, Krita or GIMP.

PhotoshopKritaGIMP 3
image · mask · reference result as a new layer
Image BenchForge Neo · ComfyUI

Selections become masks

Feather and refine with real tools, at full resolution, and send the selection as the inpaint mask.

Any target

Send to the input image, a reference, a ControlNet unit (preprocessed or as is) or the Compare tab.

Back as layers

Send to Photoshop, Krita or GIMP from any image. Results arrive as layers, ready to blend.

05 — Compare

One region, every image.

Draw a region once and it applies to every image in the Compare tab. Zoom and pan stay in sync, even across different resolutions. The crops line up in a grid you can reorder and export as one PNG, so you can tell two samplers or ten LoRA weights apart at a glance.

euler
dpm++ 2m
lora 0.6
lora 1.0
06 — Editing

Edit images by saying what to change.

Edit models like Flux Klein, Kontext and Qwen Edit take reference images and a sentence. Image Bench gives them a proper home: add references by drag and drop, one switch for edit mode, and the result next to its input.

The Generate tab in edit mode: a reference image of a milk pack, the prompt to add it to the table, and the result
1 2 3
1

Say what to change. "Add the milk pack from the first image on the table, right of the vase."

2

Drop the references. Drop, paste or drag them from the stream and the trays. Your editor can send them too.

3

Compare and iterate. The result sits next to its input. Keep it, send it back as the next input, or edit it further.

07 — ComfyUI

Drive your ComfyUI workflow from the Generate tab.

Image Bench works with the workflow you have open in ComfyUI. It finds the nodes it needs, sets their widgets and queues the workflow, the same way you would by hand. Where the graph has several candidates for a role, a marker in the node title tells it which one to use.

Load Diffusion Model ib:cp
MODEL
unet_namekrea2_dev.safetensors
weight_dtypedefault
Load CLIP
CLIP
clip_nameqwen_3_4b.safetensors
typeflux2
Load VAE
VAE
vae_nameflux2-vae.safetensors
ib:ref:0
IMAGEMASK
ib:ref:1
IMAGEMASK
Empty Latent
LATENT
width1216
height832
batch_size1
Prompt ib:pp
modelclipMODELCLIPtext
A magazine-quality still life photograph, a glass vase with peonies, oranges and a cut apple on a walnut table…
CLIP Text Encode
cliptextCONDITIONING
Negative ib:np
clipCONDITIONING
blurry, lowres, watermark
Image Stitch
image1image2IMAGE
directionright
VAE Encode
pixelsvaeLATENT
KSamplerSelect
SAMPLER
sampler_nameeuler
Sampler ib:smp
noiseguidersamplersigmaslatent_imageoutputdenoised
CFGGuider
modelpositivenegativeGUIDER
cfg1.0
Reference Latent
conditioninglatentCONDITIONING
RandomNoise
NOISE
noise_seed1048213
BasicScheduler
modelSIGMAS
schedulersimple
steps8
denoise1.00
Upscale Latent By
samplesLATENT
upscale_methodnearest-exact
scale_by1.50
Hires. fix sampler ib:smp:1
modelpositivenegativelatent_imageLATENT
steps8
cfg1.0
denoise0.40
VAE Decode
samplesvaeIMAGE
VAE Decode
samplesvaeIMAGE
Hires. fix ib:hr
on_trueon_falseIMAGE
switchtrue
Save Image
images
filename_prefixComfyUI
The Generate tab, its controls mapped to the marked nodes of the workflow
node found by the marker in its title node found by following the sampler's inputs

Works without markers

A plain txt2img workflow needs no setup. Image Bench uses the first KSampler and the first two text encoders in the graph, then follows the sampler's inputs to the seed, steps, CFG, sampler, schedule and size. This works in KSampler and SamplerCustomAdvanced graphs, and the search passes through Reroutes and subgraphs.

When you need markers

With two samplers or several Load Image nodes in a graph, Image Bench can't tell them apart, so you add a marker such as ib:smp:1 or ib:ref:0 to the node title. The checkpoint list, Hires. fix, img2img and inpaint, references, ControlNet units and LoRA exploration always need their marker. If the workflow has no node for a control, the Generate tab hides that control.

Your graph stays as you built it

Image Bench changes the widget values you would change by hand. It doesn't add nodes or rewire links. Support for a custom loader or sampler goes into node_config.json, and the extension ships example workflows with every node already marked.

ib:cpcheckpoint ib:pp ib:npprompts ib:smpsampler ib:smp:1 ib:hrHires. fix ib:img ib:maskimg2img, inpaint ib:ref:Nreferences ib:cn:NControlNet units ib:loraLoRA exploration
08 — Screens

Made for a small second screen.

Image Bench fits its whole UI into 1200×800. Put it on a small display above your main monitor and give the big screen to your graphics editor. Generate, pick and send images up there, and paint down here.

1200 × 800is all it needs. Dense controls, no wasted space, nothing hidden behind scrolling.
1920 × 1080stays free for Photoshop, Krita or GIMP, where the precision work happens.
one screen?Keep Image Bench in a window next to the editor. It works the same.
Image Bench · 1200 × 800
A still life open in a graphics editor
Image Bench on the small display
your editor · 24″ · 1920 × 1080
09 — Install

Two minutes to set up.

recommended

Install from URL

  1. In Forge Neo, open Extensions › Install from URL.
  2. Paste the repository URL:
https://github.com/GChristensen/sd-webui-image-bench
  1. Press Install, then Extensions › Installed › Apply and restart UI.

Updates come through Extensions › Installed › Check for updates.

Manual clone

Clone it into the extensions folder of Forge Neo and restart it.

$ cd <forge-neo>/extensions
$ git clone https://github.com/GChristensen/sd-webui-image-bench

Update later with git pull in the extension folder. Your settings, trays and presets live in store/ and survive updates.

Then open it with the 🔬 Image Bench button, or go straight to http://<host>/image-bench/app. The full manual is built in under Library › Manual.

10 — In action

See it in action.

Image generation, use of ControlNet, model exploration, image comparison, inpainting, editing — and the window never switches.

Image Bench — demo · 1:26
11 — Status

Still an experiment.

Image Bench is a work in progress. Features change, the hosts it drives change under it, and things will break now and then. Try it, keep your projects backed up, and stick to the backend version that still works.

Report an issue