Better Image Preview
The preview node that doesn't dead-end your workflow
- images
- images
The problem it solves
ComfyUI's built-in Preview Image node is a leaf. You wire an image into it and that's the end of the line - it shows you the picture and outputs nothing. So the moment you want to eyeball something in the middle of a workflow - the crop before you paste it back, the image before the detailer eats it - your options are two wires off the same output, or not looking.
Better Image Preview is a drop-in replacement that also hands the image back out. Same slot in the graph, same habit, but the image keeps flowing. On top of that, the built-in's grid of thumbnails never gave you much to do with them - here every tile has view-in-node and open-in-new-tab buttons, and the full view flips through the batch.
How it works
It's a genuine clone, not a reimplementation. In the pack's source, VSLinx_BetterImagePreview subclasses ComfyUI's own PreviewImage, calls its save_images, and then returns both the UI payload and the images themselves as the result. Practically that means previews land in ComfyUI/temp/ exactly like the built-in node's do - nothing is written to output/ - and it inherits the built-in's output-node status, so ComfyUI's backward-from-outputs caching treats it the same way.
Everything visually new is a frontend extension on top (the pack ships a script keyed to this node's class name). It lays out multiple images the way the built-in does - computing the column count that shows the most image area instead of fixed square tiles - then adds hover buttons, a full view with arrows and a thumbnail strip, and a proper context menu.
The one input, the one output, and the setting people miss
Read the node's schema and there's almost nothing to it: one required images input (IMAGE) and one images output (IMAGE) that is by definition identical to what you fed in. It is not a list output - a batch in is a batch out.
The thing you'll actually want to change isn't in the schema at all. Right-click → Properties, and you get show_buttons, an enum of On hover (default) or Always. On hover is right for most people; switch to Always if you're fighting the mouse while comparing frames.
Wiring it is the interesting part, and it's the reason to install it:
[any IMAGE source] → [Better Image Preview] → [Upscale / ImageScale / detailer] → [Save Image]
You get your preview and your pipeline. A single image shows straight in the full view; a batch gets the grid, and the arrows, thumbnail strip and ←/→ keys flip through it while Esc drops you back. New images arrive, it snaps back to the grid. Right-clicking an image opens ComfyUI's normal node menu, and middle-drag pans the canvas instead of triggering the browser.
Installing it
The pack is on the Comfy Registry, so ComfyUI Manager is the short path: search ComfyUI vsLinx Nodes and install. Manually:
cd ComfyUI/custom_nodes
git clone https://github.com/vslinx/ComfyUI-vslinx-nodes.git comfyui-vslinx-nodes
Restart ComfyUI. That's the whole install - no model downloads, and the pack's pyproject.toml declares no Python dependencies of its own, so it can't drag your environment into dependency hell the way a lot of packs do. It's a one-author pack (vslinx, who turns up in r/comfyui metadata threads answering questions), and it ships docs you can read inside ComfyUI via the node's info view.
Where people get burned
The preview is temporary. Same as the built-in node: previews live in ComfyUI/temp/ and get cleared when ComfyUI restarts. If you like what you see, that image needs a Save Image in the graph - the preview is not your archive copy.
It forces its branch to run. Because it's an output node, ComfyUI executes everything upstream of it even if nothing downstream needs it. That's often useful (it's a cheap way to force part of a graph to evaluate) and occasionally confusing when you didn't mean to trigger a run.
It draws its own UI. Anything that renders its own DOM inside a node lives in the blast radius of ComfyUI's frontend rewrites, and this pack has already shipped fixes for exactly that kind of breakage (a stale frontend preview store, cleared-up grid layout). So if the grid looks wrong right after a ComfyUI update, suspect the frontend before you suspect the node, and try turning the new node renderer off in ComfyUI's settings.
The pack adds global settings. One of them suppresses "Return type mismatch" errors caused by packs like RES4LYF extending combo lists such as schedulers, and it's enabled by default and logs to the console when it fires. That's a feature, but it's the thing to switch off first if something entirely unrelated starts behaving oddly.
Inputs (1)
| Name | Type | Default | Description |
|---|---|---|---|
| images | IMAGE | — |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| images | IMAGE | — |