music-assistant-server.git
4 months agoAdd support for using HA Cloud ICE servers for remote access (#2738)
Marcel van der Veldt [Wed, 3 Dec 2025 11:58:26 +0000 (12:58 +0100)]
Add support for using HA Cloud ICE servers for remote access (#2738)

4 months ago⬆️ Update music-assistant-frontend to 2.17.23 (#2739)
music-assistant-machine [Tue, 2 Dec 2025 20:48:13 +0000 (21:48 +0100)]
⬆️ Update music-assistant-frontend to 2.17.23 (#2739)

Co-authored-by: marcelveldt <6389780+marcelveldt@users.noreply.github.com>
4 months agoUpdate webserver readme
Marcel van der Veldt [Tue, 2 Dec 2025 19:39:59 +0000 (20:39 +0100)]
Update webserver readme

4 months agoFinalize Remote Access code (for now)
Marcel van der Veldt [Tue, 2 Dec 2025 19:09:25 +0000 (20:09 +0100)]
Finalize Remote Access code (for now)

4 months agoRemote access changes
Marcel van der Veldt [Tue, 2 Dec 2025 15:56:02 +0000 (16:56 +0100)]
Remote access changes

4 months agoSpotify connect improvements (#2733)
Marvin Schenkel [Tue, 2 Dec 2025 15:07:26 +0000 (16:07 +0100)]
Spotify connect improvements (#2733)

4 months agoFix sync group losing child member across MA restarts (#2736)
Marvin Schenkel [Tue, 2 Dec 2025 15:07:12 +0000 (16:07 +0100)]
Fix sync group losing child member across MA restarts (#2736)

* Fix sync group losing child member across MA restarts

* Fix sync group losing child member across MA restarts

4 months agoAdd stub for GenreController (#2734)
Marvin Schenkel [Tue, 2 Dec 2025 15:07:00 +0000 (16:07 +0100)]
Add stub for GenreController (#2734)

* Ignore genre in search until we implement the genreController

* Add stub controller for Genre to prevent errors in search

4 months ago⬆️ Update music-assistant-frontend to 2.17.22 (#2729)
music-assistant-machine [Tue, 2 Dec 2025 02:57:52 +0000 (03:57 +0100)]
⬆️ Update music-assistant-frontend to 2.17.22 (#2729)

Co-authored-by: marcelveldt <6389780+marcelveldt@users.noreply.github.com>
4 months agoAdd migration script guard
Marvin Schenkel [Mon, 1 Dec 2025 14:33:06 +0000 (15:33 +0100)]
Add migration script guard

4 months agoBump YTM api to 1.11.3. (#2722)
Marvin Schenkel [Mon, 1 Dec 2025 14:27:13 +0000 (15:27 +0100)]
Bump YTM api to 1.11.3. (#2722)

Buml YTM api to 1.11.3.

4 months agoSpotify connect: Fix sudden volume change when session starts (#2704)
Marvin Schenkel [Mon, 1 Dec 2025 10:12:43 +0000 (11:12 +0100)]
Spotify connect: Fix sudden volume change when session starts (#2704)

4 months ago⬆️ Update music-assistant-frontend to 2.17.21 (#2721)
music-assistant-machine [Mon, 1 Dec 2025 09:03:47 +0000 (10:03 +0100)]
⬆️ Update music-assistant-frontend to 2.17.21 (#2721)

Co-authored-by: marcelveldt <6389780+marcelveldt@users.noreply.github.com>
4 months agoremote access fixes
Marcel van der Veldt [Mon, 1 Dec 2025 08:50:33 +0000 (09:50 +0100)]
remote access fixes

4 months ago⬆️ Update music-assistant-models to 1.1.75 (#2720)
music-assistant-machine [Mon, 1 Dec 2025 03:16:55 +0000 (04:16 +0100)]
⬆️ Update music-assistant-models to 1.1.75 (#2720)

Co-authored-by: marcelveldt <6389780+marcelveldt@users.noreply.github.com>
4 months ago⬆️ Update music-assistant-frontend to 2.17.20 (#2719)
music-assistant-machine [Mon, 1 Dec 2025 02:21:57 +0000 (03:21 +0100)]
⬆️ Update music-assistant-frontend to 2.17.20 (#2719)

Co-authored-by: marcelveldt <6389780+marcelveldt@users.noreply.github.com>
4 months agotweak remote access config
Marcel van der Veldt [Mon, 1 Dec 2025 02:10:42 +0000 (03:10 +0100)]
tweak remote access config

4 months agoChange stream controller settings
Marcel van der Veldt [Mon, 1 Dec 2025 01:34:57 +0000 (02:34 +0100)]
Change stream controller settings

4 months agoMove remote access into its own controller
Marcel van der Veldt [Mon, 1 Dec 2025 01:30:01 +0000 (02:30 +0100)]
Move remote access into its own controller

4 months agoAdd some guards to remote connection gateway
Marcel van der Veldt [Sun, 30 Nov 2025 21:34:57 +0000 (22:34 +0100)]
Add some guards to remote connection gateway

4 months ago⬆️ Update music-assistant-frontend to 2.17.19 (#2718)
music-assistant-machine [Sun, 30 Nov 2025 21:01:11 +0000 (22:01 +0100)]
⬆️ Update music-assistant-frontend to 2.17.19 (#2718)

Co-authored-by: marcelveldt <6389780+marcelveldt@users.noreply.github.com>
4 months agoMerge branch 'dev' of https://github.com/music-assistant/server into dev
Marcel van der Veldt [Sun, 30 Nov 2025 20:51:18 +0000 (21:51 +0100)]
Merge branch 'dev' of https://github.com/music-assistant/server into dev

4 months agoHandle devicename in login
Marcel van der Veldt [Sun, 30 Nov 2025 20:51:13 +0000 (21:51 +0100)]
Handle devicename in login

4 months agoExtract HLS parser to shared helpers module (#2715)
柴田 [Sun, 30 Nov 2025 19:24:33 +0000 (04:24 +0900)]
Extract HLS parser to shared helpers module (#2715)

4 months agoOne more fix for oAuth flow
Marcel van der Veldt [Sun, 30 Nov 2025 18:13:33 +0000 (19:13 +0100)]
One more fix for oAuth flow

4 months agoOnly announce to HA when onboard completed
Marcel van der Veldt [Sun, 30 Nov 2025 14:02:01 +0000 (15:02 +0100)]
Only announce to HA when onboard completed

4 months ago⬆️ Update music-assistant-frontend to 2.17.18 (#2717)
music-assistant-machine [Sun, 30 Nov 2025 13:26:14 +0000 (14:26 +0100)]
⬆️ Update music-assistant-frontend to 2.17.18 (#2717)

Co-authored-by: marcelveldt <6389780+marcelveldt@users.noreply.github.com>
4 months agoSome fixes for the oauth redirect page
Marcel van der Veldt [Sun, 30 Nov 2025 13:15:21 +0000 (14:15 +0100)]
Some fixes for the oauth redirect page

4 months ago⬆️ Update music-assistant-frontend to 2.17.17 (#2716)
music-assistant-machine [Sun, 30 Nov 2025 11:17:04 +0000 (12:17 +0100)]
⬆️ Update music-assistant-frontend to 2.17.17 (#2716)

Co-authored-by: marcelveldt <6389780+marcelveldt@users.noreply.github.com>
4 months agoMore fixes for setup in ingress
Marcel van der Veldt [Sun, 30 Nov 2025 10:45:37 +0000 (11:45 +0100)]
More fixes for setup in ingress

4 months agoFix setup page redirect behind reverse proxy or ingress
Marcel van der Veldt [Sun, 30 Nov 2025 10:29:49 +0000 (11:29 +0100)]
Fix setup page redirect behind reverse proxy or ingress

4 months agoMerge branch 'dev' of https://github.com/music-assistant/server into dev
Marcel van der Veldt [Sun, 30 Nov 2025 10:09:23 +0000 (11:09 +0100)]
Merge branch 'dev' of https://github.com/music-assistant/server into dev

4 months agoBetter handling of special chars in SMB filesystem
Marcel van der Veldt [Sun, 30 Nov 2025 10:09:19 +0000 (11:09 +0100)]
Better handling of special chars in SMB filesystem

4 months agoFix for backup config file at first run
Marcel van der Veldt [Sun, 30 Nov 2025 10:08:16 +0000 (11:08 +0100)]
Fix for backup config file at first run

4 months agoFix for GET /all RTSP response handler in AirPlay (#2714)
Brad Keifer [Sat, 29 Nov 2025 13:07:01 +0000 (00:07 +1100)]
Fix for GET /all RTSP response handler in AirPlay (#2714)

4 months ago⬆️ Update music-assistant-frontend to 2.17.16 (#2713)
music-assistant-machine [Sat, 29 Nov 2025 04:00:00 +0000 (05:00 +0100)]
⬆️ Update music-assistant-frontend to 2.17.16 (#2713)

Co-authored-by: marcelveldt <6389780+marcelveldt@users.noreply.github.com>
4 months agoSonos doesn't support gapless between different sample rates
Marcel van der Veldt [Sat, 29 Nov 2025 03:44:35 +0000 (04:44 +0100)]
Sonos doesn't support gapless between different sample rates

4 months agoFix typo
Marcel van der Veldt [Sat, 29 Nov 2025 03:26:32 +0000 (04:26 +0100)]
Fix typo

4 months agoAdd user tracking to playlog
Marcel van der Veldt [Sat, 29 Nov 2025 03:10:59 +0000 (04:10 +0100)]
Add user tracking to playlog

4 months ago⬆️ Update music-assistant-models to 1.1.74 (#2712)
music-assistant-machine [Sat, 29 Nov 2025 02:42:30 +0000 (03:42 +0100)]
⬆️ Update music-assistant-models to 1.1.74 (#2712)

Co-authored-by: marcelveldt <6389780+marcelveldt@users.noreply.github.com>
4 months agoTidal: media metadata None fix (#2711)
Jozef Kruszynski [Sat, 29 Nov 2025 02:31:15 +0000 (03:31 +0100)]
Tidal: media metadata None fix (#2711)

4 months agoprovider filter for recently added
Marcel van der Veldt [Sat, 29 Nov 2025 01:38:34 +0000 (02:38 +0100)]
provider filter for recently added

4 months agoFix websocket event filtering
Marcel van der Veldt [Fri, 28 Nov 2025 23:54:43 +0000 (00:54 +0100)]
Fix websocket event filtering

4 months agoHandle user (music)provider filter
Marcel van der Veldt [Fri, 28 Nov 2025 23:33:31 +0000 (00:33 +0100)]
Handle user (music)provider filter

4 months agoAirplay2 improvements (#2702)
Brad Keifer [Fri, 28 Nov 2025 22:49:43 +0000 (09:49 +1100)]
Airplay2 improvements (#2702)

4 months agoAdd Version suffix config to scrobble providers (#2709)
Willem-Jan Zijderveld [Fri, 28 Nov 2025 22:46:59 +0000 (23:46 +0100)]
Add Version suffix config to scrobble providers (#2709)

4 months agoFilter websocket events
Marcel van der Veldt [Fri, 28 Nov 2025 22:43:19 +0000 (23:43 +0100)]
Filter websocket events

4 months agoHandle builtin player in player filter
Marcel van der Veldt [Fri, 28 Nov 2025 22:30:01 +0000 (23:30 +0100)]
Handle builtin player in player filter

4 months agoAdd support for SSL
Marcel van der Veldt [Fri, 28 Nov 2025 22:21:36 +0000 (23:21 +0100)]
Add support for SSL

4 months agoUpdate stable base image version to 1.4.9
Marcel van der Veldt [Fri, 28 Nov 2025 21:10:00 +0000 (22:10 +0100)]
Update stable base image version to 1.4.9

Prepare for stable bump next month by already bumping the base image version(otherwise we will forget)

4 months agoPrepare remote connect feature (#2710)
Marcel van der Veldt [Fri, 28 Nov 2025 21:08:05 +0000 (22:08 +0100)]
Prepare remote connect feature (#2710)

4 months agoFix snapcast crash by copying control.py to plugins directory (#2685)
OzGav [Fri, 28 Nov 2025 21:07:24 +0000 (07:07 +1000)]
Fix snapcast crash by copying control.py to plugins directory (#2685)

4 months agoTidal: fix for sync returned no proper data (#2707)
Jozef Kruszynski [Fri, 28 Nov 2025 18:23:49 +0000 (19:23 +0100)]
Tidal: fix for sync returned no proper data (#2707)

4 months agoSpotify Connect: Fix UI not updating when MA starts playing an item (#2705)
Marvin Schenkel [Fri, 28 Nov 2025 18:23:06 +0000 (19:23 +0100)]
Spotify Connect: Fix UI not updating when MA starts playing an item (#2705)

4 months ago⬆️ Update music-assistant-frontend to 2.17.15 (#2708)
music-assistant-machine [Fri, 28 Nov 2025 15:59:53 +0000 (16:59 +0100)]
⬆️ Update music-assistant-frontend to 2.17.15 (#2708)

Co-authored-by: marcelveldt <6389780+marcelveldt@users.noreply.github.com>
4 months ago⬆️ Update music-assistant-frontend to 2.17.14 (#2706)
music-assistant-machine [Fri, 28 Nov 2025 13:58:33 +0000 (14:58 +0100)]
⬆️ Update music-assistant-frontend to 2.17.14 (#2706)

Co-authored-by: marcelveldt <6389780+marcelveldt@users.noreply.github.com>
4 months ago⬆️ Update music-assistant-frontend to 2.17.13 (#2703)
music-assistant-machine [Fri, 28 Nov 2025 02:51:01 +0000 (03:51 +0100)]
⬆️ Update music-assistant-frontend to 2.17.13 (#2703)

Co-authored-by: marcelveldt <6389780+marcelveldt@users.noreply.github.com>
4 months agoSmall fix for oauth redirect on pwa
Marcel van der Veldt [Thu, 27 Nov 2025 23:38:27 +0000 (00:38 +0100)]
Small fix for oauth redirect on pwa

4 months agoSome follow-up additions and fixes for the Authentication support (#2699)
Marcel van der Veldt [Thu, 27 Nov 2025 22:35:20 +0000 (23:35 +0100)]
Some follow-up additions and fixes for the Authentication support (#2699)

4 months agoAdd recently added tracks and albums playlist + recommendation (#2700)
Dominik Bruhn [Thu, 27 Nov 2025 22:19:54 +0000 (23:19 +0100)]
Add recently added tracks and albums playlist + recommendation (#2700)

4 months agoABS: fix for schema issue (#2701)
Fabian Munkes [Thu, 27 Nov 2025 22:02:22 +0000 (23:02 +0100)]
ABS: fix for schema issue (#2701)

4 months agohandle updating stream_metadata if needed
Marcel van der Veldt [Thu, 27 Nov 2025 21:49:24 +0000 (22:49 +0100)]
handle updating stream_metadata if needed

4 months ago⬆️ Update music-assistant-models to 1.1.73 (#2697)
music-assistant-machine [Thu, 27 Nov 2025 19:57:19 +0000 (20:57 +0100)]
⬆️ Update music-assistant-models to 1.1.73 (#2697)

* ⬆️ Update music-assistant-models to 1.1.73

* handle streamdetails expiration

---------

Co-authored-by: marcelveldt <6389780+marcelveldt@users.noreply.github.com>
Co-authored-by: Marcel van der Veldt <m.vanderveldt@outlook.com>
4 months agoBBC Sounds: Fix Radio 4 station (#2696)
Kieran Hogg [Thu, 27 Nov 2025 18:41:57 +0000 (18:41 +0000)]
BBC Sounds: Fix Radio 4 station (#2696)

4 months agoFix several issues in media item reporting
Marcel van der Veldt [Thu, 27 Nov 2025 18:40:10 +0000 (19:40 +0100)]
Fix several issues in media item reporting

4 months ago⬆️ Update music-assistant-frontend to 2.17.12 (#2694)
music-assistant-machine [Thu, 27 Nov 2025 08:41:54 +0000 (09:41 +0100)]
⬆️ Update music-assistant-frontend to 2.17.12 (#2694)

Co-authored-by: marcelveldt <6389780+marcelveldt@users.noreply.github.com>
Co-authored-by: Marcel van der Veldt <m.vanderveldt@outlook.com>
4 months ago⬆️ Update music-assistant-models to 1.1.72 (#2693)
music-assistant-machine [Thu, 27 Nov 2025 02:51:06 +0000 (03:51 +0100)]
⬆️ Update music-assistant-models to 1.1.72 (#2693)

Co-authored-by: marcelveldt <6389780+marcelveldt@users.noreply.github.com>
4 months agoPlex: fix collision in cache keys (#2638)
anatosun [Wed, 26 Nov 2025 23:44:01 +0000 (00:44 +0100)]
Plex: fix collision in cache keys (#2638)

4 months agoAdd extra info to scrobble data (#2669)
OzGav [Wed, 26 Nov 2025 23:42:46 +0000 (09:42 +1000)]
Add extra info to scrobble data (#2669)

4 months agoUpdate Spotify (librespot) binaries (#2692)
Marcel van der Veldt [Wed, 26 Nov 2025 23:39:36 +0000 (00:39 +0100)]
Update Spotify (librespot) binaries (#2692)

4 months agofix newlines in important notes of release notes
Marcel van der Veldt [Wed, 26 Nov 2025 21:26:17 +0000 (22:26 +0100)]
fix newlines in important notes of release notes

4 months agoBBC Sounds: Unauthenticated might see blank station list (#2689)
Kieran Hogg [Wed, 26 Nov 2025 20:17:23 +0000 (20:17 +0000)]
BBC Sounds: Unauthenticated might see blank station list (#2689)

4 months ago⬆️ Update music-assistant-models to 1.1.71 (#2691)
music-assistant-machine [Wed, 26 Nov 2025 20:13:58 +0000 (21:13 +0100)]
⬆️ Update music-assistant-models to 1.1.71 (#2691)

Co-authored-by: marcelveldt <6389780+marcelveldt@users.noreply.github.com>
4 months ago⬆️ Update music-assistant-frontend to 2.17.11 (#2690)
music-assistant-machine [Wed, 26 Nov 2025 20:06:07 +0000 (21:06 +0100)]
⬆️ Update music-assistant-frontend to 2.17.11 (#2690)

Co-authored-by: marcelveldt <6389780+marcelveldt@users.noreply.github.com>
4 months agoMerge branch 'dev' of https://github.com/music-assistant/server into dev
Marcel van der Veldt [Wed, 26 Nov 2025 19:38:51 +0000 (20:38 +0100)]
Merge branch 'dev' of https://github.com/music-assistant/server into dev

4 months agomulti-line for the important notes in release script
Marcel van der Veldt [Wed, 26 Nov 2025 19:38:49 +0000 (20:38 +0100)]
multi-line for the important notes in release script

4 months agoTidal: maintenance improvements (#2654)
Jozef Kruszynski [Wed, 26 Nov 2025 19:28:44 +0000 (20:28 +0100)]
Tidal: maintenance improvements (#2654)

4 months agoMerge branch 'dev' of https://github.com/music-assistant/server into dev
Marcel van der Veldt [Wed, 26 Nov 2025 19:27:38 +0000 (20:27 +0100)]
Merge branch 'dev' of https://github.com/music-assistant/server into dev

4 months agoextend release action with important notes
Marcel van der Veldt [Wed, 26 Nov 2025 19:27:34 +0000 (20:27 +0100)]
extend release action with important notes

4 months agoFix squeezelite UnboundLocalError exception when playing a plugin source. (#2678)
sprocket-9 [Wed, 26 Nov 2025 19:00:30 +0000 (19:00 +0000)]
Fix squeezelite UnboundLocalError exception when playing a plugin source. (#2678)

4 months agoFix TypeError when caching browse results with Sequence return type (#2657)
OzGav [Wed, 26 Nov 2025 18:55:43 +0000 (04:55 +1000)]
Fix TypeError when caching browse results with Sequence return type (#2657)

4 months agoBBC Sounds: Improve title metadata (#2688)
Kieran Hogg [Wed, 26 Nov 2025 18:54:21 +0000 (18:54 +0000)]
BBC Sounds: Improve title metadata (#2688)

4 months agoChore(deps): Bump actions/setup-python from 6.0.0 to 6.1.0 (#2676)
dependabot[bot] [Wed, 26 Nov 2025 18:53:45 +0000 (19:53 +0100)]
Chore(deps): Bump actions/setup-python from 6.0.0 to 6.1.0 (#2676)

Bumps [actions/setup-python](https://github.com/actions/setup-python) from 6.0.0 to 6.1.0.
- [Release notes](https://github.com/actions/setup-python/releases)
- [Commits](https://github.com/actions/setup-python/compare/v6.0.0...v6.1.0)

---
updated-dependencies:
- dependency-name: actions/setup-python
  dependency-version: 6.1.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
4 months agofix(bbc_sounds): Fix error when fetching podcast episodes (#2677)
Kieran Hogg [Wed, 26 Nov 2025 18:25:55 +0000 (18:25 +0000)]
fix(bbc_sounds): Fix error when fetching podcast episodes (#2677)

Remove caching from get_podcast_episodes, fixes #4449

4 months agoPlex Connect: fixed group volume report (#2683)
anatosun [Wed, 26 Nov 2025 18:17:34 +0000 (19:17 +0100)]
Plex Connect: fixed group volume report (#2683)

4 months agoAdd Plex Connect monochrome icon (#2679)
OzGav [Wed, 26 Nov 2025 18:15:53 +0000 (04:15 +1000)]
Add Plex Connect monochrome icon (#2679)

* Add files via upload

* Fix formatting in icon_monochrome.svg

4 months ago⬆️ Update music-assistant-frontend to 2.17.10 (#2680)
music-assistant-machine [Wed, 26 Nov 2025 18:02:26 +0000 (19:02 +0100)]
⬆️ Update music-assistant-frontend to 2.17.10 (#2680)

Co-authored-by: marcelveldt <6389780+marcelveldt@users.noreply.github.com>
4 months agofix(bbc_sounds): Handle library exception more gracefully (#2686)
Kieran Hogg [Wed, 26 Nov 2025 17:14:34 +0000 (17:14 +0000)]
fix(bbc_sounds): Handle library exception more gracefully (#2686)

* Bump auntie-sounds version

* Bump auntie-sounds version

* Catch exception raised in update_play_status library call

Added error handling for updating play status.

* Use a more suitable logger.debug() call

4 months agoAdd (mandatory) authentication to the webserver (#2684)
Marcel van der Veldt [Wed, 26 Nov 2025 15:36:19 +0000 (16:36 +0100)]
Add (mandatory) authentication to the webserver (#2684)

4 months agofix(bbc_sounds): Reorder menu API calls so only used by auth users (#2687)
Kieran Hogg [Wed, 26 Nov 2025 14:58:08 +0000 (14:58 +0000)]
fix(bbc_sounds): Reorder menu API calls so only used by auth users (#2687)

Rejig the order of menu API calls so we don't request it for unauthenticated users

4 months agoMerge branch 'dev' of https://github.com/music-assistant/server into dev
Marcel van der Veldt [Wed, 26 Nov 2025 12:38:11 +0000 (13:38 +0100)]
Merge branch 'dev' of https://github.com/music-assistant/server into dev

4 months agoAdd APEv2 image support (#2668)
OzGav [Wed, 26 Nov 2025 11:25:24 +0000 (21:25 +1000)]
Add APEv2 image support (#2668)

4 months agotyping fixes
Marcel van der Veldt [Wed, 26 Nov 2025 10:38:47 +0000 (11:38 +0100)]
typing fixes

4 months agoPre-build PyAV wheel in base image to speed up release builds (#2682)
Maxim Raznatovski [Wed, 26 Nov 2025 09:37:41 +0000 (10:37 +0100)]
Pre-build PyAV wheel in base image to speed up release builds (#2682)

4 months agoAdd pytz dependency to bbc sounds provider
Marvin Schenkel [Tue, 25 Nov 2025 17:53:26 +0000 (18:53 +0100)]
Add pytz dependency to bbc sounds provider

4 months agoAdd bbc sounds provider (#2567)
Kieran Hogg [Tue, 25 Nov 2025 17:45:29 +0000 (17:45 +0000)]
Add bbc sounds provider (#2567)

* Initial commit of BBC Sounds provider

* Remove unused SUPPORTED_FEATURES

* Remove commented code; tidy stream and provider variables; accept ruff formatting

* Add search

* Initial commit of BBC Sounds provider

* Remove unused SUPPORTED_FEATURES

* Remove commented code; tidy stream and provider variables; accept ruff formatting

* Add search

* Initial commit of BBC Sounds provider

* First version of (almost) the full Sounds functionality

* Remove accidental leading _ in get_podcast_episode()

* Use network logo and not programme image for schedule listing

* Remove commented out code

* Tidy up object titles and update to latest auntie-sounds API

* Remove unused supported features

* Add feature flag for blank image check

* Cancel now playing task and tidy up

* Update icons

* Return SUPPORTED_FEATURES with instance in setup()

* Remove the enable UK content toggle

* Remove boiler comments and tweak wording

* Check image_url is set after library change

* Update library version

* Fix typo in comment

Co-authored-by: OzGav <gavnosp@hotmail.com>
* Remove the check to provide the seekable stream version.

It's not yet used and has the potential to affect international users, so remove it be safe.

* Move fetching the menu to prevent it not being available if accessed by another route

* Add an advanced option to choose a stream format

* Update dependency version

* Remove unnecessary config options

* Remove a couple of incorrectly-set StreamDetails variables on Radio streams

* Tidy up after removing config options

* Add some sensible caching

* Increase cache expiry

* Add cache to get_podcast()

* Disable 'now playing' until supported in core

---------

Co-authored-by: OzGav <gavnosp@hotmail.com>
4 months agoBump ytmusic to 1.11.2 (#2675)
Marvin Schenkel [Tue, 25 Nov 2025 15:29:40 +0000 (16:29 +0100)]
Bump ytmusic to 1.11.2 (#2675)

4 months agoAdd niconico video Provider (#2339)
柴田 [Tue, 25 Nov 2025 13:57:10 +0000 (22:57 +0900)]
Add niconico video Provider (#2339)

* Initial comit of NicoNico provider

* Remove unwanted logout calls

* niconico: Split and organize classes

* Add artist retrieval method and fix Explorer mixin imports in Niconico provider

* Niconico: Enhance artist parsing with metadata and SNS links

* Niconico: Add sensitive content handling and improve recommendations feature

* Niconico: Implement series handling as albums and enhance library retrieval methods

* Niconico: Refactor the structure of the Nikoniko adapter and split the individual adapters into separate files.

* Niconico: Add URLs for playlists, tracks, and artists in parsers; update import in album mixin

* Refactor Niconico provider mixins and add configuration management

- Enhanced NiconicoMusicProviderExplorerMixin to fetch recommendations with filtering based on user history, following activities, and like history.
- Introduced NiconicoConfig class for managing provider-specific configurations, including recommendation counts and tag filtering.
- Implemented TagManager for caching and retrieving video tags asynchronously, with support for deduplication and periodic cleanup.
- Updated library mixin to support adding and removing tracks with auto-like functionality.
- Improved playlist mixin to handle adding and removing tracks from playlists with error handling.
- Added support for fetching and filtering tracks based on required tags in the track mixin.
- Created a new configuration file for Niconico provider settings.

* Niconico: Update workspace configuration to include additional paths and launch settings

* Niconico: Improve descriptions in configuration entries for clarity and consistency

* Niconico: Simplify get_artist_toptracks method to retrieve the newest 50 tracks

* Niconico: Add auto-sync and include library track artists settings; refactor library mixin

* Niconico: Refactor search methods for improved clarity and efficiency; update configuration entries for email and sensitive content handling

* Refactor Niconico search and user adapters; update parsing methods for improved track retrieval and error handling

* Niconico: Add methods for retrieving own videos and series; update configuration entries for improved content management

* Niconico: Enhance search and recommendation features; refactor configuration and constants for improved tag handling

* Refactor video parsing methods to handle None values and skip muted videos for improved track retrieval

* Remove Niconico server workspace configuration file

* Refactor Niconico provider: Enhance error handling, logging

- Replaced call_with_throttler with _call_with_throttler in NiconicoVideoAdapter for consistency.
- Removed handle_niconico_errors context manager and replaced it with direct logging in various mixins.
- Introduced log_verbose and log_verbose_operation functions for improved logging.
- Updated methods across mixins to utilize new logging functions and streamline error handling.
- Refactored tag management to improve caching and fetching logic.

* Niconico: Update icon SVG files for improved styling and add monochrome version

* Niconico: Renamed parsing to conversion functions for playlists, tracks, and series

* Refactor Niconico video adapter and track mixin: Improve type hints, enhance error handling, and streamline stream format processing

* Refactor type hints in adapter

* Renamed the provider from “niconico” to “nicovideo”.

* Nicovideo: Enhance cache management by limiting concurrent operations to reduce database load

* Nicovideo: Include own uploaded videos in library track retrieval

* Remove unused sensitive contents configuration from Nicovideo provider

* Update NicoVideo monochrome icon SVG with new design and filter effects

* Nicovideo: Add icons for various sections in the music provider explorer mixin

* Nicovideo: Improve tag fetching with async task locking to prevent race conditions

* Nicovideo: Refactor provider mixins and enhance core functionality with MixinCaller

* Nicovideo: Adjust low priority throttler period for improved background tag updates

* Refactor Nicovideo provider: enhance video fetching and tag management, remove TagManager

* Refactor logging in Nicovideo provider: Adjusted log levels.

* Nicovideo: Enhance error logging for ValidationError in API calls

* Refactor Nicovideo provider mixins: streamline library item retrieval and enhance caching logic

* Refactor Nicovideo Adapter Structure and Update Mixins

- Introduced a new NicovideoAdapterHub to centralize adapter functionality.
- Updated mixins to use the new adapter hub instead of individual adapters.
- Implemented utility functions for common operations across converters.
- Improved metadata handling and mapping for media items.
- Ensured compatibility with the latest niconico API changes.

* Refactor NicovideoTrackConverter: Move audio format creation logic to a dedicated method and remove unused utility function

* Refactor Nicovideo provider mixins: rename mixin files.

* Renamed from adapter to service.

* Refactor Nicovideo service architecture: rename Hub to Manager

* Add override decorator to get_stream_details method in NicovideoMusicProvider

* Add override decorators to library methods in artist and track mixins

* Refactor Nicovideo converters: replace utility functions with helper methods

* Remove unused logging import from album mixin

* First implementation of Nicovideo testing.

* Refactor track handling in NicovideoMusicProviderTrackMixin to improve stream metadata retrieval

* requirements: add yt-dlp version 2025.6.30 to dependencies

* fix: update artist mapping to return UniqueList for better handling

* feat: add DUMMY_IS_PEAK_TIME constant and update helper functions to use it; update requirements to include yt-dlp

* feat: update yt-dlp version to 2025.8.11 in manifest and requirements

* feat: update workflow and main.py to latest versions from dev and fixture-updates branches

* Refactor fixture data generation and saving process

- Updated JSON fixture files with dummy descriptions for testing purposes.
- Enhanced helper functions for consistent snapshot comparison and dynamic field stabilization.
- Introduced new scripts for generating and saving fixture data with integrated diff tracking.
- Improved logging for fixture generation and changes.

* fix: update schedule comment to reflect daily execution and enhance condition for fixture updates

* fix: update descriptions in test snapshots to use dummy text for consistency

* fix: remove obsolete check-test-session script

* fix: update release dates and dummy data in test fixtures for consistency

* fix: enhance stabilization logic by consolidating dynamic field and count value processing

* fix: streamline provider unload logic and improve error handling

* Refactoring: refactor niconico service methods to unify series and mylist retrieval logic.Made niconico_py_client accessible via properties in the service.

* Update fixtures-update-and-test.yml

* Refactor: streamline audio format handling by introducing create_audio_format function and centralizing constants

* Refactor: improve stream details handling by safely retrieving HTTP headers and simplifying audio format parameters

* update snapshot

* Fix: Add “extra_input_args” from streamdetails to get_preview_stream and adjust additional input arguments.

* Update fixtures-update-and-test.yml

* Refactoring: Added a stream converter to enhance the nicovideo provider and improve stream detail processing. Removed dependency on yt-dlp.

* - add StabilizationInfo
- Add Stream Test
- Called ruff after automatic generation.

* Fix: Update comment to clarify usage of StreamConversionData serialization in import statement

* Fix: Update media type checks in artist and track mixins for consistency

* Fix: Update search_videos_by_tags method to accept a single tag and streamline video search logic

* Refactoring: Remove unused BaseModel serialization strategy and related imports from helpers.py

* Fix: Rename search_videos_by_tags method to search_videos_by_tag for consistency

* Fix: Update error messages in artist mixin for clarity and detail; add note on playlist duplicate entries

* Fix: Enhance logging with safe argument summaries and caller information extraction

* Fix: Update niconico.py requirement to specific commit for stability

* Fix: Remove follow/unfollow artists functionality from Nicovideo configuration and artist mixin

* Fix: Removed logout upon unloading, and prevented attempts to log in again when authentication information is not available.

* Fix: Remove unnecessary login checks in various mixins and services to streamline data retrieval

* Fix: Enhance album mapping creation with optional thumbnail URL and update artist yield logic to handle ItemMapping conversion

* Fix: Changed to directly generate album and artist mappings.

* Fix: Changed to directly generate album and artist mappings.

* Fix: Update label for user session configuration to clarify cookie usage

* Fix: Remove stage from niconico video manifest

* Fix: Update workflow description to clarify NICONICO_SESSION requirement

* Fix: Rename nicovideo provider fixtures update and test workflow

* Fix: Simplify docstring in get_config_entries and add category comments in config entries

* Fix: Refactor get_config_entries_impl to separate config entry categories and simplify parameters

* Move :nicovideo workflows

* Fix: Update conversion function for SeriesData to handle album tracks

* Fix: Update usage instructions for fixture generation script to reflect correct environment variable

* Fix: Remove unused convert_to_netscape function and related imports

* Fix: Refactor configuration constants for nicovideo provider by moving keys to config.py and cleaning up imports

* Fix: Remove unused DUMMY_DESCRIPTION constant and update stabilization rule for description

* Refactor Nicovideo provider configuration system to use category-based structure

- Introduced a new configuration system for the Nicovideo provider, organizing settings into categories: Auth, Content, and Recommendations.
- Updated all relevant code to access configuration values through the new structure, replacing old method calls with direct attribute access.
- Enhanced clarity and maintainability of the configuration management by encapsulating related settings within dedicated classes.

* Fix: Move recommendation_filter_tags configuration to the correct position in RecommendationsConfigCategory

* Fix: Update recommendation configuration keys and labels for clarity and consistency

* Fix: Add integrated loudness to stream conversion output

* update snapshot loudness

* Add: Added dependency on niconico.py for lint testing.

* Fix: Update niconico.py dependency PEP 508 format in manifest and requirements files

* Remove unused get_supported_features_for_mixin methods

- Remove get_supported_features_for_mixin() from all mixins (base, artist, track, album, playlist, explorer)
- Remove unused ProviderFeature imports
- Features are now statically defined in __init__.py's SUPPORTED_FEATURES

* Simplify config: Remove Content and Recommendations categories

This change addresses PR review feedback requesting a simpler configuration.
The complex Content and Recommendations config categories have been removed
and replaced with sensible defaults:

- Content defaults: Include own mylists, exclude followed mylists
- Recommendations defaults: 25/50/30 track counts, no tag filtering
- Auto-like: Enabled by default
- Sensitive content: Mask by default

The removed complex configuration has been preserved in the
`add-nicovideo-advanced-options` branch for potential future enhancement.

This makes the initial provider setup much simpler while maintaining
core functionality.

* Refactor: Add @override, remove unused filtering, use SENSITIVE_CONTENTS constant

- Add missing @override decorator to get_library_playlists
- Remove _fetch_similar_tracks_with_filtering (no longer filters anything)
- Extract SENSITIVE_CONTENTS constant to nicovideo/constants.py
- Replace all hardcoded sensitive_contents with constant reference

These changes improve code clarity and maintainability.

* Update niconico.py dependency to the latest commit

* refactor: Simplify mixin architecture - remove MixinCaller abstraction

- Remove MixinCaller class with complex lambda-based invoke methods
- Replace with explicit for loops in provider methods
- Make class inheritance explicit (list 6 mixin classes directly)
- Convert provider_mixins/__init__.py to static __all__ list
- Move NICOVIDEO_MIXINS constant to provider.py
- Change reversed() to [::-1] for type checker compatibility

This addresses PR feedback about code complexity while maintaining
mixin-based separation of concerns.

* refactor: Remove provider-specific pre-commit hook

Remove check-nicovideo-test-session hook to maintain provider isolation.
Instead, enforce environment variable usage in fixture generation script:

- Require NICONICO_SESSION environment variable (no hardcoded fallback)
- Add clear error message when variable is not set
- Update documentation to reflect environment-only authentication

This prevents accidental credential commits while keeping the provider
isolated from repository-wide configuration.

* test: Update converter snapshots for new model fields

Update test snapshots to include new fields added to Music Assistant models:
- grouping: Album grouping field
- in_library: Library membership flag

* fix: nicovideo fixtures workflow - use pip instead of uv

- Remove dependency on uv and setup.sh
- Use standard pip installation like test.yml
- Remove unnecessary venv caching
- Simplify workflow by using GitHub Actions default Python environment

* fix: update niconico.py commit hash to latest (711729d)

- Align pyproject.toml with requirements_all.txt
- Fix dependency conflict in GitHub Actions

* refactor: remove nicovideo from mypy exclude list

- nicovideo provider is fully mypy strict mode compliant
- Dependencies managed via manifest.json and requirements_all.txt
- Align with other strict-mode compliant providers (spotify, deezer, etc.)

* fix: resolve mypy strict mode errors in nicovideo provider

- Add proper TYPE_CHECKING import for pydantic BaseModel
- Add explicit type casts to resolve no-any-return errors
- Import Any type for type annotations in tests
- Ensure all return statements have explicit types

* fix: add niconico.py to test dependencies for proper mypy type checking

- Add niconico.py to project.optional-dependencies[test]
- Revert manual type cast workarounds
- Ensures pydantic types from niconico.py are properly resolved during CI
- Simpler and more maintainable than type annotation workarounds

* fix: remove deprecated enable_cache parameter from StreamDetails

- Remove enable_cache parameter removed in music-assistant-models v1.1.61
- This fixes mypy errors after merging upstream/dev changes

* nicovideo snapshots update

* refactor(nicovideo): implement fast HLS seeking with StreamType.CUSTOM

Replace StreamType.HTTP with CUSTOM for optimized seeking support.

Key improvements:
- Parse m3u8 once during stream conversion (not per seek)
- Generate dynamic m3u8 starting from seek segment
- Separate responsibilities: fetch → parse → generate → stream
- Use VERBOSE logging for seek operations
- Organize helpers into directory structure

* nicovideo update test,fixture,snapshot

* Remove FFmpeg submodule directory

* refactor: remove get_stream_details_for_mixin pattern, use normal override in TrackMixin

* docs: add detailed comments explaining StreamType.CUSTOM seek optimization

- Add comprehensive explanation in stream.py for why CUSTOM is used
- Document two-stage seek optimization (segment selection + input-side -ss)
- Explain input-side -ss limitation (can't cross segment boundaries)
- Add stage-by-stage comments in get_audio_stream and create_stream_context
- Clarify performance trade-off vs output-side -ss

* refactor(nicovideo): improve HLS streaming code structure and naming

Major changes:
- Rename NicovideoHLSProcessor → HLSSeekOptimizer for clarity
- Extract HLS data models to separate hls_models.py file
- Standardize m3u8 → playlist terminology throughout codebase
- Add HLS prefix to public API names to avoid confusion with track playlists
- Introduce DOMAND_BID_COOKIE_NAME constant for authentication
- Update method names for better semantic clarity:
  * _get_stream_data → _prepare_conversion_data
  * convert_by_stream_data → convert_from_conversion_data
  * _fetch_hls_m3u8_text → _fetch_media_playlist_text
  * _serve_m3u8 → _serve_hls_playlist

File structure:
- hls_processor.py → hls_seek_optimizer.py (renamed)
- hls_models.py (new): ParsedHLSPlaylist, HLSSegment

All tests and fixtures updated accordingly.

* refactor(nicovideo/tests): improve test module architecture

- Simplify TypeToConverterMappingRegistry (remove 3 unused methods)
- Extract all stabilization logic into FieldStabilizer class
- Add helper method to ConverterTestRunner for clarity
- Document FixtureProcessorProtocol design intent

Reduces complexity while maintaining type safety and auto-update features

* refactor(nicovideo/tests): improve naming and separate concerns

Renamed classes for clarity:
- TypeToConverterMapping → APIResponseConverterMapping
- FixtureManager → FixtureLoader
- FixtureDataGenerators → APIFixtureCollector
- FixtureDataSaver → FixtureSaver
- PathToTypeMapper → FixtureTypeMappingCollector + FixtureTypeMappingFileGenerator

Changes:
- Updated method names: generate_* → collect_* in APIFixtureCollector
- Fixed type completion by changing list to tuple for API_RESPONSE_CONVERTER_MAPPINGS
- Removed re-export pattern from fixtures/__init__.py
- Added comprehensive documentation to test_converters.py

Benefits: clearer responsibilities, better type inference, improved maintainability

* fix: update niconico.py dependency to latest commit

* Refactor: Reorganize fixture structure and update documentation

- Move fixture generation to separate repository (music_assistant_nicovideo_fixtures)
- Restructure fixtures: use fixture_data/ for generated data
- Update fixture loading to use new structure with fixture_type_mappings
- Remove embedded fixture generation scripts from tests
- Add comprehensive README for test directory
- Update VS Code tasks for easier fixture updates
- Delete obsolete GitHub workflow for fixture generation

* refactor: apply @use_cache to nicovideo provider methods

- Apply @use_cache decorator to get_* methods for improved performance
- Remove manual cache handling (cache_track helper and complex album info updates)
- Adjust cache durations based on SoundCloud patterns:
  - get_artist: 14 days (was 30 days)
  - get_track: 14 days (was 7 days)
  - get_playlist: 14 days (was 30 days)
  - get_playlist_tracks: 3 hours (unchanged)
  - search: 3 hours (was 1 hour)
  - get_album methods: 7 days (unchanged)
- Simplify code by leveraging Music Assistant's standard caching system
- Fix imports and add proper noqa comments for @use_cache usage

* revert: remove VS Code launch configuration changes

Remove the 'Music Assistant: Snapshot Update' launch configuration that was
added in previous commits. As requested in PR review, this change belongs
in a separate PR focused on development tools rather than the nicovideo
provider implementation.

* refactor: remove inappropriate cross-controller iteration

Address PR feedback by removing methods that iterate other controllers:
- Remove get_library_tracks and get_library_albums methods
- Remove library_add_for_mixin and library_remove_for_mixin methods
- Remove get_library_artists iteration over tracks controller
- Remove corresponding ProviderFeature flags from SUPPORTED_FEATURES
- Fix imports and TYPE_CHECKING blocks

The provider now only handles its native concepts (followed artists,
mylists, series) without inappropriately accessing other controllers.
This aligns with Music Assistant's architecture where providers should
only return in-library or favorited items from their own domain.

* fix: remove unintended cache category from get_track

Remove category=1 parameter from @use_cache decorator in get_track method
to maintain consistency with other cached methods that use default
category 0. This aligns with the pattern used across other providers
and removes unnecessary complexity.

* fix: Move media item types out of TYPE_CHECKING to fix @use_cache runtime errors

- Move Album, Artist, Track imports from TYPE_CHECKING to regular imports in artist.py
- Add noqa: TC002 comments for @use_cache decorator compatibility
- Format media_items imports in track.py consistently
- Fixes NameError: name 'Artist' is not defined when using @use_cache decorator
- Aligns with other Music Assistant provider patterns

* refactor: improve get_following_activities and fix throttler settings

- Call get_track directly instead of get_provider_item for simplicity
- Remove unnecessary semaphore (throttler already handles rate limiting)
- Fix throttler settings: rate_limit=5, period=1 (5 req/sec) for high priority
- Fix low priority throttler: period=1 for consistency

* refactor: optimize get_following_activities to use direct Activity conversion

- Add convert_by_activity() method to track converter for lightweight feed conversion
- Replace get_track() loop with direct Activity-to-Track conversion
- Remove unnecessary asyncio.gather overhead
- Use ItemMapping for artist info instead of creating Owner objects
- Improves performance by reducing API calls from N+1 to 1

* Update test snapshots for upstream StreamDetails changes

* feat: switch from Git to PyPI reference for niconico.py-ma

- Update pyproject.toml to use niconico.py-ma==2.1.0.post1 from PyPI
- Update requirements_all.txt with PyPI package reference
- Update nicovideo provider manifest.json
- Update fixtures project dependency

This addresses PR feedback to use PyPI packages instead of Git references.

* chore: update fixture data docstring from generator

- Minor docstring update from fixture generation process
- No functional changes

* refactor(nicovideo): address Copilot review feedback

- Simplify to_dict_for_snapshot to assert dict return type
- Switch auth service logging to lazy % formatting
- Fix double space in recommendation folder label
- Document 'additionals' in codespell ignore list

* chore: remove niconico.py-ma dependency from test requirements

* Reimplement get_own_followings to fetch followed artists

Restore the ability to retrieve users that the current user is following,
which was removed during config simplification.

* Remove unused user service methods

Remove methods that are no longer used in the current MA architecture:
- get_following_mylists() - empty stub returning []
- get_following_playlists() - only called get_following_mylists
- follow_user() - no MA interface to call this
- unfollow_user() - no MA interface to call this

These were remnants from config simplification that have no callers.

* Remove unused methods from nicovideo implementation

- Remove NicovideoUserService.get_own_videos()
- Remove NicovideoVideoService.like_video()
- Remove NicovideoSeriesService.get_own_series()
- Remove NicovideoSearchService.search_videos_by_tag()
- Remove unused imports (VideoSearchSortKey, VideoSearchSortOrder)

* refactor: simplify throttler implementation in nicovideo provider

- Use existing helpers/throttle_retry.ThrottlerManager instead of custom implementation
- Remove unused priority control (ApiPriority.LOW was never used)
- Remove verbose logging (sanitization, argument summaries, success logs)
- Keep only error logging with caller info for diagnostics
- Align with other providers' logging patterns (Spotify, Qobuz, Tidal)

* docs: Add explanation for 'Domand' spelling in niconico API

Clarify that 'Domand' is the actual spelling used in niconico's API
(not a typo). This naming appears in API endpoints and throughout
their media delivery system classes.

* docs(nicovideo): clarify HLS seeking limitation in stream.py

Improve technical accuracy of comment explaining why input-side -ss
fails with HLS without playlist reconstruction.

Previous comment incorrectly suggested the issue was about 'crossing
segment boundaries', but the actual problem is that FFmpeg cannot
identify target segments before parsing the playlist structure.

This clarification better reflects the implementation constraint.

---------

Co-authored-by: Shi-553 <58556078+Shi-553@users.noreply.github>
4 months agoTyping fixes for the tracks controller (#2635)
OzGav [Tue, 25 Nov 2025 13:34:39 +0000 (23:34 +1000)]
Typing fixes for the tracks controller (#2635)

* Typing fixes for the tracks controller

* Fix logic change

* Fix _set_track_artist to handle ItemMappings without numeric IDs

* Remove db asserts

* Change base class

* Convert itemmapping to artist if needed

* convert itemmapping to artist if necessary #2

4 months agoChore(deps): Bump isort from 6.0.1 to 7.0.0 (#2517)
dependabot[bot] [Tue, 25 Nov 2025 13:32:23 +0000 (13:32 +0000)]
Chore(deps): Bump isort from 6.0.1 to 7.0.0 (#2517)

* Chore(deps): Bump isort from 6.0.1 to 7.0.0

Bumps [isort](https://github.com/PyCQA/isort) from 6.0.1 to 7.0.0.
- [Release notes](https://github.com/PyCQA/isort/releases)
- [Changelog](https://github.com/PyCQA/isort/blob/main/CHANGELOG.md)
- [Commits](https://github.com/PyCQA/isort/compare/6.0.1...7.0.0)

---
updated-dependencies:
- dependency-name: isort
  dependency-version: 7.0.0
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
* Remove unused isort

---------

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: Marvin Schenkel <marvinschenkel@gmail.com>