Nodes/ComfyUI Grover Nodes/πŸ“ Open Path
ComfyUI Node

πŸ“ Open Path

Stop digging through file trees to find your output

By grovergolΒ·Created 12 months agoΒ·Updated 12 months agoΒ· 0
πŸ“ Open Path
    • path
    β—„pathβ–Ί

    You've just rendered a batch and you want to jump straight to the output folder without spelunking through ComfyUI's nested directory tree. That's the entire job of "πŸ“ Open Path". It's a button node - type a path, click the button, and your system's file explorer opens right there. On Windows it even opens the folder and selects the file. Nothing more, and that's the point.

    It's one of those tiny utility nodes that's easy to dismiss until you wire a Save Image or a text-processing node into it and never hunt for a file again. It won't make your images better. It will make you slightly less annoyed, which after enough ComfyUI dependency-hell is its own kind of win.

    How it works

    The node is two halves talking over an HTTP endpoint. The Python side (open_path_node.py) just stores whatever path it was executed with, keyed by node instance, so the backend always knows the "last executed path". The frontend JavaScript adds a real button widget to the node - when you click it, the browser POSTs to /grover/open_path, and the backend resolves which path to open:

    • If the path input isn't wired to anything, the button uses whatever you typed in the widget.
    • If path is connected, the frontend can't see the computed value, so it sends nothing and the backend falls back to the last path the workflow actually computed.

    Then it opens that path with the platform's native tools: explorer with /select on Windows, open on macOS, and xdg-open with fallbacks to nautilus, dolphin, thunar, and pcmanfm on Linux. No model files, no heavy dependencies - the pack has no requirements.txt at all, just Python stdlib and what ComfyUI already ships.

    The inputs that matter

    The info_schema is honest about how little this node asks of you:

    • path (STRING, optional) - a file or folder path. It's forceInput: false, which means you can either type one in directly or wire in any node that outputs a string. Both work, just differently.
    • Output: path (STRING) - returns the same path it was given, so you can chain it into other nodes if you want.

    The one gotcha everyone hits

    If you connect a path input (say from a Save Image or a folder-listing node), you must queue the prompt before clicking the button. Dynamic paths only exist after the workflow actually runs - before that, the backend has no executed path to fall back to, and you'll get a "Please execute the workflow first" error. The README spells this out, and it's the #1 thing people trip on. Type the path manually and you can skip the queue entirely.

    Installing it

    ComfyUI Manager is the easy road - search for "ComfyUI Grover Nodes" and hit install. Or the manual way:

    cd ComfyUI/custom_nodes
    git clone https://github.com/grovergol/comfyui-grover-nodes
    

    Restart ComfyUI and the node appears under Grover/System. That's the whole install - no extra Python packages to babysit, which is rare enough in this ecosystem that it's worth appreciating.

    Common issues

    • "Path does not exist" - the backend checks os.path.exists() before doing anything. Typos, relative paths resolved from the wrong working directory, and missing folders all fail here. Use an absolute path when you can.
    • Nothing happens on headless Linux - the fallback list only helps if one of those file managers is installed. On a server without a desktop, there's nothing to open, and you'll get a "No suitable file manager found" message.
    • Windows explorer "errors" - explorer returns non-zero exit codes even when it works, so the node only treats codes greater than 1 as failures. A return code of 1 with a file that did open is normal, not a bug.

    It's a small, well-scoped node that does one thing and does it cleanly. If you batch-generate and hate hunting through folders, grab it; if you live entirely inside ComfyUI's UI, you can honestly skip it.

    CategoryGrover/System

    Inputs (1)

    NameTypeDefaultDescription
    pathoptSTRINGβ€”

    Outputs (1)

    NameTypeDescription
    pathSTRINGβ€”