Releases: MuwMx/YumaPlayer
Release list
v1.1.0-Beta
Changelog
Features
- feat(spotify): paginate LikedSongs ViewModel via likedSongsPage — by @MuwMx
- feat(ui): add horizontal mini-player dismiss gesture with slider haptics — by @MuwMx
- feat(ui): exact 1:1 port of PixelPlayer mini-player horizontal dismiss gesture — by @MuwMx
- feat(haptics): introduce YumaHaptics single source of truth and provider — by @MuwMx
- feat(ui): add queue header automix button, haptics and dedicated queue action menu — by @MuwMx
- feat(ui): add consistent haptics to FullPlayer and Lyrics collapse/menu buttons — by @MuwMx
- feat(playback): play instant algorithmic radio (automix) on search song click — by @MuwMx
- feat(spotify): add persistent profile cache, Stale-While-Revalidate and direct recentlyPlayed endpoint — by @MuwMx
- feat(ui): implement YdsInsets with insets consumption, layout phase modifiers, and landscape cutouts — by @MuwMx
- feat(ui): tune player background blur to reveal soft artwork silhouette — by @MuwMx
- feat(lyrics): toggle for lyrics player controls panel — by @MuwMx
- feat(lyrics): implement position freezing during manual scrolling — by @MuwMx
- feat(spotify): adapt quick grid cells to YDS 2.1 dynamic palette — by @MuwMx
- feat(spotify): add background like sync with Spotify library — by @MuwMx
- feat(spotify): guard like sync with user preference toggle in account settings — by @MuwMx
- feat(player): mode-dependent overflow label close — by @MuwMx
Fixes
- fix(player): restore startRadioSeamlessly for radio to fix freeze (revert PlayerMenu) — by @MuwMx
- fix(radio): restore NextPage endpoint and MediaMetadata isMusicVideo from ArchiveTune — by @MuwMx
- fix(about): improve avatar quality from 128 to 512 to fix pixelation — by @MuwMx
- fix(about): remove software bitmap and fixed size to fix avatar aliasing — by @MuwMx
- fix(about): handle hardware bitmap getPixels crash — by @MuwMx
- fix(about): split hardware render and 32x32 software palette extraction to fix aliasing — by @MuwMx
- fix(fgs): guard MediaNotificationManager startForeground on Android 16 (ForegroundServiceStartNotAllowedException) — by @MuwMx
- fix: FGS IllegalStateException guard + TogetherOnlineHost safe unwrap (approveParticipant) — by @MuwMx
- fix: data saver toggle + queue V2 count/ListQueue + crossfade 10s guard — by @MuwMx
- fix(flac): smart cache key effectiveSource + volatile StateFlow + dynamic Qbdlx pool (no restart) — by @MuwMx
- fix(settings): add missing refreshDiscordNow import in DiscordSettings — by @MuwMx
- fix(spotify): add tokenMutex on refreshAccessToken body + likedSongsPage pagination — by @MuwMx
- fix(spotify): make Liked queue static full cache, hasNextPage false — by @MuwMx
- fix(ui): force dark buttons in queue/lyrics cards via darkColorScheme — by @MuwMx
- fix(ui): queue/lyrics dark content via LocalContentColor — by @MuwMx
- fix(ui): wrap yumaGlassCard inside dark provider — by @MuwMx
- fix(ui): 3dots sheets always dark theme — by @MuwMx
- fix(ui): replace GoogleSans hardcodes with LocalArchiveTuneFontFamily — by @MuwMx
- fix(ui): fix dismiss gesture cancel, float precision, teleport glitch and add continuous drag haptics — by @MuwMx
- fix(ui): refine mini-player dismiss haptics with M3 frequent ticks and delayed snap-reset — by @MuwMx
- fix(ui): remove dead bottom padding when miniplayer dismissed and remove collapse haptics — by @MuwMx
- fix(ui): resolve gesture conflicts, touch swallowing and unclickable controls across sheets — by @MuwMx
- fix(spotify): restore GraphQL recent items parsing with playlists, full album artists, and fix SWR UI flashing — by @MuwMx
- fix(ui): fix status bar insets in FullPlayer, floating bar immersive padding, and clean YdsInsets modifiers — by @MuwMx
- fix(library): force album list items to single segment position — by @MuwMx
- fix(queue): balance theme provider braces around LazyColumn — by @MuwMx
- fix(spotify): eliminate sync duplicates, double calls and optimize batch operations — by @MuwMx
- fix(player): isolate sheet background to matchParentSize, restore instant queue animation and fade — by @MuwMx
- fix(spotify): persist track matches on play and enable fallback search for like sync — by @MuwMx
- fix(sync): clean mutual exclusive routing between Spotify and YouTube like sync — by @MuwMx
- fix(ui): preserve full 544px thumbnail resolution for grids while keeping lightweight 200px for lists — by @MuwMx
- fix(queue): provider-inside-snapshotFlow restores first frame — by @MuwMx
- fix(sheets): unify normal top with immersive background — by @MuwMx
- fix(headers): keep lyrics queue close always visible — by @MuwMx
- fix(home): mount mood panel only with chips — by @MuwMx
- fix(ui): gate MarqueeText on local isVisible parameter — by @MuwMx
- fix(player): pin controls and title to always-white — by @MuwMx
Performance
- perf(ui): optimize isMiniPlayerVisible selector in MainActivity and clean queue close haptic — by @MuwMx
- perf(queue): eliminate per-item DataStore flow subscriptions and Subcomposition in thumbnails — by @MuwMx
- perf(queue): hoist itemWidthPx to screen level and optimize Coil thumbnail decode size — by @MuwMx
- perf(player-bg): careful single-pass background — by @MuwMx
- perf(seekbar): draw-phase progress via graphicsLayer — by @MuwMx
- perf(player-bg): unify player background to single blur source and shared gradient — by @MuwMx
- perf(home-bg): central visibility gate pauses animated styles — by @MuwMx
- perf(home-bg): propagate isVisible gate to all animated effects — by @MuwMx
- perf(lyrics-queue): suspend hidden loops via snapshotFlow — by @MuwMx
Refactors
- refactor(playback): clean up formatting in MusicService — by @MuwMx
- refactor(playback): extract MusicService integrations to extension — by @MuwMx
- refactor(playback): extract MusicService playback to extension — by @MuwMx
- refactor(playback): extract MusicService audio to extension — by @MuwMx
- refactor(playback): extract MusicService crossfade to extension — by @MuwMx
- refactor(playback): extract MusicService together to extension — by @MuwMx
- refactor(spotify): make LikedQueue stub-only with external total/hasMore — by @MuwMx
- refactor(haptics): remove FLAG_IGNORE_GLOBAL_SETTING and fix incorrect LongPress usages — by @MuwMx
- refactor(haptics): migrate all screens to LocalYumaHaptics and clean prop-drilling — by @MuwMx
- refactor(cleanup): remove 15 dead legacy files (~4.5k LOC) — by @MuwMx
- refactor(spotify): use typed __typename contract for recent section instead of string matching — by @MuwMx
- refactor(flac): make Qobuz sole lossless provider and remove Arcod/dead token fields — by @MuwMx
- refactor(library): update layout spacing and window insets for list containers — by @MuwMx
- refactor(player): remove unnecessary keys from nested scroll connection remember blocks — by @MuwMx
- refactor(ui): split monolithic Items.kt into focused SRP components — by @MuwMx
- refactor(ui): migrate news screen and top action buttons to unified YDS — by @MuwMx
Documentation
- docs(readme): update telegram community link to yumaplayer — by @MuwMx
- docs(readme): remove arcod references from documentation — by @MuwMx
- docs(yuma_rules): add separator to development guidelines — by @MuwMx
- docs(rules): remove trailing whitespace and empty lines from YUMA_RULES.md — by @MuwMx
- docs(spotify): document ADR-011 Spotify sync architecture and isolation — by @MuwMx
Other changes
- chore(templates,docs): rename ArchiveTune to YumaPlayer in templates and privacy policy — by @MuwMx
- refactor(ui,settings): simplify image processing and request logic in AboutScreen — by @MuwMx
- refactor(queue,settings): remove unused queue header component — by @MuwMx
- refactor(playback,network): implement metered connection check for flac streaming bypass — by @MuwMx
- feat(settings,spotify): add debug sp_dc input field to login sheet — by @MuwMx
- refactor(ui,player,home): optimize flow operators and remove unused quick picks header — by @MuwMx
- feat(player,haptics): implement custom continuous vibration feedback for dismiss gesture — by @MuwMx
- refactor(ui,haptics): replace native haptic feedback with custom yuma haptics implementation — by @MuwMx
- fix(player,ui): add fraction threshold check to drag state and simplify lyrics layer rendering — by @MuwMx
- refactor(player,ui): optimize overlay visibility state using derivedStateOf — by @MuwMx
- chore(lossless): remove dead fallback LosslessTokens (experimental hardcode, now user input only) — by @MuwMx
- feat(ui,library): add LibraryEmptyState component — by @MuwMx
- style(library,component): update library filter chip dimensions and grid padding — by @MuwMx
- refactor(ui,library): migrate LocalSongScanSheet to Surface components for consistent styling — by @MuwMx
- refactor(ui,library): update local song screen hero icon layout and styling — by @MuwMx
- feat(settings,spotify): expose manual sp_dc input field outside of debug builds — by @MuwMx
- refactor(ui,lyrics): move lyrics parsing to produceState and background thread — by @MuwMx
- refactor(ui,lyrics): consolidate lyrics parsing logic and handle empty states — by @MuwMx
- refactor(lyrics,queue): simplify state initialization and optimize reorderable graphics layer — by @MuwMx
- refactor(ui,lyrics): optimize romanization effect execution by preventing redundant re-parses — by @MuwMx
- fix(ui,lyrics): reset frozen position when manual scrolling ends — by @MuwMx
- fix(lyrics,ui): improve manual scrolling state logic and reset frozen position on seek — by @MuwMx
- refactor(ui,lyrics): consolidate manual scrolling logic in LyricsEnhanced — by @MuwMx
- SRP x4: black Spotify recents, stop-on-swipe toggle, sheet Back priority, sheet clipToBounds — by @MuwMx
- feat(player,ui): handle back navigation based on overlay and lyrics visibility — by @MuwMx
- refactor(mainactivity,playersheet): remove unused overlay state and improve back navigation logic — by @MuwMx
- feat(player,queue): implement symmetric UDF for que...
v1.0.0-Beta
Hey everyone! 👋
After weeks of refactoring and completely rewriting the UI from scratch on Jetpack Compose, I'm excited to share the first public beta of YumaPlayer — an independent, open-source Android music client focused on clean ergonomics, fluid motion, and audiophile-grade playback.
The project combines Spotify's recommendation feeds with YouTube Music's backend catalog and lossless FLAC streaming into a unified, privacy-first native application.
🔥 Key Features
- 🔄 Dual Home Experience: Switch between personalized Spotify feeds (Daily Mixes, Discover Weekly, personal playlists, liked songs) and the full YouTube Music catalog (charts, radio, moods & genres).
- 🎧 Audiophile Sound & Hi-Res FLAC: High-bitrate playback via YT Music (Opus/AAC) with instant fallback, plus true Lossless FLAC streaming via Qobuz integration (custom token or open community resolvers).
- 🎨 YDS 2.1 Design System: Custom glassmorphism UI with real translucent surfaces, floating islands, dynamic Monet palette extraction, and smooth Telegram-style morphing headers on scroll.
- 🎤 3-Tier Synced Lyrics: Live karaoke scrolling with simultaneous original text (Kanji/Hangul), Romaji pronunciation guides, and on-the-fly translations.
- 📱 Dual-Sheet Gesture Engine: Independent, conflict-free swipe physics (left swipe for Lyrics, right swipe for Queue).
- 🚗 Android Auto Support: Full dashboard playback controls, queue management, and media notifications.
- 📦 Local Playback & Essentials: Play standalone local audio files (FLAC, MP3, WAV), automatic background caching, built-in 5-band EQ, loudness normalization (EBU R128), and a sleep timer.
- 🔒 Privacy-First & 100% FOSS: Licensed under GPLv3. Zero telemetry, no third-party trackers, no ads, no paid tiers. All credentials stay locally encrypted with AES-256-GCM (Google Tink).
🧪 Beta Status & Feedback
The app is roughly 90% ready. Core playback and features are fully stable, but since this is an early public beta, edge-case UI scaling bugs might still occur on certain device aspect ratios.
If you encounter any bugs, crashes, or visual glitches, please drop a comment with:
- A brief description (or screenshot)
- Your device model and Android version
P.S. Huge thank you to everyone in the open-source community who tested early builds and provided feedback. Enjoy the music! 🎵✨