case 05
Every copy identical to the eye — and every copy identifiable.
You send review copies of unreleased footage to twelve people. One copy ends up on a platform it shouldn’t be on — re-encoded, re-compressed, maybe cropped. Which of the twelve leaked it? A visible “PROPERTY OF” overlay doesn’t answer that: it names you, not the recipient, and it’s the first thing a leaker crops or blurs out.
What you actually want is a per-recipient mark that isn’t visible, that survives the platform’s re-encode, and that you can recover from the leaked copy with enough confidence to act on.
Below the enterprise tier, mostly: they don’t. Visible per-recipient text burns are cropped in one line of ffmpeg. Naive steganography — tweaking least-significant bits — is erased by the very first re-encode, because lossy compression exists to throw that information away. Surviving compression takes an error-corrected payload spread spatially across the frame, which is not an afternoon script. So the capability has lived behind enterprise contracts, and everyone else ships screeners on trust.
@m0saic/forensic/watermark/video/v1 embeds an error-corrected payload — a recipient id, an order number, any short string — into the video as an imperceptible spatial pattern, built to survive re-encoding, and writes a .watermark.json sidecar recording exactly what was embedded and how. Rendering twelve screeners is a batch with twelve payloads.
Verification is a template too: point @m0saic/forensic/watermark/verify/v1 at a suspect copy and it renders a report card — PASS or FAIL, the recovered payload, and the confidence behind it. The evidence is itself a deliverable you can drop into an email.
One command, straight from a terminal. The CLI carries the template, the engine, and the validator — if the layout can’t render correctly, it fails before a single frame is written.
The template behind this study is @m0saic/forensic/watermark/video/v1 and @m0saic/forensic/watermark/verify/v1 — a typed, unit-tested program, not a script. The template library is headed for open release; the m0saic source lives on GitHub.