Petty Paint Image Store
Save to one exact path and get a boolean back for your branching logic
- images
- STRING
- BOOLEAN
Most save nodes are dead ends: image in, file out, done. Petty Paint Image Store is different because it's built to be part of a decision loop - it saves to an exact path you specify, then hands you back that path plus a boolean so the rest of the graph knows whether a save actually happened. In the petty-paint pipeline this is how the app's generated layers land in a predictable location that the rest of the workflow can find again, not a random filename in a scratch folder.
It's part of the ComfyUI-side integration for Petty Paint, Andrew Porter's web canvas where you doodle and Stable Diffusion reimagines your drawing. The whole pack leans on filesystem paths and JSON state files to coordinate with the app, and this node is the "commit image to disk, report it" step in that dance.
How it works
Give it images, a filepath, an extension (png/jpg/jpeg/gif/tiff/webp/bmp) and a quality (1–100). It saves every image in the batch to filepath verbatim - no random suffix, no subfolder magic. Then it returns (filepath, skip).
The skip input is the interesting bit. It's forced-input, meaning you're expected to wire it from somewhere - a boolean from a conditional node, a file-existence check, whatever. If skip is true, the node does nothing and returns the path and the skip value through unchanged. So the pattern is: check whether the file already exists, feed that to skip, and the node becomes a "save only if missing" gate that also tells you which branch it took.
The inputs and outputs
images- the IMAGE batch.filepath- the exact target file path (not a folder, a filename).extension,quality- format and compression.skip- if true, save is skipped and the path passes through.- Outputs:
STRING(the filepath) andBOOLEAN(the skip value). Wire those into a switch or conditional downstream.
One quirk: if filepath is empty, it also returns without saving. That's deliberate - an empty path means "no target, don't fail, just tell me."
Installing it
Same pack install as always - ComfyUI Manager, search "petty-paint-comfyui-node":
cd ComfyUI/custom_nodes
git clone https://github.com/mephisto83/petty-paint-comfyui-node
Restart ComfyUI. Declared dependency is just Flask==2.1.2; nothing heavy, no models.
Common issues
Same silent-failure trap as its sibling PettyPaintImageSave: the save is wrapped in a try/except that only prints, so a bad directory path gives you no UI error - check your terminal log if files go missing. And because it's a terminal node that returns a boolean, a common beginner stumble is treating the BOOLEAN output as the "success" signal; it's actually the skip value passed through, so with skip wired false it'll read false even on a successful save. Wire your own success signal if you need one.
Inputs (5)
| Name | Type | Default | Description |
|---|---|---|---|
| images | IMAGE | — | |
| filepath | STRING | — | |
| extension | COMBO | 7 options: png, jpg, jpeg, gif, tiff, webp, +1 | |
| quality | INT | 1001–100 | — |
| skip | BOOLEAN | false | — |
Outputs (2)
| Name | Type | Description |
|---|---|---|
| STRING | STRING | — |
| BOOLEAN | BOOLEAN | — |