Everything here is evidence and state, not behavior: the shipped operating point is untouched at 512 px / 12 fps / noise_std=0.15. The carrier was downloaded and its sha256 matched the manifest, so its properties are now measured rather than assumed: 1920x1080 at 24 fps with an AAC audio track. Those three fields go into the two 2026-07-31 rows, which could not previously tell a reader what the downscale factor even was. The geometry prize is measured end to end for the first time. Against the untouched source, 1024 scores +3.46 dB over the shipped 512, while the entire noise_std axis is worth 1.92 dB. Two readings that the table alone hides are recorded with it: the temporal residual IMPROVES with resolution, because the shared noise field lives on the latent grid and is four times finer relative to the frame at 1920; and the frame-rate arm cannot be judged by these metrics at all, since they price its cost and not the smoothness it buys. Two findings that outrank the quality question. The certified row does not reproduce -- a rerun of the same configuration on a different device and dtype gives a different hash and different metrics, and the manifest records neither. And the pipeline copies audio byte for byte while stripping every metadata marker, so it can emit a file our own detector calls clean with an untouched Google-generated audio track inside it. The mechanism is proven on two carriers; whether that audio carries a mark the verifier reads is not, and only the oracle can say. The six prepared oracle submissions were never run: file upload to the verifier failed at the tool level. Their artifacts are gone with the scratch directory, which is the intended lifecycle for generated media, and the document says what rebuilding costs. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
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
- Store each binary image once. Evaluation manifests and documentation point to its canonical location.
- Put executable test fixtures in
fixtures/. - Put only the minimal reproducible detector inputs in
calibration/. - Put externally verified SynthID originals in
synthid/originals/and keep both CSV files synchronized. - 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. - Keep third-party fixture license notices in
licenses/, outside directories that tests enumerate as media inputs. - Runtime detector assets belong in
src/remove_ai_watermarks/assets/. Unregistered research candidates belong inscripts/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.