Open Editor
← all case studies

case 05

Forensic Watermark

Every copy identical to the eye — and every copy identifiable.

// the problem

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.

// how everyone solves it

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.

// the m0saic program

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

render pendingThe embed + verify demo pair for this spot is being prepared from the template's test renders.
embed and verify — marked footage beside its PASS/FAIL recovery report

// run it yourself

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.

npx m0saic make @m0saic/forensic/watermark/video/v1 --inputs screener.mp4 -o marked.mp4

// read the source

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.