Changelog
✨ Major Highlights
Playback, Player & Audio
- Added CanvasArtwork support across V7/V8/V9 player styles, including V8/V9 artwork canvas URLs, V7 backdrop integration, animated canvas playback, blur refinement, canvas cache handling, and highest-bitrate canvas selection — @mikooochi, @rukamori
- Improved V7 player backdrop rendering with dynamic palettes, custom
V7ColorBucketextraction, native/RenderScript blur handling, gradient tuning, zoom scaling, canvas layout fixes, and better artwork color generation — @rukamori, @sang765, @Windowstechtips - Added audible playback recovery, mute recovery, crossfade handoff recovery, volume watchdog handling, system volume sync, normalized volume smoothing, and retryable playback exception handling — @rukamori, @mikooochi
- Added YouTube playback watchtime tracking with
playedTimeMs, elapsed playback parameters, and refined playback registration behavior — @rukamori - Added queue clear action, queue start index clamping, duplicate playlist-entry preservation, current-song header improvements, and better player bottom sheet/back press behavior (#824) — @rukamori, @mikooochi, @adam-adrian
- Integrated Google Voice Assistant support (#702) — @rukamori
- Switched Discord RPC from C++ Social SDK to Gateway WebSocket and improved responsive Discord presence updates — @sang765, @mikooochi
Lyrics, Romanization & Providers
- Added provider-supplied romanized lyrics support through
LyricsEntry, TTML transliteration parsing, entry utilities, and prioritization of provided romanized text — @rukamori - Added multi-source BetterLyrics fetching with configurable provider order, KUGOU support, Paxsenix YouTube lyrics provider (#790), LrcLib enhanced lyric selection, and better lyrics source labeling — @rukamori, @sang765
- Improved enhanced lyrics scrolling, focus anchoring, keep-alive zones, sync render keys, source labels, provider badges, duration handling, and lyrics offset persistence (#724, #725, #746) — @rukamori, @mikooochi
- Reduced coroutine explosion in lyrics romanization and optimized lyrics polling/update loops for TTML/non-TTML formats — @rukamori
- Added embedded lyrics import from local songs and hid unparseable TTML search results — @mikooochi
Library, Playlists & Local Music
- Added supported local audio validation with MIME/extension checks, local song filtering, song icon placeholders, included-folder support, and embedded local lyrics import — @mikooochi, @rukamori
- Restored Spotify playlists from cached DataStore JSON, added Spotify playlist display state, explicit badges, Spotify track IDs, and safer Spotify playlist resolution — @rukamori
- Restored playlist tag filters, redesigned playlist tag dialog, preserved custom local playlist order on removal (#756), and improved playlist sync progress/error handling — @mikooochi, @rukamori
- Added batch
addSongsToPlaylistsupport through InnerTube/YouTube and improved online playlist duplicate preservation — @rukamori - Improved Library Top Mixes so mixes play library queues, stay unique, distribute tracks better, and use listened/liked songs as signals instead of exclusions — @mikooochi
- Added search filter views for online search results (#717), refreshed quick picks on pull, and sped up YouTube generated personal playlist loading (#830) — @rukamori, @ai Assistant, @adam-adrian
Accounts, Sync & Integrations
- Added YouTube sub-channel switching support (#514) — @rukamori
- Added smart “Add another account” flow with unsaved account warning (#802) — @sang765
- Improved Spotify/Facebook login stability, popup rendering, and WebView user-agent handling — @mikooochi, @rukamori
- Added libre.fm support with custom endpoint handling and UDF restructuring (#808) — @mikooochi
- Added Discord expired-token reauthorization warning — @rukamori
Storage, Downloads & Cache
- Added external storage support for cache/downloaded music, storage picker integration, writable tree probing, cache root resolution, move warnings, and move progress UI — @rukamori
- Improved cache clearing with progress dialogs, byte limits for canvas cache, SD card ANR avoidance, and safer storage helper organization — @rukamori, @mikooochi
- Improved download performance by aligning OkHttp concurrency with download parallelism, caching resolved stream URLs with quality-aware keys, reusing resilient stream resolution, and reducing disk I/O contention — @rukamori
- Fixed cancellation behavior so removing/canceling downloads does not accidentally remove all downloaded music — @rukamori
- Extended cache-corruption recovery to malformed container parsing errors (#812) — @adam-adrian
Updater, Release Channels & Builds
- Added Stable/Nightly download URL constants (#621), Daily Nightly update channel, in-app Daily changelog, Check for Update bottom sheet, and direct APK URLs with device/architecture suffixes — @rukamori, @sang765
- Improved updater startup timing, saved-channel handling (#767, #777), Daily Nightly default channel behavior (#827), update prompt channel binding, and up-to-date messaging — @sang765, @mikooochi, @adam-adrian
- Refactored update dialogs to Material Design 3 spec (#801) — @sang765
- Added build variants for Izzy, FOSS, and GMS, expanded release ABI distribution config, and fixed release workflow ownership/static job naming — @rukamori
About, Attribution & Community Metadata
- Updated About screen team structure, added Respecter section, extracted strings (#772), rebuilt About layout, limited displayed contributors to 20, and added attribution overflow dialogs — @sang765, @mikooochi
- Improved contributor and attribution loading from GitHub/Weblate, including authenticated translation credits, cached translation contributors, paginated translation changes, and keeping all translation languages — @mikooochi, @rukamori
- Migrated InnerTube API into the external core submodule (#810) — @sang765
🛠 Stability & Fixes
Playback & Media Reliability
- Fixed V7/V8/V9 player background preference behavior, backdrop palette assignment, canvas layering, canvas positioning, canvas cache resume, canvas active playback, artwork blur cache keys, and canvas OkHttp client reuse — @mikooochi, @rukamori
- Fixed audio normalization gain and smoothing (#797), system volume slider sync, mute recovery, retryable playback exceptions, playback auth retry conditions, and stale login playback context — @mikooochi, @rukamori
- Fixed malformed/invalid playback registration parameters, removed bundled watchtime URLs, and prevented invalid playback registration state — @rukamori
- Fixed first back press handling when dismissing player UI (#824), player bottom sheet collapse behavior (#729), and status bar handling for V7 player style — @adam-adrian, @rukamori
- Fixed list queue playback start index crashes, local history delete behavior, history remote issues, and playback history sync (#780) — @mikooochi, @rukamori, @adam-adrian
Lyrics & Provider Fixes
- Fixed lyrics source label placement, provider display, blank provider lyrics search results (#739), lyrics badge wrapping, source spacing, enhanced lyrics source visibility, and selected non-synced lyrics showing “not found” (#746) — @rukamori
- Fixed lyrics user work being replaced by remote lyrics (#616), restored lyrics speed offset for V2/enhanced lyrics, and preserved per-song lyrics offset — @rukamori, @mikooochi
- Fixed enhanced lyrics rendering cancellation and sync render version handling (#725), forced scroll into focus, and adjusted autoplay seek bar behavior (#769) — @rukamori, @sang765
- Fixed Musixmatch duration parameter handling per API v1.7.0 and improved error detection (#773) — @sang765
YouTube, InnerTube & Network Fixes
- Refined InnerTube retry behavior with transient network failure detection and proxy rotation — @rukamori
- Fixed bot-detection handling using auth state, PO token/GVS, stale login state, and
setLogin = falsehandling (#731) — @rukamori - Fixed playlist visits writing account search history, random song insertion into online playlists, auto-inserted video IDs during synced playlist creation, and duplicate online playlist entry preservation — @rukamori
- Improved Artist/Playlist parsing through
musicShelfRenderer,itemSectionRenderer, full immersive header descriptions, video/live performance list items, and bettervideoId/watch endpoint extraction — @rukamori - Fixed NewPipe direct media networking when proxy is unset to prevent localhost connection attempts — @rukamori
UI, Navigation & Compose Fixes
- Fixed speed dial pager/grid behavior, filter chip alignment, playlist tags mapper clash, lyrics menu dialog structure, button shape, component receiver scope, and online search route encoding crash — @mikooochi, @rukamori
- Fixed TV navigation rail refocus/key events, auto playlist tap entering selection mode, liked songs filtering (#794), and missing Spotify playlist tab display — @rukamori, @mikooochi
- Fixed YouTube thumbnail aspect ratio handling with square crop option (#791), then reverted the earlier thumbnail aspect ratio change through #804 — @sang765, @rukamori
- Fixed About screen resource lookup scope, mini-player padding in dialogs, contributor cache behavior, and attribution compile errors — @mikooochi, @rukamori
Storage, Cache & Download Fixes
- Fixed SD card cache clearing ANR risk, cache progress refresh, storage helper scoping, previous URI permission release, configured storage ID prioritization, and
mnt/media_rwrecognition — @mikooochi, @rukamori - Fixed download speed issues, downloader stream resolver reuse, cache corruption recovery (#800, #812), and malformed container parse recovery — @rukamori, @adam-adrian
- Fixed dismissed download toolbar persistence in album/download UI — @mikooochi, @rukamori
Updater & Build Fixes
- Fixed GitHub/Nightly URLs to point to
ArchiveTuneApp/ArchiveTune, restored accidentally removed Nightly URL helper, added FOSS distribution prefixes, and tied update prompts to selected channel — @rukamori, @sang765, @mikooochi - Fixed update-channel startup checks (#767, #777), default Daily Nightly channel (#827), up-to-date messages, and missing BuildConfig imports — @sang765, @adam-adrian
- Fixed Gradle/CI build variants, Standard flavor tasks, Kotlin metadata configuration, missing coroutine imports, non-suspend run blocks, release account control, and static release job naming — @rukamori, @sang765
⚡ Performance Improvements
- Optimized lyrics update loops and polling intervals based on TTML format state — @rukamori
- Recycled and constrained player color extraction bitmap/cache behavior, including
gradientColorsCachelimits — @rukamori - Added
LazyColumn/LazyRowcontent types for Artist screen performance — @rukamori - Tuned enhanced lyrics drift thresholds and minimum karaoke syllable duration handling — @rukamori
- Remapped storage logic and optimized cache/download migration behavior — @rukamori
- Improved download stream resolution by using faster resolver paths and removing unnecessary cooldown/throttle state — @rukamori
♻️ Internal Cleanup & Refactors
Core, Playback & Networking
- Refactored CanvasArtworkPlayer from
AndroidViewto Media3ContentFrame, moved canvas layers into clearer player backdrop ownership, and centralized format/title/artist tap helpers (#820) — @rukamori, @adam-adrian - Refactored MusicService foreground startup (#703), timeout detection, request-timeout helpers, audio focus loss handling, media item extraction, and audible watchdog constants — @mikooochi, @rukamori
- Refactored YT player audio candidate selection (#704), stream probe timeout/redirect config, and download playback resolution through
PlayerStreamClient.WEB_REMIX— @mikooochi, @rukamori - Migrated InnerTube API to external core submodule (#810) — @sang765
UI & Compose Architecture
- Refactored Lyrics settings/provider ordering, Lyrics Enhanced scrolling/source offset logic, lyrics sharing UI, lyrics search dialogs, playlist tag dialogs, About screen layout, and attribution dialogs — @rukamori, @mikooochi
- Refactored Spotify playlist screen headers, active track state, queue resolution, and lifecycle-aware state collection — @rukamori
- Refactored Artist, AutoPlaylist, History, PlaylistPage, and MusicRecognition screens to cleaner models/state handling — @rukamori
- Refactored update dialogs to Material Design 3 spec (#801) — @sang765
Data, Storage & Maintenance
- Refactored history duration DataStore migration from Float to Int and lowered minimum duration (#784, #785) — @adam-adrian
- Refactored storage cache cleanup by removing
StorageCacheCleanupRunnerand moving cache helpers into repository scope — @mikooochi - Removed playlist AI builder, unused code, unused strings, old queue parameters, old Discord SDK configuration, and obsolete constants — @mikooochi, @rukamori
🌐 Translation & Community
- Updated Vietnamese and Japanese translations — @sang765
- Added/updated backdrop blur translations for 22 locales — @sang765
- Completed Vietnamese translation with 227 new strings and 37+ bad translation fixes — @sang765
- Added history duration description/unit labels (#796) — @adam-adrian
- Added and updated translations through Weblate for Portuguese (Brazil), Spanish, Turkish, French, Hebrew, Indonesian, Tamil, German, Korean, Italian, Estonian, Russian, Vietnamese, Malay, Arabic, Chinese Simplified, Malayalam, Dutch, Ukrainian, Sanskrit, Hindi, Arabic Egyptian, and others — @ValteMCPE, @gallegonovato, @raden, @Mickael81, @Yar270, @MuhamadSyabitHidayattulloh, @ItzSoulReaper, @flue17, @Karlheinz, @hsp1020, @carlocirillo, @semmy, @ciaociaociao, @AlmaziikDev, @RubCut, @wynriu, @Friczh, @danz, @NENO756, @Zepp043, @man_with_scars, @Vistaus, @mybxdxyz, @vintagezero, @Chandramauli-Arm64, @midomizo933, @bennett, @ZoobZik
- Updated translation files and translation syncs through Codeberg Translate
📦 Build / CI
- Added media3-ui-compose dependency and translator dependency version-catalog migration — @rukamori
- Added release distribution variable, ABI matrix entries for arm64/armeabi/x86/x86_64, and build job matrix improvements — @rukamori
- Configured KSP/kotlin-metadata-jvm and repository filtering/exclusiveContent rules — @rukamori
- Restricted nightly updater builds to GMS and FOSS — @mikooochi
- Added
DISCORD_SOCIAL_ENABLEDBuildConfig field — @rukamori - Improved issue confirmation workflow labels, nightly verification labeling, duplicate notification prevention, pull-request write permissions, and CI error handling — @rukamori
Other Changes II
- Updated Vietnamese/Japanese translations in #698 — @sang765
- Added Google Voice Assistant integration #702 — @rukamori
- Ensured MusicService foreground startup #703 — @mikooochi
- Restructured YT audio candidate selection #704 — @mikooochi
- Merged Paxsenix/Apple Music fixes #711 — @sang765, @rukamori
- Added font preference with custom TTF picker #712 — @rukamori
- Added online search content filters #717 — @rukamori
- Updated Kotlin monorepo #722, #730 — @renovate[bot]
- Added enhanced lyrics focus anchoring #724 — @rukamori
- Fixed enhanced lyrics render cancellation #725 — @rukamori
- Updated Material 3 dependency #727 — @renovate[bot]
- Collapsed player bottom sheet on playback/timeline changes #729 — @rukamori
- Patched bot detection #731 — @rukamori
- Updated extractor #737 — @renovate[bot]
- Fixed blank provider lyrics search results #739 — @rukamori
- Refactored Discord RPC #740 — @sang765
- Improved player backdrop palette/database schema #744 — @Windowstechtips
- Fixed non-synced lyrics “not found” regression #746 — @rukamori
- Fixed canvas/top positioning and volume recovery #753 — @mikooochi
- Preserved local playlist custom order on remove #756 — @rukamori
- Added Daily Nightly update support #758 — @sang765
- Added backdrop blur support #760 — @sang765
- Removed backdrop blur from album/artist pages #762 — @sang765
- Updated Vietnamese localization #763 — @sang765
- Added RenderScript blur fallback for API < 31 on V7/V8 player #766 — @sang765
- Respected saved update channel on startup #767, #777 — @sang765
- Fixed lyrics seekbar after autoplay #769 — @sang765
- Updated About/team/Respecter strings #772 — @sang765
- Fixed Musixmatch duration/error handling #773 — @sang765
- Added UI/UX enhancements #779 — @sang765
- Fixed playback history sync #780 — @adam-adrian
- Improved updater startup/fake version handling #782 — @sang765
- Added history auto refresh #783 — @adam-adrian
- Migrated history duration datatype #784, #785 — @adam-adrian
- Fixed history duration migration crash #789 — @adam-adrian
- Added Paxsenix YouTube lyrics provider #790 — @sang765
- Fixed/reverted YouTube thumbnail aspect ratio handling #791, #804 — @sang765, @rukamori
- Fixed liked songs visibility without video filtering #794 — @mikooochi
- Added history duration description/unit labels #796 — @adam-adrian
- Stabilized and smoothed audio normalization #797 — @mikooochi
- Fixed corrupt cache recovery #800 — @adam-adrian
- Redesigned update dialogs to Material Design 3 spec #801 — @sang765
- Added smart Add Another Account flow #802 — @sang765
- Added libre.fm/custom endpoint settings #808 — @mikooochi
- Migrated InnerTube API to external core submodule #810 — @sang765
- Extended malformed cache/container recovery #812 — @adam-adrian
- Centralized format helpers and title/artist tap handling #820 — @adam-adrian
- Fixed first back press behavior in player UI #824 — @adam-adrian
- Fixed Daily Nightly update channel default #827 — @adam-adrian
- Sped up generated personal playlist loading #830 — @adam-adrian
Referenced Issues / PRs
#514, #616, #621, #698, #702, #703, #704, #711, #712, #717, #722, #724, #725, #727, #729, #730, #731, #737, #739, #740, #744, #746, #753, #756, #758, #760, #762, #763, #766, #767, #769, #772, #773, #777, #779, #780, #782, #783, #784, #785, #789, #790, #791, #794, #796, #797, #800, #801, #802, #804, #808, #810, #812, #820, #824, #827, #830
Contributors
@rukamori, @mikooochi, @sang765, @adam-adrian, @Windowstechtips
Translation Contributor
@ValteMCPE, @gallegonovato, @raden, @Mickael81, @Yar270, @MuhamadSyabitHidayattulloh, @ItzSoulReaper, @flue17, @Karlheinz, @hsp1020, @carlocirillo, @semmy, @ciaociaociao, @AlmazzikDev, @RubCut, @wynriu, @Friczh, @danz, @NENO756, @Zepp043, @man_with_scars, @Vistaus, @mybxdxyz, @vintagezero, @Chandramauli-Arm64, @midomizo933, @bennett, @ZoobZik.
Build Variants
| Variant | Updater | Rich Presence | Signed | Notes |
|---|---|---|---|---|
| GMS | ✅ Included | ✅ Included | ✅ Signed | Recommended variant for most users. |
| FOSS | ✅ Included | ❌ Not included | ❌ Not signed | For users who want the FOSS build without Rich Presence. |
| Izzy / IzzyOnDroid | ❌ Not included | ❌ Not included | ❌ Not signed | Intended for IzzyOnDroid distribution. Updates are handled by IzzyOnDroid, not the in-app updater. |