Skip to content

Commit 03cfb0b

Browse files
MatrixAclaude
andauthored
docs: audit README vs implementation, fix discrepancies & enable PDF C2PA (#23)
* docs: audit README vs implementation, fix 6 discrepancies Thorough audit found README claims that didn't match the actual code. Fixes across all 8 README files (zh-CN, en, de, ja, ko, hi, es, zh-CN copy): - "76 AI tools" → "62 AI tools" (76 was pattern count including aliases) - "10 detection methods" → "11" (visible_watermark.rs was undocumented) - Added visible watermark detection description to all READMEs - Moved --deep from "Global Flags" to new "Check Options" section (it's check-specific) - Documented --lang flag (existed in code but missing from all READMEs) - Added --min-confidence and -r/--recursive to Check Options table - Added Loudly to audio tool table (was in known_tools.rs but not documented) - Added missing Qwen, Wan, Google AI to stale translation tool tables - Synced stale docs/README.zh-CN.md with main README.md - Fixed EXIF confidence from "LOW" to "LOW–MEDIUM" in stale translations - Updated flow diagrams to include visible watermark Also: - Enabled c2pa "pdf" feature for actual PDF C2PA manifest support - Added Adobe Firefly test fixture and 4 integration tests Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com> * chore: normalize LFS pointer files for test fixtures Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com> --------- Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
1 parent bede557 commit 03cfb0b

16 files changed

Lines changed: 451 additions & 101 deletions

Cargo.lock

Lines changed: 227 additions & 10 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

Cargo.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@ path = "src/main.rs"
2222

2323
[dependencies]
2424
anyhow = "1"
25-
c2pa = { version = "0.77", features = ["file_io"] }
25+
c2pa = { version = "0.77", features = ["file_io", "pdf"] }
2626
clap = { version = "4", features = ["derive"] }
2727
colored = "2"
2828
image = { version = "0.24", default-features = false, features = ["png", "jpeg", "webp", "gif", "bmp", "tiff"] }

README.md

Lines changed: 16 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@
1919

2020
AICheck 通过分析文件元数据和隐形水印来回答这些问题。不需要 API key,不需要联网,不需要配置。
2121

22-
**10 种检测方法** · **76 种 AI 工具** · **16 种文件格式** · **3 级置信度** · **完全离线运行**
22+
**11 种检测方法** · **62 种 AI 工具** · **16 种文件格式** · **3 级置信度** · **完全离线运行**
2323

2424
![演示](docs/demo-zh.gif)
2525

@@ -69,9 +69,9 @@ real_photo.jpg
6969
检测到元数据信号? 没有信号?
7070
| |
7171
v v
72-
[ 判定 ] [ 隐形水印 / 音频频谱分析 ]
73-
DWT-DCT 或 FFT 分析
74-
置信度: LOW
72+
[ 判定 ] [ 隐形水印 / 可见水印 / 音频频谱分析 ]
73+
DWT-DCT / 亮度分析 / FFT
74+
置信度: LOW–MEDIUM
7575
|
7676
v
7777
[ 判定 ]
@@ -99,6 +99,8 @@ real_photo.jpg
9999

100100
**隐形水印(LOW 置信度)**— 像素级 DWT-DCT 分析,检测通道噪声不对称性、跨通道比特一致性和小波能量模式。对于视频文件,自动通过 `ffmpeg` 提取关键帧并逐帧分析。当未检测到元数据信号时自动运行,也可通过 `--deep` 强制启用。
101101

102+
**可见水印(MEDIUM 置信度)**— 检测图片四角区域的可见文字覆盖标记(如中国 AI 生成内容标注标签)。通过亮度分析和文字行模式检测来识别角落区域的小型文字水印。与隐形水印检测同时运行,仅对图片有效。
103+
102104
---
103105

