ComfyUI Node

PreviewPopup

A preview that pops out of ComfyUI and floats over everything

By NimaNzrii·Created 3 years ago·Updated 2 years ago· 36
PreviewPopup
  • 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 a venv/Scripts/python.exe path. 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/venv exists; the first-load venv build can fail silently if python isn'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.

    CategoryToyxyzTestNodes

    Inputs (1)

    NameTypeDefaultDescription
    imageIMAGE

    Outputs (0)

    No outputs