Nodes/ComfyUI-mnemic-nodes/πŸ–ΌοΈπŸ“Š Metadata Extractor (List)
ComfyUI Node

πŸ–ΌοΈπŸ“Š Metadata Extractor (List)

Scrape the Prompts Out of a Whole Folder of Images

By MNeMoNiCuZΒ·Created 3 years agoΒ·Updated a day agoΒ· 105
πŸ–ΌοΈπŸ“Š Metadata Extractor (List)
  • image_input
  • image
  • positive_prompt
  • negative_prompt
  • parsed_params_json
  • filtered_params_grouped
  • raw_metadata_json
β—„seed0β–Ί
β—„input_pathβ–Ί
β—„filter_paramsβ–Ί
β—„max_file_count0β–Ί

The Single version reads one image at a time. This one - πŸ–ΌοΈπŸ“Š Metadata Extractor (List) - reads a folder and returns lists of prompts and settings, one entry per file. That's what you need for the genuinely useful jobs: mining a thousand downloaded images for the prompt patterns behind a look, auditing what checkpoints and LoRAs your library actually used, or building a caption reference set from images whose metadata you trust more than your own memory.

How it works

Point input_path at a folder (or a single file) and the node walks it, alphabetically, over .png, .jpg, .jpeg, .tiff, .tif. seed sets the starting index, not randomness - the outputs keep the folder's order, so you can offset into a big directory without loading all of it.

Each PNG is read the same way as the Single node: chunks into raw_metadata_json, and the A1111-style parameters chunk parsed into prompts and settings. The parse vocabulary is fixed: steps, sampler, cfg scale, seed, size, model, denoising strength, clip skip, hires upscale, hires steps, hires upscaler, lora hashes. Name them exactly in filter_params.

The one you must not skip is max_file_count. The author's own warning is blunt, and deserved: with the limit at 0 the node loads every file, and a folder of hundreds or thousands of images will make ComfyUI lag badly while it chews. Start at 20, raise it once you trust the folder.

Full honesty about the inputs, because it's the same trap as the Single node: image_input overrides input_path, and when you use it, the metadata is gone - a tensor doesn't carry text chunks. Prompts come back empty, raw_metadata_json says direct_input, and the images still pass through. If you only want the pixels and a metadata-shaped nothing, fine. Otherwise use the path.

And the bigger one: ComfyUI's default SaveImage writes prompt/workflow JSON, not the A1111 parameters string this parser keys on. So a folder of your own ComfyUI output will hand you juicy raw_metadata_json and blank prompts. Save through a node that writes both - the pack's "Save Image With Metadata" - if you want this to work on your own library.

Inputs and outputs

Inputs: seed (with increment already set on control_after_generate), input_path, optional image_input, filter_params, max_file_count. Outputs, all lists: image, positive_prompt, negative_prompt, parsed_params_json, filtered_params_grouped, raw_metadata_json. In the list version the filenames are grouped per image, so filtered_params_grouped is one multi-line block per file rather than a flat column - feed it to a text node and read down.

Install

ComfyUI Manager β†’ search "ComfyUI-mnemic-nodes" β†’ install β†’ restart, or:

cd ComfyUI/custom_nodes
git clone https://github.com/MNeMoNiCuZ/ComfyUI-mnemic-nodes

No downloads or keys. The pack's requirements.txt brings piexif for EXIF plus a few heavier packages (transformers, opencv-python) that other nodes in the pack use.

Common issues

ComfyUI freezes or crawls. max_file_count is 0. Cap it.

Blank prompts everywhere. Either the folder is ComfyUI-native PNGs (no parameters chunk), or the files were re-encoded somewhere along the way - Reddit, a screenshot, a JPEG conversion. Once the chunks are gone, they're gone; nothing reconstructs a graph from pixels.

JPEGs return nothing parsed. The parser only handles the PNG parameters chunk. JPEGs and TIFFs come back with raw EXIF and empty prompts.

Empty lines in filtered_params_grouped. A key in filter_params the parser doesn't know returns nothing for that image. Copy the key names from the list above.

Category⚑ MNeMiC Nodes

Inputs (5)

NameTypeDefaultDescription
seedINT00–18446744073709550000Index of the first file to load from a folder, starting at 0. Increments every run by default to step through the folder.
input_pathoptSTRINGPath to a folder of images or a single image file. Used if image_input is not connected.
image_inputoptIMAGEA list/batch of images. This has priority over input_path.
filter_paramsoptSTRINGComma-separated list of keys to extract (e.g., steps, sampler, seed).
max_file_countoptINT00–10000Max number of items to return. 0 for all.

Outputs (6)

NameTypeDescription
imageIMAGEThe image the metadata was read from. A 64x64 black image if nothing could be loaded.
positive_promptSTRINGPositive prompt found in the image metadata. Empty if there is none.
negative_promptSTRINGNegative prompt found in the image metadata. Empty if there is none.
parsed_params_jsonSTRINGAll recognised generation settings (steps, sampler, cfg, seed, ...) as indented JSON.
filtered_params_groupedSTRINGJust the keys named in filter_params, one value per line, one entry per image.
raw_metadata_jsonSTRINGThe unparsed metadata block from the file, as indented JSON.