CLEARTAGS LAB / CAPABILITY LEDGERLAB-2026-08-12.2

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.

Source-linked

The implementation path exists and is named in the public ledger.

Unit-covered

An automated test checks the named logic. Synthetic inputs are disclosed.

Fixture pending

No real exporter compatibility result is claimed yet.

Synthetic fixture confirmed

Actual cleanup passed against an in-repository container with published before, after and media-payload hashes.

External fixture confirmed

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.

ContainerCurrent cleanup pathSelectable sectionsEvidence state
JPEG / JPGimageLossless container editSelective cleanup availableRequires a structurally valid supported container.
Source-linkedSynthetic fixture confirmedExternal fixture confirmed
app/lib/metadata-cleaner.ts#cleanJpeg
PNGimageLossless container editSelective cleanup availableRequires a structurally valid supported container.
Source-linkedSynthetic fixture confirmedExternal fixture confirmed
app/lib/metadata-cleaner.ts#cleanPng
WebPimageLossless container editSelective cleanup availableRequires a structurally valid supported container.
Source-linkedFixture pending
app/lib/metadata-cleaner.ts#cleanRiff:webp
GIFimageLossless container editSelective cleanup availableRequires a structurally valid supported container.
Source-linkedFixture pending
app/lib/metadata-cleaner.ts#cleanGif
WAV / WAVEaudioLossless container editSelective cleanup availableRequires a structurally valid supported container.
Source-linkedSynthetic fixture confirmedFixture pending
app/lib/metadata-cleaner.ts#cleanRiff:wav
MP3audioLossless 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 imageimagePixel 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-videoStream-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.

image-c2pa
Source-linkedExternal fixture confirmed

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.

media-c2pa-marker
Source-linkedFixture pending

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-profile
Source-linkedUnit-coveredSynthetic fixture confirmedFixture pending

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
Source-linkedUnit-coveredSynthetic fixture confirmedExternal fixture confirmed

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.

priority-audit
Source-linkedUnit-coveredFixture pending

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.

Internal synthetic fixtureSynthetic fixture confirmed

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
423205
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.

Internal synthetic fixtureSynthetic fixture confirmed

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
27973
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.

Internal synthetic fixtureSynthetic fixture confirmed

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
23652
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.

Internal synthetic fixtureSynthetic fixture confirmed

MP3 ID3/C2PA frame cleanup

Four valid MPEG audio frames are the preserved media payload.

Injected sections removed
C2PA · ID3
Container bytes
12581152
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.
PNG / Licensed external fixtureExternal fixture confirmed

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
21304412062529
Before SHA-256
7cd57b4a33f05e4ce7f63de18751f59f4b3ea8c55c281204e0cd6d1f621e466f
After SHA-256
64f6eeb885bbef3ef3cea25708c9277ef5943d57bace687d0bc5fc0ca0691e5c
Preserved media SHA-256
e745f1a893619fb44aa7902da5df878a37530ba1aa4d8992bf56dba33b584cc4
Upstream evidence
License
MIT
JPEG / Licensed external fixtureExternal fixture confirmed

Adobe Firefly

Exporter
Adobe Firefly
Version
4.0.0-release-firefly_v4-main_78135.80468
Recorded operation / settings
text_to_image
Container bytes
1047024920401
Before SHA-256
bdc5c19d4211d9c9f9f8dce5bf4e4dec29e9b32e308ff12a60979481e928154f
After SHA-256
cfe43fc46fe546d560b8b5c8982d1dc02a7ad38b5656a504ca4f738aac777169
Preserved media SHA-256
cdb85262bc6d355ce4f1b4911869d106dd29d8872bf188237a25fd7125da60b2
Upstream evidence
License
MIT
JPEG / Licensed external fixtureExternal fixture confirmed

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
580124206038
Before SHA-256
17c9e5b9f40ef79bb8e8af4adf36fe2be54d9c4a7f96f29813e6c3850ab8caa8
After SHA-256
c8245985e01179f9583cc7cd859a9eb6a8f4ddce111e54b58db7dd38beef0f2f
Preserved media SHA-256
d7362926518ff3f91f286baa321bd8d9a4543bedaf1594470f44f043e88a4cb1
Upstream evidence
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.

  1. 01

    Name the exact source

    Record the application, version, export settings, format and whether the sample can be redistributed.

  2. 02

    Preserve the pair

    Keep the original and cleaned derivative separate and publish their SHA-256 hashes.

  3. 03

    Inspect before and after

    Record parser output, C2PA validation output where supported, file size and whether media streams changed.

  4. 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