How accurate is this checker?

This checker does not decide whether an image is AI-generated, so it has no accuracy percentage for that. It reports which provenance signals a file carries and whether a signed record validates. This page shows how we tested those checks, what came out, which versions and trust list dates stand behind the results, and what each check cannot see.

What the checker is built on

Built on c2pa-rs 0.91.7 through c2pa-web 0.15.5. The c2pa-rs library reads and validates Content Credentials. The c2pa-web package compiles it to WebAssembly, so the check runs inside your browser and your image stays on your device.

The library checks a record's signature and its match to the file. We then ask whether a trust list vouches for the signer's certificate, using two copies of trust lists that we host and never fetch from anywhere else at check time.

The trust list files hosted on this site, one row per file. Measured on October 27, 2026, the day we fetched the lists.
FileSource repositoryLast changedCertificatesSHA-256 (first 12 characters)
C2PA Trust List: Signing certificatesc2pa-org/conformance-publicOctober 17, 202632b3949271a07b
C2PA Trust List: Time-stamping certificatesc2pa-org/conformance-publicOctober 17, 2026237182cb227c02
C2PA Trust List: Store settingsWritten by us from the C2PA 2.2 specificationOctober 30, 2026Not a list of certificatescafbe92de1a8
C2PA Interim Trust List (frozen January 1, 2026): Signing certificatescontentauth/verify-siteJanuary 8, 202627db57e50b9bd4
C2PA Interim Trust List (frozen January 1, 2026): Allowed certificatescontentauth/verify-siteApril 21, 2026115dfe328032e56
C2PA Interim Trust List (frozen January 1, 2026): Store settingscontentauth/verify-siteAugust 28, 2025Not a list of certificates1044c30a906b

The Interim Trust List is named as frozen on January 1, 2026. The repository shows its files last changing on the dates above, and we show every date. A signer added to a list after the date of our copy is not recognised until we fetch the list again. Each result names the list it used and its date. The row marked as written by us is a small settings file for the C2PA Trust List. It names the one certificate use that version 2.2 of the specification allows on that list, and it is not a copy of anything the C2PA project publishes. See Privacy and method and What are Content Credentials? for how the two lists are used.

Real files from public collections

We ran the files below through the same code the page uses, in a real browser, under the same Content Security Policy as the live site. The first table counts what the checker showed for each tool's files. The second lists every file that carries a record, with the validator's result against each list.

We ran 32 files through the checker: 29 from Wikimedia Commons categories whose names say they hold images generated by one of 15 tools, two samples published by vendors, and the C2PA project's own test image. The names are the sources' claims; we do not know how any of these files was made. Nine of the 32 carry a Content Credentials record. This is a small test, not a survey.

What the checker showed for each tool's files. Measured on October 30, 2026.
Tool named by the sourceFilesWith a recordHeadline shown (files)
Adobe Firefly33Content Credentials found; legacy trust-list match (3)
Canva20Metadata found; source not established (2)
ChatGPT43Content Credentials found; signer trust not established (2)
Metadata found; source not established (1)
Trusted Content Credentials declare AI use (1)
DALL-E20No supported provenance signals found (1)
Metadata found; source not established (1)
Flux20No supported provenance signals found (2)
Gemini20Metadata declares AI use (1)
No supported provenance signals found (1)
Grok20No supported provenance signals found (2)
Ideogram20No supported provenance signals found (1)
Tool name found in metadata (1)
Image Creator by Microsoft Bing22Content Credentials found; legacy trust-list match (2)
Imagen20No supported provenance signals found (2)
Meta AI20No supported provenance signals found (2)
Midjourney20No supported provenance signals found (2)
Nano Banana10No supported provenance signals found (1)
Seedream10No supported provenance signals found (1)
Stable Diffusion20No supported provenance signals found (1)
Metadata found; source not established (1)
C2PA test image11Content Credentials found; signer trust not established (1)

