From fc2c38ad979e78ef8a0174646f310db00e7c5882 Mon Sep 17 00:00:00 2001 From: BoulderBadgeDad Date: Tue, 23 Jun 2026 13:35:04 -0700 Subject: [PATCH] #908: get YouTube playlists past the ~100-track cap (yt-dlp #16943 workaround) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit YouTube Music 'Liked Music' (and any large playlist) only returned ~104 tracks. Diagnosed it to a YouTube/yt-dlp regression (upstream #16943): the webpage-based playlist path stops at the first ~100-item continuation page. Not a SoulSync cap (no limit in the parse path) and not the user's cookies/IP — reproduced on a fully-served public playlist. Fix: pass extractor_args youtubetab:skip=webpage so yt-dlp pages via the InnerTube API instead. Verified live on the reporter's setup: 100 -> 200 entries on a large playlist (the workaround is itself partial upstream, but a major improvement until yt-dlp PR #16948 lands). Single touch point — parse_youtube_playlist is the only place that lists a YouTube playlist. --- web_server.py | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/web_server.py b/web_server.py index eaa6bb47..51bfc4c5 100644 --- a/web_server.py +++ b/web_server.py @@ -14993,7 +14993,12 @@ def parse_youtube_playlist(url): 'no_warnings': True, 'extract_flat': 'in_playlist', # Only extract basic info, no individual video metadata 'skip_download': True, # Don't download, just extract IDs and basic info - 'lazy_playlist': False, # Force full playlist resolution (prevents ~100 entry cap) + 'lazy_playlist': False, # Force full playlist resolution + # #908 / yt-dlp #16943: a YouTube-side regression caps the webpage-based playlist + # path at the first ~100-item page (Liked Music came back as only 104). Skipping the + # webpage and paging via the InnerTube API directly gets far more — verified live + # 100 -> 200+ on a large playlist. Remove once the upstream fix (PR #16948) ships. + 'extractor_args': {'youtubetab': {'skip': ['webpage']}}, } ydl_opts.update(_youtube_cookie_opts())