[PR #878] fix: handle singleColumnBrowseResultsRenderer in addition to twoColumnBrowseResultsRenderer #784

Open
opened 2026-02-27 23:02:24 +03:00 by kerem · 0 comments
Owner

📋 Pull Request Information

Original PR: https://github.com/sigma67/ytmusicapi/pull/878
Author: @ethanmlam
Created: 2/22/2026
Status: 🔄 Open

Base: mainHead: fix/handle-singlecolumn-renderer


📝 Commits (1)

  • 6cd51be fix: handle singleColumnBrowseResultsRenderer in addition to twoColumnBrowseResultsRenderer

📊 Changes

6 files changed (+88 additions, -15 deletions)

View changed files

📝 ytmusicapi/mixins/browsing.py (+13 -4)
📝 ytmusicapi/mixins/playlists.py (+27 -5)
📝 ytmusicapi/mixins/podcasts.py (+18 -3)
📝 ytmusicapi/navigation.py (+14 -0)
📝 ytmusicapi/parsers/albums.py (+4 -1)
📝 ytmusicapi/parsers/playlists.py (+12 -2)

📄 Description

YouTube Music now returns singleColumnBrowseResultsRenderer instead of twoColumnBrowseResultsRenderer for some users/endpoints (likely A/B testing).This caused KeyError exceptions in get_playlist(), get_liked_songs(), get_album(), and podcast-related functions.## Changes- navigation.py: Added get_browse_renderer() helper function- mixins/playlists.py: Updated get_playlist() to handle both formats- parsers/playlists.py: Updated parse_playlist_header() and parse_audio_playlist()- parsers/albums.py: Updated parse_album_header_2024()- mixins/browsing.py: Updated get_album()- mixins/podcasts.py: Updated get_podcast(), get_episode(), and get_episodes_playlist()## FixThe fix adds fallback logic to try twoColumnBrowseResultsRenderer first, then singleColumnBrowseResultsRenderer if the former is not present in the API response.Closes #616


🔄 This issue represents a GitHub Pull Request. It cannot be merged through Gitea due to API limitations.

## 📋 Pull Request Information **Original PR:** https://github.com/sigma67/ytmusicapi/pull/878 **Author:** [@ethanmlam](https://github.com/ethanmlam) **Created:** 2/22/2026 **Status:** 🔄 Open **Base:** `main` ← **Head:** `fix/handle-singlecolumn-renderer` --- ### 📝 Commits (1) - [`6cd51be`](https://github.com/sigma67/ytmusicapi/commit/6cd51be2bad40a2580369b32d4e83ab1d44ba685) fix: handle singleColumnBrowseResultsRenderer in addition to twoColumnBrowseResultsRenderer ### 📊 Changes **6 files changed** (+88 additions, -15 deletions) <details> <summary>View changed files</summary> 📝 `ytmusicapi/mixins/browsing.py` (+13 -4) 📝 `ytmusicapi/mixins/playlists.py` (+27 -5) 📝 `ytmusicapi/mixins/podcasts.py` (+18 -3) 📝 `ytmusicapi/navigation.py` (+14 -0) 📝 `ytmusicapi/parsers/albums.py` (+4 -1) 📝 `ytmusicapi/parsers/playlists.py` (+12 -2) </details> ### 📄 Description YouTube Music now returns `singleColumnBrowseResultsRenderer` instead of `twoColumnBrowseResultsRenderer` for some users/endpoints (likely A/B testing).This caused `KeyError` exceptions in `get_playlist()`, `get_liked_songs()`, `get_album()`, and podcast-related functions.## Changes- **navigation.py**: Added `get_browse_renderer()` helper function- **mixins/playlists.py**: Updated `get_playlist()` to handle both formats- **parsers/playlists.py**: Updated `parse_playlist_header()` and `parse_audio_playlist()`- **parsers/albums.py**: Updated `parse_album_header_2024()`- **mixins/browsing.py**: Updated `get_album()`- **mixins/podcasts.py**: Updated `get_podcast()`, `get_episode()`, and `get_episodes_playlist()`## FixThe fix adds fallback logic to try `twoColumnBrowseResultsRenderer` first, then `singleColumnBrowseResultsRenderer` if the former is not present in the API response.Closes #616 --- <sub>🔄 This issue represents a GitHub Pull Request. It cannot be merged through Gitea due to API limitations.</sub>
Sign in to join this conversation.
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference
starred/ytmusicapi#784
No description provided.