Smaug-AI-Image-Detector

Homepage Hugging Face
License

1. Model Introduction

Smaug-AI-Image-Detector sets a new state of the art for open-source AI-generated image detection. It is a fine-tune of Google's EmbeddingGemma-2 by Abacus.AI and the strongest open-source detector on real-world images.

A dedicated vision model, 41% smaller than its base. We streamlined EmbeddingGemma-2 into a vision-only architecture by removing its 305M-parameter audio tower: 439M parameters instead of 744M, with no loss in accuracy.

import sys
from huggingface_hub import snapshot_download
sys.path.insert(0, snapshot_download("abacusai/Smaug-AI-Image-Detector"))
from smaug_image_detect import SmaugImageDetect     # ships with this repo

detector = SmaugImageDetect.from_pretrained("abacusai/Smaug-AI-Image-Detector")
detector("photo.jpg")                                 # 0.97 -> probability the image is AI-generated

2. Highlights

  • #1 on real-world images: 0.973 AUC on OpenFake Reddit; the next best open-source detector scores 0.947.
  • Catches more at the same false-alarm rate: at 5% false alarms it catches 86.7% of AI images on Reddit; the next best catches 77.4%.
  • #1 on OpenFake Core (0.991 AUC) and #1 on average across all three benchmarks (0.982 AUC).
  • Precise: flags only 3.0% of real Reddit photos, 1.4% of real OpenFake photos and 0.4% of real CommunityForensics photos as AI.
  • Current generators: GPT-Image 2, Nano Banana Pro, Midjourney 7, Seedream 5, FLUX.2, Z-Image, Recraft, Ideogram, ERNIE-Image, Sora 2 and Veo 3 frames, DALL·E 3, Firefly 3 and more.
  • Runs anywhere: at 439M parameters it runs on a single consumer GPU (about 1 GB of memory), on Apple Silicon Macs via Metal, or on a plain CPU, so images can be checked locally without sending them anywhere.

3. Model Summary

ArchitectureEmbeddingGemma-2 image encoder + linear classifier
Total Parameters439M (base model: 744M)
Audio TowerRemoved: vision-only architecture, −305M parameters
InputAny image; scored as three 528 × 528 crops at native resolution
OutputProbability that the image is AI-generated
HardwareNVIDIA GPU (~1 GB), Apple Silicon (Metal), or CPU
Precisionbfloat16 weights
Base Modelgoogle/embeddinggemma-2
AdaptationFull fine-tune

4. Evaluation

Smaug-AI-Image-DetectorOpenFake-SwinV2Bombek1-SigLIP-DINOv2Thermostatic-FrontierCommFor-384haywoodsloan-SwinV2
AUC ↑
OpenFake Reddit0.9730.9470.8420.8940.7440.897
OpenFake Core0.9910.9890.9590.9770.9210.953
CommunityForensics0.9810.9510.9900.9790.9680.901
Average0.9820.9620.9300.9500.8780.917
AI images caught at 5% false alarms ↑
OpenFake Reddit86.7%77.4%54.0%60.8%34.8%59.4%
OpenFake Core95.8%95.0%83.9%87.9%68.2%83.1%
CommunityForensics92.2%81.8%96.2%91.6%83.2%74.5%
Real photos flagged as AI ↓
OpenFake Reddit3.0%2.9%34.7%16.4%2.0%9.5%
OpenFake Core1.4%2.1%18.4%6.6%0.3%1.1%
CommunityForensics0.4%3.0%5.2%17.7%4.0%10.6%
Bold = best in the row. Shading is relative within each row (darker = better). All models scored on the same 26,070 test images.
All open-source detectors tested
Model OpenFake Reddit OpenFake Core CommunityForensics Average Real photos flagged: Reddit / Core / CF
Smaug-AI-Image-Detector 0.9730 0.9909 0.9808 0.9816 3.0% / 1.4% / 0.4%
OpenFake-SwinV2 0.9467 0.9886 0.9512 0.9622 2.9% / 2.1% / 3.0%
s-gehring/detectra-openfake 0.9359 0.9715 0.9535 0.9537 2.7% / 1.2% / 2.0%
Thermostatic-Frontier 0.8935 0.9766 0.9792 0.9498 16.4% / 6.6% / 17.7%
Bombek1-SigLIP-DINOv2 0.8418 0.9591 0.9900 0.9303 34.7% / 18.4% / 5.2%
haywoodsloan-SwinV2 0.8970 0.9528 0.9011 0.9170 9.5% / 1.1% / 10.6%
TensorFold/detectra-v1 0.7483 0.9330 0.9652 0.8822 5.3% / 0.6% / 3.5%
CommFor-384 0.7441 0.9214 0.9678 0.8778 2.0% / 0.3% / 4.0%
Ateeqq/ai-vs-human-image-detector 0.8665 0.9045 0.6939 0.8217 27.2% / 14.3% / 40.1%
Organika/sdxl-detector 0.6625 0.6673 0.8243 0.7180 43.9% / 22.4% / 24.8%
umm-maybe/AI-image-detector 0.7364 0.6007 0.6042 0.6471 13.8% / 17.3% / 15.3%

5. Training Approach

  • Full fine-tune of EmbeddingGemma-2's image encoder with a linear classifier on its embedding.
  • Native-resolution crops keep the pixel-level traces that generators leave, instead of shrinking the image.
  • Robustness training with resizing, recompression and blur, so scores hold up on shared and re-saved copies.
  • Hard negatives from professional photography, so a polished real photo is not mistaken for AI.

6. Limitations

  • Brand-new generators, or ones built to evade detectors, may get through.
  • A real photo with a small AI-edited region may be scored as real.
  • A score is evidence, not proof: do not use it as the only basis for decisions about people or their work.

7. Usage

pip install "sentence-transformers[image]" pillow
from huggingface_hub import snapshot_download
import sys

path = snapshot_download("abacusai/Smaug-AI-Image-Detector")
sys.path.insert(0, path)
from smaug_image_detect import SmaugImageDetect

detector = SmaugImageDetect.from_pretrained(path)        # NVIDIA GPU, Apple Silicon (Metal) or CPU, picked automatically
detector("photo.jpg")                                     # -> float in [0, 1]
detector(["a.jpg", "b.png", pil_image], batch_size=16)   # -> list of floats
detector("photo.jpg", crops=1)                            # 3x faster

0.5 is a good default threshold; raise it when a false alarm is costly.

8. License

Apache 2.0, the same license as the base model, EmbeddingGemma-2.

9. Citation

@misc{abacusai2026smaugaiimagedetector,
  title  = {Smaug-AI-Image-Detector},
  author = {Abacus.AI},
  year   = {2026},
  url    = {https://huggingface.co/abacusai/Smaug-AI-Image-Detector}
}
Downloads last month
8
Safetensors
Model size
0.4B params
Tensor type
BF16
·
Inference Providers NEW
This model isn't deployed by any Inference Provider. 🙋 Ask for provider support

Model tree for abacusai/Smaug-AI-Image-Detector

Finetuned
(112)
this model