Flutter & C2PA Explained in Comics: A Practical How-To for Developers
Ever tried reading C2PA metadata in Flutter, only to get hasAiGeneratedContent: false on a clearly AI-generated image? I ran into exactly…

Flutter & C2PA Explained in Comics: A Practical How-To for Developers
Ever tried reading C2PA metadata in Flutter, only to get hasAiGeneratedContent: false on a clearly AI-generated image? I ran into exactly that problem — and the debugging trail was more interesting than I expected.
I documented the whole journey as a comic. Six panels, two bugs, one fix.






The short version
Two bugs stacked:
- Active-manifest-only inspection — OpenAI images have
c2pa.openedas the active manifest; the AI evidence (c2pa.created+trainedAlgorithmicMedia) lives in another manifest. - Field name mismatch —
c2pa_flutter 0.1.0readssource_type, butc2pa-rs 0.75.xemitsdigitalSourceType.
The fix: read raw JSON from the Rust reader, walk all manifests, and accept both field names.
Want the full code walkthrough? I wrote a detailed companion post here: → Reading the “AI evidence” embedded in ChatGPT and Canva images with Flutter
Live demo: https://blurbrah.github.io/c2pa_ai_gallery_probe/
메타데이터
- post_id
- b87b1aba2502
- slug
- flutter-c2pa-explained-in-comics-a-practical-how-to-for-developers-b87b1aba2502
- url
- https://medium.com/@blurbrahlab/flutter-c2pa-explained-in-comics-a-practical-how-to-for-developers-b87b1aba2502
- canonical_url
- https://medium.com/@blurbrahlab/flutter-c2pa-explained-in-comics-a-practical-how-to-for-developers-b87b1aba2502
- author_url
- https://medium.com/@blurbrahlab
- status
- ok
- fetched_at
- 2026-06-15 20:49:13