Nodes/ComfyUI Image Hang Gallery/Image Hang Gallery Output
ComfyUI Node

Image Hang Gallery Output

Hang Your Generations in a Walkable 3D Gallery

By dianfangsihuo·Created 4 months ago·Updated 3 months ago· 6
Image Hang Gallery Output
  • images
  • images
  • gallery_info
filename_prefixPromptBridge_ImageHang_Gallery_Showcase
target_room_index0
open_viewerfalse
respect_dedupe_settingfalse

ImageHangGalleryOutput is a save node that's trying to be more than a save node. Instead of dumping your render into a folder you'll scroll past for weeks, it files the image into a local 3D gallery - actual rooms you walk through with WASD, walls you hang pictures on, doors and custom walls you place in an editor. It's the ComfyUI equivalent of printing your best generations and framing them, minus the IKEA trip. If you batch 200 images a night and only ever look at the last one, this is the node that makes the pile feel like an exhibition.

It's not for everyone, and it's honest about that. It needs Node.js on your machine for the 3D viewer, it spawns a local Vite dev server to serve the gallery, and it's a young Chinese-authored pack with basically zero community footprint I could find. But if the pitch lands for you - you want a browsable, permanent, browser-independent record of your output - the mechanism underneath is genuinely well-built.

How it works

The node is an output node (OUTPUT_NODE = True) - same family as Save Image, so ComfyUI always runs it and re-executes anything upstream that changed. When it fires, it does three things in order:

  1. Saves the image to ComfyUI's normal output folder, exactly like Save Image would, using your filename_prefix plus a timestamp.
  2. Imports a copy into the gallery's own storage - ComfyUI/user/image_hang_gallery/images/, with its metadata tracked in gallery.json. That's the file-based storage that survives browser profiles, because it's on disk, not in localStorage.
  3. Auto-hangs it: the pack computes a free spot on a wall in your target room, and if that room's full it rolls to the next one. When literally every room is full it tells you so instead of silently dropping the image.

The gallery_info output is a STRING that comes back as a plain-language status line - how many images were imported, how many skipped, how many bounced because the gallery was full, and (if you opened the viewer) the URL. Don't wire it into anything clever; it's a message for your eyes.

The inputs that matter

Only a few are worth touching:

  • images - the IMAGE tensor coming off your VAE Decode. That's the whole point.
  • filename_prefix - a STRING that names the file in your output folder. The default is the gloriously specific PromptBridge_ImageHang_Gallery_Showcase, which looks like it survived a copy-paste from a template. Change it to something yours.
  • open_viewer - if true, after saving it launches the 3D gallery in your browser. Leave it off during batch runs; turn it on when you want to admire the wall.
  • target_room_index - an INT (0–99) choosing which room new pieces get hung in first.
  • respect_dedupe_setting - defaults false, which means the node imports every run even if your panel's "dedupe generated images" toggle is on. Flip it true to skip images whose filename/subfolder were already imported.

The images output is a passthrough of your input tensor, so you can chain this node mid-graph and keep rendering downstream.

Installing it

Clone the repo straight into custom_nodes - the root of the repo is a working extension, so no subfolder gymnastics:

cd ComfyUI/custom_nodes
git clone https://github.com/dianfangsihuo/ComfyUI-ImageHang-Gallery.git

Restart ComfyUI and a draggable 画廊 (gallery) panel appears at the bottom-right; the node itself is under image/gallery in the node list. You can also install via ComfyUI Manager's "Install via Git URL" with the same URL - the README notes it may not be registered in Manager's search list yet. Python-side dependencies are just numpy and Pillow, so there are no model downloads. The real dependency is Node.js: the first time you click "进入画廊", the pack runs npm ci itself and boots a local Vite server on a free port. You never run npm by hand, but your machine needs Node installed or the viewer won't start.

Where people get burned

The classic failure is open_viewer on a fresh install: the first launch triggers an npm install and a Vite compile, so the viewer can take a while or fail if your Node install is old. Check the terminal, not the browser. The other gotcha is quiet: because the node saves to your normal output folder and copies into the gallery, every generation counts against your disk twice - a 100-image run is 200 files. And the status messages in gallery_info are currently localized to Chinese, so don't panic if the summary reads like 已送入 Image Hang Gallery:3 张 - that's just "3 images sent to the gallery."

Categoryimage/gallery

Inputs (5)

NameTypeDefaultDescription
imagesIMAGE
filename_prefixSTRINGPromptBridge_ImageHang_Gallery_Showcase
target_room_indexINT00–99
open_viewerBOOLEANfalse
respect_dedupe_settingBOOLEANfalse

Outputs (2)

NameTypeDescription
imagesIMAGE
gallery_infoSTRING