Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
150 changes: 75 additions & 75 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,10 +1,10 @@
> **English** | [简体中文](docs/README.zh-CN.md) | [Deutsch](docs/README.de.md) | [日本語](docs/README.ja.md) | [한국어](docs/README.ko.md) | [हिन्दी](docs/README.hi.md) | [Español](docs/README.es.md)
> [English](docs/README.en.md) | **简体中文** | [Deutsch](docs/README.de.md) | [日本語](docs/README.ja.md) | [한국어](docs/README.ko.md) | [हिन्दी](docs/README.hi.md) | [Español](docs/README.es.md)

<div align="center">

# AICheck

**Detect AI-generated content. Offline. No API keys. No setup.**
**检测 AI 生成的内容。离线运行。无需 API key。无需配置。**

[![CI](https://github.com/MatrixA/aicheck/actions/workflows/ci.yml/badge.svg)](https://github.com/MatrixA/aicheck/actions/workflows/ci.yml)
[![Crates.io](https://img.shields.io/crates/v/aicheck)](https://crates.io/crates/aicheck)
Expand All @@ -13,25 +13,25 @@

</div>

*That viral image — AI or real?*
*Which model generated this video?*
*Can you trust this photo's metadata?*
*那张疯传的图片——是 AI 还是真的?*
*这个视频是用哪个模型生成的?*
*这张照片的元数据可信吗?*

AICheck answers these questions by analyzing file metadata and invisible watermarks. No API keys, no network, no setup.
AICheck 通过分析文件元数据和隐形水印来回答这些问题。不需要 API key,不需要联网,不需要配置。

**10 detection methods** · **61 AI tools** · **16 file formats** · **3 confidence tiers** · **Zero network requests**
**10 种检测方法** · **61 AI 工具** · **16 种文件格式** · **3 级置信度** · **完全离线运行**

[![Demo Video](https://img.youtube.com/vi/1u-6TkHtWiA/maxresdefault.jpg)](https://youtu.be/1u-6TkHtWiA)
[![演示视频(Bilibili)](https://img.youtube.com/vi/1u-6TkHtWiA/maxresdefault.jpg)](https://www.bilibili.com/video/BV16Mc6zAE1s)

---

## ⚡ Quick Start
## ⚡ 快速开始

```bash
cargo install aicheck
```

> Requires [Rust 1.86+](https://rust-lang.org/tools/install/). Or build from source: `cargo install --path .`
> 需要 [Rust 1.86+](https://rust-lang.org/tools/install/)。从源码构建:`cargo install --path .`

```bash
aic check photo.jpg
Expand All @@ -50,131 +50,131 @@ real_photo.jpg

---

## 🔍 How It Works
## 🔍 工作原理

```
your file
你的文件
|
+------+------+------+------+------+------+------+
| | | | | | | |
v v v v v v v v
[C2PA] [XMP] [EXIF] [PNG] [MP4] [ID3] [WAV] [FILE]
[C2PA] [XMP] [EXIF] [PNG] [MP4] [ID3] [WAV] [文件名]
HIGH MEDIUM LOW LOW MEDIUM MEDIUM MEDIUM LOW
| | | | | | | |
+--+---+--+---+--+---+--+---+--+---+--+---+--+---+
| |
v v
metadata signals found? no signals?
检测到元数据信号? 没有信号?
| |
v v
[ Verdict ] [ Invisible Watermark / Audio Spectral ]
DWT-DCT or FFT analysis
confidence: LOW
[ 判定 ] [ 隐形水印 / 音频频谱分析 ]
DWT-DCT FFT 分析
置信度: LOW
|
v
[ Verdict ]
[ 判定 ]
```

### Detection Methods
### 检测方法

**C2PA Manifests (HIGH confidence)** — Cryptographically signed provenance. If a C2PA manifest says "made by DALL-E," that's the most authoritative signal metadata can provide. Reads `digitalSourceType` and `claim_generator`. Works on images, videos, and audio (e.g. ElevenLabs).
**C2PA 清单(HIGH 置信度)**— 经过加密签名的来源证明。如果 C2PA 清单写着「由 DALL-E 生成」,这就是元数据能提供的最权威证据。读取 `digitalSourceType` `claim_generator` 字段。支持图片、视频和音频(如 ElevenLabs)。

**XMP/IPTC Metadata (MEDIUM confidence)** — Standard photo metadata: `DigitalSourceType`, `AISystemUsed`, `AIPromptInformation`, `CreatorTool`. Reliable but unsigned — can be faked or stripped.
**XMP/IPTC 元数据(MEDIUM 置信度)**— 标准照片元数据:`DigitalSourceType``AISystemUsed``AIPromptInformation``CreatorTool`。可靠但没有签名——可以伪造或删除。

**MP4 Container Metadata (MEDIUM confidence)** — Parses iTunes-style atoms (`©too`, `©swr`), AIGC labels (China standard with JSON `ProduceID`), and H.264 SEI watermark markers (Kling, Sora, Runway, Pika, Luma, Hailuo, Pixverse, Vidu, Genmo, Haiper). Also detects non-AI creation software (FFmpeg, Remotion, Premiere, etc.) for informational display. Catches AI signals baked into video containers that other methods miss.
**MP4 容器元数据(MEDIUM 置信度)**— 解析 iTunes 风格原子(`©too``©swr`)、AIGC 标签(中国标准,含 JSON `ProduceID`)和 H.264 SEI 水印标记(KlingSoraRunwayPikaLumaHailuoPixverseViduGenmoHaiper)。同时检测非 AI 创作软件(FFmpegRemotionPremiere 等)作为信息展示。能捕获嵌入视频容器中的 AI 信号。

**ID3 Audio Metadata (MEDIUM confidence)** — Reads ID3v2 tags from MP3 files: comment frames (COMM), URL frames (WOAS/WOAF/WXXX), and text frames (TENC/TPUB/TXXX). Detects AI audio platforms like Suno (via embedded URLs and "made with suno" comments).
**ID3 音频元数据(MEDIUM 置信度)**— 读取 MP3 文件的 ID3v2 标签:注释帧(COMM)、URL 帧(WOAS/WOAF/WXXX)和文本帧(TENC/TPUB/TXXX)。可检测 Suno 等 AI 音频平台(通过嵌入的 URL 和「made with suno」注释)。

**WAV Container Metadata (MEDIUM/LOW confidence)** — Parses RIFF LIST/INFO chunks (ISFT, ICMT, IART) for AI tool references. Also flags TTS-typical audio characteristics: mono channel + non-standard sample rates (16kHz, 22050Hz, 24000Hz).
**WAV 容器元数据(MEDIUM/LOW 置信度)**— 解析 RIFF LIST/INFO 块(ISFTICMTIART)中的 AI 工具引用。同时标记 TTS 典型音频特征:单声道 + 非标准采样率(16kHz22050Hz24000Hz)。

**EXIF Heuristics (LOW confidence)** — If the `Software` tag matches a known AI tool AND typical camera fields (Make, Model, GPS, focal length) are absent, it's likely AI-generated. Also detects hash-like Artist tags.
**EXIF 启发式(LOW 置信度)**— 如果 `Software` 标签匹配已知 AI 工具,且缺少典型的相机字段(MakeModelGPS、焦距),那大概率是 AI 生成的。也能检测哈希式的 Artist 标签。

**PNG Text Chunks (LOW confidence)** — Scans `tEXt` and `iTXt` chunks for AI tool references in Software, Comment, Description, Source, Author, parameters, and prompt keywords.
**PNG 文本块(LOW 置信度)**— 扫描 `tEXt` `iTXt` 块中 SoftwareCommentDescriptionSourceAuthorparameters、prompt 等关键字里的 AI 工具引用。

**Filename Patterns (LOW confidence)** — Matches filenames against known AI tool naming conventions (e.g. ElevenLabs timestamp format `ElevenLabs_YYYY-MM-DDTHH_MM_SS_*`, Suno/SoundRaw prefixes, Midjourney/DALL-E in filenames).
**文件名模式(LOW 置信度)**— 将文件名与已知 AI 工具的命名规则匹配(如 ElevenLabs 的时间戳格式 `ElevenLabs_YYYY-MM-DDTHH_MM_SS_*`Suno/SoundRaw 前缀、文件名中的 Midjourney/DALL-E)。

**Audio Spectral Analysis (LOW confidence)** — FFT-based analysis of WAV audio: detects hard frequency cutoffs (energy concentrated below Nyquist) and abnormal spectral flatness typical of TTS/AI synthesis. Runs as a fallback or with `--deep`.
**音频频谱分析(LOW 置信度)**— 基于 FFTWAV 音频分析:检测硬频率截断(能量集中在奈奎斯特频率以下)和异常的频谱平坦度,这些是 TTS/AI 合成的典型特征。作为后备方案自动运行,或通过 `--deep` 强制启用。

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

---

## 🎯 What It Recognizes
## 🎯 识别能力

### AI Tools
### AI 工具

| Category | Tools |
|----------|-------|
| Image generation | DALL-E, Midjourney, Stable Diffusion, Adobe Firefly, Imagen, Flux, Ideogram, Leonardo.ai, NovelAI, Grok, Jimeng (即梦) |
| Video generation | Sora, Google Veo, Runway, Pika, Kling, Vidu, Luma, Hailuo (海螺), Pixverse, Genmo, Haiper |
| Audio/Music generation | Suno, Udio, ElevenLabs, SoundRaw, AIVA, Boomy, Mubert, Beatoven, Soundful, Hume, Fish Audio |
| Multimodal | GPT-4o, GPT-4, ChatGPT, OpenAI, GPT Image, Gemini |
| Platforms | Bing Image Creator, Copilot Designer, Microsoft Designer, Canva AI, DreamStudio, NightCafe, Craiyon, DeepAI, Meta AI, Stability AI |
| Interfaces | ComfyUI, Automatic1111 (A1111), InvokeAI, Fooocus |
| Research | Glide, Parti, Muse, Seedream, Recraft |
| 类别 | 工具 |
|------|------|
| 图像生成 | DALL-E, Midjourney, Stable Diffusion, Adobe Firefly, Imagen, Flux, Ideogram, Leonardo.ai, NovelAI, Grok, Jimeng (即梦) |
| 视频生成 | Sora, Google Veo, Runway, Pika, Kling, Vidu, Luma, Hailuo (海螺), Pixverse, Genmo, Haiper |
| 音频/音乐生成 | Suno, Udio, ElevenLabs, SoundRaw, AIVA, Boomy, Mubert, Beatoven, Soundful, Hume, Fish Audio |
| 多模态 | GPT-4o, GPT-4, ChatGPT, OpenAI, GPT Image, Gemini |
| 平台 | Bing Image Creator, Copilot Designer, Microsoft Designer, Canva AI, DreamStudio, NightCafe, Craiyon, DeepAI, Meta AI, Stability AI |
| 界面工具 | ComfyUI, Automatic1111 (A1111), InvokeAI, Fooocus |
| 研究项目 | Glide, Parti, Muse, Seedream, Recraft |

### File Formats
### 文件格式

| Type | Formats |
|------|---------|
| Image | JPEG, PNG, WebP, AVIF, HEIF, TIFF, GIF, BMP |
| Video | MP4, MOV, AVI, WebM |
| Audio | MP3, M4A, WAV |
| Document | PDF |
| 类型 | 格式 |
|------|------|
| 图片 | JPEG, PNG, WebP, AVIF, HEIF, TIFF, GIF, BMP |
| 视频 | MP4, MOV, AVI, WebM |
| 音频 | MP3, M4A, WAV |
| 文档 | PDF |

---

## 💻 Commands
## 💻 命令

### `aic check [PATHS]`

Analyze files for AI-generation signals.
分析文件中的 AI 生成信号。

```bash
aic check photo.jpg # single file
aic check images/ -r # directory, recursive
aic check photo.jpg --json # JSON output
aic check photo.jpg -q # quiet — exit code only
aic check photo.jpg --min-confidence medium # filter by confidence
aic check photo.jpg --deep # force pixel-level watermark analysis
aic check photo.jpg # 单个文件
aic check images/ -r # 目录,递归扫描
aic check photo.jpg --json # JSON 输出
aic check photo.jpg -q # 静默模式——仅返回退出码
aic check photo.jpg --min-confidence medium # 按置信度过滤
aic check photo.jpg --deep # 强制启用像素级水印分析
```

### `aic info <FILE>`

Dump all provenance metadata (C2PA manifests, XMP properties, EXIF fields, MP4 atoms, ID3 tags, WAV metadata, watermark analysis).
输出所有溯源元数据(C2PA 清单、XMP 属性、EXIF 字段、MP4 原子、ID3 标签、WAV 元数据、水印分析)。

```bash
aic info photo.jpg
```

### Global Flags
### 全局选项

| Flag | Effect |
|------|--------|
| `--json` | Output as JSON |
| `-q, --quiet` | Suppress output, set exit code only |
| `--deep` | Force invisible watermark and audio spectral analysis on all files |
| `--no-color` | Disable colored output |
| 选项 | 说明 |
|------|------|
| `--json` | JSON 格式输出 |
| `-q, --quiet` | 不输出内容,仅设置退出码 |
| `--deep` | 强制对所有文件进行隐形水印和音频频谱分析 |
| `--no-color` | 禁用彩色输出 |

### Exit Codes
### 退出码

| Code | Meaning |
|------|---------|
| `0` | AI signals detected |
| `1` | No AI signals |
| `2` | Error |
| 退出码 | 含义 |
|--------|------|
| `0` | 检测到 AI 信号 |
| `1` | 未检测到 AI 信号 |
| `2` | 错误 |

---

## ⚠️ Limitations
## ⚠️ 局限性

- **Stripped metadata = invisible.** If someone removes the metadata, there's nothing to detect. Social platforms do this on upload — always analyze the original file.
- **Most AI images have no watermark.** Only ~19% of AI images carry detectable provenance markers (2025 data).
- **Proprietary watermarks are out of reach.** SynthID, Stable Signature, and VideoSeal require keys we don't have.
- **Pixel-level analysis has limits.** The built-in DWT-DCT watermark detector catches common patterns but is not a full forensic classifier. For deep statistical detection, use dedicated forensic tools.
- **元数据被删了就没辙。** 如果有人把元数据剥掉了,那就没有可检测的内容。社交平台上传时会自动做这件事——请分析原始文件。
- **大多数 AI 图片没有水印。** 仅约 19% AI 图片携带可检测的来源标记(2025 年数据)。
- **专有水印无法识别。** SynthIDStable SignatureVideoSeal 需要我们没有的密钥。
- **像素级分析有局限。** 内置的 DWT-DCT 水印检测器能捕获常见模式,但不是完整的取证分类器。深度统计检测请使用专业取证工具。

---

## 📄 License
## 📄 许可证

[AGPL-3.0](LICENSE)
6 changes: 3 additions & 3 deletions docs/README.de.md
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
> [English](../README.md) | [简体中文](README.zh-CN.md) | **Deutsch** | [日本語](README.ja.md) | [한국어](README.ko.md) | [हिन्दी](README.hi.md) | [Español](README.es.md)
> [English](README.en.md) | [简体中文](../README.md) | **Deutsch** | [日本語](README.ja.md) | [한국어](README.ko.md) | [हिन्दी](README.hi.md) | [Español](README.es.md)

<div align="center">

Expand All @@ -8,7 +8,7 @@

[![CI](https://github.com/MatrixA/aicheck/actions/workflows/ci.yml/badge.svg)](https://github.com/MatrixA/aicheck/actions/workflows/ci.yml)
[![Crates.io](https://img.shields.io/crates/v/aicheck)](https://crates.io/crates/aicheck)
[![License: AGPL-3.0](https://img.shields.io/badge/license-AGPL--3.0-blue.svg)](LICENSE)
[![License: AGPL-3.0](https://img.shields.io/badge/license-AGPL--3.0-blue.svg)](../LICENSE)
[![Rust](https://img.shields.io/badge/rust-1.86%2B-orange.svg)](https://www.rust-lang.org/)

</div>
Expand Down Expand Up @@ -175,4 +175,4 @@ aic info photo.jpg

## 📄 Lizenz

[AGPL-3.0](LICENSE)
[AGPL-3.0](../LICENSE)
Loading
Loading