github ArchiveTuneApp/ArchiveTune v13.5.0
13.5.0

4 hours ago

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 V7ColorBucket extraction, 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 addSongsToPlaylist support 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 = false handling (#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 better videoId/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_rw recognition — @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 gradientColorsCache limits — @rukamori
  • Added LazyColumn/LazyRow content 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 AndroidView to Media3 ContentFrame, 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 StorageCacheCleanupRunner and 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

📦 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_ENABLED BuildConfig 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

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.

Don't miss a new ArchiveTune release

NewReleases is sending notifications on new releases.