104106
## 🎯 识别能力
@@ -109,7 +111,7 @@ real_photo.jpg
109111
|------|------|
110112
| 图像生成 | DALL-E, Midjourney, Stable Diffusion, Adobe Firefly, Imagen, Flux, Ideogram, Leonardo.ai, NovelAI, Grok, Jimeng (即梦), Qwen (通义万相) |
111113
| 视频生成 | Sora, Google Veo, Runway, Pika, Kling, Vidu, Luma, Hailuo (海螺), Pixverse, Genmo, Haiper, Wan |
112-
| 音频/音乐生成 | Suno, Udio, ElevenLabs, SoundRaw, AIVA, Boomy, Mubert, Beatoven, Soundful, Hume, Fish Audio |
114+
| 音频/音乐生成 | Suno, Udio, ElevenLabs, SoundRaw, AIVA, Boomy, Mubert, Loudly, Beatoven, Soundful, Hume, Fish Audio |
113115
| 多模态 | GPT-4o, GPT-4, ChatGPT, OpenAI, GPT Image, Gemini, Google AI |
114116
| 平台 | Bing Image Creator, Copilot Designer, Microsoft Designer, Canva AI, DreamStudio, NightCafe, Craiyon, DeepAI, Meta AI, Stability AI |
115117
| 界面工具 | ComfyUI, Automatic1111 (A1111), InvokeAI, Fooocus |
@@ -155,8 +157,16 @@ aic info photo.jpg
155157
|------|------|
156158
| `--json` | 以 JSON 格式输出 |
157159
| `-q, --quiet` | 不输出内容,仅设置退出码 |
158-
| `--deep` | 强制对所有文件进行隐形水印和音频频谱分析 |
159160
| `--no-color` | 禁用彩色输出 |
161+
| `--lang <LANG>` | 覆盖显示语言(en, zh-CN, de, ja, ko, hi, es) |
162+
163+
### Check 选项
164+
165+
| 选项 | 说明 |
166+
|------|------|
167+
| `-r, --recursive` | 递归扫描目录 |
168+
| `--deep` | 强制对所有文件进行隐形水印和音频频谱分析 |
169+
| `--min-confidence <LEVEL>` | 按置信度过滤(low, medium, high,默认 low) |
160170

161171
### 退出码
162172

docs/README.de.md

Lines changed: 23 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@
1919

2020
AICheck beantwortet diese Fragen durch Analyse von Datei-Metadaten und unsichtbaren Wasserzeichen. Keine API-Keys, kein Netzwerk, keine Einrichtung.
2121

22-
**10 Erkennungsmethoden** · **76 KI-Tools** · **16 Dateiformate** · **3 Konfidenzstufen** · **Null Netzwerkanfragen**
22+
**11 Erkennungsmethoden** · **62 KI-Tools** · **16 Dateiformate** · **3 Konfidenzstufen** · **Null Netzwerkanfragen**
2323

2424
![Demo](demo-en.gif)
2525

