AI2026In progress
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.

Project detailsتفاصيل المشروع
- Role
- Solo
- Year
- 2026
- Status
- In progress
- Built with
- Kotlin
- Android Accessibility Service
- ONNX Runtime
- NudeNet v3
- YOLOv8n
- Where to find it
- Source
What it is
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.
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.
It is pre-1.0 and dogfood, developed against a single device, and the README says so rather than implying broader testing than exists.
حلّت إضافات المتصفح هذا للمتصفح. ولم يحلّه شيء للهاتف حيث تعيش المشكلة اليوم في معظمها. فالمُرشِّح القائم على الـ DOM لا يرى صور خلفيات CSS ولا الإطارات المضمّنة ولا الصورة داخل الصورة ولا الإعلانات ولا ملفات PDF، ولا يغطي إلا تطبيقًا واحدًا.
أما «غَضّ» فيقرأ الشاشة نفسها. تُغطّى الصور الثابتة، وهي الحالة الأساسية، قبل أن تتمكن من النظر إليها فعليًا، ثم تُفحص فتُكشف أو تُشوَّش. والكشف بـ NudeNet v3 بدقة 320×320، يعمل على الجهاز بلا سحابة وبلا تتبّع.
المشروع قبل الإصدار 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.
- يعمل على مستوى النظام في كل التطبيقات، لا في متصفح فقط.
- كشف على الجهاز بلا سحابة وبلا تتبّع.
- سقف موثّق: قوي على الصور الثابتة، وأفضل جهد على الفيديو.