AI watermark detector
- A generator match only means the text is in the metadata. It does not mean Google verified SynthID, and it does not mean every pixel was synthesised.
- Clean C2PA does not mean no invisible watermark, does not mean the platform classifier will pass it, and does not mean the caption does not say so.
- Forwarding and screenshots change the answer: WeChat or WhatsApp forwarding, screenshots and re-compression can strip the metadata while leaving something else behind. Always test the exact bytes you are going to upload.
Why scan before uploading
When a platform shows an AI label you are actually facing three separate problems with three incompatible fixes: provenance data still in the file, an invisible watermark in the pixels, or the platform's own classifier deciding it looks synthetic. Investigating all three at once is how people end up cleaning the metadata three times and still seeing the label.
This page answers only the first question — the one a browser can answer reliably: does the file you are about to upload still carry C2PA or a generator string?
What the three layers are
| Layer | What it reads | What it can conclude | Status |
|---|---|---|---|
| Layer 1 | The C2PA manifest inside the JUMBF structure | Manifest present / parseable / which actions are recorded | Live |
| Layer 2 | Fingerprints of nine generator toolchains in text fields | Which toolchain names appear in the file | Live |
| Layer 3 | Pixel statistics | A probability that it “looks synthetic” | Not built, and no guessing |
We chose not to build layer 3 rather than ship a convincing-looking percentage. A pixel watermark can only be verified with the vendor's private key; any browser-side “detection” is a heuristic guess, and presenting it as a conclusion would mislead people.
The standard workflow
- 1Upload the file you are actually publishingNot a screenshot, not a copy forwarded through a chat app.
- 2Read layers 1 and 2A C2PA hit or a generator match means a file-level trigger exists.
- 3Clean a copyRun it through the cleaner, then scan the downloaded file again.
- 4Both layers clean but the platform still labels itThe trigger is not metadata. Cleaning it a hundred more times will not help; you have to work on the pixels or on your disclosure strategy.