{"id":35076650,"url":"https://github.com/collotsspot/ensemble","last_synced_at":"2026-03-04T07:01:44.389Z","repository":{"id":325456524,"uuid":"1101228006","full_name":"CollotsSpot/Ensemble","owner":"CollotsSpot","description":"A minimalistic Android client for Music Assistant - stream your music library to your phone or control playback on any connected speaker","archived":false,"fork":false,"pushed_at":"2026-02-28T07:50:18.000Z","size":140834,"stargazers_count":145,"open_issues_count":11,"forks_count":7,"subscribers_count":1,"default_branch":"master","last_synced_at":"2026-02-28T13:43:42.199Z","etag":null,"topics":["android","android-app","dart","flutter","home-assistant","material-design","mobile-app","music-assistant","music-player","music-streaming","open-source","selfhosted"],"latest_commit_sha":null,"homepage":"","language":"Dart","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/CollotsSpot.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":".github/FUNDING.yml","license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null},"funding":{"github":"CollotsSpot","custom":"https://ko-fi.com/collotsspot"}},"created_at":"2025-11-21T11:27:17.000Z","updated_at":"2026-02-27T21:08:12.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/CollotsSpot/Ensemble","commit_stats":null,"previous_names":["collotsspot/music-assistant-mobile","collotsspot/amass","collotsspot/assistant-to-the-music","collotsspot/ensemble"],"tags_count":56,"template":false,"template_full_name":null,"purl":"pkg:github/CollotsSpot/Ensemble","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/CollotsSpot%2FEnsemble","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/CollotsSpot%2FEnsemble/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/CollotsSpot%2FEnsemble/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/CollotsSpot%2FEnsemble/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/CollotsSpot","download_url":"https://codeload.github.com/CollotsSpot/Ensemble/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/CollotsSpot%2FEnsemble/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":30075425,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-03-04T05:31:57.858Z","status":"ssl_error","status_checked_at":"2026-03-04T05:31:38.462Z","response_time":59,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.5:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["android","android-app","dart","flutter","home-assistant","material-design","mobile-app","music-assistant","music-player","music-streaming","open-source","selfhosted"],"created_at":"2025-12-27T12:11:21.723Z","updated_at":"2026-03-04T07:01:44.371Z","avatar_url":"https://github.com/CollotsSpot.png","language":"Dart","funding_links":["https://github.com/sponsors/CollotsSpot","https://ko-fi.com/collotsspot"],"categories":[],"sub_categories":[],"readme":"\u003cdiv align=\"center\"\u003e\n  \u003cimg src=\"assets/images/ensemble_logo.png\" alt=\"Ensemble Logo\" height=\"200\"\u003e\n\n  [![GitHub release](https://img.shields.io/badge/Release-v3.0.4-blue?style=for-the-badge\u0026logo=github)](https://github.com/CollotsSpot/Ensemble/releases)\n  [![GitHub Downloads](https://img.shields.io/github/downloads/CollotsSpot/Ensemble/latest/total?style=for-the-badge\u0026logo=android\u0026label=APK%20Downloads\u0026color=green)](https://github.com/CollotsSpot/Ensemble/releases/latest)\n  [![License: MIT](https://img.shields.io/badge/License-MIT-purple.svg?style=for-the-badge)](https://opensource.org/licenses/MIT)\n  [![GitHub Sponsors](https://img.shields.io/badge/Sponsor-GitHub-EA4AAA?style=for-the-badge\u0026logo=GitHub%20Sponsors\u0026logoColor=white)](https://github.com/sponsors/CollotsSpot)\n  [![Ko-fi](https://img.shields.io/badge/Ko--fi-FF5E5B?style=for-the-badge\u0026logo=Ko-fi\u0026logoColor=white)](https://ko-fi.com/collotsspot)\n\n---\n\n  \u003cp\u003e\u003cstrong\u003eAn unofficial mobile client for Music Assistant\u003c/strong\u003e\u003c/p\u003e\n  \u003cp\u003eStream your music library directly to your phone, or control playback on any connected speaker.\u003c/p\u003e\n\u003c/div\u003e\n\n---\n\n## Disclaimer\n\n**Ensemble is an unofficial, community-built mobile client for Music Assistant. It is not affiliated with, endorsed by, or supported by the Music Assistant project or its developers.**\n\nThis application was built with AI-assisted development using **Claude Code** and **Gemini CLI**.\n\n---\n\n## Also See\n\n**[Ensemble TV](https://github.com/CollotsSpot/ensemble-tv)** - A simple Android TV client for Music Assistant that displays what's currently playing on your TV with remote control support.\n\n---\n\n## Features\n\n### Local Playback\n- **Stream to Your Phone** - Play music from your Music Assistant library directly on your mobile device via Sendspin protocol\n- **Background Playback** - Music continues playing when the app is minimized\n- **Media Notifications** - Control playback from your notification shade with album art display\n- **Instant Response** - Pause/resume in ~300ms\n\n### Remote Control\n- **Multi-Player Support** - Control any speaker or device connected to Music Assistant\n- **Device Selector** - Swipe down on mini player to reveal all your devices\n- **Multi-Room Grouping** - Long-press any player to sync it with the current player\n- **Full Playback Controls** - Play, pause, skip, seek, and adjust volume\n- **Volume Precision Mode** - Hold the volume slider for fine-grained control with haptic feedback\n- **Power Control** - Turn players on/off directly from the mini player\n\n### Queue Management\n- **View \u0026 Manage Queue** - See upcoming tracks in the playback queue\n- **Drag to Reorder** - Instant drag handles for reordering tracks\n- **Swipe left to Delete** - Remove tracks with a simple swipe gesture\n- **Swipe right to play next** - Move tracks with a simple swipe gesture\n\n### Home Screen\n- **Customizable Rows** - Toggle and reorder: Recently Played, Discover Artists, Discover Albums\n- **Favorites Rows** - Optional rows for Favorite Albums, Artists, Tracks, Playlists, and Radio Stations\n- **Adaptive Layout** - Rows scale properly for different screen sizes and aspect ratios\n- **Pull to Refresh** - Refresh content with a simple pull gesture\n\n### Library\n- **Music** - Browse artists, albums, playlists, and tracks from all your music sources\n- **Radio Stations** - Browse and play radio stations with list or grid view\n- **Podcasts** - Browse podcasts, view episodes with descriptions and publish dates\n- **Audiobooks** - Browse by title, series, or author with progress tracking\n- **Favorites Filter** - Toggle to show only your favorite items\n- **Providers Filter** - Toggle to show only specific provider items\n- **Letter Scrollbar** - Fast navigation through long lists\n- **Provider Icons** - Provider icons on library covers\n\n### Search\n- **Universal Search** - Find music, podcasts, radio stations, playlists, and audiobooks\n- **Fuzzy Matching** - Typo-tolerant search (e.g., \"beetles\" finds \"Beatles\")\n- **Smart Scoring** - Results ranked by relevance with colored type indicators\n- **Search History** - Quickly access your recent searches\n- **Quick Actions** - Long-press any result to add to queue or play next\n\n### Audiobooks\n- **Chapter Navigation** - Jump between chapters with timestamp display\n- **Progress Tracking** - Track your listening progress across sessions\n- **Continue Listening** - Pick up where you left off\n- **Mark as Finished/Unplayed** - Manage your reading progress\n- **Series Support** - View audiobooks organized by series with collage cover art\n\n### Podcasts\n- **Episode Browser** - View full episode list with artwork and descriptions\n- **Skip Controls** - Skip forward/backward during playback\n- **High-Resolution Artwork** - Fetched via iTunes for best quality\n\n### Android Auto\n- **Media Browsing** - Browse your library from your car's display with categories for Home, Music, Audiobooks, Podcasts, and Radio\n- **Voice Search** - Find and play tracks using voice commands\n- **Full Playback Controls** - Play, pause, and skip from your car's head unit\n- **Album Art \u0026 Metadata** - Track info and artwork displayed on your car's screen\n- **Smart Queueing** - Tap any track in an album or playlist to play from that point with the full queue\n\n### Smart Features\n- **Instant App Restore** - App loads instantly with cached library data while syncing in background\n- **Auto-Reconnect** - Automatically reconnects when connection is lost\n- **Offline Browsing** - Browse your cached library even when disconnected\n- **Hero Animations** - Smooth transitions between screens\n- **Welcome Screen** - Guided onboarding for first-time users\n\n### Theming\n- **Material You** - Dynamic theming based on your device's wallpaper\n- **Adaptive Colors** - Album artwork-based color schemes\n- **Light/Dark Mode** - System-aware or manual theme selection\n\n## Screenshots\n\n\u003cdiv align=\"center\"\u003e\n  \u003cimg src=\"assets/screenshots/1.png?v=4\" alt=\"Screenshot 1\" width=\"150\"\u003e\n  \u003cimg src=\"assets/screenshots/2.png?v=4\" alt=\"Screenshot 2\" width=\"150\"\u003e\n  \u003cimg src=\"assets/screenshots/3.png?v=4\" alt=\"Screenshot 3\" width=\"150\"\u003e\n  \u003cimg src=\"assets/screenshots/4.png?v=4\" alt=\"Screenshot 4\" width=\"150\"\u003e\n  \u003cimg src=\"assets/screenshots/5.png?v=4\" alt=\"Screenshot 5\" width=\"150\"\u003e\n  \u003cimg src=\"assets/screenshots/6.png?v=4\" alt=\"Screenshot 6\" width=\"150\"\u003e\n  \u003cimg src=\"assets/screenshots/7.png?v=4\" alt=\"Screenshot 7\" width=\"150\"\u003e\n  \u003cimg src=\"assets/screenshots/8.png?v=4\" alt=\"Screenshot 8\" width=\"150\"\u003e\n  \u003cimg src=\"assets/screenshots/9.png?v=4\" alt=\"Screenshot 9\" width=\"150\"\u003e\n  \u003cimg src=\"assets/screenshots/10.png?v=4\" alt=\"Screenshot 10\" width=\"150\"\u003e\n  \u003cimg src=\"assets/screenshots/11.png?v=4\" alt=\"Screenshot 11\" width=\"150\"\u003e\n  \u003cimg src=\"assets/screenshots/12.png?v=4\" alt=\"Screenshot 12\" width=\"150\"\u003e\n\u003c/div\u003e\n\n## Download\n\nDownload the latest release from the [Releases page](https://github.com/CollotsSpot/Ensemble/releases).\n\n## Setup\n\n1. Launch the app\n2. Enter your Music Assistant server URL\n3. Connect to your server\n4. Start playing! Music plays on your phone by default, or swipe down on the mini player to choose a different player.\n\n### Finding Your Server URL\n\n**Important:** You need the **Music Assistant** URL, not your Home Assistant URL.\n\nTo find the correct URL:\n1. Open Music Assistant web UI\n2. Go to **Settings** \u003e **About**\n3. Look for **Base URL** (e.g., `http://192.168.1.100:8095`)\n\n### Home Assistant Add-on Users\n\nIf you run Music Assistant as a Home Assistant add-on:\n- Use the IP address of your Home Assistant server\n- Do **not** use your Home Assistant URL or ingress URL\n\n### Android Auto\n\nSince Ensemble is not installed from the Play Store, you need to enable unknown sources in Android Auto:\n\n1. Open **Android Auto** settings on your phone\n2. Tap the **Version** number at the bottom 10 times to enable developer mode\n3. Tap the three-dot menu and open **Developer settings**\n4. Enable **Unknown sources**\n5. Connect your phone to your car via USB or wirelessly\n6. Ensemble will appear in Android Auto's app list\n\n### Remote Access\n\nFor access outside your home network, you'll need to expose Music Assistant through a reverse proxy (e.g., Traefik, Nginx Proxy Manager, Cloudflare Tunnel).\n\n## Requirements\n\n- Music Assistant server (v2.7.0 beta 20 or later recommended)\n- Network connectivity to your Music Assistant server\n- Android device (Android 5.0+)\n- Audiobookshelf provider configured in Music Assistant (for audiobook features)\n\n## Sponsors\n\nA huge thank you to my sponsors! 💖\n\n\u003ca href=\"https://github.com/pcsokonay\"\u003e\u003cimg src=\"https://github.com/pcsokonay.png\" width=\"60px\" alt=\"pcsokonay\" /\u003e\u003c/a\u003e\n\u003ca href=\"https://github.com/githubchb\"\u003e\u003cimg src=\"https://github.com/githubchb.png\" width=\"60px\" alt=\"githubchb\" /\u003e\u003c/a\u003e\n\n## License\n\nMIT License\n\n---\n\n## For Developers\n\n\u003cdetails\u003e\n\u003csummary\u003eBuild from Source\u003c/summary\u003e\n\n### Prerequisites\n- Flutter SDK (\u003e=3.0.0)\n- Dart SDK\n\n### Build Instructions\n\n1. Clone the repository\n```bash\ngit clone https://github.com/CollotsSpot/Ensemble.git\ncd Ensemble\n```\n\n2. Install dependencies\n```bash\nflutter pub get\n```\n\n3. Generate launcher icons\n```bash\nflutter pub run flutter_launcher_icons\n```\n\n4. Build APK\n```bash\nflutter build apk --release\n```\n\nThe APK will be available at `build/app/outputs/flutter-apk/app-release.apk`\n\n\u003c/details\u003e\n\n\u003cdetails\u003e\n\u003csummary\u003eTechnologies Used\u003c/summary\u003e\n\n- **Flutter** - Cross-platform mobile framework\n- **audio_service** - Background playback and media notifications\n- **web_socket_channel** - WebSocket communication with Music Assistant\n- **provider** - State management\n- **cached_network_image** - Image caching\n- **shared_preferences** - Local settings storage\n\n\u003c/details\u003e\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fcollotsspot%2Fensemble","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fcollotsspot%2Fensemble","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fcollotsspot%2Fensemble/lists"}