{{ liveStatus }}
Inspect a JPEG, PNG, or WebP for C2PA Content Credentials, declared AI metadata, and statistical pixel anomalies. The tests run locally and report incomplete coverage instead of guessing. Re-encoding can remove container metadata, but it cannot prove or guarantee removal of a pixel watermark.
{{ error }}
JPEG and WebP are the most common formats for AI-generated images. PNG is supported too, up to 32 MiB. Pasting with ⌘V / Ctrl+V works, but a copied image usually arrives without its metadata — the file itself is what carries the C2PA and EXIF evidence.
Your browser requests the file straight from that site, so the image never passes through this server — but that site does see your IP address. If the host refuses cross-origin reads, you can choose to let this site's server fetch it instead. Paste the address of the image itself, not of the page showing it.
That host does not let browsers read its files from other sites. This site's server can download it for you: the link is sent to alexrel.com, the server fetches the image and returns the bytes unchanged, and nothing is stored or logged. The host then sees the server's address instead of yours. Images that sites re-compress on upload usually lost their C2PA and EXIF there already — fetching them another way cannot bring that back.
This image came from the clipboard. Copying an image rebuilds it from pixels, so EXIF, XMP, IPTC and any C2PA manifest were discarded by the browser before this page received a single byte — finding none here proves nothing about the original. The pixel tests below are unaffected. To check the container, drop or choose the image file itself, or fetch it by link.
A clean verdict requires all three layers. Findings from completed layers remain visible, but this result is inconclusive.
The manifest is read, not verified. A signature check needs the C2PA trust list, so treat these values as what the file claims about itself.Only bounded structural fields could be read from this manifest.
No valid C2PA manifest was found. The file may never have carried Content Credentials, or they may have been removed earlier.
C2PA coverage is incomplete. {{ coverageReason(result.coverage.c2pa) }} Absence cannot be concluded from this file.
| Field | Value | Matched | Where | Severity |
|---|---|---|---|---|
| {{ ind.field }} | {{ ind.value.length > 80 ? ind.value.slice(0, 80) + '…' : ind.value }} | {{ ind.matched }} | {{ ind.source }} | {{ ind.severity }} |
Scanned {{ countLabel(result.aiMetadata.xmpFieldCount, 'XMP property', 'XMP properties') }} alongside EXIF and text fields. These values are editable, so a marker shows what the file declares, not definitive proof of how it was made.
{{ pixelPlainSummary }}
{{ result.pixelAnalysis.reason }}
Per-block RS estimate ({{ result.pixelAnalysis.blocks.blockSize }}×{{ result.pixelAnalysis.blocks.blockSize }} blocks, red = the block looks written to, {{ result.pixelAnalysis.blocks.suspiciousBlocks }} flagged):
Frequency domain & 2D FFT spectrum (DC centered, bright points indicate concentrated spatial frequencies)
A separate question from the AI check above: does this photo show signs of local editing or splicing — content pasted in from elsewhere, rather than generated whole. These findings do not affect the AI provenance verdict.
Error Level Analysis (recompressed at {{ Math.round(result.tamperingForensics.errorLevel.quality * 100) }}% quality, brighter = more change)
Read this as a map, not a score: an uneven pattern can mean editing, but ordinary detail — hair, texture, object edges — produces the same kind of unevenness in a photo nobody touched. There is no threshold here that separates "edited" from "not edited".
Error Level Analysis needs a JPEG source — recompressing a PNG or WebP as JPEG would measure the format conversion, not this file's own compression history.
Error Level Analysis is not available for this image ({{ result.tamperingForensics.errorLevel?.reason || 'unavailable' }}).
For a full EXIF/GPS breakdown of this file, use the EXIF Inspector.
Creates a new image from decoded pixels, which normally removes EXIF, XMP, IPTC, and C2PA containers. The output is re-scanned before download. This does not identify or guarantee removal of a pixel-domain watermark.
JPEG has no alpha channel. Transparent pixels will be placed on a white background.
Saved {{ stripResult.name }} — {{ formatFileSize(stripResult.size) }}. Container re-scan passed.The browser returned {{ stripResult.format.toUpperCase() }} instead of {{ stripResult.requestedFormat.toUpperCase() }}; the file name and MIME were corrected.Ran through lossless PNG optimization.Pixel transforms applied: {{ stripResult.normalize.operations.join(', ') }}.
For batch processing, resizing, or format conversion with more control, use the Image Optimizer.
Builds a one-factor-at-a-time grid of re-encoded copies so you can record what Google's portal answers for each one: how the verdict moves along each ladder, and how often a real photo is called AI-generated. The first cell is always an identity re-encode — plain re-save, no other change — because every other cell is only readable against it. Candidates are encoded in this browser through the same verified path as Strip & download above, so a file that still carries a container never becomes a data point.
This records Google's answers, not ours. A verdict that changes is a change in one portal response for one file — it is not by itself a statement about whether anything was removed.
The source group only decides which rate the answers feed: AI-generated feeds the miss rate, Real photo and Authored feed the false-positive rate. Run a control set of real photos too — Google acknowledges false positives but publishes no figure.
Candidate {{ sweep.state.progress.done }} of {{ sweep.state.progress.total }}.
{{ sweep.state.message }}
{{ sweep.state.error }}
| Candidate | Factor | Level | Size | SHA-256 | Portal answer |
|---|---|---|---|---|---|
| {{ result.id }} | {{ result.ladder }} | {{ result.level }} | {{ formatFileSize(result.stats.size) }} | {{ result.stats.sha256.slice(0, 12) }}… | {{ sweepAggregateFor(result.id).status }}not checked |
All candidates arrive in one ZIP, so there is no download prompt per file — unpack it, upload each file to synthid.com ↗, record the answer per file, and paste them below.
One id status pair per line, or a JSON array. Statuses: detected, not-detected, inconclusive, unavailable. A JSON entry with a sha256 must match the candidate it names, otherwise it is rejected.
{{ warning.detail }}
| Factor | detected | not-detected | abstained | unchecked | n (definitive) |
|---|---|---|---|---|---|
| {{ ladder }} | {{ tally.detected }} | {{ tally['not-detected'] }} | {{ tally.abstained }} | {{ tally['not-checked'] }} | {{ tally.definitive }} |
Compare an original with an edited copy at the same resolution, up to 1024 × 1024. Use opaque PNG, JPEG or WebP without rotation. An image without a colour profile is read as sRGB; an embedded sRGB, Adobe RGB or Display P3 profile is applied by the browser and both images are compared in sRGB. Files stay in this browser.
Differences include edits, compression and decoder effects. This comparison says nothing about SynthID.
{{ slot }}
{{ research.files[index] ? formatFileSize(research.files[index].size) + ' · click or drop to replace' : 'PNG, JPEG or WebP · up to 1024 × 1024' }}
Choose the excluded edit region and fixed tiles before inspecting differences. Coordinates refer to the original pixels; no alignment or resizing is applied.
Observations are matched by SHA-256. This page does not contact Google or authenticate the imported answers.
{{ research.error }}
{{ research.busy ? 'Comparing images locally…' : research.message }}
Absolute RGB difference ×{{ research.result.options.previewGain }}
Log power, scaled separately for this tile. Brightness is not a watermark score. Skipped tiles are blank; complex phase data is available in the export.
The report records file hashes, decoder, settings and binary layouts. JPEG/WebP decoded in another program may differ slightly. Browser comparison results remain separate from the image inspection verdict.
Images can carry provenance evidence in separate layers. EXIF, XMP, and IPTC metadata may name software or declare a standard digital source type. C2PA / Content Credentials stores a structured provenance manifest in the file container. Some systems also use proprietary pixel-domain watermarks, but this page has no vendor detector for those systems.
The metadata scanner reads XMP properties, EXIF fields, and supported text chunks, then classifies known generator names and IPTC DigitalSourceType values. The C2PA parser validates the expected JUMBF structure in JPEG APP11, PNG caBX, and WebP C2PA containers and decodes bounded claim fields. It does not verify the signature, asset hash, remote manifest, or trust chain.
The primary pixel test is RS steganalysis, including per-block RS estimates for a heatmap, accompanied by 2D FFT frequency spectrum analysis for radial decay and deconvolution grid peaks (with JPEG 8×8 harmonic separation), 8×8 block DCT Generalized Benford's Law testing, and residual noise homogeneity profiling. Pairs-of-values chi-square is used only as corroboration, while correlation and low-bit periodicity add context. These generic statistics can react to recompression, editing, ordinary steganography, or image content. They do not identify SynthID or any other named watermark.
Editing & tampering forensics is a separate question. Error Level Analysis (JPEG sources only) answers "was this photo locally edited or spliced", not "is this AI-generated" — a fully AI-generated image is one connected render with no seam to find, so this section is not part of the AI-provenance layers above and never affects the verdict or a "clean" result. It is shown as a map to read, deliberately without a score or an "anomaly detected" flag: recompression error is inherently content-dependent, so an uneven pattern is exactly what an untouched photo produces too.
What re-encoding does. A new JPEG, PNG, or WebP is created from decoded pixels and its container is scanned again before download. This is intended to remove header-resident EXIF, XMP, IPTC, and C2PA data. The optional perturbation changes some low bits experimentally; it does not come with a pixel-watermark removal guarantee.
Limitations. A clean verdict means the supported container scans completed and these statistical tests found no anomaly. It does not prove that a human made the image. When a layer cannot run — for example because of browser capabilities, size limits, malformed data, or a timeout — the verdict is explicitly inconclusive.
Related tools: the EXIF Inspector reads every metadata field in detail and removes them one block at a time — or writes your own, the LSB Steganography tool demonstrates the same kind of pixel-level hiding that watermarks use, and the Image Optimizer strips metadata as a side effect of compression.
Privacy: the image is processed in this tab and is not uploaded to this site or stored. A link is fetched by your own browser directly from the host you name, with no cookies and no referrer — the host sees your IP address. Only if that host refuses cross-origin reads and you then choose the server fetch does the link go to this site's server, which downloads the image, returns it unchanged and keeps neither the link nor the file; that step uses Cloudflare Turnstile, loaded only at that moment. With ?debug=1, sanitized lifecycle and parser diagnostics may appear in the browser console; file names, metadata values, image bytes, and pixel buffers are not logged.