Skip to content

get_album issues with audiobooks #839

@sigma67

Description

@sigma67

Originally reported by @Thorsten1982

Screenshot 2025-12-05 060438

and another DuckTales audiobook shows this error, I think this is also due to the ytmusicapi.

2025-12-05 06:05:53.867 WARNING (MainThread) [music_assistant] Exception in task Task-5089 - target: <function MediaControllerBase.get_provider_item at 0x7fc856c2f920>: "Unable to find 'playNavigationEndpoint' using path ['contents', 0, 'musicResponsiveListItemRenderer', 'overlay', 'musicItemThumbnailOverlayRenderer', 'content', 'musicPlayButtonRenderer', 'playNavigationEndpoint', 'watchEndpoint', 'playlistId'] on {'trackingParams': 'CGwQyN4CIhMIk-2Fs9alkQMVNER6BR0VZCC2', 'playIcon': {'iconType': 'PLAY_ARROW'}, 'pauseIcon': {'iconType': 'PAUSE'}, 'iconColor': 4294967295, 'backgroundColor': 0, 'activeBackgroundColor': 0, 'loadingIndicatorColor': 14745645, 'playingIcon': {'iconType': 'VOLUME_UP'}, 'iconLoadingColor': 0, 'activeScaleFactor': 1, 'buttonSize': 'MUSIC_PLAY_BUTTON_SIZE_SMALL', 'rippleTarget': 'MUSIC_PLAY_BUTTON_RIPPLE_TARGET_SELF'}, exception: 'playNavigationEndpoint'"
Traceback (most recent call last):
  File "/app/venv/lib/python3.13/site-packages/ytmusicapi/navigation.py", line 122, in nav
    root = root[k]  # type: ignore[index]
           ~~~~^^^
KeyError: 'playNavigationEndpoint'
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
  File "/app/venv/lib/python3.13/site-packages/music_assistant/controllers/media/base.py", line 507, in get_provider_item
    return cast("ItemCls", await provider.get_item(self.media_type, item_id))
                           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/app/venv/lib/python3.13/site-packages/music_assistant/models/music_provider.py", line 478, in get_item
    return await self.get_album(prov_item_id)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/app/venv/lib/python3.13/site-packages/music_assistant/controllers/cache.py", line 414, in wrapper
    result = await func(self, *args, **kwargs)
             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/app/venv/lib/python3.13/site-packages/music_assistant/providers/ytmusic/__init__.py", line 328, in get_album
    if album_obj := await get_album(prov_album_id=prov_album_id, language=self.language):
                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/app/venv/lib/python3.13/site-packages/music_assistant/providers/ytmusic/helpers.py", line 63, in get_album
    return await asyncio.to_thread(_get_album)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/local/lib/python3.13/asyncio/threads.py", line 25, in to_thread
    return await loop.run_in_executor(None, func_call)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/local/lib/python3.13/concurrent/futures/thread.py", line 59, in run
    result = self.fn(*self.args, **self.kwargs)
  File "/app/venv/lib/python3.13/site-packages/music_assistant/providers/ytmusic/helpers.py", line 49, in _get_album
    album_playlist = ytm.get_playlist(playlistId=album["audioPlaylistId"], limit=None)
  File "/app/venv/lib/python3.13/site-packages/ytmusicapi/mixins/playlists.py", line 142, in get_playlist
    return parse_audio_playlist(response, limit, request_func_continuations)
  File "/app/venv/lib/python3.13/site-packages/ytmusicapi/parsers/playlists.py", line 112, in parse_audio_playlist
    playlist["id"] = nav(
                     ~~~^
        content_data, [*CONTENT, MRLIR, *PLAY_BUTTON, "playNavigationEndpoint", *WATCH_PLAYLIST_ID]
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    )
    ^
  File "/app/venv/lib/python3.13/site-packages/ytmusicapi/navigation.py", line 126, in nav
    raise type(e)(f"Unable to find '{k}' using path {items!r} on {root!r}, exception: {e}")
KeyError: "Unable to find 'playNavigationEndpoint' using path ['contents', 0, 'musicResponsiveListItemRenderer', 'overlay', 'musicItemThumbnailOverlayRenderer', 'content', 'musicPlayButtonRenderer', 'playNavigationEndpoint', 'watchEndpoint', 'playlistId'] on {'trackingParams': 'CGwQyN4CIhMIk-2Fs9alkQMVNER6BR0VZCC2', 'playIcon': {'iconType': 'PLAY_ARROW'}, 'pauseIcon': {'iconType': 'PAUSE'}, 'iconColor': 4294967295, 'backgroundColor': 0, 'activeBackgroundColor': 0, 'loadingIndicatorColor': 14745645, 'playingIcon': {'iconType': 'VOLUME_UP'}, 'iconLoadingColor': 0, 'activeScaleFactor': 1, 'buttonSize': 'MUSIC_PLAY_BUTTON_SIZE_SMALL', 'rippleTarget': 'MUSIC_PLAY_BUTTON_RIPPLE_TARGET_SELF'}, exception: 'playNavigationEndpoint'"
2025-12-05 06:05:53.870 ERROR (MainThread) [music_assistant.webserver] Error handling message: CommandMessage(message_id='c0321f65-85c1-43cb-ac53-1484dfdad89a', command='player_queues/play_media', args={'queue_id': '60196686-12e2-b5aa-1bee-3b61e4a9bfc0', 'media': ['ytmusic://album/MPREb_OJkxCUCP5hF'], 'option': 'replace'})
Traceback (most recent call last):
  File "/app/venv/lib/python3.13/site-packages/ytmusicapi/navigation.py", line 122, in nav
    root = root[k]  # type: ignore[index]
           ~~~~^^^
