Ein Plugin, drei Plattformimplementierungen hinter einer Dart-API.
- Dart-Schicht (
lib/src/api/) — die öffentliche Oberfläche: Scan-Modi, Konfiguration, Ergebnisobjekte, Modellverwaltung, Ensemble-Strategien, Kamerasitzungen. Hier liegt auch der wahrnehmungsbasierte Cache, damit dasselbe Bild nicht zweimal durch das Modell geht.
- Plattformkanäle (
lib/src/platform/) — die Brücke nach unten. iOS rechnet mit Core ML, Android mit TensorFlow Lite, Web lädt nsfwjs (TensorFlow.js) und NudeNet über onnxruntime-web bei Bedarf vom CDN.
- Widgets (
lib/src/widgets/) — 19 fertige Bausteine: Galerieansicht, Kamera-HUD mit Overlay, Moderations-Gate, Berechtigungsansicht, Ergebnis-Detail, Redaction-Ansicht.
Die Modelle sind nicht im Binary. Vier Klassifizierer stehen zur Wahl und werden beim ersten Gebrauch nachgeladen — wahlweise vorab über downloadIfMissing, mit SHA-256-Prüfung des Archivs und optional über einen eigenen Mirror. Ein Klassifizierer allein reicht meist; für höhere Genauigkeit lassen sich mehrere über MajorityEnsemble oder WeightedEnsemble kombinieren.
Videos brauchen keine eigene API: scanFile erkennt den Container und tastet Frames in einstellbarem Abstand ab.