{{ 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 still never passes through this server — but that site does see your IP address. Hosts that refuse cross-origin reads (Pinterest, most Cloudflare-protected pages) will fail; save the image and drop it in instead. Paste the address of the image itself, not of the page showing it.
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.
{{ 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.Experimental pixel perturbation applied.
For batch processing, resizing, or format conversion with more control, use the Image Optimizer.
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. That holds for a link too: the fetch is made by your own browser directly to the host you name, with no cookies and no referrer, and the bytes go straight from that host into this tab — but the host does see your IP address, and only hosts that allow cross-origin reads can be fetched at all. 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.