🖼️ binyuan · Multi Image Compare (N)
Compare 3, 5, or 16 images at once — the A/B comparer that runs out of letters
- grid
Every ComfyUI regular knows the rgthree Image Comparer - the slider you drag to A/B two outputs. It's the go-to node for exactly one job, and it stops exactly there: A vs B. The moment you're juggling three models, four samplers, or a whole batch of frames, you're back to saving PNGs and squinting at tabs. That's the gap binyuanMultiImageCompare (display name "🖼️ binyuan · Multi Image Compare (N)") is built for. It compares N images - up to 16 inputs - with both a slider and a grid view, bakes a text label onto each image so you can tell which one came from where, and exports the whole lot as a single composited picture.
The label baking is the sleeper feature. Comparing three VAEDecode outputs side by side is only useful if you remember which is which. Fill the label box with one name per line - "sdxl-base", "juggernaut", "pony" - and each image gets its name burned into the top-left corner, so the screenshot you send to a friend (or the composite you save) is self-documenting.
How it works
The node looks unusual under the hood, and that's deliberate. The image_1 … image_N inputs aren't declared in Python at all - the frontend JavaScript adds a new empty slot every time you fill one (up to 16), and the backend accepts any image_N that lands on it via VALIDATE_INPUTS. No other pack does inputs quite this way, and it's why the port count feels magic.
Two details matter for how you feed it:
- Every frame of a batch counts. Each connected IMAGE tensor is
[B,H,W,C], and every frame becomes a separate entry in the comparison. Plug in a video or a multi-step sampling batch and you get them all - great for checking frame-to-frame consistency. - The
gridoutput is one long horizontal strip, not an actual grid. All frames from all ports get composited into a single wide image (height capped at 1024). With 16 ports that's one very wide picture. Wire it into aSaveImageand you've got your export.
In the node itself, a toolbar switches Slider vs Grid mode. Slider mode gives you an A vs B dropdown and a draggable split line; wheel zooms 0.2–10x, dragging pans, double-click resets. The compare UI lives in an in-node DOM widget, which is the one genuinely forward-looking choice here: it's built with addDOMWidget, so it behaves on the newer Nodes 2.0 frontend that broke a lot of older custom-node rendering - worth knowing if you've been burned by that.
The inputs that actually matter
Only three widgets, and only two you'll touch:
- label - multiline. Line 1 →
image_1, line 2 →image_2, and so on. A port with no matching line just gets no label. One per line, model names work great. - print_label - boolean, default true. Toggles the label baking off if you just want a clean compare.
- label_size - 8–200, default 32. Bigger if you're exporting, smaller for a busy screen. CJK text works if a Chinese font (msyh, Noto CJK) is installed.
Output: grid (IMAGE) - the composite strip.
Installing
ComfyUI Manager → search "Binyuan Multi Image Compare" and hit install. Or the manual way:
cd ComfyUI/custom_nodes
git clone https://github.com/yjitiu/ComfyUI-Binyuan-Multi-Image-Compare.git binyuan_multi_image_compare
Then restart ComfyUI. That's the whole install - there are no model downloads and zero extra Python dependencies. It's just numpy, torch, and PIL, all of which ComfyUI already ships. Refreshingly rare in a custom-node ecosystem full of torchaudio this and ffmpeg that.
Gotchas
- Compare UI missing or floating off the node → hard-refresh the browser (Ctrl+F5). The JS gets cached, and the author has notes about two different frontend updates breaking older versions of this exact widget.
- Labels not appearing → check
print_labelis true and that the right line inlabelexists. An empty line means no text. - Backend changes don't apply → a browser refresh isn't enough; changes to widget defaults or the node's Python need a full ComfyUI restart.
- Ugly font fallback → if no CJK font is installed, PIL falls back to its default bitmap font. Fine for ASCII, sad for Chinese.
It's a thin single-purpose utility from a one-commit repo - don't expect a roadmap, and you won't need one. If you only ever compare two images, rgthree's comparer is already on your machine and perfectly good. Reach for this the moment your model shootout has a third contestant.
Inputs (5)
| Name | Type | Default | Description |
|---|---|---|---|
| label | STRING | 打印到图片上的文字。每行对应一个输入端口:第1行→image_1,第2行→image_2… 端口数超出行数则该端口不打印。 | |
| print_label | BOOLEAN | true | 是否把 label 文字烧到图片左上角 |
| label_size | INT | 328–200 | — |
| auto_infoopt | BOOLEAN | true | 按每个图片输入追溯模型、LoRA权重和采样配置;关闭则恢复手动标签。 |
| include_manual_labelopt | BOOLEAN | false | 把原有手写标签作为备注附加,避免旧标签与实际参数混淆。 |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| grid | IMAGE | — |