Features
- Completely modernized the Last.fm Settings page with native Expressive UI layouts and dynamic user profile avatar fetching
- Added offline Last.fm scrobbling support allowing plays triggered in airplane mode to batch sync upon reconnecting to the internet
- Added offline Last.fm 'Love' (Favorite) caching to safely store liking/unliking tracks offline and syncing them transparently in the background
- Added Export Playlist functionality natively to context menus, supporting playlist extraction to local storage in CSV and M3U formats
- Motion Artwork System Rewrite:
- Completely rebranded the legacy "Canvas" feature into "Motion Artwork" across the entire user interface and core architecture
- Consolidated three fragmented Gradle modules into a single, unified
:Motionartworkmodule for cleaner dependency management - Upgraded the Artist Screen background video engine to stream natively from Apple Music's editorial API, drastically improving video quality and removing reliance on third-party archive providers
- Spotify Integration Improvements:
- Implemented native Spotify Lyrics support, resolving track meta-data via Spotify's internal Pathfinder GraphQL APIs and safely extracting time-synced lyrics using the user's active login token
- Implemented full-screen Spotify Canvas support, playing pure original vertical video loops directly within the media player natively
- Migrated the Spotify configuration out of Backup & Restore into the main Settings > Integrations page
- Redesigned the Spotify Login flow into a native, full-screen in-app WebView
- Completely redesigned the Spotify Playlist selection menu from a bottom sheet into a full-screen modern Pixel-style UI with a redesigned search bar
- Implemented native Spotify Canvas disk caching using ExoPlayer's
SimpleCache, persistently storing Canvas video loops to internal storage to eliminate repeated network downloads - Added a dedicated Spotify Canvas Cache section in Storage Settings with a configurable max size slider, real-time usage progress indicator, and a clear cache option
- Implemented offline Canvas fallback using a persistent
SharedPreferencesURL map so Canvas videos cached while online continue to play seamlessly after the app is closed and reopened without a network connection
- Appearance & Theming:
- Redesigned the Theme Settings screen using modern Material 3 Expressive layouts and a new connected toggle button group for mode selection
- Centralized the Dynamic Theme toggle into the main Theme Settings page and introduced a custom vector icon for it
- Refactored the Custom Font importer to dynamically extract and display the original source file name of the imported font
- Modernized the Font Selection UI by replacing default Material icons with custom app drawables
- Cleaned up the application's typography system by removing redundant placeholder fonts (Google Sans, Sans Flex) that lacked local
.ttfresources
- Lyrics:
- Revamped Lyrics_v2 with MetroLyrics-inspired fluid predictive animations and lookahead scrolling
- Added dynamic circular wavy indicator during instrumental breaks
- Added
lrc.redas a new lyrics provider with word-sync support - Added support for displaying background vocals and duet lyrics
- Added new Lyrics Share interface
- Added new landscape mode for Player_v2
- Added hardware-accelerated audio processing option in Player Settings for native speed and pitch handling
- YouTube Comments: Enabled posting top-level comments, replying to threads, and deleting user-authored comments directly in the Comment Sheet with seamless authentication checks and optimistic updates; added "Top" and "Newest" sort filters for organizing comments; added comments shortcut to player menu
- Updated Italian localization and translations (#967)
- Updated French localization and string resources (#982)
Bug Fixes
- Fixed an issue where the screen would automatically turn off when viewing lyrics in Player_v2
- Fixed a major bug where search results appeared completely blank due to unannounced layout format changes in the YouTube Music API
- Fixed an issue where the app occasionally became a black screen when swipe launching from the recents menu or returning from another app by optimizing window attribute assignments
- Fixed local network proxy connections silently failing on Android 17+ by correctly requesting the
ACCESS_LOCAL_NETWORKpermission - Fixed a lifecycle architectural bug where the Spotify integration would needlessly re-fetch playlists over the network every time the setup screen was reopened
- Fixed a bug where importing Spotify playlists failed to tag imported songs with the
inLibrarybookmark timestamp, preventing them from appearing in the main library - Fixed a bug where Spotify Canvas would not resume after reconnecting to the internet mid-session, now automatically retrying when network connectivity is restored
- Fixed an app freeze on launch by implementing a high-performance linear parser for YouTube HTML payloads
- Fixed a login race condition that caused signed-in users to occasionally see Guest recommendations on startup
- Fixed a bug where Quick Picks failed to load for signed-in users due to the scraper reading incorrect background payloads
- Optimized Home Screen load times by asynchronously fetching Quick Picks in the background without blocking UI rendering
- Fixed audio playback crashes and decoder stalls when adjusting playback tempo or pitch by implementing native AudioTrack playback parameters and codec operating rate guards
- Fixed an application crash when navigating out to the Android home screen while viewing comments by decoupling non-serializable comment models from the adaptive scaffold saveable state
- Fixed Musixmatch lyrics not loading, fully restoring synchronized line-by-line and word-by-word (RichSync) lyrics
- Fixed Data Saver mode not lowering image and thumbnail quality by dynamically linking the setting to the image resolution rewriter
- Fixed crossfade breaking audio normalization by dynamically recreating the LoudnessEnhancer across player swaps (#972, #976)
- Fixed queue auto-load-more and next-track prefetching stopping when crossfade is enabled (#976)
- Fixed crossfade track skipping and gestures in Player_v2 and AppleMiniPlayer to respect the active crossfade player (#976)
- Fixed comment reply submission failures caused by YouTube API schema changes by synthesizing required reply parameters dynamically
- Fixed outdated repository and documentation URLs (#974)
- Fixed FOSS build compilation issues
- Fixed song thumbnails failing to load or appearing blank on certain tracks
- Improved thumbnail loading speed across search results and list items
Contributions
- @DavidPv07: Fixed crossfade breaking audio normalization (#972), queue auto-load-more, and player lifecycle handling (#976)
- @yadavnikhil03: Cleaned up and updated outdated repository and project URLs (#974)
- @antonello: Updated Italian translations and removed duplicate string resources (#967)
- @Mickael81: Updated French localization and string resources (#982)
☕ Support development on Ko-fi: https://ko-fi.com/vividhpashokan
💸 Support via UPI: vividhpashokan@axl
💳 Support via PayPal: https://www.paypal.me/vividhpashokan