Skip to content

Releases: dddevid/Musly

v1.0.4

17 Jan 17:45

Choose a tag to compare

Changelog

All notable changes to Musly will be documented in this file.

The format is based on Keep a Changelog,
and this project adheres to Semantic Versioning.

[1.0.4] - 2026-01-17

Added

  • Support Dialog After Login: Shows after each successful login
    • Discord community invite link (optional)
    • Donation options: Buy Me a Coffee, Bitcoin, Solana
    • 5-second timer before close button enables
    • Copy buttons for cryptocurrency addresses
  • Discord Integration in Settings: Added Discord community link to Settings → About → LINKS
  • Discord Community Section in README: Added dedicated section with Discord badge and invite link

Improved

  • Landscape Lyrics Display: Significantly improved lyrics viewing in landscape mode
    • Lyrics now occupy right 60% of screen while album art stays on left 40%
    • Created CompactLyricsView widget specifically optimized for landscape
    • Portrait mode keeps fullscreen lyrics overlay
    • Fixed overflow issues in lyrics dialog
  • Playlist Duration Calculation: Enhanced playlist screen with accurate total duration
    • Total duration now calculated from actual song lengths
    • Displays formatted duration (e.g., "12 songs • 1 hr 23 min")

Fixed

  • Homepage Loading Issue on Windows: Fixed infinite skeleton loading
    • Added 5-second timeout to server initialization calls in LibraryProvider
    • App now continues in local mode if server doesn't respond
    • Improved error handling for missing server configuration
  • Windows SMTC Error Handling: Improved error messages for RustLib initialization
    • App continues normally even if SMTC (Windows System Media Transport Controls) fails to initialize
    • Added informative debug messages explaining SMTC will be disabled

[Unreleased] - 2026-01-17

Added

  • #27 Star Rating System: Added 1-5 star rating support for songs

    • Rate songs via the song options menu (three-dot menu)
    • Rating dialog with visual star picker
    • Shows current rating in menu title
    • Uses Subsonic setRating API endpoint
    • Added userRating field to Song model
  • Landscape Mode for Full Player: New horizontal layout when device is rotated

    • Album artwork displayed on the left (40% width)
    • Song info and controls on the right (60% width)
    • Lyrics toggle replaces controls with synced lyrics on right side
    • Automatic layout switch based on screen orientation
    • Created CompactLyricsView widget optimized for landscape mode

Improved

  • Playlist & Album Screens: Enhanced with calculated total duration
    • Playlist screen now shows total duration calculated from songs (e.g., "12 songs • 1 hr 23 min")
    • More accurate duration display based on actual song lengths

Changed

  • Performance Optimizations: Migrated synced lyrics view to flutter_lyric package (v3.0.2)
    • Reduced blur effects from sigma 80 to 40 for better GPU performance
    • Added RepaintBoundary around animated backgrounds
    • Implemented position update throttling (100ms intervals)
    • Reduced image cache sizes for lower memory usage
  • Widget Optimization: Replaced Consumer and Provider.of with Selector pattern
    • SongTile: Now only rebuilds when current song changes
    • DesktopPlayerBar: Optimized controls, progress bar, and volume slider
    • Reduced unnecessary widget rebuilds across the app

Fixed

  • Synced lyrics assertion error: selectionAutoResumeDuration must be less than activeAutoResumeDuration
  • Library "Local" filter removed: Cleaned up unused local music filter from library screen
  • Storage permissions for Android 13+: Added READ_MEDIA_AUDIO and READ_MEDIA_IMAGES permissions
  • Server not configured errors: LibraryProvider now gracefully handles local-only mode without server errors

[1.0.4] - 2026-01-15

Added

  • Premium Equalizer: 10-band EQ with presets (Rock, Pop, Jazz, Classical, Bass Boost, Treble Boost, Vocal, Electronic, Hip Hop) and custom preset saving
  • Settings Categories: Reorganized settings into 5 tabs (Playback, Storage, Server, Display, About)
  • Local File Support: Play music files stored on device with automatic library scanning
  • Transcoding/Streaming Quality: Configure WiFi and Mobile bitrate settings with format selection (MP3, Opus, AAC)
  • Offline Mode: Automatic fallback to downloaded music when server is unreachable
  • Offline Playback Indicator: Orange banner shows when in offline mode

