An F1 companion for Nothing phones with a Glyph Matrix (Phone 3, Phone (4a) Pro). It lives on the back and on your home screen — no app icon, no account, no API keys — showing the next Grand Prix session, a live countdown, the current leader, and championship standings.
Unofficial, fan-made, non-commercial. Not affiliated with Nothing or Formula 1. See
NOTICE.md.
Glyf1 is deliberately app-less — there is no launcher icon. Everything happens through:
- Glyph Matrix toy — the rear matrix shows the current F1 face.
- Home-screen widget — schedule, countdown and leader on the front. Tap it to refresh.
- Quick Settings tile — toggles the automatic matrix takeover during live sessions.
The 4a Pro matrix is a circular 13×13 grid, so text uses a hand-built 3×5 pixel font. The face changes with the session state:
| Race week | Hours out | Minutes out |
|---|---|---|
![]() |
![]() |
![]() |
| Session code + days | Code + hours | Code + minutes |
| Live session | Result | Standings |
|---|---|---|
![]() |
![]() |
![]() |
| Spinning wheel | Winner + session | WDC leader + points |
Matrix images are simulations generated by
tools/render_matrix.py from the app's own
PixelFont / MatrixRenderer logic — the physical rear LEDs can't be
screen-captured. Regenerate with python3 tools/render_matrix.py.
Two sizes, each with three states — before a session (event / session / start
time + standings), during it (LIVE + dot-matrix car art), and after
(FINISHED + winner).
Wide (4×2):
| Upcoming | Live | Finished |
|---|---|---|
![]() |
![]() |
![]() |
Compact (2×2):
| Upcoming | Live | Finished |
|---|---|---|
![]() |
![]() |
![]() |
The bitmap text and dot-matrix art follow the system theme — here the wide widget in light mode:
| Upcoming | Live | Finished |
|---|---|---|
![]() |
![]() |
![]() |
Before the first data fetch (or if the schedule can't be loaded) the widget
shows a no-data fallback — NO DATA with dot-matrix art:
You need Android Studio (or the Android SDK + JDK 17) and a Nothing phone with a Glyph Matrix.
-
Get the Glyph Matrix SDK (not bundled — Nothing's licence forbids redistributing it). Download
glyph-matrix-sdk-2.0.aarfrom Nothing's kit and save it asapp/libs/GlyphMatrixSDK.aar. Seeapp/libs/README.md. -
Build & sideload:
./gradlew assembleDebug adb install app/build/outputs/apk/debug/app-debug.apk # enable Glyph developer mode (expires after 48h): adb shell settings put global nt_glyph_interface_debug_enable 1 -
Set it up on the phone (there is no app to open):
- Long-press home → Widgets → Glyf1 Widget.
- Settings → Glyph Interface → Glyph Toys → add Glyf1.
- Optionally edit the Quick Settings panel to add the Glyf1 tile.
Copy keystore.properties.example to keystore.properties, generate a
keystore, and fill it in:
keytool -genkey -v -keystore glyf1-release.jks \
-keyalg RSA -keysize 2048 -validity 10000 -alias glyf1
./gradlew assembleRelease
# → app/build/outputs/apk/release/app-release.apk
keystore.properties and *.jks are gitignored — never commit them.
WorkManager (RefreshWorker, every 30 min) is the only network caller →
DataStore cache (WidgetStateCache) → both the widget (F1WidgetProvider,
all text rendered as Ndot/NType bitmaps) and the toy (F1GlyphToyService)
render from cache. MatrixRenderer + PixelFont turn short strings into the
13×13 dot-matrix face. During live windows the QS tile lets the app hold the
matrix via setAppMatrixFrame.
Data: schedule & standings from Jolpica; live positions from OpenF1. OpenF1's real-time feed is paywalled, so during live sessions positions gracefully fall back to championship standings.
Design notes and the build plan live in docs/superpowers/.
Project code is MIT. Third-party components (the Nothing SDK,
fonts, F1/Nothing trademarks, data sources) are not — see
NOTICE.md.