Names in the certificate are what the certificate says, which anyone can write. They are not a finding about who signed the file.

The files that carry a record, with the validator's result against each trust list. Measured on October 30, 2026.
FileName in the certificateC2PA Trust ListInterim Trust ListHeadline shown
Adobe Firefly, vendor sampleAdobe Inc.Valid; signer not on this listTrusted; signer on this listContent Credentials found; legacy trust-list match
Adobe Firefly, file 1Adobe Inc.Valid; signer not on this listTrusted; signer on this listContent Credentials found; legacy trust-list match
Adobe Firefly, file 2Adobe Inc.Valid; signer not on this listTrusted; signer on this listContent Credentials found; legacy trust-list match
C2PA test imageC2PA Test Signing CertValid; signer not on this listValid; signer not on this listContent Credentials found; signer trust not established
ChatGPT, vendor sampleOpenAIInvalid; signer not on this listInvalid; signer not on this listContent Credentials found; signer trust not established
ChatGPT, file 1OpenAIInvalid; signer not on this listInvalid; signer not on this listContent Credentials found; signer trust not established
ChatGPT, file 2OpenAI OpCo, LLCTrusted; signer on this listNot runTrusted Content Credentials declare AI use
Image Creator by Microsoft Bing, file 1Microsoft CorporationInvalid; signer not on this listTrusted; signer on this listContent Credentials found; legacy trust-list match
Image Creator by Microsoft Bing, file 2Microsoft CorporationInvalid; signer not on this listTrusted; signer on this listContent Credentials found; legacy trust-list match

A validator result of "Valid" means the signature and the match to the file check out. It says nothing about the signer. Whether the signer is vouched for is the second half of each result, and a record can be valid while no list vouches for its signer. The headline column shows what the checker told the visitor.

Files we made to test forged and damaged records

Real files rarely show the cases an attacker or a mistake would produce, so we built some. Each row is a file we made for the test suite; none is shipped to visitors.

Besides real files, we made 18 test files to see how the checker treats forged, damaged and unusual ones. Our development certificate is on neither trust list, so a record signed with it reads as signer trust not established.

Files we made to test the checker. Measured on October 30, 2026.
Test fileHeadline shown
A picture signed with a self-made certificate that names "OpenAI OpCo, LLC"Content Credentials found; signer trust not established
A file from a Midjourney category, signed again with a self-made certificate that names "Leica Camera AG"Content Credentials found; signer trust not established
A signed Adobe Firefly sample with 12 bytes of image data changed after signingContent Credentials failed validation
A signed Microsoft Image Creator file with 12 bytes of image data changed after signingContent Credentials failed validation
A file whose record includes an earlier version with changed image dataContent Credentials failed validation
A signed file with its record damagedContent Credentials failed validation
A file that points to a record stored online and carries none (JPEG, PNG, WebP, AVIF and GIF)Content Credentials are not available locally
A file signed with our own development certificate, whose record declares a generative source (JPEG and PNG)Content Credentials found; signer trust not established
A signed record that declares a camera capture, in a file whose XMP declares a generative sourceContent Credentials found; signer trust not established
A file with a valid record whose earlier version has a record that does not validateContent Credentials found; signer trust not established
A file with a valid record whose earlier version is signed by the older OpenAI certificateContent Credentials found; signer trust not established
A file with no record and unsigned XMP that declares a generative sourceMetadata declares AI use
A file with unsigned XMP that declares a generative source and a Content Credentials marker with no record behind itMetadata declares AI use

A record signed with a self-made certificate that names a well-known company reads the same as a genuine file from that company, because only a trust list can vouch for a certificate and anyone can write any name into one. The checker says this in its result, and it never writes "Signed by" for a name that no list vouches for.

The Stable Diffusion invisible watermark

