music-assistant-server

Branch:dev-lidarr-plugin

Commit Details

Add Yandex Music provider (#3002)

* Add Yandex Music provider

Implement a new music provider for Yandex Music streaming service using the
unofficial yandex-music-api library. Features include:

- Library sync (artists, albums, tracks, playlists)
- Library editing (add/remove tracks, albums, artists)
- Search across all media types
- Artist albums and top tracks
- HTTP streaming with quality selection (320kbps MP3 / FLAC)
- Token-based authentication

Co-Authored-By: Claude Opus 4.5 <[email protected]>

* Fix Yandex Music provider config entries

Remove duplicate token field that was causing the Save button to remain
disabled during provider setup.

Co-Authored-By: Claude Opus 4.5 <[email protected]>

* Fix Yandex Music provider based on PR review feedback

- Move SUPPORTED_FEATURES to __init__.py and pass to setup()
- Remove code duplication in get_config_entries
- Remove label_instructions (use documentation instead)
- Replace RuntimeError with ProviderUnavailableError
- Replace generic Exception catches with InvalidDataError
- Remove non-existent AlbumType.PODCAST
- Fix audio_format to respect quality config setting (MP3/FLAC)

Co-Authored-By: Claude Opus 4.5 <[email protected]>

* Add yandex-music to requirements_all.txt

Co-Authored-By: Claude Opus 4.5 <[email protected]>

* Update manifest.json

* Improve Yandex Music provider based on PR review

- Use ContentType.UNKNOWN for unknown codecs instead of assuming MP3
- Add PLAYLIST_ID_SPLITTER constant and remove unused cache TTL constants
- Optimize search to use specific type when only one media type requested
- Remove unused imports

Co-Authored-By: Claude Opus 4.5 <[email protected]>

* Fix mypy type errors in Yandex Music provider

- Add cast for users_playlists_list return type in api_client.py
- Add type annotations for _select_best_quality method in streaming.py
- Convert quality config value to str | None before passing to method
- Remove non-existent MediaItemMetadata attributes (track_count, has_lyrics)
- Use spread operator instead of append for Sequence types in search results

Co-Authored-By: Claude Opus 4.5 <[email protected]>

* Enable CI workflow for feature branches

Allow test workflow to run on feature/* branches to validate changes
before pushing to upstream PR.

Co-Authored-By: Claude Opus 4.5 <[email protected]>

* Fix ruff TC006 error - use list() instead of cast()

Co-Authored-By: Claude Opus 4.5 <[email protected]>

* Remove CI workflow changes unrelated to Yandex Music provider

Reverts changes to .github/workflows/test.yml as requested in PR review.

Co-Authored-By: Claude Opus 4.5 <[email protected]>

* Add Yandex Music provider icons

Co-Authored-By: Claude Opus 4.5 <[email protected]>

* Update music_assistant/providers/yandex_music/manifest.json

Co-authored-by: OzGav <[email protected]>

---------

Co-authored-by: Михаил Невский <[email protected]>
Co-authored-by: Claude Opus 4.5 <[email protected]>
Co-authored-by: Marvin Schenkel <[email protected]>
Co-authored-by: OzGav <[email protected]>
Forgejo

Author

Mikhail Nevskiy<[email protected]>
January 28, 2026 at 12:30 PM UTC

Committer

January 28, 2026 at 12:30 PM UTC
1additions
0deletions
10files changed

Parent commits

Changes

10 files
+1-0

Changed Files (10)

music_assistant/providers/yandex_music/
music_assistant/providers/yandex_music/__init__.py
music_assistant/providers/yandex_music/api_client.py
music_assistant/providers/yandex_music/constants.py
music_assistant/providers/yandex_music/icon.svg
music_assistant/providers/yandex_music/icon_monochrome.svg
music_assistant/providers/yandex_music/manifest.json
music_assistant/providers/yandex_music/parsers.py
music_assistant/providers/yandex_music/provider.py
music_assistant/providers/yandex_music/streaming.py
requirements_all.txt
+1