Files
remove-ai-watermarks/data
Victor Kuznetsov 95f467b4ad Register the Doubao video mark with a corpus-calibrated single-floor policy
detect_doubao_frame reuses the image engine's synthetic doubao alpha as its
video template, so the glyph cannot drift between registries. The policy is
seedance-style single-floor, calibrated by sequential decode over 39
TC260-confirmed Doubao corpus videos and 25 negatives: a 12-frame stable run
at 0.35 accepts 33/39 positives and 0/25 negatives (0.30 already accepted a
negative), and through the shipped arbiter identify_video selects 32/39 with
no false selection. Also documents the measured impossibility of a bare-pill
removal arm with the current detector (68 OCR-confirmed pills max 0.317 vs
clean negatives max 0.353 -- no separating threshold exists).
2026-08-28 19:44:25 -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)
    visible/      Synthetic per-mark example gallery (one committed example per
                  registered visible mark; see fixtures/visible/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. Both historical rows mark vae as unrecorded: the repository must not infer a model identity from the current default. Add it to the assertion in the same commit as the first oracle row that records and verifies one.

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 run configuration. unrecorded means the historical run did not preserve the VAE identity.
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.