Empirical research & benchmark
Metadata Removal Product & Engine Benchmark (2026-09)
A dual evaluation of client-side metadata sanitization: live browser product E2E for interactive JPEG and PDF export paths, plus deterministic engine regression fixtures for images, documents, and video container atoms. All operations execute locally on-device without cloud uploads.
Metadata Removal Product & Engine Benchmark (2026-09)?
A dual evaluation of client-side metadata sanitization: live browser product E2E for interactive JPEG and PDF export paths, plus deterministic engine regression fixtures for images, documents, and video container atoms. All operations execute locally on-device without cloud uploads. Canvas raster re-encode to clean JPEG via Metadata Cleaner UI
C2PA: Coalition for Content Provenance and Authenticity; C2PA specification 2.4
Last updated
Benchmark Results Matrix
| Fixture | Execution & Verification | Sanitization Pipeline | Target Metadata Injected | Surviving Fields After Export | Verdict |
|---|---|---|---|---|---|
| MR-JPG-001 JPEG (1.3 KB) |
Engine + Browser E2E | Canvas raster re-encode to clean JPEG via Metadata Cleaner UI |
Make, Model, Software, Artist, Copyright, ImageDescription, GPS | None (All target metadata removed) | PASS |
| MR-PNG-002 PNG (1.1 KB) |
Engine Regression | Canvas raster re-encode to clean PNG via Metadata Cleaner UI |
ImageDescription, Artist, Software | None (All target metadata removed) | PASS |
| MR-WEBP-003 WEBP (1.0 KB) |
Engine Regression | Canvas raster re-encode to clean WebP via Metadata Cleaner UI |
Make, Model, Software, GPS | None (All target metadata removed) | PASS |
| MR-PDF-004 PDF (1.1 KB) |
Engine + Browser E2E | PDF Toolkit clearSupportedMetadata Info dictionary strip |
Title, Author, Subject, Keywords, Creator, Producer | None (All target metadata removed) | PASS |
| MR-MP4-005 MP4 (2.0 KB) |
Engine Regression | ISO-BMFF processIsoLevel box filtering (Engine regression only) |
udta | None (All target metadata removed) | PASS |
| MR-MOV-006 MOV (2.0 KB) |
Engine Regression | ISO-BMFF processIsoLevel box filtering (Engine regression only) |
udta | None (All target metadata removed) | PASS |
| MR-PDF-007 PDF (1.1 KB) |
Engine Regression | PDF Toolkit clearSupportedMetadata Info dictionary strip |
Title, Author, VisibleText | Visible body text on page 1 | PARTIAL |
| MR-JPG-008 JPEG (2.9 KB) |
Engine Regression | Canvas raster re-encode to clean JPEG via Metadata Cleaner UI |
DateTimeOriginal, Software, BurnedInPixelStamp | Burned-in visual timestamp in pixel raster | PARTIAL |
Methodology & Architecture Findings
1. Image Sanitization (Canvas Pixel Re-encoding)
For JPEG, PNG, and WebP images, CreatorPrivacyKit decodes the compressed bitstream into raw RGBA pixel data on an off-screen HTML5 Canvas, then re-encodes a fresh container via the homepage Metadata Cleaner UI. Live browser product E2E on Chromium verifies the real interactive upload, cleaning, and download export path for JPEG (/), while PNG and WebP are verified in deterministic engine regression.
Result: PASS (6 of 6 declared full-pass fixtures passed within tested supported scope). Because the container is freshly minted from pure pixel data, all non-image chunks—including EXIF, GPS latitude/longitude, camera model, software name, IPTC editorial records, XMP packets, and C2PA JUMBF provenance manifests—are completely omitted.
2. PDF Document Sanitization (Dictionary Clearing)
PDFs cannot simply be rasterized without destroying vector crispness, text searchability, and increasing file size by orders of magnitude. The Local PDF Toolkit parses the low-level PDF catalog and clears the Document Information Dictionary (/Info) on the /tools/pdf/?mode=metadata product route, verified via live Chromium browser E2E.
Result: PASS (All standard Info dictionary fields cleared on MR-PDF-004). Title, Author, Subject, Keywords, Creator, and Producer are cleared to blank values. Re-inspecting the exported PDF confirms complete removal of standard metadata without disturbing document typography or page layout.
3. Video Containers (Engine-Only Regression — ISO-BMFF Filtering)
MP4 and QuickTime MOV containers store both presentation metadata (duration, resolution, sample tables) and user metadata (GPS coordinates, creation software, track names).
Result: PASS on Engine Regression (MR-MP4-005, MR-MOV-006). The engine-level box filter strips udta (user data), meta, and free boxes and adjusts chunk offsets, removing user-identifying tags while preserving media playback tracks (moov, mdat). Cleaned outputs are verified decodable and playable via ffprobe. Note: This container filter is maintained as an engine-level regression fixture and is not marketed as a dedicated video metadata cleaning UI on money pages.
4. Documented Limitation Cases (PARTIAL Verdicts)
Transparent reporting requires verifying scenarios where metadata removal cannot and should not replace content modification:
- MR-PDF-007 (PARTIAL): Standard Document Information dictionary fields were completely cleared, but visible body text on page 1 remains unredacted. Metadata removal is NOT visual redaction.
- MR-JPG-008 (PARTIAL): EXIF tags were stripped, but a burned-in visual date stamp rendered directly into the pixel raster remains visible. Metadata stripping does NOT modify pixel raster content.
Reproduce this benchmark locally
Every number published on this page can be re-executed directly from the source repository. No private keys or cloud accounts are required.
- Clone the repository:
git clone https://github.com/ggggghhhhyyyy/creator-privacy-kit - Install dependencies:
npm install - Run the official engine benchmark:
node scripts/benchmark-metadata-removal.mjs - Run the browser E2E verification test:
npm run benchmark:ocr -- --e2e
Runtime environment: Node.js v20+ with native ES modules. Fixtures and test suite live under tests/fixtures/metadata-removal/ and tests/metadata-removal-benchmark.test.mjs. Ground truth strings and fixture hashes are defined in tests/fixtures/ocr-multilingual/manifest.json.
Public synthetic fixtures
These files were generated for CreatorPrivacyKit. They contain no real-world personal data. Expected values are the fields the current viewers returned from the bytes in this directory. A remover cell says Not tested when that cleaner was not run. A clear result from a re-encode or engine check is not a product verdict.
| Fixture | Format | Purpose | SHA-256 | Expected fields | Viewer | Remover | Known limitation |
|---|---|---|---|---|---|---|---|
| image-exif-basic.jpg | image | JPEG EXIF camera, date, software, and serial parsing | aeefe834404a1162711271a288e77bd88f2f902d93fa9159ee37527f084f7f65 |
make=CPK Camera; model=Synthetic Body; software=CreatorPrivacyKit Fixture; dateTime=2026:01:15 12:00:00; lensModel=Synthetic 35mm; dateTimeOriginal=2026:01:15 12:00:00; bodySerial=SN-FIXTURE-001 | Yes | Cleared in this check. Not a product result. | pixel re-encode check (sharp). This is the same idea as the browser canvas cleaner, not a browser product E2E run. |
| image-gps.jpg | image | JPEG GPS latitude and longitude parsing | b4d4098b7162babaad038fc4f13ca0e3aa7f1fcc345e52236f02f6ac5bfbd8a1 |
make=CPK Camera; gpsLatitude=37.774900; gpsLongitude=-122.419400 | Yes | Cleared in this check. Not a product result. | pixel re-encode check (sharp). This is the same idea as the browser canvas cleaner, not a browser product E2E run. |
| image-camera.jpg | image | JPEG camera maker, model, and lens parsing | aeefe834404a1162711271a288e77bd88f2f902d93fa9159ee37527f084f7f65 |
make=CPK Camera; model=Synthetic Body; software=CreatorPrivacyKit Fixture; dateTime=2026:01:15 12:00:00; lensModel=Synthetic 35mm; dateTimeOriginal=2026:01:15 12:00:00; bodySerial=SN-FIXTURE-001 | Yes | Cleared in this check. Not a product result. | pixel re-encode check (sharp). This is the same idea as the browser canvas cleaner, not a browser product E2E run. |
| image-xmp.jpg | image | JPEG XMP creator and tool parsing | aeec7fdf1e77f9cfea29f542e5a9654c5dc1ba49bf027e464bd3dfc05a772f5a |
author=CPK XMP Author; creatorTool=CreatorPrivacyKit XMP Fixture; xmpModel=XMP Synthetic | Yes | Cleared in this check. Not a product result. | pixel re-encode check (sharp). This is the same idea as the browser canvas cleaner, not a browser product E2E run. |
| image-iptc.jpg | image | JPEG IPTC byline, city, and copyright parsing | 18b3d8ddb05a06c07c0edbfffce7fb898b76da84feb1e297c878fc1584919ca7 |
iptcByline=CPK IPTC Author; iptcCity=Fixture City; iptcCopyright=CPK Fixture | Yes | Cleared in this check. Not a product result. | pixel re-encode check (sharp). This is the same idea as the browser canvas cleaner, not a browser product E2E run. |
| image-no-metadata.jpg | image | JPEG with no EXIF, XMP, or IPTC | 57b06e278719cde09d761d63f62c6d5f5b005db34347661b3750d90046c2841b |
(none) | no_metadata | Cleared in this check. Not a product result. | pixel re-encode check (sharp). This is the same idea as the browser canvas cleaner, not a browser product E2E run. |
| image-png-exif.png | image | PNG eXIf chunk parsing | 2dc3bca1d53f94edb588c756bd097fd74d4b9afdd500d4ef79838231026da8b9 |
make=CPK Camera; model=Synthetic Body; software=CreatorPrivacyKit Fixture; dateTime=2026:01:15 12:00:00; lensModel=Synthetic 35mm; dateTimeOriginal=2026:01:15 12:00:00; bodySerial=SN-FIXTURE-001 | Yes | Cleared in this check. Not a product result. | pixel re-encode check (sharp). This is the same idea as the browser canvas cleaner, not a browser product E2E run. |
| image-gps.webp | image | WebP EXIF GPS chunk parsing | 6231b887bbafe0aba2facfc14fce0d140e5608b858d29a50f80a8e56cf3139bb |
make=CPK Camera; gpsLatitude=37.774900; gpsLongitude=-122.419400 | Yes | Cleared in this check. Not a product result. | pixel re-encode check (sharp). This is the same idea as the browser canvas cleaner, not a browser product E2E run. |
| video-basic.mp4 | video | MP4 container, track size, and codec parsing | 588553126cfb8121e831d681f33622fa1086d722b19282f8a83d4a4b1cdb9fd0 |
majorBrand=isom; compatibleBrands=isom, iso2, avc1, mp41; duration=0.400 s; resolution=64×48; codec:avc1=avc1; codec:mp4a=mp4a; encoder=Lavf61.1.100; containerName=MP4; mediaDuration=0.400 s; displaySize=64×48; videoCodecName=avc; frameRate=10.000 fps; audioCodecName=aac | Yes | Cleared in this check. Not a product result. | Engine ISO box filter (udta/meta). Not the video compressor UI, and not claimed as a full metadata wipe. |
| video-creation-time.mp4 | video | MP4 creation time parsing | 983197851bb65ed3cfd31dea1f6d2713f4e07fd7fdb47fa399df9e696b09f86d |
majorBrand=isom; compatibleBrands=isom, iso2, avc1, mp41; creationTime=2026-01-15T12:00:00Z; modificationTime=2026-01-15T12:00:00Z; duration=0.400 s; resolution=64×48; codec:avc1=avc1; encoder=Lavf61.1.100; containerName=MP4; mediaDuration=0.400 s; displaySize=64×48; videoCodecName=avc; frameRate=10.000 fps | Yes | Cleared in this check. Not a product result. | Engine ISO box filter (udta/meta). Not the video compressor UI, and not claimed as a full metadata wipe. |
| video-encoder-tags.mp4 | video | MP4 encoder, title, and location tag parsing | c4b68fbc4fb0b1625115afe1a7fea1b61c04fbe88598d696226da845da670a57 |
majorBrand=isom; compatibleBrands=isom, iso2, avc1, mp41; duration=0.300 s; resolution=80×48; codec:avc1=avc1; title=CPK Fixture Clip; encoder=Lavf61.1.100; gpsLatitude=37.774887; gpsLongitude=-122.419388; containerName=MP4; mediaDuration=0.300 s; displaySize=80×48; videoCodecName=avc; frameRate=10.000 fps | Yes | Cleared in this check. Not a product result. | Engine ISO box filter (udta/meta). Not the video compressor UI, and not claimed as a full metadata wipe. |
| video-basic.mov | video | MOV container parsing | e15f4d012f940498e3ad9f08d02d8d5ae24a1aced5a42ae87d00a37d3baa56e0 |
majorBrand=qt; compatibleBrands=qt; duration=0.300 s; resolution=64×48; codec:avc1=avc1; software=Lavf61.1.100; containerName=QuickTime File Format; mediaDuration=0.300 s; displaySize=64×48; videoCodecName=avc; frameRate=10.000 fps | Yes | Cleared in this check. Not a product result. | Engine ISO box filter (udta/meta). Not the video compressor UI, and not claimed as a full metadata wipe. |
| pdf-basic.pdf | PDF Info dictionary title, author, and creator | acde8a206066bef09a1bfbd4809987bf14485a66686a3a1ba921c4024999af91 |
pdfVersion=1.7; pageCount=1; title=CPK Basic Fixture; author=CPK Basic Author; creator=CreatorPrivacyKit Fixture; producer=pdf-lib; creationDate=2026-01-15T12:00:00Z; modificationDate=2026-09-24T07:18:26Z; encrypted=no | Yes | Cleared in this check. Not a product result. | PDF Toolkit clearSupportedMetadata Info dictionary. XMP packets are not part of this cleaner. | |
| pdf-author.pdf | PDF author, subject, keywords, and dates | 4e82022f8e18a0157e30c5e650350d1a51a9fe182c3ffa22f221419b30443eba |
pdfVersion=1.7; pageCount=1; title=Author Fixture; author=Ada Fixture; subject=Synthetic subject; keywords=synthetic metadata; creator=CreatorPrivacyKit Fixture; producer=pdf-lib; creationDate=2026-02-02T08:30:00Z; modificationDate=2026-02-03T09:45:00Z; encrypted=no | Yes | Cleared in this check. Not a product result. | PDF Toolkit clearSupportedMetadata Info dictionary. XMP packets are not part of this cleaner. | |
| pdf-xmp.pdf | PDF XMP packet presence and dc:creator | daee642ba00aea3a1a7d9446d1c5ba0841f55bbcfdbdaec46f108d4a1f38b2f1 |
pdfVersion=1.7; pageCount=1; title=XMP Fixture; author=Info Author; creator=pdf-lib (https://github.com/Hopding/pdf-lib); producer=pdf-lib (https://github.com/Hopding/pdf-lib); creationDate=2026-09-24T07:18:26Z; modificationDate=2026-09-24T07:18:26Z; xmpAuthor=CPK XMP Author; xmpPresent=present; encrypted=no | Yes | Cleared in this check. Not a product result. | PDF Toolkit clearSupportedMetadata Info dictionary. XMP packets are not part of this cleaner. | |
| pdf-clean.pdf | PDF with no Info metadata | 8027561d8991ccb107dc71266856f9d42d5bfcbfc57f7bebcfca9c30f6b1d3e2 |
pdfVersion=1.7; pageCount=1; encrypted=no | no_metadata | Cleared in this check. Not a product result. | PDF Toolkit clearSupportedMetadata Info dictionary. XMP packets are not part of this cleaner. | |
| pdf-encrypted.pdf | Encrypted PDF is reported as encrypted, not as empty metadata | 132f8bd12ec04b65979aaaefc0dbb062cb4e02c6535469f3a6415baf65145715 |
pdfVersion=1.4 | encrypted | Not tested | Encrypted PDFs are rejected by the local PDF editor. |
Cite this benchmark
Empirical research published by CreatorPrivacyKit Labs is freely citeable with attribution under CC BY 4.0.
CreatorPrivacyKit Labs. (2026). Metadata Removal Product & Engine Benchmark (Version 1.0) [Data set]. CreatorPrivacyKit. https://creatorprivacykit.com/labs/metadata-removal-benchmark/
View BibTeX entry
@misc{creatorprivacykit_2026_ocr_benchmark,
title = {Metadata Removal Product & Engine Benchmark},
author = {{CreatorPrivacyKit Labs}},
year = {2026},
version = {1.0},
howpublished = {\url{https://creatorprivacykit.com/labs/metadata-removal-benchmark/}},
note = {Tested 2026-09-23. In-browser Tesseract.js 5.1.1 multilingual evaluation}
}