IRIS replaces the snooze button with something you have to physically do. Smile at the camera. Walk back to a spot you photographed. Hunt down an object it names at random. Find real daylight. Solve arithmetic. The alarm keeps ringing until one of them is genuinely done.
Side-loaded APK · Android 8.0+ · no Play Store listing
Every alarm clock hands its most consequential button to the least capable version of you. A tap is a reflex; it happens before you are conscious enough to regret it. Maths puzzles were the usual answer, and they fail the same way — you can do them lying down, eyes half shut, and be asleep again ninety seconds later.
Most IRIS challenges cannot be satisfied from under the duvet. They need the camera pointed at something across the room, or a walk to somewhere with real light.
Face detection, scene matching and object recognition all run on-device through ML Kit. No frame is uploaded, stored or kept. The app needs the internet for exactly one thing: checking its own updates.
Exact alarms through Doze, a foreground service that owns the audio, a volume floor so a muted stream can't silence it, and re-arming after reboot, time changes and app updates.
Pick one per alarm. Each has a different cost at 6am, which is the real difference between them — and you can rehearse any of them in the editor before you trust it.
Hold a real smile at the front camera, eyes open, for three seconds. In a dark bedroom the screen becomes the light source: brightness goes to full and a white ring-light wash lights your face without blowing out the preview.
Passes when smile confidence > 0.8 and both eyes open > 0.7, held continuously for 3s.
Photograph a spot when you set the alarm — the kitchen counter, the bathroom mirror, a bookshelf across the room. The alarm only stops once the camera is looking at that place again. A thumbnail of the spot is shown while it rings, because half asleep you will not remember which shelf you chose.
Passes when scene similarity to your captured anchor exceeds 82% across 4 consecutive frames. Matching uses a perceptual hash plus a luminance histogram, so it survives different light and imperfect framing.
The app names a household object when the alarm goes off — a sink, a shoe, a cup, an open drawer — and you have to point the camera at a real one. Choosing it at ring time is the whole point: it cannot be staged on the bedside table the night before. Each target comes with a hint about which room to try.
Passes when the on-device labeller recognises the named object at > 55% confidence across 3 consecutive frames. Don't own one? Two swaps are allowed — then you're stuck with what you were given.
Walk somewhere genuinely bright and hold it there. Uses the ambient light sensor, not the camera — so it works with the camera permission refused, and a phone screen shoved at the sensor won't do it.
Passes when the sensor holds above 500 lux for 1.5 seconds, so a torch flashed past doesn't count.
Arithmetic on a big drawn keypad — not the system keyboard, which over a lock screen is at the mercy of whichever keyboard app you have installed. Difficulty and the number of problems are both settings. A wrong answer rerolls the question and shakes the pad, but never takes back one you already solved.
Passes when you answer the configured number of problems correctly (3 by default). Needs no camera, no sensor and no permission, which makes it the fallback on any device that can't run the others.
Deliberately a drag rather than a button — half asleep a button is easy to hit by accident, a deliberate push across the screen is not. The whole screen takes the colour of the decision as the card moves.
A snooze arms a fresh exact alarm and posts a Snoozed until 06:09 notification with a cancel action. Snoozing again replaces the pending one rather than stacking, and solving the challenge — or disabling or deleting the alarm — cancels it. The challenge is still waiting at the end of it.
A full-screen intent only wins while the phone is locked, so IRIS also starts the alarm screen outright when you're already using the phone. It shows over the lock screen rather than dismissing it — no PIN prompt in front of your alarm.
Solving a challenge proves you were awake for ten seconds, not that you stayed up. Optionally, IRIS re-arms the same challenge for a few minutes later, and only an explicit I'm up cancels it.
If a challenge genuinely can't run — no camera, permission refused — IRIS falls back to one that can and says so, rather than ringing at something impossible until the auto-silence timeout.
Every interesting question about these challenges is one no description can answer. Can the detector find your face in your bedroom's light? Does it recognise the objects in your kitchen? Is the spot you captured actually matchable from where you'll be standing?
No timer, no stopwatch, no focus mode, no tab bar. IRIS does one thing and the whole screen belongs to it — which is what the enormous clock and the list under it were always designed for.
Registers the standard alarm intents, so "Hey Google, set an alarm for 7:30" can be handed to IRIS. Long-press the launcher icon to go straight to a new alarm.
A clock-face dial: minutes on the outer ring, hours on the inner one, both draggable and tappable, scrubbing a minute at a time so exact times need no second control. New alarms open at the current time.
Pitch-black-first design with amber and neon-green accents, Space Grotesk throughout, and light / dark / system themes. The ringing screen stays dark whatever the app theme — it's a face full of phone in a dark bedroom.
Exact alarms via setExactAndAllowWhileIdle, re-armed after
reboot, clock changes, timezone changes and app updates. Volume fades
in from near-silence, and a muted alarm stream is raised to a floor
then put back.
Long-press any alarm to start a selection — rings appear beside every row and the toggles step aside — then delete as many as you like at once.
Requires Android 8.0 (Oreo) or newer. There is no Play Store listing — these APKs are downloaded and installed directly.
| Build | Who it's for | Size |
|---|---|---|
| arm64-v8a Recommended | Every phone sold in roughly the last eight years. Pick this one if you're not sure. | ~27 MB |
| armeabi-v7a | Older 32-bit devices. | ~20 MB |
| x86_64 | Emulators and the handful of Intel-based devices. | ~29 MB |
| universal | Contains every architecture. Much larger — only worth it if the others refuse to install. | ~81 MB |
The ringing alarm is delivered as a notification. Without these it cannot show anything at all.
Lets the alarm take over the screen while you're already using the phone, instead of a banner you have to notice.
Without it Android may fire the alarm late — sometimes by many minutes — to save battery.
Battery optimisation can delay or drop an alarm while the phone is idle overnight, which is exactly when it needs to fire.
Only for the Mirror, Target and Hunt challenges. Frames are analysed in memory and never stored or sent anywhere. Light Iris and Math Iris work without it.
Only so the in-app updater can hand a new build to the system installer. You can skip it and update by downloading APKs yourself.
Android refuses an update signed with a different key than the installed app, so the in-app updater only works if every release is signed with one key — and that key lives in the repository. It is deliberately not a secret. It means anyone could build an APK that installs over this one, so only install builds from this project's own releases page.
Xiaomi, Samsung, Huawei, Oppo and others add autostart and background limits that Android cannot report. If the alarm doesn't appear over the lock screen with everything granted, look for Autostart or Lock screen display in the app's system settings.
The logic is covered by unit tests and every build is compiled and linted in CI, but this has been tested on a small number of real phones. Keep a second alarm for anything that genuinely matters until you've watched it fire a few times.
The object labeller knows a fixed vocabulary, and every hunt target was checked against it — but whether it finds your sink in your morning light is a real question. That's precisely what the rehearsal button is for.