INDG Output Path
Build a clean save path from four strings — no concat chain
- path
If you've ever organized ComfyUI outputs into per-client, per-project folders, you know the ritual: a couple of PrimitiveString/PrimitiveStringMultiline nodes, a text concat node, and a prayer that you didn't end up with a double slash or a trailing space in your folder name. INDG Output Path collapses that whole chain into one node. It takes four string segments - base_path, client, product, filename - and joins them into a single path string you feed straight into your save node's filename_prefix. The README's example output: ComfyUI/Deployed/HD/ProjectName/Shot001.
That's genuinely useful if you're doing production-style work - think "render pipeline that needs every image to land in the right client folder" rather than "save to ComfyUI_00001_.png forever." The author built it for an "INDG Toolset" that drives workflows through an external patcher, where building a path from plain string inputs beats a fragile concat chain. But it works just as well in a hand-built graph.
How it works
The mechanism is so simple it barely counts as one: it strips each segment, drops any that are empty, and joins the survivors with /. Empty segments being skipped is the whole trick - leave client blank and you get ComfyUI/ProjectName/Shot001 with no double slash, no leading garbage. It's the same "optional input arrives as nothing" convention the whole plumbing layer runs on, just applied to strings.
The inputs and output
client(required, default"") - e.g."Deployed/HD". Note the author's convention: a segment can itself contain a slash, so this is really a folder hierarchy in disguise.product(required, default"") - e.g."ProjectName".filename(required, default"Shot001") - the filename prefix, which ComfyUI's saver then appends its_00001_-style counter to.base_path(optional, default"ComfyUI") - the root folder. Leave it blank to omit it entirely, so your path starts at the client segment instead.- Output
path- the joinedSTRING.
Wiring it into a saver
The intended target is a save node's filename_prefix - the README names MetaSaver, but the same trick works with any saver that takes a path prefix. If your saver shows filename_prefix as a plain text box rather than an input socket, right-click it and choose Convert widget to input, then drop the path wire onto the new socket. ComfyUI's own SaveImage supports subfolders via slashes in the prefix, so ComfyUI/Deployed/HD/ProjectName/Shot001 will create the folders for you - one fewer thing to do by hand.
Gotchas
Two small ones. First, this node knows nothing about your filesystem - it's pure string joining, so it won't complain if you build a path with characters your OS hates. On Windows, forward slashes are handled fine by Python's path handling, so don't stress about that. Second, if you blank out every field including filename, you get an empty string out, which is probably not what a saver wants - keep at least the filename filled. That's it. It's a four-input string joiner, and it does exactly the job it claims, with no hidden behavior to trip you up.
It's one of three nodes in the INDG_CustomNodes pack, so it arrives with the batch node and the RAM cleanup node. Install via ComfyUI Manager (search "INDG_CustomNodes") or git clone https://github.com/SorenWeile/INDG_CustomNodes.git into ComfyUI/custom_nodes and restart. No models, no heavy deps - the pack's only pinned dependency is psutil, and even that's optional. Small pack, small scope, does the one thing.
Inputs (4)
| Name | Type | Default | Description |
|---|---|---|---|
| client | STRING | — | |
| product | STRING | — | |
| filename | STRING | Shot001 | — |
| base_pathopt | STRING | ComfyUI | — |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| path | STRING | — |