Save Image Simple (Umbra Lab)
The save node that figures out your prompt so you don't have to type it
- images
- positive
- negative
- model_info
Save Image Simple (Umbra Lab) is the low-friction version of Umbra's metadata save node. Required inputs: images and a filename_prefix. That's it. Everything else - the prompt text, the model name, the generation settings - is either pulled out of your workflow automatically or wired in as optional inputs. If you're tired of maintaining a save node's prompt fields by hand, this is the one that stops asking.
How it works
The clever bit is the auto-extraction. When you leave the prompt fields empty, it walks the workflow graph looking for CLIP Text Encode nodes and pulls the text from them, using a keyword heuristic (ugly, bad, worst, blurry, deformed) to guess which one is the negative. It also extracts the model name the same way - from the checkpoint loader upstream, or from a model_info MODEL input if you wire one in. So a plain Latent → KSampler → this node graph saves a PNG whose metadata already says what prompt, model, and settings produced it.
Like its big sibling, it writes both the ComfyUI workflow chunks and an A1111-compatible parameters string into the PNG, and it supports the same folder organization - save_to_yyyy_mm_dd_folder, save_to_set_subfolder + set_subfolder, save_set_to_style_subfolder, and a custom output_folder. The %date% in the default filename prefix becomes the save date.
What you actually set
The full optional list is long but you'll touch a small slice:
- images and filename_prefix - the only required ones.
- positive / negative CONDITIONING - optional; feed these and it derives the prompt text from them instead of guessing.
- seed, steps, cfg, sampler_name, scheduler, model_name - optional, for accurate recorded settings. Wire them from the sampler's outputs if your graph has them; otherwise it records defaults.
There are two sampler inputs, sampler_name (a dropdown of 14 common samplers) and sampler_name_text (a free-string override) - the wired text value wins if both are present, which is a small compat convenience for graphs that carry the sampler as a string.
Installing it
Part of Umbra-Nodes, the ComfyUI companion pack for Umbra Studio (NocturneLabs' open-source local AI suite). ComfyUI Manager → search "Umbra Nodes", or:
cd ComfyUI/custom_nodes
git clone https://github.com/Nocturne-Ai-Labs/Umbra-Nodes
Restart ComfyUI. No pip deps, no models.
Gotchas
The auto-extraction is a heuristic, and heuristics mislabel. If your workflow has more than one positive CLIP Text Encode, or a weirdly-worded negative that avoids the keyword list, the recorded prompt can be wrong - that's exactly why the explicit text and conditioning inputs exist, so wire them when correctness matters. The heuristic only fires when the fields are empty; fill one in and it wins. And remember the universal save-node rule: this writes permanent PNGs to ComfyUI/output/, and any host that recompresses your file will strip the metadata on upload - share the original bytes, not a screenshot or a re-encoded copy.
Inputs (19)
| Name | Type | Default | Description |
|---|---|---|---|
| images | IMAGE | — | |
| filename_prefix | STRING | UmbraLab_%date% | — |
| positiveopt | CONDITIONING | — | |
| negativeopt | CONDITIONING | — | |
| output_folderopt | STRING | — | |
| save_to_yyyy_mm_dd_folderopt | BOOLEAN | false | — |
| save_to_set_subfolderopt | BOOLEAN | false | — |
| set_subfolderopt | STRING | — | |
| save_set_to_style_subfolderopt | STRING | — | |
| positive_promptopt | STRING | — | |
| negative_promptopt | STRING | — | |
| model_infoopt | MODEL | — | |
| seedopt | INT | 00–18446744073709550000 | — |
| stepsopt | INT | 201–10000 | — |
| cfgopt | FLOAT | 7.00–100 | — |
| sampler_nameopt | COMBO | 14 options: euler, euler_ancestral, heun, dpm_2, dpm_2_ancestral, lms, +8 | |
| sampler_name_textopt | STRING | — | |
| scheduleropt | STRING | normal | — |
| model_nameopt | STRING | — |
Outputs (0)
No outputs