π PD Output Relative
Token-based saving into your output folder
- images
- context
- written_path
Every ComfyUI user has a folder full of ComfyUI_00001_.png and no idea which render is which. The stock Save Image node names everything by date and a counter, and renaming files by hand is the kind of task you should never do twice. π PD Output Relative fixes this the way a studio would: you write one template like {project}/{sequence}/{shot}/{shot}_{version}_{date}, and every image it saves lands in ComfyUI's output directory at the correct path with the correct name, resolved automatically from your project metadata.
It's the default-output variant of the Pipedream pack. If you need to write somewhere outside ComfyUI's output folder - a network share, a mapped drive - use π PD Output Absolute instead. (And if you've seen a node called PDOutputNamer in an old workflow, that's this node under its previous name; it used to only build the filename, and in 0.2.0 it learned to actually save the image.)
The inputs that matter
images- your IMAGE tensor from the VAE decode. This is an output node; it replaces Save Image.template- the pattern, default{project}/{sequence}/{shot}/{shot}_{version}_{date}. Slashes become subfolders, and the node creates them for you.frame_padding(default 4) andextension(png,exr,jpg,webp) - how the{frame}placeholder pads out and which encoder to use.context- the PROJECT_CONTEXT from π PD Project Context / π PD Custom Context. This is where{project},{shot}, and any custom tokens come from; leave it disconnected and auto tokens like{date}and{time}still work, but your metadata tokens stay literal.
The single output, written_path, is the path of the first file written. There's also a nice touch: after execution, a read-only panel on the node lists every token and its current value, so you can see at a glance what {shot} resolved to.
The two toggles that bite
create_dirs(default on) - builds the folder tree automatically. Turn it off if you'd rather fail loudly on a missing directory.overwrite(default off) - here's the trap. Re-run the same workflow and the target file already exists, so the node skips writing and prints an error to the console. In shot work that's protection for approved frames; mid-iteration it's confusing until you realize the old file is shadowing the new one. Also note a multi-image batch gets_0001,_0002β¦ appended, so one batch becomes a proper sequence.
Install
cd ComfyUI/custom_nodes
git clone https://github.com/TheOnlyAaron/comfyui-pipedream
Restart ComfyUI, or install "Pipedream" via ComfyUI Manager. No dependencies, no model downloads - the pack is pure stdlib, which after a few rounds of custom-node dependency hell is genuinely refreshing.
Gotchas
- The token engine is strict in the most helpful way: unknown tokens are left in the filename (so
{versoin}shows up literally) and a warning goes to the console. Read the console, fix the typo. {date}and{time}resolve at execution time toYYYYMMDDandHHMMSS. Great for uniqueness, terrible for stable file names - if you're iterating on one shot, drop{date}from the template and pin the version via context instead, or the filename changes every day and youroverwriteguard never gets the chance to do its job.
Inputs (7)
| Name | Type | Default | Description |
|---|---|---|---|
| images | IMAGE | β | |
| 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 | β |