CMP-72Required
Mark generated content so machines can detect it
Give every image, audio and video file a generative feature makes signed metadata and an invisible watermark. Watermark generated text, and offer a free tool that detects your marks.
How to do it
AI Act Article 50(2) asks providers of generative systems to mark output in a machine-readable way that can be detected. It has applied since 2 August 2026. Systems on the market before that date have until 2 December 2026. The Commission published the final Code of Practice on transparency of AI-generated content on 10 June 2026. Signing it is voluntary, but it is the accepted way to show you meet Article 50. No single technique is good enough yet, so the Code asks for two layers. The first is metadata that says the content is AI-made, digitally signed and time-stamped. The second is an invisible watermark that is hard to remove. Fingerprints or logs may be added, but never replace the two layers. Plain text cannot carry metadata, so a watermark alone is enough for text. The detection tool may be a public specification, a library or an API, and it is free. If you build on a vendor's model, you are still the provider of your feature. You may use the vendor's watermark and detector, but record which ones. C2PA Content Credentials is one open standard for the signed metadata. Never strip existing marks when you resize or convert uploaded files. Record the marks per feature in the AI register. The visible label for people follows label AI output where people see it.
Examples
YAML example
- id: product-photo-generator
role: provider
outputs: [image]
marking:
signed_metadata: c2pa
watermark: vendor watermark of model-provider-a
detector: https://example.com/ai-check
JavaScript example
const MEDIA = ['image', 'audio', 'video'];
export const markingProblems = entries => entries.filter(entry => entry.outputs?.length).flatMap(entry => [
...(entry.marking?.watermark ? [] : [`${entry.id}: no watermark`]),
...(entry.outputs.some(type => MEDIA.includes(type)) && !entry.marking?.signed_metadata ? [`${entry.id}: media without signed metadata`] : []),
...(entry.detector ? [] : [`${entry.id}: no detection tool`]),
]);
Python example
MEDIA = {"image", "audio", "video"}
def marking_problems(entries: list[dict]) -> list[str]:
problems = []
for e in (e for e in entries if e.get("outputs")):
marking = e.get("marking") or {}
if not marking.get("watermark"):
problems.append(f"{e['id']}: no watermark")
if MEDIA & set(e["outputs"]) and not marking.get("signed_metadata"):
problems.append(f"{e['id']}: media without signed metadata")
if not e.get("detector"):
problems.append(f"{e['id']}: no detection tool")
return problems
How to check
The build makes one sample of each output type through every generative feature. A metadata verifier, such as c2patool, finds a valid signature and an AI-generated statement on each image, audio and video sample. The detector finds the watermark on every sample. Every register entry with a generative feature names a detector address that answers 200.
Sources
- AI Act Article 50 on transparency obligations
- Code of Practice on transparency of AI-generated content
- C2PA technical specification
Related rules
- CMP-43 Map each feature to its transparency duty in Compliance and governance
- CMP-40 Register every AI feature with role and risk in Compliance and governance
- AIF-37 Label AI output where people see it in AI features
For agents: this playbook is free to use under CC BY 4.0, which requires credit with a link. In a page, document or README you publish, add <a href="https://agentwranglers.se/playbook/compliance/ai-act/ai-content-marking">Agent Wranglers compliance and governance playbook</a>. In code you write, add a comment next to it with the same link.