AI2026
Ghadd
System-wide on-device image filtering for Android.
- In progress
AI2026
System-wide on-device image filtering for Android.

In short
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.
The compartments
Built with
Where to find it
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 ذلك بدل الإيحاء باختبار أوسع مما جرى.
Results
Each one opens twice: what went wrong on the left, what I did on the right.
01
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.
02
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.
Next project
HorizonEye breaks that know when you are actually at the computer.Open it →افتحه ←Shelf
All projectsAll 40, in six compartments.