Repository: yt-dlp/yt-dlp
Issue category: Bug Report

[Youtube] Playlist search broken
### DO NOT REMOVE OR SKIP THE ISSUE TEMPLATE

- [X] I understand that I will be **blocked** if I *intentionally* remove or skip any mandatory\* field

### Checklist

- [X] I'm reporting that yt-dlp is broken on a **supported** site
- [X] I've verified that I have **updated yt-dlp to nightly or master** ([update instructions](https://github.com/yt-dlp/yt-dlp#update-channels))
- [X] I've checked that all provided URLs are playable in a browser with the same IP and same login details
- [X] I've checked that all URLs and arguments with special characters are [properly quoted or escaped](https://github.com/yt-dlp/yt-dlp/wiki/FAQ#video-url-contains-an-ampersand--and-im-getting-some-strange-output-1-2839-or-v-is-not-recognized-as-an-internal-or-external-command)
- [X] I've searched [known issues](https://github.com/yt-dlp/yt-dlp/issues/3766) and the [bugtracker](https://github.com/yt-dlp/yt-dlp/issues?q=) for similar issues **including closed ones**. DO NOT post duplicates
- [X] I've read the [guidelines for opening an issue](https://github.com/yt-dlp/yt-dlp/blob/master/CONTRIBUTING.md#opening-an-issue)
- [X] I've read about [sharing account credentials](https://github.com/yt-dlp/yt-dlp/blob/master/CONTRIBUTING.md#are-you-willing-to-share-account-details-if-needed) and I'm willing to share it if required

### Region

Germany

### Provide a description that is worded well enough to be understood

Using the youtube search functionality with playlist filter enabled does not work anymore.
Worked on previous versions. Should be related to current playlist issues which return 0 results.

Expected behavior should be getting the json result of the playlists results.

### Provide verbose output that clearly demonstrates the problem

- [X] Run **your** yt-dlp command with **-vU** flag added (`yt-dlp -vU <your command line>`)
- [X] If using API, add `'verbose': True` to `YoutubeDL` params instead
- [X] Copy the WHOLE output (starting with `[debug] Command-line config`) and insert it below

### Complete Verbose Output

```shell
[debug] Command-line config: ['-vvvv', '-4', '--no-warnings', '--no-check-certificate', '--dump-json', '--playlist-start', '1', '--playlist-end', '50', '--flat-playlist', 'https://www.youtube.com/results?search_query=cute+cat&sp=EgIQAw%253D%253D']
[debug] Encodings: locale UTF-8, fs utf-8, pref UTF-8, out utf-8, error utf-8, screen utf-8
[debug] yt-dlp version stable@2024.11.18 from yt-dlp/yt-dlp [7ea278792] (linux_exe)
[debug] Lazy loading extractors is disabled
[debug] Python 3.9.2 (CPython x86_64 64bit) - Linux-4.19.0-24-amd64-x86_64-with-glibc2.31 (OpenSSL 1.1.1w  11 Sep 2023, glibc 2.31)
[debug] exe versions: ffmpeg 4.3.8-0, ffprobe 4.3.8-0
[debug] Optional libraries: Cryptodome-3.9.7, certifi-2020.06.20, requests-2.25.1, secretstorage-3.3.1, sqlite3-3.34.1, urllib3-1.26.5
[debug] Proxy map: {}
[debug] Request Handlers: urllib
[debug] Loaded 1837 extractors
[youtube:search_url] Extracting URL: https://www.youtube.com/results?search_query=cute+cat&sp=EgIQAw%253D%253D
[download] Downloading playlist: cute cat
[youtube:search_url] query "cute cat": Downloading web client config
[youtube:search_url] query "cute cat" page 1: Downloading API JSON
[youtube:search_url] query "cute cat" page 2: Downloading API JSON
[youtube:search_url] query "cute cat" page 3: Downloading API JSON
[youtube:search_url] query "cute cat" page 4: Downloading API JSON
[youtube:search_url] query "cute cat" page 5: Downloading API JSON
[youtube:search_url] query "cute cat" page 6: Downloading API JSON
[youtube:search_url] query "cute cat" page 7: Downloading API JSON
[youtube:search_url] query "cute cat" page 8: Downloading API JSON
[youtube:search_url] query "cute cat" page 9: Downloading API JSON
[youtube:search_url] query "cute cat" page 10: Downloading API JSON
[youtube:search_url] query "cute cat" page 11: Downloading API JSON
[youtube:search_url] query "cute cat" page 12: Downloading API JSON
[youtube:search_url] query "cute cat" page 13: Downloading API JSON
[youtube:search_url] query "cute cat" page 14: Downloading API JSON
[youtube:search_url] query "cute cat" page 15: Downloading API JSON
[youtube:search_url] query "cute cat" page 16: Downloading API JSON
[youtube:search_url] query "cute cat" page 17: Downloading API JSON
[youtube:search_url] query "cute cat" page 18: Downloading API JSON
[youtube:search_url] query "cute cat" page 19: Downloading API JSON
[youtube:search_url] query "cute cat" page 20: Downloading API JSON
[youtube:search_url] query "cute cat" page 21: Downloading API JSON
[youtube:search_url] query "cute cat" page 22: Downloading API JSON
[youtube:search_url] query "cute cat" page 23: Downloading API JSON
[youtube:search_url] query "cute cat" page 24: Downloading API JSON
[youtube:search_url] Playlist cute cat: Downloading 0 items
[debug] The information of all playlist entries will be held in memory
[download] Finished downloading playlist: cute cat
```



Functions to edit:
yt_dlp/extractor/youtube.py:YoutubeTabBaseInfoExtractor._extract_entries

Patch:
diff --git a/yt_dlp/extractor/youtube.py b/yt_dlp/extractor/youtube.py
index e69373ba2f42..0814d0a0621b 100644
--- a/yt_dlp/extractor/youtube.py
+++ b/yt_dlp/extractor/youtube.py
@@ -5282,6 +5282,7 @@ def _extract_entries(self, parent_renderer, continuation_list):
                     'channelRenderer': lambda x: self._grid_entries({'items': [{'channelRenderer': x}]}),
                     'hashtagTileRenderer': lambda x: [self._hashtag_tile_entry(x)],
                     'richGridRenderer': lambda x: self._extract_entries(x, continuation_list),
+                    'lockupViewModel': lambda x: [self._extract_lockup_view_model(x)],
                 }
                 for key, renderer in isr_content.items():
                     if key not in known_renderers: