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

NameTypeDescription
Image URLsListA list of image URLs to check for AI generation.

Outputs

NameTypeDescription
ResultsObjectA 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 error field) does not affect the results for the other images in the same call.
  • details shows which matched keyword/source triggered a positive result (e.g. {"openai": "c2pa"}); it's an empty object when is_ai is false.
  • 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, empty details, and the error message in error — 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.


Did this page help you?