RWR: onlooker alert
- If your RWR server sits behind authentik forward auth (e.g. Nginx Proxy Manager + authentik), RWR now signs in with authentik in the browser (OAuth 2 + PKCE) and keeps working in the background. Setup: docs/authentik.md.
- pops up a card over whatever app you are using with a snapshot of the onlooker (boxed in red, with "laser eyes" showing where they look),
- posts a notification,
- saves a photo or a short video clip (for example 10 s before to 10 s after) to your gallery, and optionally to your own Immich server.
It runs in the background and can be switched on and off from the Quick Settings panel.
Detection
- Head tracking: a face turned toward the screen counts as looking. Lightest on battery.
- Eye tracking: follows the irises and combines them with head pose, so it alerts only when the eyes point at the screen.
- Your own face is recognised and ignored, and faces too far away to read the screen don't count.
- A debug view shows live what the detector sees and why each face counts or not.
Private by design
- Detection runs on the phone, offline, with bundled open-source models (YuNet and MediaPipe Face Landmarker). No analytics, no ads, no accounts.
- Nothing leaves the phone unless you pair it with your own RWR server (Docker, open source, in the same repository). Then frames go only to your server, over TLS: detection runs there at full frame rate without draining your battery, and snapshots can be uploaded to Immich.
- The camera is always off while the screen is off. Android shows its camera indicator while RWR is watching.
Requires Android 10 or newer and a front camera. The pop-up needs the "Display over other apps" permission.
- Author: revocx35
- License: GNU General Public License v3.0 only
- Issue Tracker
- Source Code
- Changelog
- Build Metadata
- Reproducibility Status
Donate
Versions
Although APK downloads are available below to give you the choice, you should be aware that by installing that way you will not receive update notifications and it's a less secure way to download. We recommend that you install the F-Droid client and use that.
Download F-Droid-
x86_64This version requires Android 10 or newer.
It is built and signed by F-Droid, and guaranteed to correspond to this source tarball.
Download APK 16 MiB PGP Signature | Build Log
-
arm64-v8aThis version requires Android 10 or newer.
It is built and signed by F-Droid, and guaranteed to correspond to this source tarball.
Download APK 14 MiB PGP Signature | Build Log
-
armeabi-v7aThis version requires Android 10 or newer.
It is built and signed by F-Droid, and guaranteed to correspond to this source tarball.
Download APK 13 MiB PGP Signature | Build Log
-
x86_64This version requires Android 10 or newer.
It is built and signed by F-Droid, and guaranteed to correspond to this source tarball.
Download APK 16 MiB PGP Signature | Build Log
-
arm64-v8aThis version requires Android 10 or newer.
It is built and signed by F-Droid, and guaranteed to correspond to this source tarball.
Download APK 14 MiB PGP Signature | Build Log
-
armeabi-v7aThis version requires Android 10 or newer.
It is built and signed by F-Droid, and guaranteed to correspond to this source tarball.
Download APK 13 MiB PGP Signature | Build Log
- Face detection now uses the open-source YuNet detector (same as the RWR server) instead of Google ML Kit: about half the CPU, and good at small faces.
- MediaPipe's usage-statistics client can no longer send anything: its Google telemetry transport is replaced by a do-nothing stand-in.
- Fewer false alerts: far-away faces never count, every candidate face is verified, an onlooker must stay half a second.


