Nodes/Seasonal Fashion Prompt Generator/VRS Save Image (Final Prompts)
ComfyUI Node

VRS Save Image (Final Prompts)

VRS Save Image Writes Down the Prompt You Actually Sent

By raspie10032·Created 2 years ago·Updated 6 days ago· 2
VRS Save Image (Final Prompts)
  • images
  • images
◄positive—►
◄filename_prefixComfyUI►
◄negative►

VRS Save Image (Final Prompts) looks like a Save Image node with two extra wires. Those two wires are the whole point, and they solve a problem you don't notice until your reference memory has been quietly eating bad captions for a month.

Here's the setup. If you use VRS-INT to build a personal memory from your generated images, ingestion has to answer one question per file: what prompt made this? The standard answer is to crack open the PNG and parse the ComfyUI graph embedded in it. That works for flat prompt boxes and falls apart the moment your text comes from something else - a TIPO expander, a wildcard, a string concat - because the graph stores widget defaults and wiring, not the string that came out the other end. The pack's parser is careful about this and says so: unresolved text nodes get a warning, and when save branches disagree it keeps only the prompts common to all of them.

The prompt that actually made your image is a runtime value. This node is how you hand it over.

How it works

Under the hood it isn't a reimplementation. The code imports ComfyUI's own SaveImage and calls it, so the output folder, counter, filename_prefix templating and PNG behaviour are identical. What it adds happens before that call: it copies the run's extra_pnginfo, drops in

info["rs_vrs_prompt"] = {"version": 1, "positive": positive, "negative": negative}

and saves through that. So a PNG from this node carries the usual workflow and prompt chunks plus one extra text field holding your final strings, in plain readable form.

On the ingestion side, that field is read first - ahead of NovelAI's Comment, ahead of an A1111 parameters string, ahead of any graph parsing. When it's present the extracted record is tagged comfyui-runtime with runtime_source: VRS Save Image. Nothing gets "interpreted". What you connected is what gets stored as the caption.

One nice detail in the source: the metadata dict is copied per save. Two save nodes in one graph can't overwrite each other's prompts or leak one branch's text into another.

The inputs that matter

  • images - the IMAGE you're saving, as usual.
  • positive - wire only. The shipped code marks it as a forced input, so you can't type into it; it has to come from a node. Connect the final string, i.e. the output of your TIPO expander, wildcard resolver, concat - whatever the text encoder is actually receiving. If that wire is empty or whitespace, the node raises and the run stops instead of writing a useless image. That's on purpose.
  • filename_prefix - default ComfyUI, and it's the real Save Image widget, so %date:yyyy-MM-dd%, subfolders like runs/portraits and the auto-increment counter all work.
  • negative (optional) - multiline string, default empty. Worth connecting if you run anything that still uses CFG; it lands in the same record.

The single output is images, a passthrough of what you handed it, so you can chain more nodes after the save without a duplicate branch.

Installing

It lives in the same pack as the seasonal prompt generator and the Gemma TIPO nodes - ComfyUI Manager → search RS-Seasonal-Prompt-Generator, or:

cd ComfyUI/custom_nodes
git clone https://github.com/raspie10032/RS-Seasonal-Prompt-Generator.git

Restart ComfyUI, then find VRS Save Image (Final Prompts) under the prompt category. It needs nothing installed - no model, no gguf, no dependency file. The pack's heavier requirements (requirements-legacy.txt, the Qwen writer download, the TIPO models) belong to the other nodes.

Where people get burned

  • --disable-metadata kills it too. The code goes through normal SaveImage, so stripping metadata for privacy also deletes this node's entire payload - and ingestion is back to guessing from the graph. Privacy mode and VRS memory building are somewhat at odds; pick one per output path.
  • Prompts remain readable inside the PNG. That's the feature. Share the folder and your prompts go with it; the metadata field just makes what was already in prompt easier to find.
  • It does not replace the standard Save Image node. You have to use this one on the branch that feeds your monitored folder. Nine times out of ten, "my VRS memory has the wrong captions" is a workflow that kept the stock node and left this one sitting unused.
  • Connect post-processing output, not the original prompt. Because nothing is interpreted, the mistake is silent: wire the raw user prompt in and every image gets captioned with the pre-expansion text, which is exactly the failure you were avoiding.
  • Batches get one positive/negative pair attached to every file in the save, which is usually right - one generation, one prompt.

Verdict

A small adapter node with a real job. If you run the VRS side of this pack, it's the difference between a memory captioned with what appears in the graph and a memory captioned with what you actually generated from. If you don't run the VRS side, it's just Save Image with a required second wire and no benefit - use the core node and go do something else.

Categoryprompt/VRS

Inputs (4)

NameTypeDefaultDescription
imagesIMAGE—
positiveSTRINGConnect the exact final string used for image generation (after TIPO/wildcards/concatenation).
filename_prefixSTRINGComfyUI—
negativeoptSTRING—

Outputs (1)

NameTypeDescription
imagesIMAGE—