FSL Image Saver w/ Metadata
FSL Image Saver w/ Metadata — save PNGs that remember how they were made
- images
- external_metadata
- METADATA
- IMAGE
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
parameterstext 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_metadatachunk containing theexternal_metadataDICT, serialized as JSON - this is the socket to wire themetadataDICT output fromFSLGeminiGenerateImageinto, 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). Defaultgemini_out.save_to_subfolder- a relative folder under ComfyUI'soutput/, e.g.metadata/gem3.append_datetime- add_YYYYMMDD_HHMMSSto 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'metadataoutput.
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.
Inputs (18)
| Name | Type | Default | Description |
|---|---|---|---|
| images | IMAGE | — | |
| filename | STRING | gemini_out | — |
| save_to_subfolder | STRING | — | |
| append_datetimeopt | BOOLEAN | false | — |
| model_stringopt | STRING | — | |
| modelnameopt | STRING | — | |
| seed_stringopt | STRING | — | |
| width_stringopt | STRING | — | |
| height_stringopt | STRING | — | |
| temperature_stringopt | STRING | — | |
| positive_stringopt | STRING | — | |
| negative_stringopt | STRING | — | |
| cfg_stringopt | STRING | — | |
| steps_stringopt | STRING | — | |
| sampler_stringopt | STRING | — | |
| scheduler_stringopt | STRING | — | |
| extra_infoopt | STRING | — | |
| external_metadataopt | DICT | — |
Outputs (2)
| Name | Type | Description |
|---|---|---|
| METADATA | DICT | — |
| IMAGE | IMAGE | — |