EU AI Label (Metadata Check)
So You Labeled Your AI Image — This Node Tells You If It Actually Took
- image
- Report
- JSON
- Images
Metadata is invisible, which is the whole problem. You saved a PNG with an AI-Act label, maybe you used the Metadata Writer, maybe you used some online tool - and now you'd really like to know whether the label is in the file, or whether some re-encode or a forgetful save node dropped it on the floor. This node is the inspection half of the pack: give it a file path and it reads what's actually in there.
It's a metadata autopsy, not a compliance badge. The node reads XMP (including DigitalSourceType, the IPTC marker Google looks for), EXIF, IPTC-IIM, and detects embedded C2PA manifests. It does not verify C2PA signatures, and it can't sign anything - detection only. If your goal is "did my Art. 50 marking survive," this answers it.
How it works
The key thing to understand: the input is a file path, not an image tensor. Tensors can't carry metadata, so this node goes to disk. Give it an absolute path, or a relative path and it resolves against your output/ then input/ folders. The natural setup is a round-trip: wire the Metadata Writer's File Path output straight into this node's file_path input, and every save gets verified automatically. Because the node keys off the file's modification time, it re-runs when the file changes instead of replaying a stale check.
It digs through the raw bytes: XMP packets (format-independent scan), EXIF tags, IPTC-IIM records, and a C2PA scan that knows where manifests hide in each format - JPEG APP11/JUMBF segments, PNG caBX chunks, WebP C2PA chunks. C2PA is a live niche in ComfyUI right now (a handful of signing nodes have appeared in the last year), so "did this file come with content credentials" is a real question to ask of files you receive, not just your own.
Inputs and outputs
Just one real input:
- File Path (STRING) - the file to inspect. Leave it empty and you'll get a hard "file not found" error, not an empty report.
The optional Image input is a passthrough - if you feed it an image it comes back out the Images output unchanged; if you don't, you get a placeholder.
Three outputs:
- Report (STRING) - a human-readable summary: AI labeling found yes/no, the DigitalSourceType, whether a C2PA manifest is present and where, XMP/EXIF/IPTC contents, whether a ComfyUI workflow is embedded.
- JSON (STRING) - the same findings as structured JSON, for when you want to pipe it somewhere.
- Images (IMAGE) - the passthrough, so the node can sit in a chain without breaking it.
Install
Same pack as the rest: search ComfyUI_EU_AI_Label in ComfyUI Manager, install, restart. Manual route:
cd ComfyUI/custom_nodes
git clone https://github.com/a-und-b/ComfyUI_EU_AI_Label.git
pip install -r ComfyUI_EU_AI_Label/requirements.txt
Pillow and numpy only, no native dependencies, no network at runtime.
Where people get burned
The file-not-found error trips everyone once - remember relative paths resolve against output//input/, and if you're inspecting a file on another drive, use the absolute path. Second, "detects a C2PA manifest" means exactly that: presence, not validity. A manifest can be present and cryptographically wrong, or signed by anyone with a self-issued cert; the node doesn't judge. If you need real signing and verification, that's a different tool (the README points to comfyui_c2pa_signer while signing lands in this pack's roadmap). And remember the metadata game ends at the first re-encode - this node can tell you the label is gone, it can't put it back.
Inputs (2)
| Name | Type | Default | Description |
|---|---|---|---|
| file_path | STRING | Path to the image file. Relative paths are resolved against the ComfyUI output folder. Connect the file_path output of the Metadata Writer here for a round-trip check. | |
| imageopt | IMAGE | Optional passthrough |
Outputs (3)
| Name | Type | Description |
|---|---|---|
| Report | STRING | — |
| JSON | STRING | — |
| Images | IMAGE | — |