AI2026
Ghadd
System-wide on-device image filtering for Android.
An Android accessibility service that covers and blurs immodest imagery anywhere on screen, in any app, using a detector that runs entirely on the device. Because it reads pixels rather than a DOM, it has none of the blind spots a browser extension has.
- Production
- Ghadd
- Role
- Solo
- Year
- 2026
- Status
- In production
- Format
- AI
- Built with
- KotlinAndroid Accessibility ServiceONNX RuntimeNudeNet v3YOLOv8n
- Where to find it
- Source


Treatment
Browser extensions solved this for the browser. Nothing solved it for the phone, where most of the problem now lives. A DOM-based filter cannot see CSS background images, iframes, picture-in-picture, ads or PDFs, and it only ever covers one app.
حلّت إضافات المتصفح هذا للمتصفح. ولم يحلّه شيء للهاتف حيث تعيش المشكلة اليوم في معظمها. فالمُرشِّح القائم على الـ DOM لا يرى صور خلفيات CSS ولا الإطارات المضمّنة ولا الصورة داخل الصورة ولا الإعلانات ولا ملفات PDF، ولا يغطي إلا تطبيقًا واحدًا.
Ghadd reads the screen instead. Static images, the primary case, are covered before you can meaningfully look at them, checked, then cleared or blurred. Detection is NudeNet v3 at 320×320, running on-device with no cloud and no telemetry.
أما «غَضّ» فيقرأ الشاشة نفسها. تُغطّى الصور الثابتة، وهي الحالة الأساسية، قبل أن تتمكن من النظر إليها فعليًا، ثم تُفحص فتُكشف أو تُشوَّش. والكشف بـ NudeNet v3 بدقة 320×320، يعمل على الجهاز بلا سحابة وبلا تتبّع.
It is pre-1.0 and dogfood, developed against a single device, and the README says so rather than implying broader testing than exists.
المشروع قبل الإصدار 1.0 وقيد الاستخدام الشخصي، ومطوَّر على جهاز واحد، ويقول الـ README ذلك بدل الإيحاء باختبار أوسع مما جرى.
Challenges
The platform caps you at three screenshots a second
The problem
An accessibility service can capture roughly three frames per second. Video, reels and autoplay feeds move far faster than that, so frames between checks are never inspected at all, and no amount of model tuning changes it.
What I did
The ceiling is stated as a product boundary rather than hidden: static images are the supported experience, video is explicitly best-effort, and the README leads with 'substantially reduces exposure, does not guarantee zero exposure'. A tool in this category that overpromises causes the harm it claims to prevent.
Cover first, decide after
The problem
Running the detector before covering means the image is on screen, unblurred, for as long as inference takes. That is the exact moment the whole app exists to prevent.
What I did
The order is inverted: cover the image immediately, then classify, then clear it if it was fine. A brief cover over a harmless photo is a far cheaper error than a brief exposure of a harmful one.
Results
- Works system-wide across every app, not just a browser.يعمل على مستوى النظام في كل التطبيقات، لا في متصفح فقط.
- On-device detection with no cloud and no telemetry.كشف على الجهاز بلا سحابة وبلا تتبّع.
- Documented ceiling: strong on static imagery, best-effort on video.سقف موثّق: قوي على الصور الثابتة، وأفضل جهد على الفيديو.