Free download
Cerberus Image v3
Self-hosted image moderation. Two local signals vote on every image. Nothing leaves your box.
Model weights
cerberus_broad-v3.onnx
22.6 MB · ONNX · CPU-ready · sha256 0d6c45a…12cfa
Whole-image NSFW classifier. Drop it next to service.py. No conversion needed.
Download modelSource code
cerberus-image-v3.zip
44 KB · MIT licence · Flask service + systemd + model card
The full service: scoring API, hash blocklist, threshold tuning guide.
Download codeWindows installer
cerberus-setup-v3.exe
112 MB · Windows 10+ 64-bit · offline installer
Self-contained app with the mini glass UI. Python and libraries included, works offline.
Download installersha256 0d6c45aacf6c259d601f076bb413bfd51b4b5167d5f8acaee92921dbe2a12cfa
Run it
pip install -r requirements.txt python3 service.py curl -X POST http://127.0.0.1:5972/check \ --data-binary @photo.jpg
{"nsfw": false, "score": 0.12, "labels": [],
"nude_score": 0.05, "open_score": 0.12,
"model": "cerberus-image v3"}Spec
- SignalsPart detector + broad classifierAn image is blocked if either trips: explicit-part detection or whole-image NSFW score.
- Cutoffsnude ≥ 0.35 · open ≥ 0.10Grid-tuned on 12,144 reviewer votes. Per-request override via X-Nude-Threshold / X-Open-Threshold.
- Accuracy0.86 global · 0.91 porn · 0.81 furryAgreement with labels on the tuning set, see Training data below. Drawn content is the hard slice.
- Runs onAny CPU boxPython + onnxruntime. No GPU, no API keys, nothing leaves the machine.
Training data
Cutoffs are grid-searched against 12,144 labeled points: reviewer Correct/Wrong votes on live verdicts, plus rating-derived auto-labels for scale. The vote store doubles as the regression set, so retrains re-check the corpus under new cutoffs.
| Slice | Cutoff | Agreement | Points |
|---|---|---|---|
| global | 0.35 / 0.10 | 0.861 | 12,144 |
| fake-porn | 0.40 / 0.10 | 0.908 | 6,205 |
| furry-fake | 0.35 / 0.10 | 0.811 | 5,939 |
- Most labels are weak auto-labels. The human-reviewed subset agrees with the model about 72 percent, so read accuracy as agreement with imperfect labels, not ground truth.
- Drawn content is the hard slice for the part detector (0.81 vs 0.91). The broad classifier carries that slice, which is why the OR verdict exists.
- Thresholds drift as the content mix changes. Cutoffs are re-tuned on a schedule, not once. No fairness or bias evaluation has been done.
The code is MIT. The weights are free to download and use. Provenance and tuning method are documented in MODEL.md inside the zip. Need the mark? Get the icon kit.