The checker looks for the invisible pattern that Stable Diffusion's reference software adds, in three payload types. A chance match on an ordinary photograph would be a false claim about that photograph, so we set each threshold by decoding photographs that came from curated collections, in the same browser code the page uses, and chose it above every score we saw. In the table, the threshold is the number of payload bits that must match, the highest photo score is the best match any photograph reached, and the false-match chance is the chance that random bits would reach the threshold.

We checked 250 photographs from Wikimedia Commons categories of curated photographs and 0 of 250 reached a threshold. Each threshold was set so that no photograph reached it and so that a match by chance is very unlikely. Adding the chances for all three payloads, one check has about 5.9 × 10−10 chance of a false match by this model. That is below one in a billion. Commons categories are not proof that a photograph has no generated content; they are the best proxy we had.

Thresholds and the 250-photograph test. Measured on October 27, 2026 in Chrome 156.0.8078.47.
PayloadBitsThresholdHighest photo scorePhotos reaching itFalse-match chance
Stable Diffusion XL4845350 of 2501.3 × 10−10
Stable Diffusion 1.x136104850 of 2502.2 × 10−10
Stable Diffusion 2.x3232210 of 2502.3 × 10−10

Next, we marked test photographs with each payload using the reference software, saved them in different ways, and counted what the checker found. The pattern lives in fine detail of the pixels, so many ordinary steps change what is left of it. Read the table before relying on a "not found" result for an image that has been shared.

Files we marked with each payload, then saved in different ways: how many the checker found. Measured on October 27, 2026.
How the marked file was savedStable Diffusion XLStable Diffusion 1.xStable Diffusion 2.x
PNG, lossless3 of 3 found2 of 2 found2 of 2 found
PNG, odd image size0 of 1 foundNot testedNot tested
PNG with a colour profile1 of 1 foundNot testedNot tested
PNG, marked the 8-bit way (not what SDXL software does)1 of 1 foundNot testedNot tested
JPEG, quality 90, no chroma subsampling (4:4:4)3 of 3 found2 of 2 found2 of 2 found
JPEG, quality 75, no chroma subsampling (4:4:4)2 of 3 found1 of 2 found1 of 2 found
JPEG, quality 90, ordinary 4:2:00 of 3 found0 of 2 found0 of 2 found
JPEG, quality 75, ordinary 4:2:00 of 3 found0 of 2 found0 of 2 found
JPEG, quality 90, 4:2:0, with a colour profile0 of 1 foundNot testedNot tested
Resized to 90 percent0 of 1 found0 of 1 found0 of 1 found
Cropped by a few pixels0 of 1 found0 of 1 found0 of 1 found

0 of 5 unmarked control files matched a payload. The JavaScript decoder read the same bits as the Python reference package on 50 of 50 test files. The marked files and the controls are made from three photographs.

Automated tests

The last full run of our browser test suite was on October 30, 2026. It opened the built site in a real browser and ran 52 groups of checks (1,842 checks in all); every group passed. The suite checks every verdict against the table of expected headlines, that no request leaves the site, and that no console error appears.

What each check cannot see

What we do not claim

If a result looks wrong

Write to hello@newwatermark.com. Tell us the headline you saw and where the file came from. Please do not attach the image: we do not receive or keep yours. Security issues go to the same address. To try the checker yourself, check an image.

Frequently asked questions

Does the checker have an accuracy rate?
No. It does not decide whether an image is AI-generated, so there is nothing to score that way. We publish what we tested and how each check behaved instead.
Why can a record that validates still read "signer trust not established"?
A signature can be valid while no trust list vouches for the certificate that made it. Only a trust list can vouch for a certificate, so the checker reports what the certificate names and says that the name is not verified.
How current are the trust lists?
The table above shows the date of each file in our copies. A signer added after those dates is not recognised until we fetch the lists again.
Where do the test files come from?
The real files come from Wikimedia Commons categories, from vendor samples and from the C2PA project's test image. The photographs for the watermark test come from curated Wikimedia Commons categories. We made the forged and damaged files ourselves.