Skip to content

Releases: MuwMx/YumaPlayer

v1.1.0-Beta

Choose a tag to compare

@github-actions github-actions released this 07 Sep 20:47

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...
Read more

v1.0.0-Beta

Choose a tag to compare

@MuwMx MuwMx released this 31 Aug 17:29

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:

  1. A brief description (or screenshot)
  2. 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! 🎵✨