I retested my AI image checker on GPT Image 2.5, Nano Banana 2.1, FLUX.3 and Midjourney V7
Two weeks ago I ran 100 images through four AI image detectors to pick the engine behind a small checker I built. Since then OpenAI shipped GPT Image 2.5 (September 8) and Google shipped Nano Banana 2.1 (October 6). A detector that was fine on last season's models can fall behind quickly, so I rete

Two weeks ago I ran 100 images through four AI image detectors to pick the engine behind a small checker I built. Since then OpenAI shipped GPT Image 2.5 (September 8) and Google shipped Nano Banana 2.1 (October 6). A detector that was fine on last season's models can fall behind quickly, so I retested the checker as it actually runs today on the newest generators I could get clean samples from.
The question was narrow: how often does an image from a new generator come back as anything other than "Likely AI-generated", and how often is a real camera photo flagged?
I wrote the protocol down before the first detection call: which images, how they're picked, how answers are counted, and what I'd change on the site depending on the result. The one decision rule: if any generator is missed more than 1 time in 5, results that come back "Likely a real photo" or "Can't tell" get a short note saying how many images from that generator we missed.
A miss means anything other than "Likely AI-generated". The checker has three answers: Likely AI (detection score 0.8 or above), Likely a real photo (0.2 or below) and Can't tell (in between). So a Can't tell on an AI image counts against it.
No threshold tuning, no swapping out images after seeing a score. Spares were allowed only for download or format failures, and they were fixed before any score existed.
Provenance was the hard part. A file called "midjourney.png" on the internet proves nothing, so each bucket needed a source that records the model:
That's 140 images. I kept links and fingerprints, not the images.
None of the 60 Civitai files carried Content Credentials. That includes the 20 GPT Image 2.5 images. In my first test, all 8 original OpenAI files carried OpenAI-signed credentials (6 I made through OpenAI's image API, 2 from a public dataset), and the checker settled them without calling a model. Files that come out of a third-party generator site don't necessarily keep them, so here the detection model had to decide. If you're trying to work out whether ChatGPT made a particular picture, I wrote up when OpenAI's credentials settle it and when they don't, and what OpenAI's own verifier can and can't confirm.
Labels anyone can write were common. 6 of the 20 Nano Banana files and all 20 Midjourney V7 files carried an AI label in their metadata. The checker doesn't trust that kind of label on its own, because anyone can add it to a real photo, so those images still went to the model. Only signed credentials from signers on the C2PA trust lists settle an answer: in this run that happened for 3 real photos, which carried Google Pixel camera credentials.
A small product bug turned up as well: two 4K PNGs from Civitai were over the site's 25 MB upload limit. On the live site those uploads fail with "too large".
Run on October 28, 2026, through the same code path the site uses, with Sightengine as the detection model.
78 of the 80 verified AI images came back Likely AI and none were called a real photo. Every miss in the main rows was a Can't tell: a Flux.2 [dev] image scored 0.79, just under the 0.8 cut-off, and a Midjourney V7 image scored 0.55. In the community row, one post scored 0.77 (Can't tell) and one scored 0.06, the only AI image in the run the checker called a real photo.
Real photos: 38 of 40 came back Likely a real photo. One was flagged as AI with a score of 0.99, and one got a Can't tell at 0.64. That's 1 of 40 flagged (2.5%, 95% range 0–13%). Both errors were recent iPhone shots, an iPhone 17 and an iPhone 17 Pro. Two photos aren't a pattern, but it's the case I'd watch, because a false alarm lands on a real person. If the image you're checking is a viral picture or a screenshot rather than an original file, the clues are different; I keep notes on checking those.
No generator crossed the 1-in-5 line, so the decision rule said no warning, and I didn't add one.
Twenty images per generator is small. "0 of 20 missed" is still compatible with missing about 1 in 6, which is what the 95% range shows. The Midjourney V7 images come from a single creator. The community Midjourney row can't be tied to a version. Civitai's generator is one way to reach these models, not the only one, and files from other apps may behave differently, especially around credentials. And vendors update their models, so this is a snapshot of one week.
I built this checker and it uses Sightengine as its main engine, with Hive as a backup, so I have a stake in these numbers looking good. That's why the protocol was written first and why every row is published, misses included. No detection company paid for this or saw it in advance.
The full table, the method and the earlier 100-image comparison of four engines are on the accuracy page. If you have an image from one of these generators that it gets wrong, I'd like to see it.
An AI agent working for me wrote this post from the test logs, with no line-by-line human edit, so it's marked as AI-generated. The images, the runs and the numbers are real; the method and the full table are on the accuracy page.