Edit Image Saver Pipe
Branch and override saver settings mid-workflow
- pipe
- pipe
Once you've bundled everything into an IMAGESAVER_PIPE, this is how you change something without rebuilding it. Feed a pipe in, override just the fields you want, get a modified pipe out. The key word from the pack's own description is safely: it creates a new branch rather than mutating the original, so the pipe you fed in is untouched and any other branch still using it keeps its old values.
That's what makes it useful for the workflows the pipe system was built for - the "one character, twelve scenes" kind of graph. Build a base pipe once, then spin off variants: this branch appends "night, moonlight" to the prompt, that branch bumps the CFG and changes the filename folder. Each Edit node is a fork in the road, and none of them stomp on each other.
The [original] trick
Here's the bit that makes it pleasant to use. Almost every field defaults to the literal string [original], and every string field understands that placeholder. Leave a field as [original] and it passes the incoming value straight through untouched. But you can also build on the original: set positive to [original], masterpiece and it appends to whatever prompt was already in the pipe. Set it to dramatic lighting, [original] and it prepends. So you're not forced to retype the whole prompt just to add a tag - you extend it.
Only the fields you actually change get changed. Everything left at [original] flows through, which is why branching stays clean.
The inputs and outputs
The one required input is pipe (type IMAGESAVER_PIPE). Everything else is an optional override, and there are a lot of them because you can touch any part of the bundle:
- String fields -
filename,path,modelname,positive,negative,additional_hashes,custom- all default to[original]and support the append/prepend trick. - Generation numbers -
width,height,seed,steps,cfg,denoise,clip_skip,counter. Set these to overwrite the metadata values. (clip_skipruns −24 to 24; it's a compatibility knob for the SD 1.5 / SDXL anime lineage and does nothing on newer LLM-text-encoder models, so leave it alone unless you know you need it.) sampler_nameandscheduler_name- the same enum lists as the metadata config (44 samplers, 9 schedulers), for when a branch runs a different sampler and you want the metadata to say so.
The single output is a pipe (type IMAGESAVER_PIPE) - the new, branched version - which you route onward to another Edit, a Read, or an Image Saver (From Pipe).
How to install it
ComfyUI Manager: search "ComfyUI Image Saver", install, restart.
Manually:
cd ComfyUI/custom_nodes
git clone https://github.com/alexopus/ComfyUI-Image-Saver
cd ComfyUI-Image-Saver
pip install -r requirements.txt
then restart. Python-only, no downloads.
Common issues & troubleshooting
Your override didn't take. The most common cause is leaving a field at [original] when you meant to change it - that's the pass-through default, so a field you didn't touch keeps the old value on purpose. Actually type the new value in.
You wanted to append but replaced the whole prompt. If you type just masterpiece into positive, you replace the prompt with the single word "masterpiece". To add to it, include the placeholder: [original], masterpiece. Miss the placeholder and you've thrown away the base prompt.
Editing didn't change the file that got saved. Remember the pipe defers everything to the final save. The Edit node only rewrites the settings carried in the pipe - nothing is committed until an Image Saver (From Pipe) runs downstream. If your edited branch never reaches a save node, nothing happens. Check that the branch you edited is the one actually wired to the saver.
Inputs (18)
| Name | Type | Default | Description |
|---|---|---|---|
| pipe | IMAGESAVER_PIPE | — | |
| filenameopt | STRING | [original] | String inputs support the [original] placeholder to append/prepend. |
| pathopt | STRING | [original] | String inputs support the [original] placeholder to append/prepend. |
| counteropt | INT | — | |
| modelnameopt | STRING | [original] | model name (can be multiple, separated by commas) |
| positiveopt | STRING | [original] | positive prompt |
| negativeopt | STRING | [original] | negative prompt |
| widthopt | INT | 5120–16384 | image width |
| heightopt | INT | 5120–16384 | image height |
| seedopt | INT | 00–18446744073709550000 | seed |
| stepsopt | INT | 201–10000 | number of steps |
| cfgopt | FLOAT | 7.000–100 | CFG value |
| sampler_nameopt | COMBO | sampler name (as string) | |
| scheduler_nameopt | COMBO | normal | scheduler name (as string) |
| denoiseopt | FLOAT | 1.000–1 | denoise value |
| clip_skipopt | INT | 0-24–24 | skip last CLIP layers (positive or negative value, 0 for no skip) |
| additional_hashesopt | STRING | [original] | hashes separated by commas, optionally with names. 'Name:HASH' (e.g., 'MyLoRA:FF735FF83F98') With download_civitai_data set to true, weights can be added as well. (e.g., 'HASH:Weight', 'Name:HASH:Weight') |
| customopt | STRING | [original] | custom string to add to the metadata, inserted into the a111 string between clip skip and model hash |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| pipe | IMAGESAVER_PIPE | — |