Files
remove-ai-watermarks/data
Victor KuznetsovandClaude Fable 4.5 ab528ec0e8 Ship the measured Meta Content Seal cohort with auto routing and --vendor override
Full Meta Muse Image support in the invisible-removal path:

- QWEN_ZIMAGE_META_STRENGTH = 0.1: derived by the standard
  worst-boundary-plus-cross-source-spread method over five oracle-bracketed
  generations (data/contentseal/manifest.csv)
- Auto mode: vendor_for_strength routes a file whose only provenance is the
  standalone AI IPTC trainedAlgorithmicMedia tag onto the meta cohort; C2PA
  issuers win first, so Google/OpenAI/Microsoft routing is unchanged. Muse
  WebP outputs place the XMP in a tail chunk, so the scan uses the shared
  chunk-aware metadata.scan_head rather than a plain head read
- Explicit override: --vendor on invisible/all/batch and
  InvisibleOptions.vendor name the cohort on stripped files; naming a cohort
  asserts the watermark is present, so the no-signal gate treats it like
  --force at both the CLI and API seams
- sdxl-zimage has no measured Meta rung: an explicit meta vendor falls to
  the conservative unknown 0.25 rather than inventing one
- identify emits a Content Seal caveat pointing at the removal path
- The legacy visible 'Imagined with AI' mark stays unregistered: a dedicated
  sample hunt (newsroom mockups, community posts, press screenshots, dead
  imagine.meta.com, broken Wayback captures) found no pixel-verifiable
  capture, and the registry rule forbids encoding a corner without one.
  erase --region remains its removal path; outcome recorded in the landscape

Co-Authored-By: Claude Fable 4.5 <noreply@anthropic.com>
2026-08-26 22:59:23 -07:00
..
2026-08-15 12:25:35 -07:00

Repository data

Tracked data is organized by purpose:

data/
  fixtures/
    provenance/   Real format and provenance fixtures used by tests
                  (source records live in fixtures/README.md)
  calibration/
    <vendor>/     Minimal controlled inputs needed to rebuild detector assets
  synthid/
    originals/    Canonical provider-oracle fixtures, stored once
    manifest.csv  Provenance and verification record for each original
    full-pipeline-quality.csv
                  Reusable full-pipeline evaluation selection
  evaluations/
    fidelity/     Evaluation instructions and hand-verified ground truth
    video-synthid-oracle.csv
                  Reproducible full-clip Gemini SynthID verdicts

Storage rules

  1. Store each binary image once. Evaluation manifests and documentation point to its canonical location.
  2. Put executable test fixtures in fixtures/.
  3. Put only the minimal reproducible detector inputs in calibration/.
  4. Put externally verified SynthID originals in synthid/originals/ and keep both CSV files synchronized.
  5. Keep evaluation outputs outside the repository. Record reproducible commands, hashes, and oracle verdicts instead of committing another corpus copy. A small curated before-and-after example may live in docs/images/ when it is part of the public documentation.
  6. Keep third-party fixture license notices in licenses/, outside directories that tests enumerate as media inputs.
  7. Runtime detector assets belong in src/remove_ai_watermarks/assets/. Unregistered research candidates belong in scripts/assets/visible-mark-candidates/ so they are not shipped in the wheel.

The source distribution excludes data/; the wheel contains only package runtime assets.

Video SynthID oracle manifest

evaluations/video-synthid-oracle.csv is the only evidence that the shipped video removal profile works, so it is also the source of truth for three shipped defaults: tests/test_video_invisible.py asserts that noise_std, long_side, and fps together match a row this manifest records as certified. Changing one of those three without adding the row that certifies it fails the suite. vae is deliberately outside that check because neither tracked row records one; add it to the assertion in the same commit as the first row that does.

Column Meaning
date, source_url, source_sha256 Identify the carrier.
source_width, source_height, source_fps Carrier geometry. Without it the actual downscale factor of a row cannot be recovered later.
duration_seconds, source_verdict Clip length submitted and the verifier's reading of the untouched carrier.
vae, noise_std, long_side, fps, seed The full run configuration.
output_sha256 Identifies the exact submitted file.
output_verdict One of detected, not_detected, indeterminate, refused.
output_verdict_text The verifier's wording, verbatim.
output_detected_range Time range the verifier reported for the output.
track visual, audio, both, or empty. The verifier scores tracks separately and this path copies source audio unchanged.
session_id Groups rows submitted in one oracle session, so per-session drift stays visible.
stratum Content class of the carrier, for stratified certification.
psnr_db, temporal_residual_ratio Fidelity measurements. Neither is a watermark verdict.

Record indeterminate when the verifier answers with its unclear state rather than a negative: an unclear reading logged as not_detected is exactly the silent regression this manifest exists to prevent. Leave a field empty when it was not recorded, and never backfill it with a plausible value.

psnr_db is measured against the already-resized frame and before the encode, so it excludes the downscale, the decimation, and the codec. Rows stay comparable to each other only while that definition holds.

The two 2026-07-31 rows predate this schema; their empty fields were never recorded and are not recoverable from the row.