Pass image bytes, get back labels, confidence scores, and bounding boxes. Everything runs on the user's device — images never leave the phone.
// 1. initialize once (e.g. in main()) await XPunge.initialize('xp1.your-api-key'); // 2. analyze any image final detections = await XPunge.analyzeImage(imageBytes); // 3. use the results for (final d in detections) { print('${d.label} — ${(d.confidence * 100).toInt()}%'); print('box: ${d.boundingBox}'); }
The model runs entirely on-device via CoreML (iOS) and LiteRT (Android). That constraint isn't a tradeoff — it turned out to be an advantage.
initialize(), analyzeImage(), analyzeFile(). Works with any Uint8List — JPEG, PNG, HEIF, WebP.Get an API key from the developer dashboard, then add the plugin to your Flutter project.
dependencies: xpunge: ^1.0.0
import 'package:xpunge/xpunge.dart'; // In main() or app initialization await XPunge.initialize('xp1.your-api-key'); // From bytes List<Detection> results = await XPunge.analyzeImage(imageBytes); // From a File List<Detection> results = await XPunge.analyzeFile(file); // From an XFile (image_picker, etc.) List<Detection> results = await XPunge.analyzeXFile(xfile);
class Detection { final String label; // e.g. "explicit" final double confidence; // 0.0 – 1.0 final Rect boundingBox; // pixel coords // free tier: boundingBox = Rect.zero }
Priced per image — cheaper than Google Cloud Vision at every tier. All paid plans include full bounding boxes, video frame analysis, and email support.