πΌοΈπ Metadata Extractor (List)
Scrape the Prompts Out of a Whole Folder of Images
- image_input
- image
- positive_prompt
- negative_prompt
- parsed_params_json
- filtered_params_grouped
- raw_metadata_json
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.
Inputs (5)
| Name | Type | Default | Description |
|---|---|---|---|
| seed | INT | 00β18446744073709550000 | Index of the first file to load from a folder, starting at 0. Increments every run by default to step through the folder. |
| input_pathopt | STRING | Path to a folder of images or a single image file. Used if image_input is not connected. | |
| image_inputopt | IMAGE | A list/batch of images. This has priority over input_path. | |
| filter_paramsopt | STRING | Comma-separated list of keys to extract (e.g., steps, sampler, seed). | |
| max_file_countopt | INT | 00β10000 | Max number of items to return. 0 for all. |
Outputs (6)
| Name | Type | Description |
|---|---|---|
| image | IMAGE | The image the metadata was read from. A 64x64 black image if nothing could be loaded. |
| positive_prompt | STRING | Positive prompt found in the image metadata. Empty if there is none. |
| negative_prompt | STRING | Negative prompt found in the image metadata. Empty if there is none. |
| parsed_params_json | STRING | All recognised generation settings (steps, sampler, cfg, seed, ...) as indented JSON. |
| filtered_params_grouped | STRING | Just the keys named in filter_params, one value per line, one entry per image. |
| raw_metadata_json | STRING | The unparsed metadata block from the file, as indented JSON. |