This is a submission for the Presage SmartSpectra SDK Challenge.
What I Built
Ultra Talking Pulse is an Android app that measures your heart rate and breathing rate with the phone's front camera, and talks you into the right position first.
Camera vitals only work when your face is centred, evenly lit, at the right distance and still. Almost every app handles that with a face outline on the screen. That works if you're looking at the screen. It doesn't help if you're blind or have low vision, if the phone is propped up across the room, or if you'd simply rather not stare at yourself.
The SmartSpectra SDK already knows exactly what's wrong with the frame: it reports a live validation status like FACE_TOO_FAR, TOO_DARK or EXCESSIVE_MOTION. Ultra Talking Pulse turns that signal into one calm spoken instruction at a time:
"Too far. Move closer to the phone." … "It's too dark. Turn on a light or face a window." … (tone) "Good." … "Measuring now. About 40 seconds. Stay still, breathe normally and don't talk."
Then it tells you the result in plain words, with how confident the SDK is about it.
As a screen reader user myself, I built it so the spoken guidance is the main interface, not an add-on. The camera preview is still there for anyone who wants to look.
Demo
The demo was recorded at home on an ordinary Samsung phone, in a normal room with music playing in the background. No studio, no retakes.
Code
demirajvazi10-max
/
UltraTalkingPulse
Camera-based pulse and breathing measurement for Android, with spoken positioning guidance. Built on the Presage SmartSpectra SDK.
Ultra Talking Pulse
Pulse and breathing from your phone's camera, with spoken guidance that gets you into position.
Ultra Talking Pulse is an Android app built on the Presage SmartSpectra SDK. It estimates your pulse rate and breathing rate from the front camera. Camera vitals only work when your face is centred, well lit and still. Most apps expect you to check that on the screen. Ultra Talking Pulse tells you instead: "too far, move closer", "too dark, turn on a light", "good, hold still". Anyone can set it up without looking at the screen, whether they're blind, have low vision, have the phone propped across the room, or simply aren't holding it.
Part of the Ultra family of accessible software. Creative tools that start with the keyboard, not the mouse.
Not a medical device. Ultra Talking Pulse is for general wellness and curiosity only. It must not be…
- Download the APK: https://github.com/demirajvazi10-max/UltraTalkingPulse/releases/tag/v1.0.0
- Kotlin, single activity,
com.presagetech:smartspectra:3.4.0with a CameraXPreviewView. GPL-3.0.
How It Responds to Human Signals
-
Live signals used: the validation status (all codes mapped to spoken phrases), pulse rate and breathing rate with their
confidencevalues, andTALKINGdetection.
The whole SDK integration comes down to a few observers (simplified here, full version in the source):
sdk.validationStatus.observe(this) { status ->
if (status == null) return@observe
onValidation(status.code.name, status.hint)
}
sdk.metrics.observe(this) { metrics ->
if (metrics.hasCardio()) {
metrics.cardio.pulseRateList.lastOrNull { it.timestamp > 0 }?.let {
pulse = Reading(it.value.toDouble(), it.confidence)
}
}
if (metrics.hasBreathing()) {
metrics.breathing.rateList.lastOrNull { it.timestamp > 0 }?.let {
breathing = Reading(it.value.toDouble(), it.confidence)
}
}
if (metrics.face.talkingList.lastOrNull()?.detected == true) warnAboutTalking()
}
The interesting part is what happens with the validation codes:
-
Guidance that doesn't nag. A code is spoken only after it has stayed the same for 800 ms, never twice in a row, and never over a message that is still being spoken (
tick()). A person in a good position can flicker betweenOKand a borderline code, and this filter absorbs that. -
Only good time counts. The 40-second measurement timer moves only while the status is
OK. If you move, it pauses, and the app tells you why. -
The right voice for each user. If TalkBack is running, messages go through TalkBack, in the user's own voice and speed, and never collide with the screen reader (
Announcer.kt). Without it, Android text-to-speech is used. A short tone and a vibration confirm a good position and a finished measurement, and the screen stays on for the whole measurement. - Honest results. Confidence becomes "high / medium / low". If a reading is weak, the app says so and suggests better light and a steadier phone, instead of presenting a shaky number as fact.
- Bilingual: English and Serbian (Latin script), including the spoken guidance.
- Automatic builds: a GitHub Actions workflow builds the APK on every push and publishes a release for every version tag.
Prize Categories
Best Thoughtful Real-World Use: a real usability gap (setting up camera vitals without watching the screen), solved with careful UX, explicit consent, no API key in the app and zero data retention.
Consent and Data Handling
- Camera consent: a privacy notice is shown on first launch and must be accepted before anything else, followed by Android's own camera permission on the first measurement. The camera runs only while a measurement is active.
- Storage: none. No video, images or results are saved. Results live on screen until the app closes. No accounts, no analytics, Android backup disabled.
- Sharing: frames are processed on the device by the SmartSpectra SDK. The SDK contacts Presage's servers to authenticate and meter usage. Ultra Talking Pulse sends nothing anywhere itself.
-
SDK telemetry: I read Presage's Telemetry and Privacy page. The anonymous aggregate session summary is disabled (
enableTelemetry = false). - Credentials: the app authenticates with Presage's Android OAuth registration (package name and signing certificate), so no API key ships inside the APK.
- AI services: none. The optional LLM insights feature isn't used.
- Retention and deletion: nothing is retained, so there is nothing to delete. Consent can be withdrawn at any time from the "Privacy and consent" button.
- Not medical: the app shows a clear wellness-only disclaimer and makes no diagnosis or treatment claims.
A Note on the Presage Team
While building, I hit two portal issues: the OAuth config download returned an error, and the API key copy button didn't work with a screen reader. I emailed Presage support, and they replied in under an hour with the config file and confirmed both fixes were on the way. That made a real difference to finishing this project.
Author
Demir Ajvazi, maker of the Ultra family of accessible software. Ultra Talking Pulse is free and open source (GPL-3.0). If you'd like to support the work, there's GitHub Sponsors.
Top comments (0)