Add Yandex Music provider (#3002)
authorMikhail Nevskiy <139659391+trudenboy@users.noreply.github.com>
Wed, 28 Jan 2026 12:30:23 +0000 (15:30 +0300)
committerGitHub <noreply@github.com>
Wed, 28 Jan 2026 12:30:23 +0000 (12:30 +0000)
commit6d7f831b48de5fa840176b72f8f0bc2c000733dc
treed7d69ec61078e15e6e1145181546c3e653091618
parent1feb9fec8b057a82e19263e40c36cfd08c620d24
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 <noreply@anthropic.com>
* 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 <noreply@anthropic.com>
* 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 <noreply@anthropic.com>
* Add yandex-music to requirements_all.txt

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
* 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 <noreply@anthropic.com>
* 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 <noreply@anthropic.com>
* 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 <noreply@anthropic.com>
* Fix ruff TC006 error - use list() instead of cast()

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
* 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 <noreply@anthropic.com>
* Add Yandex Music provider icons

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
* Update music_assistant/providers/yandex_music/manifest.json

Co-authored-by: OzGav <gavnosp@hotmail.com>
---------

Co-authored-by: Михаил Невский <renso@MacBook-Pro-Mihail.local>
Co-authored-by: Claude Opus 4.5 <noreply@anthropic.com>
Co-authored-by: Marvin Schenkel <marvinschenkel@gmail.com>
Co-authored-by: OzGav <gavnosp@hotmail.com>
music_assistant/providers/yandex_music/__init__.py [new file with mode: 0644]
music_assistant/providers/yandex_music/api_client.py [new file with mode: 0644]
music_assistant/providers/yandex_music/constants.py [new file with mode: 0644]
music_assistant/providers/yandex_music/icon.svg [new file with mode: 0644]
music_assistant/providers/yandex_music/icon_monochrome.svg [new file with mode: 0644]
music_assistant/providers/yandex_music/manifest.json [new file with mode: 0644]
music_assistant/providers/yandex_music/parsers.py [new file with mode: 0644]
music_assistant/providers/yandex_music/provider.py [new file with mode: 0644]
music_assistant/providers/yandex_music/streaming.py [new file with mode: 0644]
requirements_all.txt