In these three fixtures, reinspection found zero supported removable fields after cleaning, and all three files decoded to identical pixels. JPEG, PNG, and WebP are cleaned at the container level without re-encoding. Dimensions stayed the same in all three files.

Inspect a fixture or your own image

Measured results

JPEG

Fields removed
1
Removable fields left
0
Decoded pixels
Identical in this test
File size
989924 B
Download synthetic JPEG

PNG

Fields removed
3
Removable fields left
0
Decoded pixels
Identical in this test
File size
28272 B
Download synthetic PNG

WebP

Fields removed
2
Removable fields left
0
Decoded pixels
Identical in this test
File size
888650 B
Download synthetic WebP

Download the measured results (JSON)

Small test. Explicit limits.

This is one synthetic still image per format, not a benchmark of every image or generator. The PNG contains a constructed C2PA-like container for detection testing, not a signed credential or a real provider export. We do not validate C2PA signatures, prove authorship, test invisible watermarks, or certify that every hidden field is gone. Animation, color profiles, other browsers and real-world files need separate tests.

How we tested

  1. Created synthetic JPEG author metadata, PNG prompt text and a structural provenance container, and WebP XMP metadata.
  2. Selected each fixture in the English AI-metadata tool, cleaned it, and read the actual post-clean report.
  3. Decoded both files in the same browser. Compared dimensions and a SHA-256 hash of the RGBA pixels; PNG/WebP had to match.
  4. Recorded input/output file hashes, byte counts, removed-field counts, remaining supported fields and browser version.

Repeat it yourself

Download an original fixture above, select it in the tool, then clean it and save the cleanup report. The report identifies your output with SHA-256. Because cleaning copies image data without re-encoding, the same input file produces the same output hash in any supported browser.

Inspect a fixture or your own image
Technical record and reproduction

Run from the app repository after installing its dependencies. The test uses the published fixtures and asserts real cleanup and pixel behavior. It does not replace the full regression suite.

npm run build
npx playwright test tests/e2e/cleanup-study.spec.mjs
Read the executable test
{
  "engineSourceSha256": "2e9f055b063098626a11b19e64e6c6bd3525038f61494707e6bbd7f778a35d30",
  "testedAt": "2026-09-07T10:25:13.661Z",
  "browser": "chromium 145.0.7632.6",
  "scope": "Three synthetic still images. Not provider exports, signed C2PA validation, animation or universal format coverage.",
  "rows": [
    {
      "format": "JPEG",
      "fixture": "synthetic.jpg",
      "inputSha256": "eb47ea573dbeca14e8d5c9ea4bfafd2a63afd269ca8b02a0d80d885b7aea401c",
      "outputSha256": "dfe906d75ecc0bee3721d04c082968241fba7607518ac36899e2c396a45f6b3f",
      "inputBytes": 989,
      "outputBytes": 924,
      "removedCount": 1,
      "residualCount": 0,
      "width": 32,
      "height": 24,
      "pixelsEqual": true
    },
    {
      "format": "PNG",
      "fixture": "synthetic.png",
      "inputSha256": "ed60f185c99d42c460296fcf4bf41efe89abf349db315a42f1f0c36f30e4348b",
      "outputSha256": "5f8564422b1aa2e65999237b5fe9eca4ed4296f22eb28c05246bc21a4a598e13",
      "inputBytes": 282,
      "outputBytes": 72,
      "removedCount": 3,
      "residualCount": 0,
      "width": 8,
      "height": 8,
      "pixelsEqual": true
    },
    {
      "format": "WebP",
      "fixture": "synthetic.webp",
      "inputSha256": "a64ffe91bdcb17056442681f77c48b2f53bb831abc1202bd47bc44cf9665287c",
      "outputSha256": "1138f8186cfe30696561aae8bf415b3d115dc7f2340ac0713fe3050530d19fa4",
      "inputBytes": 888,
      "outputBytes": 650,
      "removedCount": 2,
      "residualCount": 0,
      "width": 32,
      "height": 24,
      "pixelsEqual": true
    }
  ]
}

Format references