Glanceable reading on Rokid AR glasses.
Read PDFs, TXT files and shared text one word at a time — streamed live
from your phone over Bluetooth.
Real-world use, captured through the lens — full clip: docs/media/demo.mp4
https://github.com/beyondlevi/lume/raw/main/docs/media/demo.mp4
Lume turns Rokid AR glasses into a wearable speed reader. It uses RSVP (Rapid Serial Visual Presentation): the text flows one word at a time at a fixed point in your field of view, with the focal letter (ORP) highlighted, so your eyes never travel across a line. Start at a comfortable 350 wpm and push up to 700.
| Library | Reading | Paused (context) |
|---|---|---|
![]() |
![]() |
![]() |
It is a paired two-app system:
- Phone app (host) — your reading library. Add PDF and TXT files, paste text, or share text/PDFs from any Android app straight into Lume through the native share sheet. The phone extracts the text on-device and streams word windows to the glasses.
- Glasses app (client) — a green-phosphor HUD. Pick a document, tap to read; tap to pause, swipe to change speed while playing or to jump back/forward a sentence while paused. Reading progress is saved automatically and synced back to the phone.
Rokid Glasses (thin HUD client) Android Phone (host / brain)
library / RSVP reader <──CXR/BLE/SPP──> document library (PDF/TXT/share)
word-window buffering ── UpdateProgress ─────► text extraction + progress store
- RSVP display — one word at a time at a fixed focal point, with the optimal-recognition-point letter highlighted so the eye locks once and never scans.
- Adaptive pacing — long words, clause/sentence endings and paragraph breaks hold proportionally longer, keeping high speeds comfortable.
- Speed dial — 150–700 wpm in 25 wpm steps, adjusted mid-read with a swipe; the footer shows live progress and current speed.
- Pause with context — pausing shows the surrounding sentence with the current word highlighted, so you re-anchor instantly before resuming.
- Sentence stepping — while paused, swipe to rewind or skip to sentence boundaries.
- Progress sync — the phone persists the exact word you stopped at, per document; reopening (even after reconnecting) resumes in place.
- Word-window streaming — the glasses buffer ~400 words and request ahead over Bluetooth, so reading never stalls on the radio link.
- PDF and TXT import — text extracted fully on-device (PdfBox-Android); nothing leaves your phone.
- Paste text — quick capture with an optional title.
- Native Android share target — share text or PDF/TXT files (single or multiple) from any app straight into the library.
- Document cards — word count, source tag (PDF / TXT / SHARED) and a live reading-progress bar; long-press to remove.
- Reading-speed setting — a default wpm selector on the phone, pushed live to connected glasses (protocol-synced); the glasses persist the last speed used.
- Glasses link status — live connection state on the home screen.
- Hybrid Bluetooth transport — races Rokid CXR-L, BLE GATT and Bluetooth Classic SPP and keeps whichever completes a versioned handshake first, with automatic reconnection and a low-power hibernate mode.
- See-through-display HUD discipline — black-as-transparent rendering, focus-highlight suppression and keep-screen-on handling tuned for the Rokid display.
- Bilingual UI — English / Português, chosen on the phone and pushed to the glasses.
Planned and candidate improvements, roughly in priority order:
- EPUB import — the most requested e-book format; chapter-aware.
- Web article import — share a URL, get a clean readable extraction.
- Chapter / heading navigation — jump between sections on long books instead of sentence-stepping only.
- Bookmarks & multiple positions — save spots beyond the single resume point.
- Reading stats — time read, average wpm, streaks, per-document history on the phone.
- Smart pacing profiles — per-language tuning and an optional "accelerate over time" ramp.
- OCR for scanned PDFs — image-only PDFs currently extract no text.
- Line/chunk mode — an alternative two-or-three-word display for lower speeds and skimming.
- Phone reading mode — read the same library on the phone when the glasses are off.
- Auto-advance documents — queue several shares and read them back-to-back.
- Glasses-side quick settings — font size and brightness without leaving the reader.
Suggestions and PRs are welcome — open an issue to discuss.
android-phone/ Phone host: library + text extraction + transport server
android-glasses/ Glasses client: HUD + RSVP reader + transport client
shared-contracts/ Shared Bluetooth wire protocol + document contracts
docs/ Architecture, usage and media
Each Android app is an independent Gradle build; both compile
shared-contracts directly via sourceSets.
There is no gradlew (Unix) checked in — only gradlew.bat. On macOS/Linux
run the pinned wrapper via its jar with JDK 17+ (21 works):
export JAVA_HOME="$(/usr/libexec/java_home -v 21)"
export ANDROID_HOME="$HOME/Library/Android/sdk"
# Phone APK
cd android-phone && "$JAVA_HOME/bin/java" -cp gradle/wrapper/gradle-wrapper.jar \
org.gradle.wrapper.GradleWrapperMain assembleDebug --console=plain
# Glasses APK
cd ../android-glasses && "$JAVA_HOME/bin/java" -cp gradle/wrapper/gradle-wrapper.jar \
org.gradle.wrapper.GradleWrapperMain assembleDebug --console=plainOutputs: android-phone/app/build/outputs/apk/debug/lume-phone-debug.apk and
android-glasses/app/build/outputs/apk/debug/lume-glasses-debug.apk.
The glasses build bundles the Rokid CXR native libs —
Unable to strip … libcxr-bridge-jni.sois a benign warning, not an error.
- Phone:
adb install -r android-phone/app/build/outputs/apk/debug/lume-phone-debug.apk - Glasses: push the APK to phone storage and sideload it via the Hi
Rokid app (there is no direct developer ADB to the glasses):
adb push android-glasses/app/build/outputs/apk/debug/lume-glasses-debug.apk /sdcard/Download/
- Install the phone app and sideload the glasses app.
- Pair the phone and glasses over Bluetooth at the OS level.
- Open Lume on the phone, grant Bluetooth/notification permissions, and add something to read (file, pasted text, or share from another app).
- Open Lume on the glasses. Pick a document and tap to start reading.
| Gesture | Playing | Paused |
|---|---|---|
| Tap | Pause | Resume |
| Swipe up/down | Speed +/- | Sentence back/forward |
| Double tap | Back to library | Back to library |
Release builds read signing from env vars or Gradle properties:
ANDROID_KEYSTORE_PATH, ANDROID_KEYSTORE_PASSWORD, ANDROID_KEY_ALIAS,
ANDROID_KEY_PASSWORD, and optional LUME_VERSION_NAME /
LUME_VERSION_CODE. assembleRelease falls back to the debug keystore when
signing values are absent; partial configuration fails the build.
Lume was inspired by Flow, a glanceable-reading experiment for the Meta Ray-Ban Display shared by its author on Reddit: "I made Flow — exploring glanceable reading" (live demo). Seeing RSVP reading work so naturally on smart glasses was the spark for building the same experience — with a phone-side library, file import and Android share integration — for the Rokid platform. Thank you for putting the idea out there.
Released under the MIT License.



