Tempo is an advanced music journal and scrobbler for Android, providing the most detailed, beautiful listening statistics and data visualizations available. It runs in the background, tracks your playback across your favorite media players, and turns your history into rich, interactive charts and shareable spotlight cards.
Because it is built with a local-first architecture, all your data is stored securely on your deviceβkeeping your personal music habits entirely private by design.
- Deep-Dive Analytics: Access highly detailed stats, heatmaps, and listening timelines for every Song, Artist, and Album in your collection.
- Listening Quality Score (LQS): A custom metric that measures your actual engagement with songs based on play progress, seek/replay behaviors, and skips.
- Vibe Tracking: Captures valence, energy, and danceability metadata to map the mood of your listening habits.
Generates beautiful, shareable statistic cards using Jetpack Compose Canvas:
- Circadian Rhythm: A 24-hour radial chart mapping your peak activity hours.
- Weekly Pulse: A 3D isometric layout comparing weekday vs. weekend listening habits.
- Forgotten Favorite: Relights songs you haven't played in a long time, showing how many days have passed.
- Sonic Immersion: An optical art-inspired tunnel visualizing deep listening sessions.
- Seasonal Poetry: Dynamic, hemisphere-aware text summarizing your monthly listening mood.
- Automatically tracks playback from Spotify, YouTube Music, Apple Music, Poweramp, and 50+ other Android audio players.
- Uses Android's
NotificationListenerServiceto detect media events. - Automatically filters out system alerts, podcasts, and audiobooks to keep your music stats accurate.
Sync music played on your web browser directly to your phone over your local network:
- Browser Extension: An advanced companion extension that uses direct audio-element timing and tab URLs to track music on web players (YouTube Music, Spotify, SoundCloud, etc.).
- Local Pairing: Easily pair the extension with your phone over WiFi. Payloads are signed with HMAC-SHA256 signatures to ensure security and data integrity.
- Glance Widgets: 7 distinct Android home screen widgets including heatmaps, now-playing, progress milestones, and recommendations.
- Two-Tier Last.fm Import: Imports legacy listening history without bloat. Your recent history is stored in the active set for analytics, while older history is compressed in an archive for lookup.
- Spotify API Integration: Connects to the Spotify API to fetch audio characteristics (energy, valence, danceability) for your tracks.
- API-Only Mode: Save battery by disabling the background listener and polling Spotify's API directly.
- XP & Levels: Earn XP based on your listening duration and engagement level.
- Listener Titles: Unlock custom titles based on level and genre diversity (e.g. Eclectic Wanderer).
- Daily Challenges: Auto-generated daily tasks like "listen to a new artist" or "listen for 30 minutes without skipping" to earn bonus XP.
- Milestone Badges: Collect badges for listening milestones (e.g., first scrobble, 1000 hours).
- Anti-Spam Filter: Discards consecutive loops of the same short track to prevent stat inflation.
- Mute Detection: Pauses tracking and XP accumulation when the device media volume is set to zero.
- Keep-Alive Protection: Includes self-healing background workers and instructions for aggressive OEM battery savers (Xiaomi/HyperOS, etc.).
- Offline & Private: Built on a local SQLite database (via Room). No third-party servers needed.
- Secure Credentials: Auth tokens for integrations are kept in Android's
EncryptedSharedPreferences. - Local Backups: Encrypted backups to your personal Google Drive with automated conflict resolution.
| Layer | Technology |
|---|---|
| Languages | Kotlin (100% Jetpack Compose) |
| Architecture | MVVM + Clean Architecture, Hilt |
| Database | Room SQLite, DataStore, EncryptedSharedPreferences |
| Networking | Retrofit + OkHttp |
| Background Tasks | WorkManager, Foreground Services |
| UI & Charts | Jetpack Glance (Widgets), Vico, MPAndroidChart |
| Image Loading | Coil |
| Browser Extension | TypeScript (Chrome / Firefox Manifest V3) |
| SDK Targets | Min SDK 26 (Android 8) / Target SDK 36 (Android 16) |
Contributions of all kinds are welcome! Before starting work on major features, please open an issue to discuss your ideas.
- Bug Fixes: Submit a PR directly.
- Documentation & Translations: Feel free to improve instructions or add translations.
Please refer to CONTRIBUTION.md for more details.
Tempo is licensed under a custom modified AGPLv3 License.
- Allowed: Study the code, build and run the app for personal use, audit security, and contribute back to the project.
- Prohibited: Selling the app, distributing modified/monetized versions, or rebranding and publishing the app to stores.
This copyleft license keeps Tempo free, transparent, and collaborative while protecting the project from commercial exploitation and copycats.
For full details, see the LICENSE file.
Made with β€οΈ by Avinash