Detecting Lumen5 content

Lumen5 marks the videos it renders in three ways so that anyone can check whether content was made with Lumen5. This page describes each mark and how to detect it in your own tools. For a single file, use the free check page.

1. Content Credentials (C2PA)

Rendered videos carry a signed C2PA manifest. Any C2PA validator can read it. The manifest records the digital source type, the AI-generated parts as a com.lumen5.ai-content assertion, the credentials of included files as ingredients, and a c2pa.soft-binding assertion with algorithm com.lumen5.videoseal.1 whose value is the base64 of the video's 8-byte watermark id.

2. Invisible video watermark

Frames carry a 256-bit Meta Video Seal watermark (checkpoint videoseal_y_256b_img). The message is the ASCII code Lumen5AI (64 bits) followed by three copies of the watermark id, a signed 64-bit big-endian integer.

3. Invisible audio watermark

The soundtrack carries a 16-bit Meta AudioSeal watermark with the fixed code 0x4c35. It identifies Lumen5, not the individual video.

Look up a watermark id

POST /api/v1/ai-content/lookup/ with {"watermark_id": "<signed 64-bit integer as a string>"} returns found, rendered_at and digital_source_type. It never reveals the video or its owner.

Signed detection results

POST /api/v1/ai-content/report/ returns a detection result signed as a JWS (ES256). Verify it with the public key at /api/v1/ai-content/report-key/. Lumen5 signs what it checked itself under server_lookup, including whether the submitted file is the unaltered original render; what the caller reports about the file is kept under client_asserted.

Free and unlimited for regulators, media and researchers

The API is free. Requests from one network are rate limited. Market surveillance authorities and other regulators, law enforcement, media, fact-checkers, trusted flaggers, researchers, educational institutions and civil society organisations can ask [email protected] for an API key with the ai-content-check:unlimited scope, which lifts the limit. Send it as Authorization: Bearer <key>.