PreviewPopup
A preview that pops out of ComfyUI and floats over everything
- image
ComfyUI's built-in PreviewImage lives inside the browser tab. That's fine until you want to watch generations while actually working somewhere else - Blender, Krita, a fullscreen UI, a second monitor. PreviewPopup from NimaNzrii's tiny comfyui-popup_preview pack is the fix: it pops your image out into a separate always-on-top window that floats over whatever you're doing, and refreshes live as you queue.
It's a one-trick node, but the trick is genuinely useful. The niche it's best known for is the "live source" workflow: pair it with a screen-capture node that grabs a 3D viewport or another app's canvas, and generations pop up in a small overlay right beside your work area. That's exactly how it showed up in a community tutorial on using Blender as a live source for ComfyUI. Same idea works for diffusion art, where you want the current frame parked on a second screen without alt-tabbing.
How it works
Under the hood it's two halves talking through a file. The node itself is an output node: it takes your image tensor, saves it as PNG to a fixed temp path (%TEMP%/temp_image_preview.png), and if the popup process isn't running yet, spawns it. The popup is a separate Tkinter program living in the pack's window/ folder, launched with its own venv Python. It polls that temp file every 100 ms and redraws, so whatever image the node last received shows up on screen - no browser, no websocket, just a file being overwritten and watched.
The window itself is the part people miss until they use it. It opens at 50% of your screen height, keeps the image's aspect ratio, and starts always-on-top and borderless. Drag it anywhere with the left button. The 📌 button toggles borderless/always-on-top; right-click gets a menu with Open (in your browser), Copy to Clipboard, and Save As. Left-clicking the canvas copies the current image to the clipboard - handy when you're flipping frames into a chat or a paint app.
Inputs and outputs
The whole interface is one slot. image (IMAGE) is the only input - feed it whatever the VAE decoder produced. There are no outputs at all and the node is flagged as an output node, so treat it like Save Image or PreviewImage: a terminal leaf. Nothing wires out of it, and it doesn't pass the tensor through, so put it at the end of a branch or a dead-end copy of the graph.
Installing it
Via ComfyUI Manager, search "comfyui-popup_preview". Or the old-fashioned way:
cd ComfyUI/custom_nodes
git clone https://github.com/NimaNzrii/comfyui-popup_preview
Then restart ComfyUI. The heavy lift happens on first load: the pack's __init__.py runs a setup.bat that builds a dedicated venv in window/ and pip-installs opencv-python, pywin32, and pillow into it. That's why the first startup after installing can hang for a minute - it's literally creating a second Python environment for the popup to live in.
Gotchas
- It's Windows-only. The popup uses
win32clipboard,ctypes.windll, and avenv/Scripts/python.exepath. On Linux or macOS the pack will still register the node and happily save its temp PNG, but no window ever appears. Don't install it hoping for cross-platform magic. - One image at a time. All nodes share that single temp file. Run two of them in parallel workflows and they stomp each other - the popup shows whoever wrote last.
- If the window never shows, check that
window/venvexists; the first-load venv build can fail silently ifpythonisn't on your PATH when the setup script runs. - It shows up under the "ToyxyzTestNodes" category - a leftover from the author's earlier pack. Ignore it; search for "PreviewPopup" by name.
Is it essential? No - PreviewImage plus a second monitor covers most people. But if you want a floating, always-on-top look at your queue without alt-tabbing, it's a dead-simple ~zero-config add. Just install it on Windows and wire image in.
Inputs (1)
| Name | Type | Default | Description |
|---|---|---|---|
| image | IMAGE | — |
Outputs (0)
No outputs