EXIF Metadata Extractor
Pull camera data out of real photos
- image_paths
- metadata
- formatted_metadata
Every photo a real camera or phone takes carries a block of embedded metadata alongside the pixels - EXIF. Camera make and model, lens, exposure settings (shutter speed, aperture, ISO), focal length, timestamp, sometimes GPS. This node's whole job is reading that block back out of a list of image files. It's the odd one out in this pack: everything else here is built around running a Hugging Face model, and this one doesn't touch a model at all - it's a fast, cheap, CPU-only read.
Why it's useful in a captioning pipeline
EXIF presence and content is one of the tells that separates a real photograph from an AI-generated or heavily edited image - generated images typically carry no EXIF at all, or a stripped-down block that doesn't match a real camera's fingerprint. That cuts both ways for dataset work. If you're curating a photography-focused training set and want to confirm what you scraped is actually camera output rather than someone else's AI generations mixed in, checking for a real EXIF block is a fast, cheap first filter. And if you're chasing photorealism specifically, exposure and lens data is a level of technical description most captioning models never produce on their own - "shot at f/1.8, shallow depth of field, 50mm" describes camera behavior a caption like "a person standing in a room" doesn't, and that's exactly the kind of detail that helps a photorealism LoRA learn camera characteristics rather than just subject matter.
How it works
Feed it a list of image paths and it reads whatever EXIF tags exist on each file, no inference involved.
The inputs and outputs that matter
image_paths(LIST, required) - the only input, normally straight from Image Loader.
Two outputs: metadata (LIST) and formatted_metadata (LIST) - a raw/structured version and a human-readable rendering of the same underlying data per image. Use formatted_metadata if you're display it directly or gluing it onto a caption; use metadata if something downstream needs to parse specific fields programmatically.
Installing it
Through ComfyUI Manager: search ComfyUI-Transformers-Pipeline, install, restart. By hand:
cd ComfyUI/custom_nodes
git clone https://github.com/mediocreatmybest/ComfyUI-Transformers-Pipeline
then restart. Nothing to download for this node specifically - no model weights, just a metadata read off your local files.
Common issues & troubleshooting
Metadata comes back empty or nearly empty for most images. This is expected, not a bug, for anything that didn't come straight off a camera. Images saved by ComfyUI, upscaled, run through an editor, or generated by a diffusion model typically have no meaningful EXIF block, or one that's been stripped along the way. If your dataset is a mix of scraped/generated images and real photos, expect a lot of blank entries from the non-photo half - and that gap is itself useful signal if you're trying to separate the two.
Formatted output looks different from what you expected. EXIF fields vary a lot between camera makes and phone models - not every image carries the same tags, so formatted_metadata for one file won't necessarily list the same fields as another. That's a property of EXIF itself, not something this node can normalize away.
Trying to use this to verify an image is "real." Treat it as a signal, not proof - EXIF can be stripped, edited, or forged, and its absence doesn't guarantee an image is AI-generated any more than its presence guarantees it isn't. Useful for quick dataset triage, not a forensic tool.
Inputs (1)
| Name | Type | Default | Description |
|---|---|---|---|
| image_paths | LIST | — |
Outputs (2)
| Name | Type | Description |
|---|---|---|
| metadata | LIST | — |
| formatted_metadata | LIST | — |