RWR: onlooker alert

RWR: onlooker alert

Warns you when someone behind you looks at your screen (shoulder surfing)

revocx35 Security

Screenshots

Screenshot of RWR: onlooker alert Screenshot of RWR: onlooker alert Screenshot of RWR: onlooker alert

Description

RWR watches through the front camera for people looking at your screen from behind (shoulder surfers). When it sees one, it:

  • 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.

What’s new (1.5.0)

First F-Droid release (1.5.0).
- 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.

Versions

Version Date Size Requires Android Download
1.5.0 current
a933f1da8d4ced9a…
2026-10-18 16 MB API 29
1.5.0
d7031103704dbb81…
2026-10-18 15 MB API 29
1.5.0
05cc240e3fc3f154…
2026-10-18 14 MB API 29

Permissions

What the app asks the system for. Android only grants sensitive access after you confirm it.

  • CameraTake photos and videos.
  • Foreground serviceKeep running in the background, visible in the status bar.
  • FOREGROUND_SERVICE_CAMERA
  • NotificationsShow notifications.
  • Display over other appsDraw content on top of other apps.
  • Internet accessSend and receive data over the internet.
  • rwr.DYNAMIC_RECEIVER_NOT_EXPORTED_PERMISSION

Comments