Improved

  • Synced Lyrics Display:

    • Added blur effect for non-active lines (distance-based)
    • Added glow shadow for active line
    • Improved scale animations (1.15x-1.18x for active)
    • Enhanced line spacing and visual hierarchy
    • Applied to mobile, desktop, and fullscreen views
  • Shuffle Functionality: Now properly shuffles playlist regardless of current playback state

  • Artists Tab: Now correctly displays artists when "Artists" filter is selected

  • Homepage Empty State: Added fallback message and refresh button when no content

Fixed

  • #26: Transcoding/streaming quality settings

    • Added WiFi and Mobile bitrate configuration in Server settings
    • Support for format selection (MP3, Opus, AAC)
    • Bitrate options from 64kbps to 320kbps or original quality
  • #25: Library search now works on all items, not just playlists

    • Implemented LibrarySearchDelegate that searches across playlists, albums, and artists
  • #24: Artists tab now displays content

    • Fixed _getFilteredItems to properly filter and return artists list
  • #22: Homepage shows fallback when no content available

    • Added empty state widget with refresh button when no albums/songs loaded
  • #20: Shuffle button now always shuffles instead of acting as play/pause

    • Modified shuffle logic to always shuffle the playlist, even when already playing
  • #19: Download button in playlist now downloads all songs

    • Implemented batch download functionality in playlist screen
  • #18: Play/Pause state now correctly shows only for the active playlist

    • Fixed playlist header to compare current playing context
  • #17: Lyrics scroll now uses smooth animations without line-break changes

    • Used fixed font size for all lines to prevent layout shifts
  • #16: Library search button now works

    • Connected search icon to LibrarySearchDelegate
  • #15: Swipe down to minimize player implemented

    • Added gesture detector for vertical swipe to dismiss full player
  • #14: Option to hide volume bar from player

    • Added toggle in Display settings to show/hide volume slider
  • #13: Click on album/artist name navigates to respective screen

    • Made album and artist names tappable in now playing screen
  • #12: Internet radio station support

    • Added RadioScreen with server radio stations
    • Support for streaming internet radio URLs
  • #11: All Songs view with sort options and playback

    • Added AllSongsScreen with play/shuffle buttons
  • #10: Auto-DJ feature for queue

    • Implemented smart queue that adds similar songs when queue ends
  • #9: ReplayGain support

    • Added ReplayGain toggle in Playback settings
  • #8: Progress bar freezes on rewind

    • Fixed position stream subscription to properly update on seek
  • #7: Custom TLS/SSL certificates

    • Added option to allow self-signed certificates in login
    • Added custom certificate file picker in Advanced Options
  • #5: Lyrics text stability

    • Fixed line break changes during playback by using consistent font sizing
  • #4: Music Folders support

    • Added music folder selection in Server settings
  • #3: Error messages for incorrect URL

    • Added proper error handling and snackbar messages for connection failures
  • #1: Miniplayer persists

    • Implemented nested navigator architecture to maintain miniplayer state

v1.0.3

10 Jan 01:38

Choose a tag to compare

Changelog

All notable changes to Musly will be documented in this file.

The format is based on Keep a Changelog,
and this project adheres to Semantic Versioning.

[Unreleased]

Added

Internet Radio Support (closes #12)

  • Added full support for internet radio stations from Subsonic/Navidrome servers
  • New RadioScreen with list of all configured radio stations
  • Radio stations display with play/pause controls and "LIVE" indicator
  • Mini player shows radio station name with "LIVE" badge when streaming
  • Now Playing screen has dedicated radio player UI with streaming indicator
  • Added RadioStation model and API methods (getInternetRadioStations, createInternetRadioStation, updateInternetRadioStation, deleteInternetRadioStation)

Auto DJ - Automatic Queue Continuation (closes #10)

  • New AutoDjService for intelligent automatic queue continuation
  • 5 Auto DJ modes:
    • Off: Playback stops when queue ends
    • Shuffle Library: Add random songs from library
    • Similar Songs: Add songs similar to what's playing (via getSimilarSongs API)
    • Same Genre: Add songs from the same genre
    • Same Artist: Add more songs by the same artist (via getArtistTopSongs API)
    • Smart Mix: Intelligent mix based on tempo, genre, and listening habits
  • Configurable number of songs to add (1-20)
  • Settings UI in Settings screen under "AUTO DJ" section

ReplayGain Volume Normalization (closes #9)

  • New ReplayGainService for audio volume normalization
  • 3 modes: Off, Track (normalize each track), Album (preserve album dynamics)
  • Configurable preamp gain (-15 to +15 dB)
  • Prevent clipping option
  • Fallback gain for tracks without ReplayGain metadata
  • Settings UI under "VOLUME NORMALIZATION (REPLAYGAIN)" section

Player UI Customization (closes #14)

  • New PlayerUiSettingsService for player interface preferences
  • Option to hide volume slider from Now Playing screen
  • Settings UI under "PLAYER INTERFACE" section

Navigation Improvements (closes #1)

  • Persistent bottom nav bar and miniplayer: Navigation now preserves mini player and bottom navigation across all screens using nested navigator
  • Clickable "Playing From" album/artist names (closes #13)
    • Clicking album name in Now Playing header navigates to AlbumScreen
    • Clicking artist name navigates to ArtistScreen
    • Visual underline indicates clickable elements
  • Multiple artists support: When artist contains "/" separator (common in Subsonic), shows selection dialog to choose which artist to navigate to
  • New NavigationHelper utility for nested navigation with persistent bottom bar
  • Navigation now preserves mini player and bottom navigation when pushing screens

Swipe to Dismiss Player (closes #15)

  • Swipe down gesture on Now Playing screen to minimize player
  • Smooth morph animation: screen scales down, corners round, controls fade
  • Background visible during swipe (opaque route)
  • Velocity-based dismissal threshold

Improved Back Button Handling

  • Android back button now properly navigates through app hierarchy
  • First press: pops nested navigator (goes back in detail screens)
  • Second press: returns to Home tab if on another tab
  • Third press: exits the app
  • Uses PopScope with SystemNavigator.pop() for clean exit

Search Enhancements

  • Real-time autocomplete suggestions while typing
  • Debounced search to reduce API calls
  • Autocomplete overlay showing artists, albums, and songs
  • Radio category added to browse categories

All Songs Improvements (closes #11)

  • Added sort options for songs list
  • Play and shuffle play buttons for song collections
  • Improved playback controls in song lists

SSL/TLS Certificate Support (closes #7)

  • Support for self-signed certificates
  • Custom certificate path configuration
  • Proper certificate validation handling via IOHttpClientAdapter

Changed

  • Mini Player: Now shows for both regular songs AND radio stations
  • Now Playing Screen: Converted _PlayerControls from StatelessWidget to StatefulWidget to support dynamic volume slider visibility
  • Lyrics View (closes #5):
    • Improved scroll positioning using GlobalKey for precise line targeting
    • Better height estimation with TextPainter caching
    • Fixed waiting dots position in calculations
    • Changed to use Scrollable.ensureVisible for centered scrolling
    • Fixed text stability issues during playback
  • Settings Screen: Reorganized with new sections for Auto DJ, Player Interface, and ReplayGain
  • Search Screen: Added resizeToAvoidBottomInset: false to prevent mini player jumping with keyboard

Fixed

  • Mini player not appearing when playing radio stations
  • Removed duplicate MiniPlayer widgets from various screens (now handled centrally in MainScreen)
  • Fixed navigation from nested screens breaking mini player visibility
  • Fixed back button immediately exiting app instead of navigating back
  • Fixed pressing rewind in Now Playing screen freezing progress bar (closes #8)
  • Fixed search button in "Your Library" page not working (closes #16)

Technical

  • Added new services:
    • PlayerUiSettingsService - Player UI preferences
    • ReplayGainService - Volume normalization
    • AutoDjService (extended) - Auto DJ modes and queue continuation
  • Added new models:
    • RadioStation - Internet radio station data
  • Added new utilities:
    • NavigationHelper - Nested navigation with persistent bottom bar
  • Added new screens:
    • RadioScreen - Internet radio stations list
    • LibrarySearchDelegate - Library search functionality
  • New Subsonic API methods:
    • getInternetRadioStations()
    • createInternetRadioStation()
    • updateInternetRadioStation()
    • deleteInternetRadioStation()
    • getSimilarSongs() / getSimilarSongs2()
    • getArtistTopSongs() / getTopSongs()
    • getSongsByGenre()
  • Added file_picker dependency for future file selection features
  • Updated pubspec.yaml with new dependencies

Issue References

  • #1 - Persistent bottom nav bar and miniplayer across screens
  • #5 - Lyrics text stability
  • #7 - Support custom TLS/SSL certificates
  • #8 - Pressing rewind in "now playing screen" freezes progress bar
  • #9 - Add ReplayGain volume normalization
  • #10 - Auto-DJ for "Playing Next" automatic queue continuation
  • #11 - All Songs: Add sort options and playback (play button, shuffle play)
  • #12 - Import internet radio stations
  • #13 - Clicking on "Playing From" to go to the album or artist page
  • #14 - Option to hide volume bar from player
  • #15 - Swiping down on player's top edge to minimize the player
  • #16 - Search button in "Your Library" page doesn't work

v1.0.2

05 Jan 00:42

Choose a tag to compare

Changelog

All notable changes to this project will be documented in this file.

[1.0.2]

Added

  • Developer Section: Added a new section in Settings with developer information.
  • Donation Support: Added support for donations via Buy Me a Coffee, Bitcoin, and Solana.
  • Music Folders: Added support for Subsonic music folders selection in Settings.
  • URL Launcher: Integrated url_launcher for opening external links (GitHub, Donations).
  • Desktop lyrics fullscreen toggle with borderless window support on Windows, macOS, and Linux.

Changed

  • Server Label: Updated Settings to dynamically display the server type (e.g., Navidrome, Subsonic, Airsonic) and version.
  • Listening History: Now tracks and displays individual songs instead of just albums.
  • Language: Standardized all app text to English.
  • Desktop lyrics layout re-centered with dynamic padding and distance-based scroll animation; mobile unaffected.
  • Fullscreen lyrics view uses a simplified, larger-type layout and hides scrollbars for cleaner presentation.

Fixed

  • MiniPlayer Visibility: Ensured the MiniPlayer stays visible across browsing screens (albums, artists, playlists, library, search, etc.) (fixes #1).
  • Music Folders: Added selection of Subsonic music folders in Settings and applied to requests (fixes #4).
  • Invalid Server URL: Now shows clear error when entering an incorrect server URL (fixes #3).
  • Library Import: Addressed incomplete library import flows (fixes #2).
  • Image Caching: Optimized album artwork caching with disk cache and unique cache keys to prevent unnecessary reloads.
  • GridView Crash: Fixed a crash occurring when item lists were empty.
  • Login Errors: Improved error handling and user feedback during login (SSL, Timeout, 404).
  • Android Manifest: Updated manifest to support external URL launching on Android 11+.
  • Prevented UI stalls when toggling fullscreen by making window state changes non-blocking and refocusing the window.

Performance

  • Data Caching: Implemented persistent caching for Albums and Songs using SharedPreferences to improve startup time and reduce network requests.

v1.0.1 out-of-beta

02 Jan 21:46
80d7049

Choose a tag to compare

Release Notes - Musly v1.0.0

Full Changelog: v1.0.0...v1.0.1

First Out-Of-Beta Release

This is the first stable release of Musly, marking its transition out of beta.

What's New

Windows Support

  • Added support for Windows platform

Important Notes

Testing and Stability

This version has not been thoroughly tested across all possible configurations. As a result:

  • Bugs may be present
  • Some features might behave unexpectedly in certain scenarios
  • Performance may vary across different hardware and software configurations

Bug Reports

If you encounter any issues or unexpected behavior:

  1. Visit the Issues page
  2. Use the appropriate bug report template
  3. Provide as much information as possible (operating system, version, steps to reproduce)

Your feedback is valuable for improving Musly's stability.

Links

v1.0.0-beta

01 Jan 01:26

Choose a tag to compare

v1.0.0-beta Pre-release
Pre-release