AI-Generated Image Detection
genaiDetect if an image was generated by an AI model such as Nano Banana, Seedream, Stable Diffusion, GPT, MidJourney, Flux, Firefly and more.
Overview
The AI-Generated Image Detection Model can help you determine if an image was entirely generated by an AI model, or if it is a real image. This model was trained on millions of artificially-created and human-created images spanning all sorts of content such as photography, art, drawings, memes and more.
The Model works by analyzing the visual (pixel) content of the image. No meta-data is used in the analysis. Tampering with meta-data such as EXIF data therefore has no effect on the scoring.
The Model was trained to detect images generated by the main models currently in use: Nano Banana, GPT-image, Stable Diffusion, MidJourney, Firefly, Flux, Reve, Recraft, Imagen, Ideogram, GANs... Additional models will be added over time as they become available.
Use cases
- Tag AI-generated imagery as such, to limit the spread of misinformation and fake news
- Implement stricter moderation rules on AI-generated imagery
- Detect potential fraud with fake ids, fake profiles or fake claims
- Limit ai-generated spam
- Enact bans on AI-generated imagery
Related model
The following 3 models can provide a useful complement to the AI-generated image detection model:
- Deepfake Detection: Detect swapped or modified faces.
- Type Detection: Detect if an image is a photography or an illustration.
- AI Video Detection: Detect AI-generated videos.
Examples
AI-generated images

Stable Diffusion

MidJourney

Firefly

DALL-E 3

Ideogram

Flux

Kling

SeeDream

GPT

Nano Banana Pro

