Kraftify

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 model

Source 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 code

Windows 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 installer

sha256 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.

SliceCutoffAgreementPoints
global0.35 / 0.100.86112,144
fake-porn0.40 / 0.100.9086,205
furry-fake0.35 / 0.100.8115,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.

kraftify.net