The implementation path exists and is named in the public ledger.
What ClearTags can verify today
A versioned record of implemented readers and cleaners, their evidence level, and their limits. Four synthetic format fixtures and three licensed real-application exports now pass repeatable cleanup checks with published hashes.
- Release
- LAB-2026-08-12.2
- Evidence: source paths + tests + fixture hashes
- Ledger reviewed on 12 August 2026
EVIDENCE / BOUNDARY
Five labels, not one compatibility claim
A code path, a unit test, a synthetic container and a real application export answer different questions. ClearTags Lab never upgrades one kind of evidence into another.
An automated test checks the named logic. Synthetic inputs are disclosed.
No real exporter compatibility result is claimed yet.
Actual cleanup passed against an in-repository container with published before, after and media-payload hashes.
A redistributable real-application export passed the production cleaner with source, license, settings and published hashes.
IMPLEMENTATION / CONTAINERS
Current cleanup paths
These rows describe the current implementation. They do not claim that every file produced by every exporter has passed a fixture test.
| Container | Current cleanup path | Selectable sections | Evidence state |
|---|---|---|---|
JPEG / JPGimage | Lossless container editSelective cleanup availableRequires a structurally valid supported container. |
| Source-linkedSynthetic fixture confirmedExternal fixture confirmed app/lib/metadata-cleaner.ts#cleanJpeg |
PNGimage | Lossless container editSelective cleanup availableRequires a structurally valid supported container. |
| Source-linkedSynthetic fixture confirmedExternal fixture confirmed app/lib/metadata-cleaner.ts#cleanPng |
WebPimage | Lossless container editSelective cleanup availableRequires a structurally valid supported container. |
| Source-linkedFixture pending app/lib/metadata-cleaner.ts#cleanRiff:webp |
GIFimage | Lossless container editSelective cleanup availableRequires a structurally valid supported container. |
| Source-linkedFixture pending app/lib/metadata-cleaner.ts#cleanGif |
WAV / WAVEaudio | Lossless container editSelective cleanup availableRequires a structurally valid supported container. |
| Source-linkedSynthetic fixture confirmedFixture pending app/lib/metadata-cleaner.ts#cleanRiff:wav |
MP3audio | Lossless container editSelective cleanup availableRequires a structurally valid supported container. |
| Source-linkedSynthetic fixture confirmedFixture pending app/lib/metadata-cleaner.ts#cleanMp3 |
AVIF / HEIC / HEIF / TIFF / other readable imageimage | Pixel re-encodeFull cleanup onlyOnly when the browser can decode and encode the image; the pixel stream is recreated. | No per-section selection | Source-linkedFixture pending app/lib/metadata-cleaner.ts#reencodeImage |
MP4 / MOV / M4A / AAC / FLAC / OGG / Opus / WebM / MKV / AVI / M4Vaudio-video | Stream-copy remuxFull cleanup onlyDepends on the codecs and containers supported by the bundled FFmpeg build; streams are copied when compatible. | No per-section selection | Source-linkedFixture pending app/lib/metadata-cleaner.ts#cleanMetadata · app/lib/ffmpeg-cleaner.ts#remuxWithoutMetadata |
INSPECTION / READ PATHS
What the inspector actually observes
The UI reports readable evidence and keeps technical findings separate from interpretation.
C2PA manifest reader
Reads the active manifest and SDK validation state for supported images, audio and video.
- Readable fields
- Active manifest, claim generator, actions, ingredients and validation messages.
- Source path
app/lib/c2pa.ts#inspectC2paForFile · app/lib/c2pa.ts#inspectC2pa
Trust evaluation is disabled. A validated claim is not proof that the depicted event is true.
Fallback C2PA marker scan
Looks for a C2PA ASCII marker only when the SDK cannot read the container.
- Readable fields
- Marker present or not found; classification remains unknown.
- Source path
app/lib/c2pa.ts#inspectMediaC2pa
This is not manifest parsing or signature validation and can miss or over-report markers.
Editable ordinary metadata profile
JPEG/PNG XMP, WAV RIFF INFO and MP3 ID3v2.3.
- Readable fields
- Title, creator, description, rights, keywords, software and date where supported.
- Source path
app/lib/metadata-editor-capability.ts · app/lib/metadata-editor.ts · tests/metadata-editor.test.mjs
The named namespace is replaced. Signed C2PA provenance is never rewritten or invented.
Clean-copy verification
Post-clean inspection and hashes.
- Readable fields
- Readable fields, C2PA status, file SHA-256 and comparable media-payload SHA-256.
- Source path
app/lib/metadata-verifier.ts · tests/metadata-editor.test.mjs
Byte identity is asserted only for supported lossless payload paths, never for remux or re-encode.
Prompt and privacy-field audit
Prioritizes readable prompt, workflow, location, identity and software fields.
- Readable fields
- Field name, parsed value, parser source and supported cleanup section.
- Source path
app/lib/metadata-audit.ts · tests/metadata-audit.test.mjs
Classification is heuristic. The current unit test uses a synthetic parsed report, not an exporter fixture.
FIXTURES / BYTE-LEVEL CHECKS
Four cleanup paths now have reproducible evidence
Each sample is constructed deterministically inside the repository, cleaned by the production function, and compared byte-for-byte. These checks validate container paths only; they are not Photoshop, ComfyUI or other exporter tests.
JPEG segment cleanup
The encoded JPEG scan from SOS through EOI is the preserved media payload.
- Injected sections removed
- C2PA · EXIF · XMP · IPTC · comments/text
- Container bytes
423 → 205- Before SHA-256
da1bd24660cee3426247dc7f59c0f5195ae0fe10a32afb588d4430bd86deaf3f- After SHA-256
c383c91fe361ec179e2bb1579fe711017eb470c33bb4bd2e1b65a07329ad67fe- Preserved media SHA-256
f49a148aa9e5ed70c037c73e7876b6467a1a25664cd5612a762e5fe8729078a5
Selective cleanup removes the injected APP1 EXIF/XMP, APP13 IPTC, APP11 C2PA-labelled and COM segments; encoded scan bytes remain identical.
PNG chunk cleanup
The inflated 1 × 1 RGBA scanline is the preserved media payload.
- Injected sections removed
- C2PA · EXIF · XMP · comments/text · timestamps
- Container bytes
279 → 73- Before SHA-256
a48c16da20667313c311807b74421b2d0306f941f5ae1c19d1d50b77a3591bf2- After SHA-256
7bf0ec5dcd3059ca8b0e7ec60f4a5a782bec4095720d5d83bac4ac4fae66557d- Preserved media SHA-256
33c928fc4b5687cd3393e6e8b29256f53e29eca06165a420396e5602de484e2c
Selective cleanup removes injected eXIf, iTXt XMP, tEXt, tIME and caBX chunks; the decoded scanline remains identical.
WAV RIFF chunk cleanup
Eight unsigned 8-bit PCM samples are the preserved media payload.
- Injected sections removed
- C2PA · ID3 · XMP · comments/text · broadcast chunks
- Container bytes
236 → 52- Before SHA-256
dc614b88e2b9fcb897bd090922a41d9a80b28083420ed71b22e5aa73e6478c08- After SHA-256
bcd4e061b88824d5bc4e09b00d71b36fa1838dfb6435aa05c603b4d9cb8ee01d- Preserved media SHA-256
e043facf2310145ec8f41eb8c09b90a3ded13bcc4bde860c3988c96f39818a6b
Selective cleanup removes injected C2PA, ID3, XMP, LIST/INFO and bext chunks; every PCM sample remains identical.
MP3 ID3/C2PA frame cleanup
Four valid MPEG audio frames are the preserved media payload.
- Injected sections removed
- C2PA · ID3
- Container bytes
1258 → 1152- Before SHA-256
4d007ff2a70d7f0ea755a51582d7947bbc5c96553f0751d216150819dc1034e8- After SHA-256
f54ee9495e2a2411c7261ac9ae7e5bfba57599a8298c52c93b3407c67b70b74d- Preserved media SHA-256
f54ee9495e2a2411c7261ac9ae7e5bfba57599a8298c52c93b3407c67b70b74d
ID3v2 text and C2PA GEOB frames are removed; MPEG audio frames remain byte-identical.
Licensed external fixture
Real application exports
These upstream MIT-licensed files exercise the production cleaner. Each claim is limited to the named file, application version and documented settings; it is not a blanket promise for every export.ChatGPT / GPT-4o
- Exporter
- ChatGPT / GPT-4o
- Version
Not provided by upstream- Recorded operation / settings
- Generated by ChatGPT; detailed settings not provided by upstream
- Container bytes
2130441 → 2062529- Before SHA-256
7cd57b4a33f05e4ce7f63de18751f59f4b3ea8c55c281204e0cd6d1f621e466f- After SHA-256
64f6eeb885bbef3ef3cea25708c9277ef5943d57bace687d0bc5fc0ca0691e5c- Preserved media SHA-256
e745f1a893619fb44aa7902da5df878a37530ba1aa4d8992bf56dba33b584cc4- Upstream evidence
- asset ↗manifest ↗
- License
- MIT ↗
Adobe Firefly
- Exporter
- Adobe Firefly
- Version
4.0.0-release-firefly_v4-main_78135.80468- Recorded operation / settings
- text_to_image
- Container bytes
1047024 → 920401- Before SHA-256
bdc5c19d4211d9c9f9f8dce5bf4e4dec29e9b32e308ff12a60979481e928154f- After SHA-256
cfe43fc46fe546d560b8b5c8982d1dc02a7ad38b5656a504ca4f738aac777169- Preserved media SHA-256
cdb85262bc6d355ce4f1b4911869d106dd29d8872bf188237a25fd7125da60b2- Upstream evidence
- asset ↗manifest ↗
- License
- MIT ↗
Adobe Photoshop
- Exporter
- Adobe Photoshop
- Version
26.11.0- Recorded operation / settings
- Opened, cropped and resized; other export settings not provided by upstream
- Container bytes
580124 → 206038- Before SHA-256
17c9e5b9f40ef79bb8e8af4adf36fe2be54d9c4a7f96f29813e6c3850ab8caa8- After SHA-256
c8245985e01179f9583cc7cd859a9eb6a8f4ddce111e54b58db7dd38beef0f2f- Preserved media SHA-256
d7362926518ff3f91f286baa321bd8d9a4543bedaf1594470f44f043e88a4cb1- Upstream evidence
- asset ↗manifest ↗
- License
- MIT ↗
METHOD / REPRODUCIBILITY
How a result earns a stronger evidence label
The lab starts conservatively. Compatibility claims will be added one sample at a time, with enough detail for another person to repeat the check.
- 01
Name the exact source
Record the application, version, export settings, format and whether the sample can be redistributed.
- 02
Preserve the pair
Keep the original and cleaned derivative separate and publish their SHA-256 hashes.
- 03
Inspect before and after
Record parser output, C2PA validation output where supported, file size and whether media streams changed.
- 04
Repeat across browsers
Run the same fixture in supported browser engines and document failures instead of hiding them.
NEXT / FIXTURE QUEUE
The next reproducible experiments
The next lab release should grow from small format-path checks toward signed manifests, more containers and attributable exporter samples.- WebP RIFF fixtures with EXIF, XMP and C2PA chunks
- MP4 and MOV before/after stream and metadata checks
- Redistributable ComfyUI and Automatic1111 samples with version, workflow settings and hashes
- Redistributable CapCut and Premiere samples with version, export settings and hashes