Save Image (Dir) 🦉| OwlV
The Save Image node that finally understands projects
- images
Every ComfyUI output folder ends up a landfill eventually. A month of runs and you've got ComfyUI_00001.png through ComfyUI_07940.png sitting in one flat pile, and finding the good version means squinting at thumbnails. Save Image (Dir) 🦉| OwlV is the standard Save Image node with a filing cabinet bolted on: everything still lives under ComfyUI/output, but you tell it which project subfolder to use, and it files the image there.
It's a drop-in swap for the official Save Image node - with the toggle off it behaves exactly like the built-in, so there's no downside to switching a workflow over. The name undersells it a little: the interesting part isn't the directory, it's the way the node shows you your folder tree instead of making you type paths blind.
How it works
The mechanism is simple and, refreshingly, self-contained. When use_custom_subfolder is on, whatever you put in the subfolder field gets sanitized and resolved as a relative path under your ComfyUI output directory - clientA/run05, team/project/run01, whatever depth you want. Missing folders are created automatically when you save. The sanitizer blocks absolute paths and .. outright and raises an error, so a bad value fails loudly instead of quietly dumping a PNG somewhere you'll never find it.
The genuinely nice bit is the frontend. The pack ships a small JS companion that injects a "Subfolder" dropdown onto the node, listing every existing folder under output, plus a 🔄 Refresh Folders button. The dropdown and the text field stay in sync: type a brand-new folder name and the node creates it on save; click Refresh and any folders you added on disk while ComfyUI was running show up without reloading the workflow. It hits a little /owlv/list_subfolders API endpoint the pack registers. If you type something the picker doesn't know yet, the dropdown clears rather than lying to you.
The inputs that matter
images- your IMAGE batch from the VAE decode. Required.filename_prefix- defaultComfyUI. Set this per run; see the gotcha below.use_custom_subfolder- the toggle that switches it from "official clone" to "project folders".subfolder- relative path likeclientA/run05. Only does anything when the toggle is on.
That's it. There are no outputs - this is an output node, the end of the line.
Installing it
ComfyUI Manager is the easy route: search "ComfyUI-Owlv_Nodes" or "OwlV", hit Install, restart. Or the manual way:
cd ComfyUI/custom_nodes
git clone https://github.com/OwlvChirotha/ComfyUI-Owlv_Nodes.git
then restart ComfyUI. The node lives in the image category. No model downloads, and this is one of those rare packs where requirements.txt is effectively empty - it only uses ComfyUI's bundled aiohttp, PIL, and torch. That also means it's unlikely to break your dependency environment, which in the custom-node world is not nothing.
Where people get burned
- Re-runs overwrite. The counter starts at
00001on every run and there's no check for existing files on disk. Run the same workflow twice with the same prefix and the second run clobbers the first. Give each run a unique prefix, or put it in a subfolder. - Absolute paths throw an error, by design.
C:\output\fooor../..gets rejected - keep it relative. - Folders added while ComfyUI is running won't show in the picker until you hit Refresh.
- This is a tiny pack by a one-person author (OwlV) with essentially no community footprint - you won't find a support subreddit. If it breaks, your real recourse is the repo's Issues page, so keep that in mind before you build your whole pipeline on it.
Worth the install? If you batch output for clients, or run one ComfyUI install across several projects, absolutely - it's the difference between a folder of 8,000 anonymous PNGs and a tidy archive. If you only ever generate for yourself in a flat folder, the official node already does the job and you can skip this one.
Inputs (4)
| Name | Type | Default | Description |
|---|---|---|---|
| images | IMAGE | — | |
| filename_prefix | STRING | ComfyUI | — |
| use_custom_subfolder | BOOLEAN | false | — |
| subfolderopt | STRING | — |
Outputs (0)
No outputs