@@ -69,27 +69,27 @@ real_photo.jpg
6969
Metadaten-Signale gefunden? Keine Signale?
7070
| |
7171
v v
72-
[ Ergebnis ] [ Unsichtbares Wasserzeichen / Audio-Spektral ]
73-
DWT-DCT- oder FFT-Analyse
74-
Konfidenz: LOW
72+
[ Ergebnis ] [ Unsichtb. / Sichtb. Wasserzeichen / Audio-Spektral ]
73+
DWT-DCT / Luminanz / FFT-Analyse
74+
Konfidenz: LOW–MEDIUM
7575
|
7676
v
7777
[ Ergebnis ]
7878
```
7979

8080
### Erkennungsmethoden
8181

82-
**C2PA-Manifeste (HIGH Konfidenz)** — Kryptografisch signierte Herkunftsnachweise. Wenn ein C2PA-Manifest sagt „hergestellt von DALL-E", ist das das autoritativste Signal, das Metadaten liefern können. Liest `digitalSourceType` und `claim_generator`. Funktioniert mit Bildern, Videos und Audio (z.B. ElevenLabs).
82+
**C2PA-Manifeste (HIGH Konfidenz)** — Kryptografisch signierte Herkunftsnachweise. Wenn ein C2PA-Manifest sagt „hergestellt von DALL-E", ist das das autoritativste Signal, das Metadaten liefern können. Liest `digitalSourceType`, `claim_generator` und `claim_generator_info`. Kann spezifische KI-Tools aus Herstellerkennungen im Claim-Generator ableiten (z.B. Google → Google AI). Funktioniert mit Bildern, Videos und Audio (z.B. ElevenLabs).
8383

84-
**XMP/IPTC-Metadaten (MEDIUM Konfidenz)** — Standard-Foto-Metadaten: `DigitalSourceType`, `AISystemUsed`, `AIPromptInformation`, `CreatorTool`. Zuverlässig, aber nicht signiert — kann gefälscht oder entfernt werden.
84+
**XMP/IPTC-Metadaten (MEDIUM Konfidenz)** — Standard-Foto-Metadaten: `DigitalSourceType`, `AISystemUsed`, `AIPromptInformation`, `CreatorTool`, `Credit` (z.B. Google AIs `photoshop:Credit`). Zuverlässig, aber nicht signiert — kann gefälscht oder entfernt werden.
8585

86-
**MP4-Container-Metadaten (MEDIUM Konfidenz)** — Analysiert iTunes-Stil-Atome (`©too`, `©swr`), AIGC-Labels (chinesischer Standard mit JSON `ProduceID`) und H.264-SEI-Wasserzeichenmarker (Kling, Sora, Runway, Pika, Luma, Hailuo, Pixverse, Vidu, Genmo, Haiper). Erkennt auch nicht-KI-Erstellungssoftware (FFmpeg, Remotion, Premiere usw.) zur informativen Anzeige. Erfasst KI-Signale, die in Videocontainern eingebettet sind und von anderen Methoden übersehen werden.
86+
**MP4-Container-Metadaten (MEDIUM Konfidenz)** — Analysiert iTunes-Stil-Atome (`©too`, `©swr`), AIGC-Labels (chinesischer Standard mit JSON `ProduceID` und `ContentProducer` Unternehmens-ID → Tool-Zuordnung, z.B. Wan-Videos) und H.264-SEI-Wasserzeichenmarker (Kling, Sora, Runway, Pika, Luma, Hailuo, Pixverse, Vidu, Genmo, Haiper). Erkennt auch nicht-KI-Erstellungssoftware (FFmpeg, Remotion, Premiere usw.) zur informativen Anzeige. Erfasst KI-Signale, die in Videocontainern eingebettet sind und von anderen Methoden übersehen werden.
8787

8888
**ID3-Audio-Metadaten (MEDIUM Konfidenz)** — Liest ID3v2-Tags aus MP3-Dateien: Kommentarframes (COMM), URL-Frames (WOAS/WOAF/WXXX) und Textframes (TENC/TPUB/TXXX). Erkennt KI-Audioplattformen wie Suno (über eingebettete URLs und „made with suno"-Kommentare).
8989

9090
**WAV-Container-Metadaten (MEDIUM/LOW Konfidenz)** — Analysiert RIFF-LIST/INFO-Blöcke (ISFT, ICMT, IART) auf Verweise zu KI-Tools. Kennzeichnet außerdem TTS-typische Audioeigenschaften: Mono-Kanal + nicht-standardmäßige Abtastraten (16kHz, 22050Hz, 24000Hz).
9191

92-
**EXIF-Heuristiken (LOW Konfidenz)** — Wenn das `Software`-Tag mit einem bekannten KI-Tool übereinstimmt UND typische Kamerafelder (Make, Model, GPS, Brennweite) fehlen, ist es wahrscheinlich KI-generiert. Erkennt auch hash-artige Artist-Tags.
92+
**EXIF-Heuristiken (LOW–MEDIUM Konfidenz)** — Wenn das `Software`-Tag mit einem bekannten KI-Tool übereinstimmt UND typische Kamerafelder (Make, Model, GPS, Brennweite) fehlen, ist es wahrscheinlich KI-generiert. Erkennt auch hash-artige Artist-Tags. Zusätzlich werden AIGC-JSON-Labels aus `UserComment` analysiert (z.B. Qianfan-Qwen-Bilder), wobei `ContentProducer`-Unternehmens-ID-Präfixe auf spezifische Tools abgebildet werden (MEDIUM Konfidenz).
9393

9494
**PNG-Textblöcke (LOW Konfidenz)** — Durchsucht `tEXt`- und `iTXt`-Blöcke nach KI-Tool-Verweisen in den Schlüsselwörtern Software, Comment, Description, Source, Author, parameters und prompt.
9595

@@ -99,6 +99,8 @@ real_photo.jpg
9999

100100
**Unsichtbare Wasserzeichen (LOW Konfidenz)** — Pixelbasierte DWT-DCT-Analyse, die Kanalrauschen-Asymmetrie, kanalübergreifende Bit-Übereinstimmung und Wavelet-Energiemuster erkennt. Bei Videos werden automatisch Keyframes über `ffmpeg` extrahiert und einzeln analysiert. Läuft automatisch als Fallback, wenn keine Metadaten-Signale gefunden werden, oder auf Anforderung mit `--deep`.
101101

102+
**Sichtbare Wasserzeichen (MEDIUM Konfidenz)** — Erkennt sichtbare Texteinblendungen in Bildecken (z.B. chinesische KI-Inhaltskennzeichnungslabels). Nutzt Luminanzanalyse und Textzeilenmustererkennung zur Identifikation kleiner Textabzeichen in Ecken. Läuft zusammen mit der unsichtbaren Wasserzeichenerkennung, nur für Bilder.
103+
102104
---
103105

104106
## 🎯 Erkannte Inhalte
@@ -107,10 +109,10 @@ real_photo.jpg
107109

108110
| Kategorie | Tools |
109111
|-----------|-------|
110-
| Bildgenerierung | DALL-E, Midjourney, Stable Diffusion, Adobe Firefly, Imagen, Flux, Ideogram, Leonardo.ai, NovelAI, Grok, Jimeng (即梦) |
111-
| Videogenerierung | Sora, Google Veo, Runway, Pika, Kling, Vidu, Luma, Hailuo (海螺), Pixverse, Genmo, Haiper |
112-
| Audio-/Musikgenerierung | Suno, Udio, ElevenLabs, SoundRaw, AIVA, Boomy, Mubert, Beatoven, Soundful, Hume, Fish Audio |
113-
| Multimodal | GPT-4o, GPT-4, ChatGPT, OpenAI, GPT Image, Gemini |
112+
| Bildgenerierung | DALL-E, Midjourney, Stable Diffusion, Adobe Firefly, Imagen, Flux, Ideogram, Leonardo.ai, NovelAI, Grok, Jimeng (即梦), Qwen (通义万相) |
113+
| Videogenerierung | Sora, Google Veo, Runway, Pika, Kling, Vidu, Luma, Hailuo (海螺), Pixverse, Genmo, Haiper, Wan |
114+
| Audio-/Musikgenerierung | Suno, Udio, ElevenLabs, SoundRaw, AIVA, Boomy, Mubert, Loudly, Beatoven, Soundful, Hume, Fish Audio |
115+
| Multimodal | GPT-4o, GPT-4, ChatGPT, OpenAI, GPT Image, Gemini, Google AI |
114116
| Plattformen | Bing Image Creator, Copilot Designer, Microsoft Designer, Canva AI, DreamStudio, NightCafe, Craiyon, DeepAI, Meta AI, Stability AI |
115117
| Oberflächen | ComfyUI, Automatic1111 (A1111), InvokeAI, Fooocus |
116118
| Forschung | Glide, Parti, Muse, Seedream, Recraft |
@@ -155,8 +157,16 @@ aic info photo.jpg
155157
|--------|---------|
156158
| `--json` | Ausgabe als JSON |
157159
| `-q, --quiet` | Ausgabe unterdrücken, nur Exit-Code setzen |
158-
| `--deep` | Unsichtbare Wasserzeichen- und Audio-Spektralanalyse für alle Dateien erzwingen |
159160
| `--no-color` | Farbige Ausgabe deaktivieren |
161+
| `--lang <LANG>` | Anzeigesprache überschreiben (en, zh-CN, de, ja, ko, hi, es) |
162+
163+
### Check-Optionen
164+
165+
| Option | Wirkung |
166+
|--------|---------|
167+
| `-r, --recursive` | Verzeichnisse rekursiv durchsuchen |
168+
| `--deep` | Unsichtbare Wasserzeichen- und Audio-Spektralanalyse für alle Dateien erzwingen |
169+
| `--min-confidence <LEVEL>` | Nach Konfidenzstufe filtern (low, medium, high; Standard: low) |
160170

161171
### Exit-Codes
162172

docs/README.en.md

Lines changed: 16 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@
1919

2020
AICheck answers these questions by analyzing file metadata and invisible watermarks. No API keys, no network, no setup.
2121

22-
**10 detection methods** · **76 AI tools** · **16 file formats** · **3 confidence tiers** · **Zero network requests**
22+
**11 detection methods** · **62 AI tools** · **16 file formats** · **3 confidence tiers** · **Zero network requests**
2323

2424
![Demo](demo-en.gif)
2525

@@ -69,9 +69,9 @@ real_photo.jpg
6969
metadata signals found? no signals?
7070
| |
7171
v v
72-
[ Verdict ] [ Invisible Watermark / Audio Spectral ]
73-
DWT-DCT or FFT analysis
74-
confidence: LOW
72+
[ Verdict ] [ Invisible / Visible Watermark / Audio Spectral ]
73+
DWT-DCT / luminance / FFT analysis
74+
confidence: LOW–MEDIUM
7575
|
7676
v
7777
[ Verdict ]
@@ -99,6 +99,8 @@ real_photo.jpg
9999

100100
**Invisible Watermarks (LOW confidence)** — Pixel-level DWT-DCT analysis that detects channel noise asymmetry, cross-channel bit agreement, and wavelet energy patterns. For videos, automatically extracts keyframes via `ffmpeg` and analyzes them individually. Runs automatically as a fallback when no metadata signals are found, or on demand with `--deep`.
101101

102+
**Visible Watermarks (MEDIUM confidence)** — Detects visible text overlays in image corner regions (e.g. Chinese AI-generated content disclosure labels). Uses luminance analysis and text-line pattern detection to identify small text badges in corners. Runs alongside invisible watermark detection, images only.
103+
102104
---
103105

104106
## 🎯 What It Recognizes
@@ -109,7 +111,7 @@ real_photo.jpg
109111
|----------|-------|
110112
| Image generation | DALL-E, Midjourney, Stable Diffusion, Adobe Firefly, Imagen, Flux, Ideogram, Leonardo.ai, NovelAI, Grok, Jimeng (即梦), Qwen (通义万相) |
111113
| Video generation | Sora, Google Veo, Runway, Pika, Kling, Vidu, Luma, Hailuo (海螺), Pixverse, Genmo, Haiper, Wan |
112-
| Audio/Music generation | Suno, Udio, ElevenLabs, SoundRaw, AIVA, Boomy, Mubert, Beatoven, Soundful, Hume, Fish Audio |
114+
| Audio/Music generation | Suno, Udio, ElevenLabs, SoundRaw, AIVA, Boomy, Mubert, Loudly, Beatoven, Soundful, Hume, Fish Audio |
113115
| Multimodal | GPT-4o, GPT-4, ChatGPT, OpenAI, GPT Image, Gemini, Google AI |
114116
| Platforms | Bing Image Creator, Copilot Designer, Microsoft Designer, Canva AI, DreamStudio, NightCafe, Craiyon, DeepAI, Meta AI, Stability AI |
115117
| Interfaces | ComfyUI, Automatic1111 (A1111), InvokeAI, Fooocus |
@@ -155,8 +157,16 @@ aic info photo.jpg
155157
|------|--------|
156158
| `--json` | Output as JSON |
157159
| `-q, --quiet` | Suppress output, set exit code only |
158-
| `--deep` | Force invisible watermark and audio spectral analysis on all files |
159160
| `--no-color` | Disable colored output |
161+
| `--lang <LANG>` | Override display language (en, zh-CN, de, ja, ko, hi, es) |
162+
163+
### Check Options
164+
165+
| Flag | Effect |
166+
|------|--------|
167+
| `-r, --recursive` | Recurse into directories |
168+
| `--deep` | Force invisible watermark and audio spectral analysis on all files |
169+
| `--min-confidence <LEVEL>` | Filter by confidence level (low, medium, high; default: low) |
160170

161171
### Exit Codes
162172

0 commit comments

Comments
 (0)