KeyError: 'playNavigationEndpoint'
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
  File "/app/venv/lib/python3.13/site-packages/music_assistant/controllers/webserver/websocket_client.py", line 232, in _run_handler
    result = await result
             ^^^^^^^^^^^^
  File "/app/venv/lib/python3.13/site-packages/music_assistant/controllers/player_queues.py", line 427, in play_media
    media_item = await self.mass.music.get_item_by_uri(item)
                 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/app/venv/lib/python3.13/site-packages/music_assistant/controllers/music.py", line 599, in get_item_by_uri
    return await self.get_item(
           ^^^^^^^^^^^^^^^^^^^^
    ...<3 lines>...
    )
    ^
  File "/app/venv/lib/python3.13/site-packages/music_assistant/controllers/music.py", line 647, in get_item
    return await ctrl.get(
           ^^^^^^^^^^^^^^^
    ...<2 lines>...
    )
    ^
  File "/app/venv/lib/python3.13/site-packages/music_assistant/controllers/media/albums.py", line 81, in get
    album = await super().get(
            ^^^^^^^^^^^^^^^^^^
    ...<2 lines>...
    )
    ^
  File "/app/venv/lib/python3.13/site-packages/music_assistant/controllers/media/base.py", line 300, in get
    return await self.get_provider_item(
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    ...<2 lines>...
    )
    ^
  File "/app/venv/lib/python3.13/site-packages/music_assistant/helpers/util.py", line 818, in wrapper
    return await task
           ^^^^^^^^^^
  File "/app/venv/lib/python3.13/site-packages/music_assistant/controllers/media/base.py", line 507, in get_provider_item
    return cast("ItemCls", await provider.get_item(self.media_type, item_id))
                           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/app/venv/lib/python3.13/site-packages/music_assistant/models/music_provider.py", line 478, in get_item
    return await self.get_album(prov_item_id)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/app/venv/lib/python3.13/site-packages/music_assistant/controllers/cache.py", line 414, in wrapper
    result = await func(self, *args, **kwargs)
             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/app/venv/lib/python3.13/site-packages/music_assistant/providers/ytmusic/__init__.py", line 328, in get_album
    if album_obj := await get_album(prov_album_id=prov_album_id, language=self.language):
                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/app/venv/lib/python3.13/site-packages/music_assistant/providers/ytmusic/helpers.py", line 63, in get_album
    return await asyncio.to_thread(_get_album)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/local/lib/python3.13/asyncio/threads.py", line 25, in to_thread
    return await loop.run_in_executor(None, func_call)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/local/lib/python3.13/concurrent/futures/thread.py", line 59, in run
    result = self.fn(*self.args, **self.kwargs)
  File "/app/venv/lib/python3.13/site-packages/music_assistant/providers/ytmusic/helpers.py", line 49, in _get_album
    album_playlist = ytm.get_playlist(playlistId=album["audioPlaylistId"], limit=None)
  File "/app/venv/lib/python3.13/site-packages/ytmusicapi/mixins/playlists.py", line 142, in get_playlist
    return parse_audio_playlist(response, limit, request_func_continuations)
  File "/app/venv/lib/python3.13/site-packages/ytmusicapi/parsers/playlists.py", line 112, in parse_audio_playlist


    playlist["id"] = nav(
                     ~~~^
        content_data, [*CONTENT, MRLIR, *PLAY_BUTTON, "playNavigationEndpoint", *WATCH_PLAYLIST_ID]
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    )
    ^
  File "/app/venv/lib/python3.13/site-packages/ytmusicapi/navigation.py", line 126, in nav
    raise type(e)(f"Unable to find '{k}' using path {items!r} on {root!r}, exception: {e}")
KeyError: "Unable to find 'playNavigationEndpoint' using path ['contents', 0, 'musicResponsiveListItemRenderer', 'overlay', 'musicItemThumbnailOverlayRenderer', 'content', 'musicPlayButtonRenderer', 'playNavigationEndpoint', 'watchEndpoint', 'playlistId'] on {'trackingParams': 'CGwQyN4CIhMIk-2Fs9alkQMVNER6BR0VZCC2', 'playIcon': {'iconType': 'PLAY_ARROW'}, 'pauseIcon': {'iconType': 'PAUSE'}, 'iconColor': 4294967295, 'backgroundColor': 0, 'activeBackgroundColor': 0, 'loadingIndicatorColor': 14745645, 'playingIcon': {'iconType': 'VOLUME_UP'}, 'iconLoadingColor': 0, 'activeScaleFactor': 1, 'buttonSize': 'MUSIC_PLAY_BUTTON_SIZE_SMALL', 'rippleTarget': 'MUSIC_PLAY_BUTTON_RIPPLE_TARGET_SELF'}, exception: 'playNavigationEndpoint'"

And generally, I'm having trouble finding and playing a complete album in the audiobooks. If I want to play Gigantosaurus Episode 3, it's not found; only the artist or the individual track is found.
Screenshot 2025-12-05 061530

Metadata

Metadata

Assignees

No one assigned

    Labels

    bugSomething isn't working

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions