Skip to content

Releases: CollotsSpot/Ensemble

v3.0.4-beta

20 Feb 06:51

Choose a tag to compare

What's New

New Features

  • Android Auto support — Browse and play media directly from Android Auto, with a browse tree organized into Home, Music, Audiobooks, Podcasts, and Radio
  • Audiobook library cache — Audiobook library results are now cached for faster loading and more consistent detail screen behavior
  • Detail track cache, image prefetch, and offline caching improvements — Track lists and images are cached/prefetched for smoother navigation

Improvements

  • Home screen — Added bottom fade gradient and increased row height
  • Nav bar & mini player persist during brief disconnects — No more UI flicker on momentary connection drops
  • Improved author image loading and series cover rebuilds
  • Dismiss keyboard on search interaction — Keyboard now dismisses properly; re-tapping the search tab works correctly

Bug Fixes

  • Volume sync (Sendspin) — Multiple fixes to keep Ensemble and Music Assistant volume in sync: PCM gain handling, hardware button support, FlutterVolumeController integration, proper server/command message handling
  • Chromecast idle-out — Fixed polling spam and track loss after Chromecast goes idle (#61)
  • Menu positioning — Fixed menus appearing behind the mini player

Thanks to @antoinevandenhurk for his work on Android Auto support (#25) 🙏

v3.0.3-beta

10 Feb 15:08

Choose a tag to compare

Discovery Rows

  • Browse recommendation folders from your music providers (e.g. Tidal mixes) directly on the home screen
  • Each discovery row can be individually enabled/disabled and reordered via drag-and-drop in settings
  • Discovery rows auto-detect based on provider availability — disabled by default, opt-in per row
  • Inspired by @relic664's concept (PR #64)

Sync Group Volume (thanks to @pcsokonay — PR #69)

  • Fixed volume slider snapping back to 0 on server-side sync groups where Music Assistant returns null volume
  • Fixed leader volume adjustment not propagating proportionally to group members for in-app created groups
  • New GroupVolumeManager computes effective volume from group members, handles nested groups, and caches pending changes

Hardware Volume Buttons (thanks to @pcsokonay — PR #69)

  • Hardware volume buttons now control the selected MA player when Ensemble is in the foreground
  • Volume interception pauses when the app is backgrounded and resumes when reopened — this was added after discovering that volume changes in other apps (e.g. YouTube) were being routed to the MA player on Android 12+

Stability

  • Fixed multiple red screen crashes: setState during build phase, context.select in sliver contexts, and missing Overlay ancestors for tooltips
  • Fixed search race conditions when typing quickly — stale results from slow providers no longer overwrite current results
  • Fixed empty homepage on cold start (connected state was broadcast before auth completed)
  • Fixed library data not appearing after app restart until manual refresh (in-memory cache empty despite valid database timestamp)
  • Fixed empty results being persisted to cache, causing stale blank screens
  • Fixed home screen row height formula after bottom nav bar was relocated (PR #69 moved it to Scaffold with extendBody)
  • Fixed settings only showing 3 home screen rows instead of all 13 available

UI Polish

  • Smoother home screen — rows reload data in-place instead of being destroyed and recreated, preventing size jumps on app resume
  • Home cache only invalidates when connecting to a different server, not on routine reconnects after backgrounding
  • Mini player animates position when navigating to/from detail screens (where bottom nav bar is hidden)
  • Bottom fade gradient on detail screens
  • Refined spacing and cover art sizing across album, playlist, artist, and author detail screens
  • Smoother player reveal overlay — removed animated blur in favor of static backdrop, deferred color extraction until after animation, and reduced unnecessary rebuilds
  • Expanded mini player swipe-down gesture hit area
  • All home screen rows now visible and toggleable in settings

Other

  • Added About & Support section in settings with GitHub Sponsors and Ko-fi links
  • Removed Aliyun Maven mirrors from build config

v3.0.2

28 Jan 05:02

Choose a tag to compare

Disable dependency metadata in APK for F-Droid compliance.

v3.0.1

27 Jan 20:22

Choose a tag to compare

What's New

  • Add fastlane metadata for F-Droid (screenshots, descriptions, changelogs)

v3.0.0

27 Jan 19:56

Choose a tag to compare

Breaking Change

Users must uninstall and reinstall the app.

The package ID has been changed from com.musicassistant.music_assistant to com.collotsspot.ensemble to avoid confusion with official Music Assistant apps. This is a community-built client.

What's New

  • New package ID: com.collotsspot.ensemble
  • Prepares for F-Droid and Play Store submission

Upgrade Instructions

  1. Uninstall the old version
  2. Install this new version
  3. Re-enter your Music Assistant server details

v2.9.3-beta

27 Jan 19:21

Choose a tag to compare

What's Changed

Bug Fixes

  • Fix local player track data disappearing when selected

Improvements

  • Add centralized LibraryStatusService for consistent library/favorite state
  • Simplify player selection logic
  • Improve adaptive color contrast using HCT color space

Documentation

  • Revise reverse proxy details and remove auth methods

v2.9.2-beta

26 Jan 22:31

Choose a tag to compare

New Features

Context Menus

  • Long-press context menus on all media items: Albums, artists, tracks, playlists, podcasts, and radio stations now all support long-press to show a context menu with Play, Add to Library, and Favorite options.

Podcasts

  • Podcast episode detail screen: Tap "View Details" from episode context menu to see full scrollable description, publish date, duration, with Play, Play On, and Add to Queue actions.
  • Episode sorting: Sort podcast episodes by newest first, oldest first, alphabetical, or duration.

Audio Quality

  • Hi-res audio badge: Track listings now show a hi-res badge when high quality audio is available.

Improvements

UI/UX

  • New library icon: Replaced confusing library icon with clearer book icon (book_2) across bottom nav, search filter, detail screens, and context menus. Filled when in library, outlined when not.
  • Player selector: Replaced popup dialog with player select overlay for queue actions.
  • Search library filter: Filled icon indicates active filter state without background highlight.
  • Context menu polish: Slightly larger buttons (46px), wider menu (185px), consistent text colors that don't pick up adaptive theming.
  • Navigation transitions: Smoother fade/slide animations between screens.
  • Hero animations: Podcast episode images animate smoothly to detail screen.

Performance

  • Library list optimization: Standardized list item heights with itemExtent, reduced image cache sizes for smoother scrolling.
  • Palette extraction: Moved to isolate for better UI responsiveness during color extraction.
  • Provider selects: Optimized provider state watching to reduce unnecessary rebuilds.

Bug Fixes

Audiobooks

  • Fixed audiobooks not loading after provider re-add: When removing and re-adding an AudiobookShelf provider, the app would show 0 audiobooks because saved library paths referenced the old provider instance ID. Now automatically clears stale settings and falls back to the library_items API.

  • Fixed duplicate provider filter options: After re-adding a provider, two entries for the same provider could appear in the library filter menu. Now deduplicates providers by name, keeping the one with more items.

  • Fixed multiple accounts of same service not showing: When you have multiple accounts of the same service (e.g., two Spotify accounts for different family members), only one would appear in the library menu provider toggles. Now all accounts with distinct names are shown.

  • Fixed audiobook year sorting: Sort by year now works correctly for audiobooks. Fixed two issues:

    • Year data is now properly extracted from ABS's metadata.release_date field (handles both "2024" and "2024-01-15" formats)
    • Sort handler now properly supports ascending and descending year sorts

Library Sorting

  • Fixed letter scrollbar showing irrelevant letters: When sorting by date or play count, the scrollbar popup now hides instead of showing meaningless letters. Shows contextual info based on sort type (letters for alphabetical, years for year sort, hidden for date/count sorts).

  • Fixed sorting not working for date added, last played, play count: These sort options now correctly preserve server-side sorting instead of re-sorting alphabetically on the client. Affected albums, artists, and tracks tabs.

  • Fixed playlists sorting: Modified, last played, and play count sorting now works for playlists by properly requesting sorted data from the server.

  • Fixed ascending/descending not working: Sort direction now properly applies for all sort types across albums, artists, playlists, and audiobooks.

  • Fixed list not updating when sort order changes: Added sort order to ListView/GridView keys to force UI rebuilds when changing sort direction.

Provider Management

  • Fixed stale provider IDs persisting in settings: When toggling providers, stale provider instance IDs (from removed providers) are now automatically cleaned up from saved settings.

Playback

  • Fixed Spotify external source detection (issue #27): Properly detects when Spotify is the music provider.
  • Fixed foreground service not stopping (issue #51): Auto-stops after 30 minutes idle.
  • Fixed Sendspin proxy auth: Now works correctly for local network connections.

UI Fixes

  • Fixed nav bar hidden when no player selected: Navigation bar now always visible.
  • Fixed Flutter 3.38 slider grey rectangles: Volume and seek sliders render correctly.
  • Fixed library tab scroll position: Maintains position when switching tabs.

Technical Changes

  • Flutter 3.38 compatibility
  • Simplified authentication using MA built-in auth
  • Added material_symbols_icons package for book_2 icon
  • Added ScrollbarDisplayMode enum (letter, year, count, none) for contextual scrollbar popups
  • Added updateCachedAlbums(), updateCachedArtists(), updateCachedPlaylists() methods to SyncService for proper cache synchronization with sorted data
  • Provider filter now validates against available providers when toggling, not just on initial load
  • Removed Selector caching from albums and artists tabs to ensure proper rebuilds when source tracking updates
  • Options menu provider toggles now use Consumer to watch Provider state directly
  • Centralized player selector logic in GlobalPlayerOverlay.showPlayerSelectorForAction()

v2.9.1-beta

20 Jan 19:29

Choose a tag to compare

🎨 Provider Icons

  • Provider icon overlays now shown on audiobook series screen (grid and list views)
  • Provider icon overlays now shown on library playlists (grid and list views)

⚡ Performance Optimizations

  • Sorting cache: Albums, artists, and authors lists now use cached sorting - eliminates O(n log n) sort on every UI rebuild
  • SyncService listener: Only rebuilds UI when sync completes, not during sync
  • Image cache sizing: Fixed mismatches to reduce memory usage (author images, audiobook list thumbnails, series covers)
  • Hero animations: Removed redundant text Hero animations from card widgets (50-66% reduction in animation overhead per card)
  • Color extraction: Deferred from card tap to detail screen to avoid GPU competition with Hero animations
  • Provider toggle: Eliminated double rebuild when toggling provider filters
  • Fallback image debounce: Increased from 200ms to 400ms to reduce network requests during scroll

🐛 Bug Fixes

  • Sleep timer and progress bar freeze fix
  • Multiple notification and UI fixes
  • Volume precision toggle now affects player selector overlay
  • MediaItem equality and duration formatting fixes
  • Memory leaks and safety improvements

🔄 Other Changes

  • New Player Selector overlay (replaces Play On popups)
  • Comprehensive code audit with memory leak fixes
  • Updated screenshots

Full Changelog: v2.8.9-beta...v2.9.1-beta

v2.9.0-beta

20 Jan 10:17

Choose a tag to compare

What's New in v2.9.0-beta

Features

Lyrics Screen

  • View lyrics for the currently playing track
  • Reads embedded lyrics from track metadata via Music Assistant
  • Falls back to LRCLIB for tracks without embedded lyrics
  • Synced lyrics with auto-scroll that follows playback
  • Swipe down to close lyrics panel

Sleep Timer

  • Preset durations: 15, 30, 45, 60 minutes
  • Option to finish current track before stopping
  • Countdown display in queue panel header
  • Auto-stops playback when timer expires

Player Selector Overlay

  • Replaced "Play On" popups with unified player selector
  • Quickly switch playback between devices
  • Access from mini player or expanded player

Queue Improvements

  • Swipe right on queue item to move to Play Next
  • Swipe left to remove from queue
  • Tap track to skip directly to it

Bug Fixes

  • Fixed progress bar freeze when server sends stale position data
  • Fixed volume precision toggle not affecting player selector overlay
  • Multiple notification and UI fixes

Performance

  • Fixed memory leaks in pending API requests (capped at 100)
  • Fixed ImageStream listener leaks in expandable player
  • Added LRU cache eviction for metadata caches (bounded sizes)
  • Database batch operations (~10x faster sync)
  • Async cancellation on player switch prevents stale UI updates
  • Added MediaItem equality operators for proper collection handling

Code Quality

  • Extracted duration formatting utility (removed 3 duplicate implementations)
  • Added design tokens for consistent spacing

v2.8.9-beta

18 Jan 09:57

Choose a tag to compare

What's New

Features

  • Server-side sorting for library items
  • Per-provider sync with source tracking for instant client-side filtering
  • Player navigation - tap artist/album from expanded player to view details
  • Audiobook libraries toggle moved to Books tab menu for easier access

Fixes

  • Optimistic UI updates for library add/remove buttons
  • Podcast provider filtering now works correctly
  • Provider filter only shows providers that have synced content

Improvements

  • Localization audit and debug cleanup
  • Cleaner settings screen (removed redundant options)

Full Changelog: v2.8.8-beta...v2.8.9-beta