Loading lesson…
Two families of provenance technology. One attaches signed metadata. The other embeds invisible patterns in the pixels or waveform. Here's how to implement both. The manifest contains ASSERTIONS (who captured/generated it, which tools/models, editing history, bounding boxes of AI-generated regions).
The EU AI Act (Article 50, applicable August 2026) requires providers of AI systems that generate synthetic content to ensure outputs are marked as artificially generated. California's AB 2655/2839 and similar state laws in the US create adjacent obligations. The TAKE IT DOWN Act (US federal, 2025) criminalizes non-consensual intimate deepfakes. Provenance isn't optional for serious products anymore.
| Approach | How it works | Survives editing? | Cryptographically verifiable? |
|---|---|---|---|
| C2PA Content Credentials | Signed metadata manifest attached to file. | No — stripped by naive tools. Yes if CAI-aware tools preserve it. | Yes — PKI-based signatures. |
| SynthID (Google) | Imperceptible signal embedded in pixels / waveform / tokens. | Survives most editing (crop, compression, recolor). | Yes — Google's detector, not public. |
| Traditional watermark (Stability, others) | Invisible pattern in pixels. | Partial — resilient to compression, breaks on heavy edits. | Provider-specific. |
| Perceptual hash (PhotoDNA, PDQ) | Fingerprint of the image; used for matching against known-bad DB. | Robust — designed for hash-based matching. | Not about authorship; about matching. |
C2PA defines a signed 'manifest' that travels with a file (JPEG, PNG, MP4, WAV). The manifest contains ASSERTIONS (who captured/generated it, which tools/models, editing history, bounding boxes of AI-generated regions). The manifest is signed by the creator's certificate (issued by a C2PA-trusted authority). Verification is cryptographic.
# Using c2pa-python (Adobe's reference implementation) from c2pa import Builder, create_signer, SigningAlg # Create a signer from your cert + key (issued by a C2PA-trusted CA) signer = create_signer( certs_path="./my-certificate-chain.pem", private_key_path="./my-private.key", alg=SigningAlg.PS256, ) # Build a manifest manifest_json = { "claim_generator": "tendril-creative-studio/1.0", "format": "image/png", "assertions": [ { "label": "c2pa.actions", "data": {"actions": [ {"action": "c2pa.created", "softwareAgent": "Flux 1.1 Pro"}, {"action": "c2pa.edited", "softwareAgent": "Photoshop 2026"}, ]}, }, { "label": "c2pa.training-mining", "data": {"entries": { "c2pa.ai_generative_training": {"use": "notAllowed"}, }}, }, ], } builder = Builder(manifest_json) builder.sign_file( signer=signer, source_path="./ai_generated.png", dest_path="./ai_generated_signed.png", ) # Anyone with the C2PA Reader can verify this file # and see it was AI-generated, edited in Photoshop, and # the creator opted out of training.Sign a C2PA manifest onto an AI-generated image.SynthID embeds detection signals directly in pixels (for images), spectrograms (for audio), and token distributions (for text). Unlike C2PA, it survives crops, color adjustments, and re-encoding. The tradeoff: SynthID only detects Google-generated content (Gemini, Imagen, Veo, Lyria). It's not an open standard.
// Browser-side: verify C2PA badge using @contentauth/sdk import { createC2pa } from "@contentauth/sdk"; const c2pa = await createC2pa({ wasmSrc: "/c2pa-wasm.wasm", workerSrc: "/c2pa.worker.js", }); const { manifestStore } = await c2pa.read(imageBlob); if (!manifestStore) { // No Content Credentials — unknown provenance return { verified: false, reason: "no_manifest" }; } const active = manifestStore.activeManifest; const aiActions = active.assertions.data.find((a) => a.label === "c2pa.actions"); const aiGenerated = aiActions?.data.actions.some( (a) => a.action === "c2pa.created" && a.softwareAgent ); return { verified: true, aiGenerated, signer: active.signatureInfo?.issuer, editHistory: aiActions?.data.actions, };Read and display Content Credentials in a browser UI.10 questions · take it digitally for instant feedback at tendril.neural-forge.io/learn/quiz/end-creative-provenance-creators
What is the main idea of "Provenance — C2PA, SynthID, Watermarking"?
Which concept is most central to "Provenance — C2PA, SynthID, Watermarking"?
Which use of AI fits this topic best?
Which limitation should you watch for in this topic?
What should a careful learner remember about "Don't over-promise"?
You want to use AI after this lesson. What is the safest next step?
How should AI output about C2PA be treated?
Name one way to verify an AI answer about C2PA.
Which action would help you apply "Provenance — C2PA, SynthID, Watermarking" responsibly?
Which choice is a bad use of AI for this lesson?