StyleGan2 (thispersondoesnotexist)
Generator-specific information
Sightengine's AI detection models compute per-generator confidence scores alongside a global AI probability score. For every image or video analyzed, the API response includes individual scores for each supported generator, giving you a complete fingerprint of the content.
The list of supported generators spans both images and videos, covering major commercial tools, open-source models, and older GAN-based architectures:
| Generator | Creator | Example versions detected |
| Cosmos | NVIDIA | Cosmos Predict 2, ... |
| DALL-E | OpenAI | DALL-E 2, DALL-E 3, ... |
| Firefly | Adobe | Firefly 2, Firefly 3, ... |
| Flux | Black Forest Labs | Flux.1 Dev, Flux.1 Schnell, Flux Pro, ... |
| GPT image generation | OpenAI | GPT-4o, GPT-1.5 image... |
| Grok Imagine | xAI | Imagine, Imagine Pro... |
| HiDream | HiDream.ai | HiDream-I1, HiDream-E1, ... |
| Higgsfield | Higgsfield AI | Higgsfield Soul... |
| Hunyuan | Tencent | HunyuanImage 2.1, HunyuanImage 3.0, ... |
| Ideogram | Ideogram | Ideogram 2.0, Ideogram 3.0, ... |
| Imagen | Imagen 2, Imagen 3, ... | |
| Kling | Kuaishou | Kling 2.0, Kling 3.0, ... |
| Krea | Krea | Krea 1, ... |
| MAI-Image | Microsoft | MAI-Image-2.5, MAI-Image-2.6, ... |
| Midjourney | Midjourney | Midjourney v5, v6, v7, ... |
| Nano Banana | Nano Banana 2, Nano Banana Pro, ... | |
| Qwen | Alibaba | Qwen2-VL, ... |
| Recraft | Recraft | Recraft V3, ... |
| Reve | Reve | Reve Image 1.0, ... |
| Seedream | ByteDance | Seedream 2.0, Seedream 3.0, ... |
| Stable Diffusion | Stability AI | SD 1.5, SD 2.1, SDXL, SD3, ... |
| StyleGAN | NVIDIA | StyleGAN2, StyleGAN3, ... |
| Vidu | Shengshu | Vidu Q2, ... |
| Z-image | Alibaba | Z-image, Z-image Turbo, ... |
| Other generators | Various | Generators with a smaller audience |
And more, new generators are added continuously as they appear in the wild.
Code examples
Upload a file or send an image URL, pick your language, and receive a JSON response. Need credentials first? Create a free account →
curl -X POST 'https://api.sightengine.com/1.0/check.json' \
-F 'media=@/path/to/image.jpg' \
-F 'models=genai' \
-F 'api_user={api_user}' \
-F 'api_secret={api_secret}'
# this example uses requests
import requests
import json
params = {
'models': 'genai',
'api_user': '{api_user}',
'api_secret': '{api_secret}'
}
files = {'media': open('/path/to/image.jpg', 'rb')}
r = requests.post('https://api.sightengine.com/1.0/check.json', files=files, data=params)
output = json.loads(r.text)
$params = array(
'media' => new CurlFile('/path/to/image.jpg'),
'models' => 'genai',
'api_user' => '{api_user}',
'api_secret' => '{api_secret}',
);
// this example uses cURL
$ch = curl_init('https://api.sightengine.com/1.0/check.json');
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, $params);
$response = curl_exec($ch);
curl_close($ch);
$output = json_decode($response, true);
// this example uses axios and form-data
const axios = require('axios');
const FormData = require('form-data');
const fs = require('fs');
data = new FormData();
data.append('media', fs.createReadStream('/path/to/image.jpg'));
data.append('models', 'genai');
data.append('api_user', '{api_user}');
data.append('api_secret', '{api_secret}');
axios({
method: 'post',
url:'https://api.sightengine.com/1.0/check.json',
data: data,
headers: data.getHeaders()
})
.then(function (response) {
// on success: handle response
console.log(response.data);
})
.catch(function (error) {
// handle error
if (error.response) console.log(error.response.data);
else console.log(error.message);
});
| Parameter | Type | Description |
| media | file | image to analyze |
| models | string | comma-separated list of models to apply |
| api_user | string | your API user id |
| api_secret | string | your API secret |
API response
The API returns a JSON response with the following structure:
{
"status": "success",
"request": {
"id": "req_0zrbHDeitGYY7wEGncAne",
"timestamp": 1491402308.4762,
"operations": 5
},
"type": {
"ai_generated": 0.001
},
"media": {
"id": "med_0zrbk8nlp4vwI5WxIqQ4u",
"uri": "https://sightengine.com/assets/img/examples/example-prop-c2.jpg"
}
}
Successful Response
Status code: 200, Content-Type: application/json| Field | Type | Description |
| status | string | status of the request, either "success" or "failure" |
| request | object | information about the processed request |
| request.id | string | unique identifier of the request |
| request.timestamp | float | timestamp of the request in Unix time |
| request.operations | integer | number of operations consumed by the request |
| type | object | results for the model |
| media | object | information about the media analyzed |
| media.id | string | unique identifier of the media |
| media.uri | string | URI of the media analyzed: either the URL or the filename |
Error
Status codes: 4xx and 5xx. See how error responses are structured.API response with per-generator scores
The API returns a JSON response with the following structure:
{
"status": "success",
"request": {
"id": "req_0zrbHDeitGYY7wEGncAne",
"timestamp": 1491402308.4762,
"operations": 5
},
"type": {
"ai_generated": 0.001,
"ai_generators": {
"cosmos": 0.001,
"dalle": 0.001,
"firefly": 0.001,
"flux": 0.001,
"gan": 0.001,
"gpt": 0.001,
"grok": 0.001,
"hidream": 0.001,
"higgsfield": 0.001,
"hunyuan": 0.001,
"ideogram": 0.001,
"kling": 0.001,
"imagen": 0.001,
"krea": 0.001,
"mai": 0.001,
"midjourney": 0.001,
"qwen": 0.001,
"recraft": 0.001,
"reve": 0.001,
"seedream": 0.001,
"stable_diffusion": 0.001,
"vidu": 0.001,
"wan": 0.001,
"z_image": 0.001,
"other": 0.001
}
},
"media": {
"id": "med_0zrbk8nlp4vwI5WxIqQ4u",
"uri": "https://sightengine.com/assets/img/examples/example-prop-c2.jpg"
}
}
Successful Response
Status code: 200, Content-Type: application/json| Field | Type | Description |
| status | string | status of the request, either "success" or "failure" |
| request | object | information about the processed request |
| request.id | string | unique identifier of the request |
| request.timestamp | float | timestamp of the request in Unix time |
| request.operations | integer | number of operations consumed by the request |
| type | object | results for the model |
| media | object | information about the media analyzed |
| media.id | string | unique identifier of the media |
| media.uri | string | URI of the media analyzed: either the URL or the filename |
Error
Status codes: 4xx and 5xx. See how error responses are structured.FAQ
Which AI image generators are supported?
We aim to support all current generators, including Flux, GPT-image, Nano Banana (and Nano Banana Pro), Imagen, Midjourney, Stable Diffusion (1.x, 2.x, SDXL, SD3), Firefly, Qwen, Ideogram, Recraft, Reve, SeeDream, Kling, Wan, Grok, HiDream, Hunyuan, Krea, MAI-Image, Vidu, Cosmos along with other smaller generators, as well as GAN-based generators such as StyleGAN2/3. The model is updated on an ongoing basis as new generators become available. See Supported AI generators.
How does detection work without metadata or a watermark?
Detection is purely pixel-based. Metadata, EXIF tags, C2PA provenance, and invisible watermarks are ignored, so stripping them has no effect on the result.
What does the ai_generated score mean?
It is the model's confidence, from 0 to 1, that the image was produced or edited by a generative AI model. Higher means more likely AI-generated.
Does it work on screenshots of AI images, or compressed and re-shared images?
Yes. Detection is robust to re-encoding, compression, resizing and other transforms. Confidence may drop somewhat on heavily degraded images or screenshots with significant UI chrome, but the model is specifically developed to work on real-world redistribution artifacts.
Can it tell which generator produced the image?
Yes, the genai model can return per-generator scores along with the general ai_generated score. For access to finer-grained analysis, contact us.
What about AI-edited real photos (inpainting, face swaps, retouching)?
The genai model targets images that are fully AI-generated as well as images that are AI edited. For face swaps and manipulated faces, use Deepfake Detection.
Is this available for video?
Yes. A separate model is available specifically for AI video detection. This model targets current AI video generators. See AI Video Detection.
What are the limits and pricing?
A free tier is available for testing and personal use. Production use is available through paid tiers that scale with volume. Enterprise setups are also possible, with enterprise-exclusive features. See Pricing.
How often is the model updated?
New generators are evaluated and incorporated on an ongoing cadence. See the Changelog.
Can I call this model together with other Sightengine models?
Yes. Pass a comma-separated list in the models parameter: models=genai,deepfake,nudity-2.1 and the API will return all results in a single response. This is the recommended pattern for production pipelines.