Open Generated Image
The Node That Opens Your Generation in Photoshop (or Paint) Before You Go Looking for It
- images
When you finish a generation in ComfyUI, where does the image actually go? To your output folder, sure, but that's a file on disk. If you want it in Paint.NET, Photoshop, or a browser tab, you've got to go hunt for it, right-click, Open With... The Open Generated Image node (class Open Image, from the nic-schi/ComfyUI-OpenImage pack) skips all of that: it takes the IMAGE tensor straight out of your graph and launches it in the program you pick the moment the node runs. It's an output node that hands your result to a real application without you touching the filesystem.
The author's own framing is honest about scope: "It does what it says." They wanted to open a generated image in a specific app after generation, couldn't find an existing node for it, so they built one and shared it. No API keys, no models, no GPU, no big dependencies. Just a quality-of-life utility - one of those "why didn't ComfyUI ship this" niceties that sits at the end of a workflow and does one boring job well.
How it works
The mechanism is delightfully unglamorous. The node takes the incoming IMAGE tensor, converts it to a PIL image, and writes it to a temporary PNG file on disk. Then it launches the chosen program with that temp file's path swapped into its launch arguments, and logs how long the whole handoff took. That's it - no image server, no queue, no network round-trip.
Under the hood it's pretty Windows-shaped. The "default program" and "default browser" paths use os.startfile and read the Windows registry to locate your default browser's executable. Program detection walks a list of known install paths, and the dropdown only offers you programs it actually finds on disk (plus the system defaults).
The inputs that matter
Only three, and you'll really only set one of them:
images(required IMAGE) - feed this from VAE Decode or whatever produces your final tensor. It'sforceInput, so the value has to come from another node, not a file.program(dropdown) - where the image opens. Default-Browser, Default-Program, Firefox, Chrome, Microsoft Edge, Paint, Paint.NET, and Adobe Photoshop are the presets; the full list is a bit longer.custom_executable(text) - the path to any binary that isn't in the list. This is the escape hatch for your oddball image viewer.
It's an output node with no outputs to wire up - it terminates your graph and does its thing.
Installing it
The README's entire install story is "add the node", because that's genuinely all there is. Easiest route is ComfyUI Manager: the pack is published on the ComfyUI Registry under publisher nic-schi, so just search "Open Images for ComfyUI" in Manager's install menu. Manual route, same as any custom node:
cd ComfyUI/custom_nodes
git clone https://github.com/nic-schi/ComfyUI-OpenImage
Then restart ComfyUI. Its requirements (numpy, Pillow, pathvalidate, pydantic) are all already present in any stock ComfyUI install, so there are no model downloads, no heavy wheels, and nothing to configure. This is about as frictionless as a custom node gets.
Gotchas worth knowing
Where people get burned:
- It's a Windows tool. The registry lookups and
os.startfilecalls mean the default-program and default-browser options only work on Windows. On Linux or macOS you're mostly stuck withcustom_executablepointed at a real binary - and the preset program paths are hardcoded Windows locations anyway. - Only the first image in a batch opens. Feed it four images and it opens number one, silently ignoring the rest. The code explicitly takes
image[0]. - It writes to a temp file, not your output folder. Keep a Save Image node in the graph if you want the file preserved. And those temp PNGs aren't cleaned up, so heavy use does litter your temp directory.
- The dropdown only lists apps it found. If Photoshop lives somewhere unexpected it won't appear - that's exactly what
custom_executableis for.
Is it life-changing? No. But it's the difference between "generate, then go fishing through output/" and "generate, and it's already open in Paint.NET". For a zero-dependency node with a one-line README, that's a fair trade.
Inputs (3)
| Name | Type | Default | Description |
|---|---|---|---|
| images | IMAGE | — | |
| programopt | COMBO | Default-Browser | 8 options: Default-Program, Default-Browser, Firefox, Chrome, Microsoft Edge, Paint, +2 |
| custom_executableopt | STRING | — |
Outputs (0)
No outputs