aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authordirkf <fieldhouse@gmx.net>2025-11-04 20:52:15 +0000
committerdirkf <fieldhouse@gmx.net>2025-11-21 01:52:11 +0000
commita1e2c7d90b2a5e67acf489483d5e583e588a272a (patch)
tree48ce7f05e259025d166a34744a216891fce8183a
parentc55ace3c503c7bddb9c25112bd19bea282bbae59 (diff)
[YouTube] Add further InnerTube clients
FWIW: android-sdkless, tv_downgraded, web_creator Thx yt-dlp passim
-rw-r--r--youtube_dl/extractor/youtube.py38
1 files changed, 38 insertions, 0 deletions
diff --git a/youtube_dl/extractor/youtube.py b/youtube_dl/extractor/youtube.py
index ce23b39bb..3d89d5319 100644
--- a/youtube_dl/extractor/youtube.py
+++ b/youtube_dl/extractor/youtube.py
@@ -90,6 +90,21 @@ class YoutubeBaseInfoExtractor(InfoExtractor):
# priority order for now
_INNERTUBE_CLIENTS = o_dict((
+ # Doesn't require a PoToken for some reason: thx yt-dlp/yt-dlp#14693
+ ('android_sdkless', {
+ 'INNERTUBE_CONTEXT': {
+ 'client': {
+ 'clientName': 'ANDROID',
+ 'clientVersion': '20.10.38',
+ 'userAgent': 'com.google.android.youtube/20.10.38 (Linux; U; Android 11) gzip',
+ 'osName': 'Android',
+ 'osVersion': '11',
+ },
+ },
+ 'INNERTUBE_CONTEXT_CLIENT_NAME': 3,
+ 'REQUIRE_JS_PLAYER': False,
+ 'WITH_COOKIES': False,
+ }),
('ios', {
'INNERTUBE_CONTEXT': {
'client': {
@@ -120,6 +135,16 @@ class YoutubeBaseInfoExtractor(InfoExtractor):
},
'INNERTUBE_CONTEXT_CLIENT_NAME': 2,
'REQUIRE_PO_TOKEN': True,
+ }),
+ ('tv_downgraded', {
+ 'INNERTUBE_CONTEXT': {
+ 'client': {
+ 'clientName': 'TVHTML5',
+ 'clientVersion': '4', # avoids SABR formats, thx yt-dlp/yt-dlp#14887
+ 'userAgent': 'Mozilla/5.0 (ChromiumStylePlatform) Cobalt/Version',
+ },
+ },
+ 'INNERTUBE_CONTEXT_CLIENT_NAME': 7,
'SUPPORTS_COOKIES': True,
}),
('tv', {
@@ -168,6 +193,19 @@ class YoutubeBaseInfoExtractor(InfoExtractor):
'SUPPORTS_COOKIES': True,
'REQUIRE_PO': True,
}),
+ # This client now requires sign-in for every video
+ ('web_creator', {
+ 'INNERTUBE_CONTEXT': {
+ 'client': {
+ 'clientName': 'WEB_CREATOR',
+ 'clientVersion': '1.20250922.03.00',
+ },
+ },
+ 'INNERTUBE_CONTEXT_CLIENT_NAME': 62,
+ 'REQUIRE_AUTH': True,
+ 'SUPPORTS_COOKIES': True,
+ 'WITH_COOKIES': True,
+ }),
))
def _login(self):