π PD Output Absolute
Save images anywhere on disk (or a UNC share) with a token template
- images
- context
- written_path
ComfyUI's built-in Save Image is fine until you need a file to land somewhere specific with a specific name. Then you're hand-typing paths into a widget every time, which is how a render farm ends up with output (3)_final_v2_really.png in a folder that shouldn't exist. π PD Output Absolute is the grown-up version: it resolves a token template into a real path, creates the directories, and writes your image batch to an absolute or UNC path. Point it at \\RENDER01\Output and the whole project/sequence/shot/version tree builds itself.
It's the sibling of π PD Output Relative (which writes to ComfyUI's own output directory); this one just takes the base path from you. If you see a node called PDNetworkOutput in an old workflow, that's this node under its previous name - the author kept the old class registered as an alias so saved graphs keep working.
The inputs that matter
images- your IMAGE tensor straight from the VAE decode. This is an output node, so it replaces Save Image at the end of the chain.base_path- the root. A Windows UNC path like\\RENDER01\Output, or any absolute path. The code preserves UNC prefixes and normalizes slashes to match your OS, so Linux users can write/mnt/render01/outputwithout drama.template- the pattern, default{project}/{sequence}/{shot}/{shot}_{version}_{date}. Subfolders in the template are created automatically.frame_padding(default 4) andextension(png,exr,jpg,webp) - the{frame}placeholder expands to that many#characters, and the format picks the encoder.context- the PROJECT_CONTEXT from π PD Project Context / π PD Custom Context. This is where{project},{shot}, and any custom tokens come from.
It returns one written_path string: the path of the first file written. Feed it into anything that wants to log or display where the render went.
The two toggles that bite
create_dirs(default on) - builds the directory tree as it writes. Off means a missing folder is a hard error instead of being silently created.overwrite(default off) - re-running the same template on the same day skips existing files and prints an error to the console. Good for guarding approved frames, annoying when you're iterating and didn't realize the old file was blocking the new one. Flip it on for exploration, keep it off for anything a client might look at.
A batch of multiple images gets _0001, _0002β¦ suffixed before the extension, so one VAE decode becomes a proper frame sequence.
Install
cd ComfyUI/custom_nodes
git clone https://github.com/TheOnlyAaron/comfyui-pipedream
Restart ComfyUI, or grab the pack ("Pipedream") from ComfyUI Manager. There are zero Python dependencies and nothing to download - this pack is all stdlib, which in the custom-node ecosystem is practically a luxury.
Gotchas
- The error messages are honest, so read the console: a failed write tells you the exact path it tried and why. Usually the share is unmounted or the permissions are wrong - the node doesn't silently drop files.
- Relative
base_pathvalues are resolved against wherever ComfyUI is running from, which is almost never what you want. Use absolute paths or UNC. - There's a token-reference panel that appears on the node after execution showing every available token and its current value - genuinely useful the first time you mistype
{versoin}and can't figure out why it's in the filename.
Inputs (8)
| Name | Type | Default | Description |
|---|---|---|---|
| images | IMAGE | β | |
| base_path | STRING | β | |
| template | STRING | {project}/{sequence}/{shot}/{shot}_{version}_{date} | β |
| frame_padding | INT | 41β8 | β |
| extension | COMBO | 4 options: png, exr, jpg, webp | |
| contextopt | PROJECT_CONTEXT | β | |
| create_dirsopt | BOOLEAN | true | β |
| overwriteopt | BOOLEAN | false | β |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| written_path | STRING | β |