github maxrave-dev/SimpMusic v1.7.0
1.7.0

6 hours ago

Full changlogs here: https://www.simpmusic.org/blogs/new-update-simpmusic-v170

🎉 New features

Playback & player

  • Last.fm scrobbling (Full build only) — lastfm / lastfm-empty module pair, a login screen, its own settings group, and scrobbling during playback
  • Reworked Now Playing: new backdrop and artist card; added an inline lyric line and removed the blurred backgrounds
  • Playlist import from a converted file, straight from Settings; writes to the database in batches
  • Charts: added seven new YouTube Music countries — Hong Kong, Malaysia, Philippines, Singapore, Taiwan, Thailand and Vietnam

Browsing & search

  • The empty search screen now shows browse categories
  • Play a song directly from a browse category's shelf
  • Home: long-press a quick pick to open the Now Playing sheet
  • Library: show item counts in dynamic playlist headers

Settings

  • Ask for confirmation before logging out of a linked account

Desktop

  • Replaced VLC with libmpv as the sole playback backend — including DJ crossfade filters and a switch to DASH streams
  • Linux: build libmpv from source in a container instead of extracting it from the AppImage
  • Tray menu and tooltip now show the current track
  • The volume slider expands only on hover
  • The player bar timeline is tinted while a crossfade is running
  • Video now renders through Compose frames; SwingPanel removed
  • Windows: removed the debug terminal window
  • "Play next" now works on the desktop side
  • Added a Queue button to the mini player — PR #2275 by @laoluogun

Internal

  • Migrated every icon to generated Material Symbols ImageVectors, dropping material-icons-extended and the XML drawables

🐛 Fixes

Crossfade & player

  • Skip the crossfade when the next track plays as video, and when the current track plays as video
  • Keep the correct incoming track when a transport control is pressed mid-crossfade
  • Align the restored queue with the player, and guard against saves during a rebuild
  • Keep the progress slider within Material3's default range
  • Volume: apply it to the player before persisting it; unmute restores the original level — PR #2274
  • Desktop: release the crossfade handle when loading another track; route volume through ao-volume so it applies instantly
  • Normalise Tidal key names before Camelot matching — Tidal spells accidentals out ("FSharp", "CSharp") rather than using symbols, so keyToSemitone failed to parse them and roughly 22% of tracks silently lost their key in DJ crossfade. Fixed by normalising the string before matching, and by changing the calculateKeyGapDurationFactor fallback from 1.0 to UNKNOWN_GAP_DEFAULT_FACTOR — an unparseable key was previously treated as a perfect match

Data & parsing

  • Lyrics: stop dropping the first character when no space follows the timestamp
  • Identify song columns by pageType instead of a fixed index
  • Keep only the first subtitle group as artists
  • The database now repairs artist names and album names stored by an older parse
  • Treat personalised mixes as radio playlists
  • Browse categories: key sections by title and cache them on disk, parse the songs shelf, and render every section the API returns

Downloads & cache

  • Stop re-resolving stream URLs for tracks that are already fully downloaded
  • Serve directly from cache only when the whole track is on disk

Desktop

  • macOS: switched audio output to avfoundation — avoids an ao_coreaudio use-after-free crash when headphones are plugged in or removed
  • macOS: register now-playing handlers on the main queue; stopped trimming native memory, which was causing a crash
  • Disabled skiko vsync (the cause of freezes when changing displays) and restore the window on Dock reopen
  • Backup: stopped double-wrapping the zip output stream
  • Registered URL schemes at the correct level in conveyor.conf, and restored external link opening on Linux
  • libmpv bundle: resolve by absolute path and drop POSIX open flags on Windows; strip AppleDouble sidecars that made macOS report "app is damaged"; treat an absent ytdl option as success
  • Raised the macOS floor to 15.0 for the bundled libmpv — a breaking change for users on older macOS

User interface

  • Force-dark screens now use a real dark colour scheme rather than just dark text
  • Bottom sheet: title, artist and the like label take their colours from the dark palette
  • Search: leave room for the floating search bar in every state; cap the browse grid width and use four columns on wide layouts
  • Quick picks: keep titles on one line with a marquee
  • Smoother artwork scrims via a smoothstep gradient
  • NormalAppBar uses the transparent colours the app uses elsewhere
  • Show a generic album label when the album name is unknown
  • Analytics: lengthened the header scrim so the top song title no longer overlaps the stats
  • Repaired the notification bell icon path
  • Library: the "create playlist" label uses the theme colour
  • Spotify: match the login status URL when it carries a query string

⚡ Performance (Desktop)

  • Tuned the allocator and GC to cut resident memory
  • Return freed native memory to the OS when playback idles
  • Capped mpv's demuxer cache

🔧 Infrastructure & dependencies

  • PipePipeExtractor to v6.2.0, brave-newpipe bumped
  • Bumped a batch of dependencies
  • Refreshed the Gradle daemon JVM toolchain URLs
  • CI/CD: workflow updates; stage natives in the release workflow and verify the libmpv bundles
  • CLAUDE.md updated for Last.fm, the from-source Linux libmpv build, Compose video rendering, and the video crossfade rules

What's Changed

New Contributors

Full Changelog: v1.6.0...v1.7.0

Don't miss a new SimpMusic release

NewReleases is sending notifications on new releases.