From 93c664f7fb0f69f372d3842d7c9ca4b559879c4c Mon Sep 17 00:00:00 2001 From: test-user Date: Mon, 25 May 2026 09:32:03 -0700 Subject: [PATCH] docs: sync README + corpus map with v0.5.x detection coverage - README Features: add the identify / provenance-detection capability. - README Supported models: add FLUX, Stability AI, Microsoft/Bing (MAI-Image), Meta AI rows; note SD/SDXL/FLUX imwatermark is locally detectable; add a detection note pointing at identify. - corpus README per-platform map: add Stability / Ideogram / Recraft / Krea-FLUX rows + an imwatermark column; correct Bing (MAI-Image, signs 'Microsoft'); note imwatermark fires only on pristine pipeline output, not re-hosts/exports. Co-Authored-By: Claude Opus 4.7 (1M context) --- README.md | 9 ++++++++- data/synthid_corpus/README.md | 33 ++++++++++++++++++++------------- 2 files changed, 28 insertions(+), 14 deletions(-) diff --git a/README.md b/README.md index 8c359f1..dd1b940 100644 --- a/README.md +++ b/README.md @@ -14,6 +14,7 @@ Strips SynthID, C2PA Content Credentials, EXIF/XMP "Made with AI" labels, and vi - **Smart Face Protection** — automatic extraction and blending of human faces to prevent AI distortion - **Batch processing** — process entire directories - **Detection** — three-stage NCC watermark detection with confidence scoring +- **Provenance detection (`identify`)** — aggregate C2PA issuer, IPTC "Made with AI", embedded SD/ComfyUI params, EXIF/XMP generator tags, the SynthID metadata proxy, the visible sparkle, and the open SD/SDXL/FLUX invisible watermark into one origin-platform + watermark-inventory verdict (`--json` for machine output) > **Try it online** — don't want to install anything? Use [raiw.cc](https://raiw.cc), a free web service powered by this library. @@ -30,14 +31,20 @@ Strips SynthID, C2PA Content Credentials, EXIF/XMP "Made with AI" labels, and vi | **Google Gemini / Nano Banana / Gemini 3 Pro** | ✅ Sparkle logo | ✅ SynthID v1 + v2 (default SDXL pipeline at native ~1024 px) | ✅ C2PA + EXIF | Alpha reversal + diffusion + metadata strip | | **OpenAI DALL-E 3 / ChatGPT** | — | — | ✅ C2PA manifest | Metadata strip | | **OpenAI ChatGPT Images 2.0** (gpt-image-2) | — | ⚠️ imperceptible pixel watermark (no public detector yet) | ✅ C2PA manifest (verified) | Diffusion regeneration + metadata strip | -| **Stable Diffusion (AUTOMATIC1111, ComfyUI)** | — | ✅ DWT / steganographic | ✅ PNG text chunks | Diffusion regeneration + metadata strip | +| **Stable Diffusion / SDXL (AUTOMATIC1111, ComfyUI)** | — | ✅ DWT-DCT (imwatermark — locally detectable) | ✅ PNG text chunks | Diffusion regeneration + metadata strip | +| **Black Forest Labs FLUX** | — | ✅ DWT-DCT (imwatermark — locally detectable) | ✅ C2PA (FLUX.2 Pro) | Diffusion regeneration + metadata strip | | **Adobe Firefly** | — | — | ✅ Content Credentials (C2PA) | Metadata strip | +| **Stability AI** (DreamStudio / Stable Image) | — | — | ✅ C2PA ("Stability AI Ltd") | Metadata strip | +| **Microsoft Designer / Bing Image Creator** | — | ✅ SynthID via DALL-E backend (Designer) | ✅ C2PA (Bing runs MAI-Image, signed "Microsoft") | Metadata strip | | **Midjourney** | — | — | ✅ EXIF + XMP (prompt, model, seed) | Metadata strip | +| **Meta AI** | — | — | ✅ IPTC "Made with AI" (digitalSourceType) | Metadata strip (removes the label) | | **StableSignature** (Meta) | — | ✅ In-model watermark | — | Diffusion regeneration | | **TreeRing** | — | ✅ Latent space watermark | — | Diffusion regeneration | > Visible watermarks (logo overlays) are currently used only by Google Gemini / Nano Banana. Other services rely on invisible watermarks and/or metadata. Our diffusion-based regeneration works against any invisible watermark in pixel or frequency domain. +> **Detection:** `remove-ai-watermarks identify ` reports the origin platform and watermark inventory for all the signals above — C2PA issuer, IPTC "Made with AI", embedded generation params, EXIF/XMP generator tags, the SynthID metadata proxy, the visible sparkle, and (with the `[detect]` extra) the open SD/SDXL/FLUX invisible watermark. The SynthID *pixel* watermark has no local decoder, so it is reported as a metadata proxy only. + ## How it works ### Removing the Gemini / Nano Banana sparkle watermark diff --git a/data/synthid_corpus/README.md b/data/synthid_corpus/README.md index b1c6ef9..c87546d 100644 --- a/data/synthid_corpus/README.md +++ b/data/synthid_corpus/README.md @@ -118,22 +118,29 @@ Download; Leonardo serves the original JPEG in-chat (download button matches). What each platform actually embeds, verified by byte-scan (and Gemini-app oracle where noted). The detector's coverage is complementary: metadata catches C2PA / -IPTC; the visible detector catches the Gemini-family sparkle; the SynthID pixel -itself has no local detector (oracle only). +IPTC; `exif_generator` catches EXIF `Make`/`Software` + XMP `CreatorTool`; +`invisible_watermark.py` (imwatermark) catches the open SD/SDXL/FLUX DWT-DCT +watermark on pristine files; the visible detector catches the Gemini-family +sparkle; the SynthID *pixel* itself has no local detector (oracle only). -| Platform | C2PA issuer | SynthID pixel | IPTC "Made with AI" | Visible sparkle | Corpus label | -|---|---|---|---|---|---| -| Gemini app | Google | yes | - | yes | pos | -| ChatGPT / gpt-image | OpenAI | yes | - | - | pos | -| Microsoft Designer | OpenAI + Microsoft | yes (via OpenAI) | - | - | pos | -| Google AI Studio (Nano Banana) | **none** | yes (oracle-confirmed) | - | yes | pos (metadata blind spot) | -| Meta AI | none | no | **yes** | - | neg (for SynthID) | -| Leonardo.ai | none | no | no | - | neg | -| Grok (xAI) | none (non-adopter) | no | no | - | neg (captured: clean low-res preview) | -| Bing Image Creator (DALL-E) | (expect OpenAI, like Designer) | - | - | - | not captured (UI uncooperative) | +| Platform | C2PA issuer | SynthID pixel | IPTC "Made with AI" | Visible sparkle | imwatermark | Corpus label | +|---|---|---|---|---|---|---| +| Gemini app | Google | yes | - | yes | - | pos | +| ChatGPT / gpt-image | OpenAI | yes | - | - | - | pos | +| Microsoft Designer | OpenAI + Microsoft | yes (via OpenAI) | - | - | - | pos | +| Bing Image Creator | Microsoft (MAI-Image) | no | - | - | - | pos (C2PA "Microsoft", not OpenAI) | +| Google AI Studio (Nano Banana) | **none** | yes (oracle-confirmed) | - | yes | - | pos (metadata blind spot) | +| Stability AI (Brand Studio) | Stability AI Ltd | no | - | - | no | pos (C2PA only) | +| Ideogram | none | no | - | - | no | pos (EXIF `Make="Ideogram AI"` only) | +| Meta AI | none | no | **yes** | - | - | neg (for SynthID) | +| Leonardo.ai | none | no | no | - | no | neg | +| Recraft | none (export strips) | no | no | - | no | neg (re-encoded export, no signal) | +| Krea (FLUX 2 host) | none | no | no | - | no | neg (host omits the imwatermark encoder) | +| Grok (xAI) | none (non-adopter) | no | no | - | no | neg (captured: clean low-res preview) | Key takeaways: - The same model differs by *surface*: Gemini app wraps C2PA, AI Studio (API/playground) emits none -- only the pixel + sparkle survive. -- Microsoft Designer's DALL-E backend inherits OpenAI's C2PA+SynthID (issuer "OpenAI, Microsoft"). +- Microsoft Designer's DALL-E backend inherits OpenAI's C2PA+SynthID (issuer "OpenAI, Microsoft"); Bing now runs Microsoft's own **MAI-Image** and signs C2PA as "Microsoft" (not OpenAI/DALL-E). - Meta uses the IPTC `digitalSourceType` marker, not C2PA or SynthID. +- The open imwatermark fires only on *pristine* output from a pipeline that runs the encoder (diffusers default, official BFL) -- not from re-hosts (Krea, Stability hosted SDXL) or re-encoded design exports (Recraft, Canva). Ideogram's only signal is the EXIF `Make` tag. - Bing and Grok web UIs are uncooperative for autonomous capture (no document_idle for screenshots; blob downloads intermittently no-op; low-res in-chat previews). Use their native download button manually if a full-res sample is needed.