New update: SimpMusic v1.7.0
New major update of SimpMusic
Nguyen Duc Tuan Minh
SimpMusic Developer
🎉 New features
Playback & player
Last.fm scrobbling (Full build only) —
lastfm/lastfm-emptymodule pair, a login screen, its own settings group, and scrobbling during playbackReworked 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;
SwingPanelremovedWindows: removed the debug terminal window
"Play next" now works on the desktop side
Added a Queue button to the mini player — PR by @laoluogun
Internal
Migrated every icon to generated Material Symbols
ImageVectors, droppingmaterial-icons-extendedand 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
Desktop: release the crossfade handle when loading another track; route volume through
ao-volumeso it applies instantlyNormalise Tidal key names before Camelot matching — Tidal spells accidentals out (
"FSharp","CSharp") rather than using symbols, sokeyToSemitonefailed 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 thecalculateKeyGapDurationFactorfallback from1.0toUNKNOWN_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
pageTypeinstead of a fixed indexKeep 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 anao_coreaudiouse-after-free crash when headphones are plugged in or removedmacOS: 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 Linuxlibmpv 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
ytdloption as successRaised 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
NormalAppBaruses the transparent colours the app uses elsewhereShow 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-newpipebumpedBumped 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.mdupdated for Last.fm, the from-source Linux libmpv build, Compose video rendering, and the video crossfade rules
