Nodes/ComfyUI FSL Nodes/FSL Image Saver w/ Metadata
ComfyUI Node

FSL Image Saver w/ Metadata

FSL Image Saver w/ Metadata — save PNGs that remember how they were made

By fredlef·Created about a year ago·Updated 9 months ago· 13
FSL Image Saver w/ Metadata
  • images
  • external_metadata
  • METADATA
  • IMAGE
filenamegemini_out
save_to_subfolder
append_datetimefalse
model_string
modelname
seed_string
width_string
height_string
temperature_string
positive_string
negative_string
cfg_string
steps_string
sampler_string
scheduler_string
extra_info

The FSL pack's current metadata saver, and the natural endpoint for the Gemini nodes. FSLImageSaverWithMetadata takes an IMAGE plus a pile of optional strings - model, seed, prompt, sampler, all of it - and writes a PNG with that generation info embedded as text metadata. The README's whole point for this node is round-tripping: save with this, reload later with the pack's LoadImage-w-Metadata workflow, and the recipe comes back out.

If you've been around ComfyUI, this should feel familiar. The KB's comfyui-ecosystem.md calls embedded-workflow-in-PNG "genuinely clever" and notes it became community culture - "workflow included" is a norm precisely because a single image file can carry the entire recipe. This node implements that idea for the cloud-Gemini side of things, where there's no local checkpoint to serialize.

How it works

The node saves every image in the batch as PNG, and tucks two things into the PNG metadata:

  • A parameters text chunk, built A1111-style from whatever string inputs you filled in - model, seed, size: WxH, temperature, cfg, steps, sampler, scheduler, positive, negative, extra. Only non-empty fields get lines, so you control how much is recorded.
  • An fsl_metadata chunk containing the external_metadata DICT, serialized as JSON - this is the socket to wire the metadata DICT output from FSLGeminiGenerateImage into, capturing the full generation config in structured form.

It also cleans up after itself: filenames and subfolder paths are sanitized so you can't escape the output directory, and append_datetime tacks a timestamp onto the filename prefix.

The inputs that matter

  • images (required) - the IMAGE tensor(s) to save.
  • filename - the prefix; the node appends ComfyUI's counter (_00000.png). Default gemini_out.
  • save_to_subfolder - a relative folder under ComfyUI's output/, e.g. metadata/gem3.
  • append_datetime - add _YYYYMMDD_HHMMSS to the prefix so runs don't collide.
  • The metadata strings - model_string/modelname, seed_string, width_string/height_string, positive_string/negative_string, cfg_string, steps_string, sampler_string, scheduler_string, temperature_string, extra_info.
  • external_metadata - a DICT socket, ideal for the Gemini nodes' metadata output.

Outputs

  • METADATA - a DICT with file info (filename, resolution, date, size) for the first saved image.
  • IMAGE - a normalized preview tensor of the first image, so you can chain the saver into a preview without re-loading the file.

Install & gotchas

Same pack install: ComfyUI Manager → "ComfyUI FSL Nodes", or clone + pip install -r requirements.txt, restart. It uses only stock ComfyUI + Pillow, so no extra deps beyond the pack's.

Two gotchas. First, this is a cloud-workflow saver, so its metadata strings don't auto-fill - whatever you want recorded you have to wire or type in (or feed from the Gemini nodes' metadata DICT). Second, don't confuse it with the V5 legacy saver: this one is the maintained version, outputs METADATA as a DICT, and adds external_metadata; V5 outputs METADATA_RAW and is marked legacy. If an old workflow references V5, either keep it or migrate, but don't mix them.

CategoryFSL Nodes

Inputs (18)

NameTypeDefaultDescription
imagesIMAGE
filenameSTRINGgemini_out
save_to_subfolderSTRING
append_datetimeoptBOOLEANfalse
model_stringoptSTRING
modelnameoptSTRING
seed_stringoptSTRING
width_stringoptSTRING
height_stringoptSTRING
temperature_stringoptSTRING
positive_stringoptSTRING
negative_stringoptSTRING
cfg_stringoptSTRING
steps_stringoptSTRING
sampler_stringoptSTRING
scheduler_stringoptSTRING
extra_infooptSTRING
external_metadataoptDICT

Outputs (2)

NameTypeDescription
METADATADICT
IMAGEIMAGE