AI Generated Image Detection
Detects whether one or more images were generated by AI by analyzing image metadata (e.g. C2PA/EXIF/PNG text-chunk provenance signals like OpenAI, Midjourney, Stable Diffusion, Adobe Firefly), not the visual content of the image itself.
Inputs
| Name | Type | Description |
|---|---|---|
| Image URLs | List | A list of image URLs to check for AI generation. |
Outputs
| Name | Type | Description |
|---|---|---|
| Results | Object | A list of detection results, one per input image. Each result contains: index (int), is_ai (bool), details (dict), error (str or null). |
Results example
```json {"results": [
{ "index": 0, "is_ai": false, "details": {}, "error": null },
{ "index": 1, "is_ai": true, "details": {"openai": "c2pa"}, "error": null },
{ "index": 2, "is_ai": false, "details": {}, "error": "Failed to download image" }
]}
```
Notes
- Detection is based on suspicious metadata/provenance signals, not a visual model — it looks for known AI-generator markers in C2PA manifests, EXIF tags, and PNG text chunks (e.g. OpenAI, Midjourney, Stable Diffusion, Adobe Firefly). An AI-generated image that has had its metadata stripped will not be flagged, since the check never inspects the image's actual visual content.
- Per-image failures are isolated — a bad URL or decode error for one image (surfaced in that item's
errorfield) does not affect the results for the other images in the same call. detailsshows which matched keyword/source triggered a positive result (e.g.{"openai": "c2pa"}); it's an empty object whenis_aiisfalse.- If the underlying detection service call fails entirely (e.g. a network/auth error), the action falls back to returning one result per input image with
is_ai: false, emptydetails, and the error message inerror— so Results is never empty, and downstream Flow logic can safely rely on it having exactly one entry per input image, in the same order.
Updated about 12 hours ago
Did this page help you?