yt-dlp 2025.11.9.232846.dev0__py3-none-any.whl → 2025.11.12__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- yt_dlp/cookies.py +3 -1
- yt_dlp/extractor/abc.py +2 -0
- yt_dlp/extractor/bunnycdn.py +4 -1
- yt_dlp/extractor/floatplane.py +26 -27
- yt_dlp/extractor/lazy_extractors.py +6 -6
- yt_dlp/extractor/tubetugraz.py +9 -3
- yt_dlp/extractor/twitch.py +27 -21
- yt_dlp/version.py +5 -5
- {yt_dlp-2025.11.9.232846.dev0.data → yt_dlp-2025.11.12.data}/data/share/doc/yt_dlp/README.txt +6 -6
- {yt_dlp-2025.11.9.232846.dev0.data → yt_dlp-2025.11.12.data}/data/share/fish/vendor_completions.d/yt-dlp.fish +1 -1
- {yt_dlp-2025.11.9.232846.dev0.data → yt_dlp-2025.11.12.data}/data/share/man/man1/yt-dlp.1 +7 -7
- {yt_dlp-2025.11.9.232846.dev0.dist-info → yt_dlp-2025.11.12.dist-info}/METADATA +7 -7
- {yt_dlp-2025.11.9.232846.dev0.dist-info → yt_dlp-2025.11.12.dist-info}/RECORD +18 -18
- {yt_dlp-2025.11.9.232846.dev0.data → yt_dlp-2025.11.12.data}/data/share/bash-completion/completions/yt-dlp +0 -0
- {yt_dlp-2025.11.9.232846.dev0.data → yt_dlp-2025.11.12.data}/data/share/zsh/site-functions/_yt-dlp +0 -0
- {yt_dlp-2025.11.9.232846.dev0.dist-info → yt_dlp-2025.11.12.dist-info}/WHEEL +0 -0
- {yt_dlp-2025.11.9.232846.dev0.dist-info → yt_dlp-2025.11.12.dist-info}/entry_points.txt +0 -0
- {yt_dlp-2025.11.9.232846.dev0.dist-info → yt_dlp-2025.11.12.dist-info}/licenses/LICENSE +0 -0
yt_dlp/cookies.py
CHANGED
|
@@ -125,7 +125,7 @@ def extract_cookies_from_browser(browser_name, profile=None, logger=YDLLogger(),
|
|
|
125
125
|
|
|
126
126
|
|
|
127
127
|
def _extract_firefox_cookies(profile, container, logger):
|
|
128
|
-
MAX_SUPPORTED_DB_SCHEMA_VERSION =
|
|
128
|
+
MAX_SUPPORTED_DB_SCHEMA_VERSION = 17
|
|
129
129
|
|
|
130
130
|
logger.info('Extracting cookies from firefox')
|
|
131
131
|
if not sqlite3:
|
|
@@ -166,6 +166,8 @@ def _extract_firefox_cookies(profile, container, logger):
|
|
|
166
166
|
db_schema_version = cursor.execute('PRAGMA user_version;').fetchone()[0]
|
|
167
167
|
if db_schema_version > MAX_SUPPORTED_DB_SCHEMA_VERSION:
|
|
168
168
|
logger.warning(f'Possibly unsupported firefox cookies database version: {db_schema_version}')
|
|
169
|
+
else:
|
|
170
|
+
logger.debug(f'Firefox cookies database version: {db_schema_version}')
|
|
169
171
|
if isinstance(container_id, int):
|
|
170
172
|
logger.debug(
|
|
171
173
|
f'Only loading cookies from firefox container "{container}", ID {container_id}')
|
yt_dlp/extractor/abc.py
CHANGED
yt_dlp/extractor/bunnycdn.py
CHANGED
|
@@ -16,7 +16,7 @@ from ..utils.traversal import find_element, traverse_obj
|
|
|
16
16
|
|
|
17
17
|
|
|
18
18
|
class BunnyCdnIE(InfoExtractor):
|
|
19
|
-
_VALID_URL = r'https?://(?:iframe\.mediadelivery\.net|video\.bunnycdn\.com)/(?:embed|play)/(?P<library_id>\d+)/(?P<id>[\da-f-]+)'
|
|
19
|
+
_VALID_URL = r'https?://(?:(?:iframe|player)\.mediadelivery\.net|video\.bunnycdn\.com)/(?:embed|play)/(?P<library_id>\d+)/(?P<id>[\da-f-]+)'
|
|
20
20
|
_EMBED_REGEX = [rf'<iframe[^>]+src=[\'"](?P<url>{_VALID_URL}[^\'"]*)[\'"]']
|
|
21
21
|
_TESTS = [{
|
|
22
22
|
'url': 'https://iframe.mediadelivery.net/embed/113933/e73edec1-e381-4c8b-ae73-717a140e0924',
|
|
@@ -72,6 +72,9 @@ class BunnyCdnIE(InfoExtractor):
|
|
|
72
72
|
'thumbnail': r're:^https?://.*\.b-cdn\.net/6372f5a3-68df-4ef7-a115-e1110186c477/thumbnail\.jpg',
|
|
73
73
|
},
|
|
74
74
|
'params': {'skip_download': True},
|
|
75
|
+
}, {
|
|
76
|
+
'url': 'https://player.mediadelivery.net/embed/519128/875880a9-bcc2-4038-9e05-e5024bba9b70',
|
|
77
|
+
'only_matching': True,
|
|
75
78
|
}]
|
|
76
79
|
_WEBPAGE_TESTS = [{
|
|
77
80
|
# Stream requires Referer
|
yt_dlp/extractor/floatplane.py
CHANGED
|
@@ -6,15 +6,15 @@ from ..utils import (
|
|
|
6
6
|
OnDemandPagedList,
|
|
7
7
|
clean_html,
|
|
8
8
|
determine_ext,
|
|
9
|
+
float_or_none,
|
|
9
10
|
format_field,
|
|
10
11
|
int_or_none,
|
|
11
12
|
join_nonempty,
|
|
12
|
-
parse_codecs,
|
|
13
13
|
parse_iso8601,
|
|
14
14
|
url_or_none,
|
|
15
15
|
urljoin,
|
|
16
16
|
)
|
|
17
|
-
from ..utils.traversal import traverse_obj
|
|
17
|
+
from ..utils.traversal import require, traverse_obj
|
|
18
18
|
|
|
19
19
|
|
|
20
20
|
class FloatplaneBaseIE(InfoExtractor):
|
|
@@ -50,37 +50,31 @@ class FloatplaneBaseIE(InfoExtractor):
|
|
|
50
50
|
media_id = media['id']
|
|
51
51
|
media_typ = media.get('type') or 'video'
|
|
52
52
|
|
|
53
|
-
metadata = self._download_json(
|
|
54
|
-
f'{self._BASE_URL}/api/v3/content/{media_typ}', media_id, query={'id': media_id},
|
|
55
|
-
note=f'Downloading {media_typ} metadata', impersonate=self._IMPERSONATE_TARGET)
|
|
56
|
-
|
|
57
53
|
stream = self._download_json(
|
|
58
|
-
f'{self._BASE_URL}/api/
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
}, note=f'Downloading {media_typ} stream data',
|
|
54
|
+
f'{self._BASE_URL}/api/v3/delivery/info', media_id,
|
|
55
|
+
query={'scenario': 'onDemand', 'entityId': media_id},
|
|
56
|
+
note=f'Downloading {media_typ} stream data',
|
|
62
57
|
impersonate=self._IMPERSONATE_TARGET)
|
|
63
58
|
|
|
64
|
-
|
|
59
|
+
metadata = self._download_json(
|
|
60
|
+
f'{self._BASE_URL}/api/v3/content/{media_typ}', media_id,
|
|
61
|
+
f'Downloading {media_typ} metadata', query={'id': media_id},
|
|
62
|
+
fatal=False, impersonate=self._IMPERSONATE_TARGET)
|
|
65
63
|
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
for i, val in (params or {}).items():
|
|
69
|
-
path = path.replace(f'{{qualityLevelParams.{i}}}', val)
|
|
70
|
-
return path
|
|
64
|
+
cdn_base_url = traverse_obj(stream, (
|
|
65
|
+
'groups', 0, 'origins', ..., 'url', {url_or_none}, any, {require('cdn base url')}))
|
|
71
66
|
|
|
72
67
|
formats = []
|
|
73
|
-
for
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
format_id = traverse_obj(quality, ('name', {str}))
|
|
68
|
+
for variant in traverse_obj(stream, ('groups', 0, 'variants', lambda _, v: v['url'])):
|
|
69
|
+
format_url = urljoin(cdn_base_url, variant['url'])
|
|
70
|
+
format_id = traverse_obj(variant, ('name', {str}))
|
|
77
71
|
hls_aes = {}
|
|
78
72
|
m3u8_data = None
|
|
79
73
|
|
|
80
74
|
# If we need impersonation for the API, then we need it for HLS keys too: extract in advance
|
|
81
75
|
if self._IMPERSONATE_TARGET is not None:
|
|
82
76
|
m3u8_data = self._download_webpage(
|
|
83
|
-
|
|
77
|
+
format_url, media_id, fatal=False, impersonate=self._IMPERSONATE_TARGET, headers=self._HEADERS,
|
|
84
78
|
note=join_nonempty('Downloading', format_id, 'm3u8 information', delim=' '),
|
|
85
79
|
errnote=join_nonempty('Failed to download', format_id, 'm3u8 information', delim=' '))
|
|
86
80
|
if not m3u8_data:
|
|
@@ -98,14 +92,19 @@ class FloatplaneBaseIE(InfoExtractor):
|
|
|
98
92
|
hls_aes['key'] = urlh.read().hex()
|
|
99
93
|
|
|
100
94
|
formats.append({
|
|
101
|
-
**traverse_obj(
|
|
95
|
+
**traverse_obj(variant, {
|
|
102
96
|
'format_note': ('label', {str}),
|
|
103
|
-
'width': ('width', {
|
|
104
|
-
'height': ('height', {
|
|
97
|
+
'width': ('meta', 'video', 'width', {int_or_none}),
|
|
98
|
+
'height': ('meta', 'video', 'height', {int_or_none}),
|
|
99
|
+
'vcodec': ('meta', 'video', 'codec', {str}),
|
|
100
|
+
'acodec': ('meta', 'audio', 'codec', {str}),
|
|
101
|
+
'vbr': ('meta', 'video', 'bitrate', 'average', {int_or_none(scale=1000)}),
|
|
102
|
+
'abr': ('meta', 'audio', 'bitrate', 'average', {int_or_none(scale=1000)}),
|
|
103
|
+
'audio_channels': ('meta', 'audio', 'channelCount', {int_or_none}),
|
|
104
|
+
'fps': ('meta', 'video', 'fps', {float_or_none}),
|
|
105
105
|
}),
|
|
106
|
-
|
|
107
|
-
'
|
|
108
|
-
'ext': determine_ext(url.partition('/chunk.m3u8')[0], 'mp4'),
|
|
106
|
+
'url': format_url,
|
|
107
|
+
'ext': determine_ext(format_url.partition('/chunk.m3u8')[0], 'mp4'),
|
|
109
108
|
'format_id': format_id,
|
|
110
109
|
'hls_media_playlist_data': m3u8_data,
|
|
111
110
|
'hls_aes': hls_aes or None,
|
|
@@ -1825,7 +1825,7 @@ class BundestagIE(LazyLoadExtractor):
|
|
|
1825
1825
|
class BunnyCdnIE(LazyLoadExtractor):
|
|
1826
1826
|
_module = 'yt_dlp.extractor.bunnycdn'
|
|
1827
1827
|
IE_NAME = 'BunnyCdn'
|
|
1828
|
-
_VALID_URL = 'https?://(?:iframe\\.mediadelivery\\.net|video\\.bunnycdn\\.com)/(?:embed|play)/(?P<library_id>\\d+)/(?P<id>[\\da-f-]+)'
|
|
1828
|
+
_VALID_URL = 'https?://(?:(?:iframe|player)\\.mediadelivery\\.net|video\\.bunnycdn\\.com)/(?:embed|play)/(?P<library_id>\\d+)/(?P<id>[\\da-f-]+)'
|
|
1829
1829
|
_RETURN_TYPE = 'video'
|
|
1830
1830
|
|
|
1831
1831
|
|
|
@@ -13132,7 +13132,7 @@ class TubeTuGrazBaseIE(LazyLoadExtractor):
|
|
|
13132
13132
|
class TubeTuGrazIE(TubeTuGrazBaseIE):
|
|
13133
13133
|
_module = 'yt_dlp.extractor.tubetugraz'
|
|
13134
13134
|
IE_NAME = 'TubeTuGraz'
|
|
13135
|
-
_VALID_URL = '(?x)\n https?://tube\\.tugraz\\.at/paella/ui/watch
|
|
13135
|
+
_VALID_URL = '(?x)\n https?://tube\\.tugraz\\.at/(?:\n paella/ui/watch\\.html\\?(?:[^#]*&)?id=|\n portal/watch/\n )(?P<id>[0-9a-fA-F]{8}-(?:[0-9a-fA-F]{4}-){3}[0-9a-fA-F]{12})\n '
|
|
13136
13136
|
IE_DESC = 'tube.tugraz.at'
|
|
13137
13137
|
_NETRC_MACHINE = 'tubetugraz'
|
|
13138
13138
|
_RETURN_TYPE = 'video'
|
|
@@ -13311,7 +13311,7 @@ class TwitchClipsIE(TwitchBaseIE):
|
|
|
13311
13311
|
|
|
13312
13312
|
class TwitchCollectionIE(TwitchBaseIE):
|
|
13313
13313
|
_module = 'yt_dlp.extractor.twitch'
|
|
13314
|
-
IE_NAME = '
|
|
13314
|
+
IE_NAME = 'twitch:collection'
|
|
13315
13315
|
_VALID_URL = 'https?://(?:(?:www|go|m)\\.)?twitch\\.tv/collections/(?P<id>[^/]+)'
|
|
13316
13316
|
_NETRC_MACHINE = 'twitch'
|
|
13317
13317
|
_RETURN_TYPE = 'playlist'
|
|
@@ -13351,7 +13351,7 @@ class TwitchStreamIE(TwitchVideosBaseIE):
|
|
|
13351
13351
|
|
|
13352
13352
|
class TwitchVideosClipsIE(TwitchPlaylistBaseIE):
|
|
13353
13353
|
_module = 'yt_dlp.extractor.twitch'
|
|
13354
|
-
IE_NAME = '
|
|
13354
|
+
IE_NAME = 'twitch:videos:clips'
|
|
13355
13355
|
_VALID_URL = 'https?://(?:(?:www|go|m)\\.)?twitch\\.tv/(?P<id>[^/]+)/(?:clips|videos/*?\\?.*?\\bfilter=clips)'
|
|
13356
13356
|
_NETRC_MACHINE = 'twitch'
|
|
13357
13357
|
_RETURN_TYPE = 'playlist'
|
|
@@ -13359,7 +13359,7 @@ class TwitchVideosClipsIE(TwitchPlaylistBaseIE):
|
|
|
13359
13359
|
|
|
13360
13360
|
class TwitchVideosCollectionsIE(TwitchPlaylistBaseIE):
|
|
13361
13361
|
_module = 'yt_dlp.extractor.twitch'
|
|
13362
|
-
IE_NAME = '
|
|
13362
|
+
IE_NAME = 'twitch:videos:collections'
|
|
13363
13363
|
_VALID_URL = 'https?://(?:(?:www|go|m)\\.)?twitch\\.tv/(?P<id>[^/]+)/videos/*?\\?.*?\\bfilter=collections'
|
|
13364
13364
|
_NETRC_MACHINE = 'twitch'
|
|
13365
13365
|
_RETURN_TYPE = 'playlist'
|
|
@@ -13367,7 +13367,7 @@ class TwitchVideosCollectionsIE(TwitchPlaylistBaseIE):
|
|
|
13367
13367
|
|
|
13368
13368
|
class TwitchVideosIE(TwitchVideosBaseIE):
|
|
13369
13369
|
_module = 'yt_dlp.extractor.twitch'
|
|
13370
|
-
IE_NAME = '
|
|
13370
|
+
IE_NAME = 'twitch:videos'
|
|
13371
13371
|
_VALID_URL = 'https?://(?:(?:www|go|m)\\.)?twitch\\.tv/(?P<id>[^/]+)/(?:videos|profile)'
|
|
13372
13372
|
_NETRC_MACHINE = 'twitch'
|
|
13373
13373
|
_RETURN_TYPE = 'playlist'
|
yt_dlp/extractor/tubetugraz.py
CHANGED
|
@@ -136,8 +136,10 @@ class TubeTuGrazIE(TubeTuGrazBaseIE):
|
|
|
136
136
|
IE_DESC = 'tube.tugraz.at'
|
|
137
137
|
|
|
138
138
|
_VALID_URL = r'''(?x)
|
|
139
|
-
https?://tube\.tugraz\.at/
|
|
140
|
-
|
|
139
|
+
https?://tube\.tugraz\.at/(?:
|
|
140
|
+
paella/ui/watch\.html\?(?:[^#]*&)?id=|
|
|
141
|
+
portal/watch/
|
|
142
|
+
)(?P<id>[0-9a-fA-F]{8}-(?:[0-9a-fA-F]{4}-){3}[0-9a-fA-F]{12})
|
|
141
143
|
'''
|
|
142
144
|
_TESTS = [
|
|
143
145
|
{
|
|
@@ -149,9 +151,9 @@ class TubeTuGrazIE(TubeTuGrazBaseIE):
|
|
|
149
151
|
'title': '#6 (23.11.2017)',
|
|
150
152
|
'episode': '#6 (23.11.2017)',
|
|
151
153
|
'series': '[INB03001UF] Einführung in die strukturierte Programmierung',
|
|
152
|
-
'creator': 'Safran C',
|
|
153
154
|
'duration': 3295818,
|
|
154
155
|
'series_id': 'b1192fff-2aa7-4bf0-a5cf-7b15c3bd3b34',
|
|
156
|
+
'creators': ['Safran C'],
|
|
155
157
|
},
|
|
156
158
|
}, {
|
|
157
159
|
'url': 'https://tube.tugraz.at/paella/ui/watch.html?id=2df6d787-e56a-428d-8ef4-d57f07eef238',
|
|
@@ -162,6 +164,10 @@ class TubeTuGrazIE(TubeTuGrazBaseIE):
|
|
|
162
164
|
'ext': 'mp4',
|
|
163
165
|
},
|
|
164
166
|
'expected_warnings': ['Extractor failed to obtain "title"'],
|
|
167
|
+
}, {
|
|
168
|
+
# Portal URL format
|
|
169
|
+
'url': 'https://tube.tugraz.at/portal/watch/ab28ec60-8cbe-4f1a-9b96-a95add56c612',
|
|
170
|
+
'only_matching': True,
|
|
165
171
|
},
|
|
166
172
|
]
|
|
167
173
|
|
yt_dlp/extractor/twitch.py
CHANGED
|
@@ -41,16 +41,16 @@ class TwitchBaseIE(InfoExtractor):
|
|
|
41
41
|
_NETRC_MACHINE = 'twitch'
|
|
42
42
|
|
|
43
43
|
_OPERATION_HASHES = {
|
|
44
|
-
'CollectionSideBar': '
|
|
45
|
-
'FilterableVideoTower_Videos': '
|
|
46
|
-
'ClipsCards__User': '
|
|
47
|
-
'ShareClipRenderStatus': '
|
|
48
|
-
'ChannelCollectionsContent': '
|
|
49
|
-
'StreamMetadata': '
|
|
44
|
+
'CollectionSideBar': '016e1e4ccee0eb4698eb3bf1a04dc1c077fb746c78c82bac9a8f0289658fbd1a',
|
|
45
|
+
'FilterableVideoTower_Videos': '67004f7881e65c297936f32c75246470629557a393788fb5a69d6d9a25a8fd5f',
|
|
46
|
+
'ClipsCards__User': '90c33f5e6465122fba8f9371e2a97076f9ed06c6fed3788d002ab9eba8f91d88',
|
|
47
|
+
'ShareClipRenderStatus': '1844261bb449fa51e6167040311da4a7a5f1c34fe71c71a3e0c4f551bc30c698',
|
|
48
|
+
'ChannelCollectionsContent': '5247910a19b1cd2b760939bf4cba4dcbd3d13bdf8c266decd16956f6ef814077',
|
|
49
|
+
'StreamMetadata': 'b57f9b910f8cd1a4659d894fe7550ccc81ec9052c01e438b290fd66a040b9b93',
|
|
50
50
|
'ComscoreStreamingQuery': 'e1edae8122517d013405f237ffcc124515dc6ded82480a88daef69c83b53ac01',
|
|
51
|
-
'VideoPreviewOverlay': '
|
|
52
|
-
'VideoMetadata': '
|
|
53
|
-
'VideoPlayer_ChapterSelectButtonVideo': '
|
|
51
|
+
'VideoPreviewOverlay': '9515480dee68a77e667cb19de634739d33f243572b007e98e67184b1a5d8369f',
|
|
52
|
+
'VideoMetadata': '45111672eea2e507f8ba44d101a61862f9c56b11dee09a15634cb75cb9b9084d',
|
|
53
|
+
'VideoPlayer_ChapterSelectButtonVideo': '71835d5ef425e154bf282453a926d99b328cdc5e32f36d3a209d0f4778b41203',
|
|
54
54
|
'VideoPlayer_VODSeekbarPreviewVideo': '07e99e4d56c5a7c67117a154777b0baf85a5ffefa393b213f4bc712ccaf85dd6',
|
|
55
55
|
}
|
|
56
56
|
|
|
@@ -621,15 +621,15 @@ def _make_video_result(node):
|
|
|
621
621
|
|
|
622
622
|
|
|
623
623
|
class TwitchCollectionIE(TwitchBaseIE):
|
|
624
|
+
IE_NAME = 'twitch:collection'
|
|
624
625
|
_VALID_URL = r'https?://(?:(?:www|go|m)\.)?twitch\.tv/collections/(?P<id>[^/]+)'
|
|
625
|
-
|
|
626
626
|
_TESTS = [{
|
|
627
|
-
'url': 'https://www.twitch.tv/collections/
|
|
627
|
+
'url': 'https://www.twitch.tv/collections/o9zZer3IQBhTJw',
|
|
628
628
|
'info_dict': {
|
|
629
|
-
'id': '
|
|
630
|
-
'title': '
|
|
629
|
+
'id': 'o9zZer3IQBhTJw',
|
|
630
|
+
'title': 'Playthrough Archives',
|
|
631
631
|
},
|
|
632
|
-
'playlist_mincount':
|
|
632
|
+
'playlist_mincount': 21,
|
|
633
633
|
}]
|
|
634
634
|
|
|
635
635
|
_OPERATION_NAME = 'CollectionSideBar'
|
|
@@ -720,8 +720,8 @@ class TwitchVideosBaseIE(TwitchPlaylistBaseIE):
|
|
|
720
720
|
|
|
721
721
|
|
|
722
722
|
class TwitchVideosIE(TwitchVideosBaseIE):
|
|
723
|
+
IE_NAME = 'twitch:videos'
|
|
723
724
|
_VALID_URL = r'https?://(?:(?:www|go|m)\.)?twitch\.tv/(?P<id>[^/]+)/(?:videos|profile)'
|
|
724
|
-
|
|
725
725
|
_TESTS = [{
|
|
726
726
|
# All Videos sorted by Date
|
|
727
727
|
'url': 'https://www.twitch.tv/spamfish/videos?filter=all',
|
|
@@ -729,7 +729,7 @@ class TwitchVideosIE(TwitchVideosBaseIE):
|
|
|
729
729
|
'id': 'spamfish',
|
|
730
730
|
'title': 'spamfish - All Videos sorted by Date',
|
|
731
731
|
},
|
|
732
|
-
'playlist_mincount':
|
|
732
|
+
'playlist_mincount': 751,
|
|
733
733
|
}, {
|
|
734
734
|
# All Videos sorted by Popular
|
|
735
735
|
'url': 'https://www.twitch.tv/spamfish/videos?filter=all&sort=views',
|
|
@@ -737,8 +737,9 @@ class TwitchVideosIE(TwitchVideosBaseIE):
|
|
|
737
737
|
'id': 'spamfish',
|
|
738
738
|
'title': 'spamfish - All Videos sorted by Popular',
|
|
739
739
|
},
|
|
740
|
-
'playlist_mincount':
|
|
740
|
+
'playlist_mincount': 754,
|
|
741
741
|
}, {
|
|
742
|
+
# TODO: Investigate why we get 0 entries
|
|
742
743
|
# Past Broadcasts sorted by Date
|
|
743
744
|
'url': 'https://www.twitch.tv/spamfish/videos?filter=archives',
|
|
744
745
|
'info_dict': {
|
|
@@ -753,8 +754,9 @@ class TwitchVideosIE(TwitchVideosBaseIE):
|
|
|
753
754
|
'id': 'spamfish',
|
|
754
755
|
'title': 'spamfish - Highlights sorted by Date',
|
|
755
756
|
},
|
|
756
|
-
'playlist_mincount':
|
|
757
|
+
'playlist_mincount': 751,
|
|
757
758
|
}, {
|
|
759
|
+
# TODO: Investigate why we get 0 entries
|
|
758
760
|
# Uploads sorted by Date
|
|
759
761
|
'url': 'https://www.twitch.tv/esl_csgo/videos?filter=uploads&sort=time',
|
|
760
762
|
'info_dict': {
|
|
@@ -763,6 +765,7 @@ class TwitchVideosIE(TwitchVideosBaseIE):
|
|
|
763
765
|
},
|
|
764
766
|
'playlist_mincount': 5,
|
|
765
767
|
}, {
|
|
768
|
+
# TODO: Investigate why we get 0 entries
|
|
766
769
|
# Past Premieres sorted by Date
|
|
767
770
|
'url': 'https://www.twitch.tv/spamfish/videos?filter=past_premieres',
|
|
768
771
|
'info_dict': {
|
|
@@ -825,8 +828,8 @@ class TwitchVideosIE(TwitchVideosBaseIE):
|
|
|
825
828
|
|
|
826
829
|
|
|
827
830
|
class TwitchVideosClipsIE(TwitchPlaylistBaseIE):
|
|
831
|
+
IE_NAME = 'twitch:videos:clips'
|
|
828
832
|
_VALID_URL = r'https?://(?:(?:www|go|m)\.)?twitch\.tv/(?P<id>[^/]+)/(?:clips|videos/*?\?.*?\bfilter=clips)'
|
|
829
|
-
|
|
830
833
|
_TESTS = [{
|
|
831
834
|
# Clips
|
|
832
835
|
'url': 'https://www.twitch.tv/vanillatv/clips?filter=clips&range=all',
|
|
@@ -898,8 +901,8 @@ class TwitchVideosClipsIE(TwitchPlaylistBaseIE):
|
|
|
898
901
|
|
|
899
902
|
|
|
900
903
|
class TwitchVideosCollectionsIE(TwitchPlaylistBaseIE):
|
|
904
|
+
IE_NAME = 'twitch:videos:collections'
|
|
901
905
|
_VALID_URL = r'https?://(?:(?:www|go|m)\.)?twitch\.tv/(?P<id>[^/]+)/videos/*?\?.*?\bfilter=collections'
|
|
902
|
-
|
|
903
906
|
_TESTS = [{
|
|
904
907
|
# Collections
|
|
905
908
|
'url': 'https://www.twitch.tv/spamfish/videos?filter=collections',
|
|
@@ -1050,7 +1053,10 @@ class TwitchStreamIE(TwitchVideosBaseIE):
|
|
|
1050
1053
|
gql = self._download_gql(
|
|
1051
1054
|
channel_name, [{
|
|
1052
1055
|
'operationName': 'StreamMetadata',
|
|
1053
|
-
'variables': {
|
|
1056
|
+
'variables': {
|
|
1057
|
+
'channelLogin': channel_name,
|
|
1058
|
+
'includeIsDJ': True,
|
|
1059
|
+
},
|
|
1054
1060
|
}, {
|
|
1055
1061
|
'operationName': 'ComscoreStreamingQuery',
|
|
1056
1062
|
'variables': {
|
yt_dlp/version.py
CHANGED
|
@@ -1,15 +1,15 @@
|
|
|
1
1
|
# Autogenerated by devscripts/update-version.py
|
|
2
2
|
|
|
3
|
-
__version__ = '2025.11.
|
|
3
|
+
__version__ = '2025.11.12'
|
|
4
4
|
|
|
5
|
-
RELEASE_GIT_HEAD = '
|
|
5
|
+
RELEASE_GIT_HEAD = '335653be82d5ef999cfc2879d005397402eebec1'
|
|
6
6
|
|
|
7
7
|
VARIANT = 'pip'
|
|
8
8
|
|
|
9
9
|
UPDATE_HINT = 'You installed yt-dlp with pip or using the wheel from PyPi; Use that to update'
|
|
10
10
|
|
|
11
|
-
CHANNEL = '
|
|
11
|
+
CHANNEL = 'stable'
|
|
12
12
|
|
|
13
|
-
ORIGIN = 'yt-dlp/yt-dlp
|
|
13
|
+
ORIGIN = 'yt-dlp/yt-dlp'
|
|
14
14
|
|
|
15
|
-
_pkg_version = '2025.11.
|
|
15
|
+
_pkg_version = '2025.11.12'
|
{yt_dlp-2025.11.9.232846.dev0.data → yt_dlp-2025.11.12.data}/data/share/doc/yt_dlp/README.txt
RENAMED
|
@@ -234,7 +234,7 @@ install or update to the nightly release before submitting a bug report:
|
|
|
234
234
|
yt-dlp --update-to nightly
|
|
235
235
|
|
|
236
236
|
# To install nightly with pip:
|
|
237
|
-
|
|
237
|
+
python -m pip install -U --pre "yt-dlp[default]"
|
|
238
238
|
|
|
239
239
|
When running a yt-dlp version that is older than 90 days, you will see a
|
|
240
240
|
warning message suggesting to update to the latest version. You can
|
|
@@ -343,11 +343,11 @@ will be built for the same CPU architecture as the Python used.
|
|
|
343
343
|
|
|
344
344
|
You can run the following commands:
|
|
345
345
|
|
|
346
|
-
|
|
347
|
-
|
|
348
|
-
|
|
346
|
+
python devscripts/install_deps.py --include-group pyinstaller
|
|
347
|
+
python devscripts/make_lazy_extractors.py
|
|
348
|
+
python -m bundle.pyinstaller
|
|
349
349
|
|
|
350
|
-
On some systems, you may need to use py or
|
|
350
|
+
On some systems, you may need to use py or python3 instead of python.
|
|
351
351
|
|
|
352
352
|
python -m bundle.pyinstaller accepts any arguments that can be passed to
|
|
353
353
|
pyinstaller, such as --onefile/-F or --onedir/-D, which is further
|
|
@@ -408,7 +408,7 @@ General Options:
|
|
|
408
408
|
--no-update Do not check for updates (default)
|
|
409
409
|
--update-to [CHANNEL]@[TAG] Upgrade/downgrade to a specific version.
|
|
410
410
|
CHANNEL can be a repository as well. CHANNEL
|
|
411
|
-
and TAG default to "
|
|
411
|
+
and TAG default to "stable" and "latest"
|
|
412
412
|
respectively if omitted; See "UPDATE" for
|
|
413
413
|
details. Supported channels: stable,
|
|
414
414
|
nightly, master
|
|
@@ -3,7 +3,7 @@ complete --command yt-dlp --long-option help --short-option h --description 'Pri
|
|
|
3
3
|
complete --command yt-dlp --long-option version --description 'Print program version and exit'
|
|
4
4
|
complete --command yt-dlp --long-option update --short-option U --description 'Check if updates are available. You installed yt-dlp from a manual build or with a package manager; Use that to update'
|
|
5
5
|
complete --command yt-dlp --long-option no-update --description 'Do not check for updates (default)'
|
|
6
|
-
complete --command yt-dlp --long-option update-to --description 'Upgrade/downgrade to a specific version. CHANNEL can be a repository as well. CHANNEL and TAG default to "
|
|
6
|
+
complete --command yt-dlp --long-option update-to --description 'Upgrade/downgrade to a specific version. CHANNEL can be a repository as well. CHANNEL and TAG default to "stable" and "latest" respectively if omitted; See "UPDATE" for details. Supported channels: stable, nightly, master'
|
|
7
7
|
complete --command yt-dlp --long-option ignore-errors --short-option i --description 'Ignore download and postprocessing errors. The download will be considered successful even if the postprocessing fails'
|
|
8
8
|
complete --command yt-dlp --long-option no-abort-on-error --description 'Continue with next video on download errors; e.g. to skip unavailable videos in a playlist (default)'
|
|
9
9
|
complete --command yt-dlp --long-option abort-on-error --description 'Abort downloading of further videos if an error occurs (Alias: --no-ignore-errors)'
|
|
@@ -48,7 +48,7 @@ Do not check for updates (default)
|
|
|
48
48
|
--update-to \f[I][CHANNEL]\[at][TAG]\f[R]
|
|
49
49
|
Upgrade/downgrade to a specific version.
|
|
50
50
|
CHANNEL can be a repository as well.
|
|
51
|
-
CHANNEL and TAG default to \[dq]
|
|
51
|
+
CHANNEL and TAG default to \[dq]stable\[dq] and \[dq]latest\[dq]
|
|
52
52
|
respectively if omitted; See \[dq]UPDATE\[dq] for details.
|
|
53
53
|
Supported channels: stable, nightly, master
|
|
54
54
|
.TP
|
|
@@ -3147,7 +3147,7 @@ repository, tag \f[V]2023.09.24\f[R]
|
|
|
3147
3147
|
yt-dlp --update-to nightly
|
|
3148
3148
|
|
|
3149
3149
|
# To install nightly with pip:
|
|
3150
|
-
|
|
3150
|
+
python -m pip install -U --pre \[dq]yt-dlp[default]\[dq]
|
|
3151
3151
|
\f[R]
|
|
3152
3152
|
.fi
|
|
3153
3153
|
.PP
|
|
@@ -3326,14 +3326,14 @@ You can run the following commands:
|
|
|
3326
3326
|
.IP
|
|
3327
3327
|
.nf
|
|
3328
3328
|
\f[C]
|
|
3329
|
-
|
|
3330
|
-
|
|
3331
|
-
|
|
3329
|
+
python devscripts/install_deps.py --include-group pyinstaller
|
|
3330
|
+
python devscripts/make_lazy_extractors.py
|
|
3331
|
+
python -m bundle.pyinstaller
|
|
3332
3332
|
\f[R]
|
|
3333
3333
|
.fi
|
|
3334
3334
|
.PP
|
|
3335
|
-
On some systems, you may need to use \f[V]py\f[R] or \f[V]
|
|
3336
|
-
instead of \f[V]
|
|
3335
|
+
On some systems, you may need to use \f[V]py\f[R] or \f[V]python3\f[R]
|
|
3336
|
+
instead of \f[V]python\f[R].
|
|
3337
3337
|
.PP
|
|
3338
3338
|
\f[V]python -m bundle.pyinstaller\f[R] accepts any arguments that can be
|
|
3339
3339
|
passed to \f[V]pyinstaller\f[R], such as \f[V]--onefile/-F\f[R] or
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: yt-dlp
|
|
3
|
-
Version: 2025.11.
|
|
3
|
+
Version: 2025.11.12
|
|
4
4
|
Summary: A feature-rich command-line audio/video downloader
|
|
5
5
|
Project-URL: Documentation, https://github.com/yt-dlp/yt-dlp#readme
|
|
6
6
|
Project-URL: Repository, https://github.com/yt-dlp/yt-dlp
|
|
@@ -258,7 +258,7 @@ Example usage:
|
|
|
258
258
|
yt-dlp --update-to nightly
|
|
259
259
|
|
|
260
260
|
# To install nightly with pip:
|
|
261
|
-
|
|
261
|
+
python -m pip install -U --pre "yt-dlp[default]"
|
|
262
262
|
```
|
|
263
263
|
|
|
264
264
|
When running a yt-dlp version that is older than 90 days, you will see a warning message suggesting to update to the latest version.
|
|
@@ -334,12 +334,12 @@ To build the standalone executable, you must have Python and `pyinstaller` (plus
|
|
|
334
334
|
You can run the following commands:
|
|
335
335
|
|
|
336
336
|
```
|
|
337
|
-
|
|
338
|
-
|
|
339
|
-
|
|
337
|
+
python devscripts/install_deps.py --include-group pyinstaller
|
|
338
|
+
python devscripts/make_lazy_extractors.py
|
|
339
|
+
python -m bundle.pyinstaller
|
|
340
340
|
```
|
|
341
341
|
|
|
342
|
-
On some systems, you may need to use `py` or `
|
|
342
|
+
On some systems, you may need to use `py` or `python3` instead of `python`.
|
|
343
343
|
|
|
344
344
|
`python -m bundle.pyinstaller` accepts any arguments that can be passed to `pyinstaller`, such as `--onefile/-F` or `--onedir/-D`, which is further [documented here](https://pyinstaller.org/en/stable/usage.html#what-to-generate).
|
|
345
345
|
|
|
@@ -383,7 +383,7 @@ Tip: Use `CTRL`+`F` (or `Command`+`F`) to search by keywords
|
|
|
383
383
|
--no-update Do not check for updates (default)
|
|
384
384
|
--update-to [CHANNEL]@[TAG] Upgrade/downgrade to a specific version.
|
|
385
385
|
CHANNEL can be a repository as well. CHANNEL
|
|
386
|
-
and TAG default to "
|
|
386
|
+
and TAG default to "stable" and "latest"
|
|
387
387
|
respectively if omitted; See "UPDATE" for
|
|
388
388
|
details. Supported channels: stable,
|
|
389
389
|
nightly, master
|
|
@@ -3,7 +3,7 @@ yt_dlp/__init__.py,sha256=Nyir0qVukv9-pdfRtHPVm3EDOYDvwa1AXHOIX9oR0ps,47897
|
|
|
3
3
|
yt_dlp/__main__.py,sha256=DzqMhNY2y89eqs0Hnd4hOhjMfW9OhnhdhJdDH9yizmw,367
|
|
4
4
|
yt_dlp/aes.py,sha256=OU2t7oHbaKSIT-evc75vU58XK20b6wqgJvNlG_fois0,22033
|
|
5
5
|
yt_dlp/cache.py,sha256=npC-r6vd_HrsnTlGDvThz4D7nL4oEn06h3ABsYwk2iY,3370
|
|
6
|
-
yt_dlp/cookies.py,sha256=
|
|
6
|
+
yt_dlp/cookies.py,sha256=JbdeudN50DDDiUXORRueozVgbvSoVRKpDbxmjInVN1E,57351
|
|
7
7
|
yt_dlp/globals.py,sha256=zVr9imhoXcXHoCtV0VArT5--EGmjO1cfOxIKu4xCzSM,1259
|
|
8
8
|
yt_dlp/jsinterp.py,sha256=GfZSNQlLG8l1dKcHA216DmIq9kszszqWClqHzEUd4sk,38770
|
|
9
9
|
yt_dlp/minicurses.py,sha256=fDq7vdEn25qpZeEOdDk2YkEsckFMGAbrQaZcGNt4NUo,5328
|
|
@@ -11,7 +11,7 @@ yt_dlp/options.py,sha256=Icc0JRiKOzITWoMujE_ihEmkCS-uCcie42XhIh8LvS4,100388
|
|
|
11
11
|
yt_dlp/plugins.py,sha256=EGmR0ydaahNspGrgszTNX4-YjHe93WOOhcw1gf6PZSs,8215
|
|
12
12
|
yt_dlp/socks.py,sha256=oAuAfWM6jxI8A5hHDLEKq2U2-k9NyMB_z6nrKzNE9fg,8936
|
|
13
13
|
yt_dlp/update.py,sha256=sY7gNFBQorzs7sEjRrqL5QOsTBNmGGa_FnpTtbxY1vA,25280
|
|
14
|
-
yt_dlp/version.py,sha256=
|
|
14
|
+
yt_dlp/version.py,sha256=xZk8jSGCofYUrJbYacysnaWQqi7WQT8zXNpsmqfA3EU,327
|
|
15
15
|
yt_dlp/webvtt.py,sha256=ONkXaaNCZcX8pQhJn3iwIKyaQ34BtVDrMEdG6wRNZwM,11451
|
|
16
16
|
yt_dlp/__pyinstaller/__init__.py,sha256=-c4Zo8nQGKAm8wc_LDscxMtK7zr_YhZwRnC9CMruUBE,72
|
|
17
17
|
yt_dlp/__pyinstaller/hook-yt_dlp.py,sha256=5Rd0zV2pDskjY1KtT0wsjxv4hStx67sLCjUexsFvFus,1339
|
|
@@ -44,7 +44,7 @@ yt_dlp/downloader/websocket.py,sha256=G39SkXEIGtUEYaP1_ODXMiZGZgIrFeb3wqlfVypcHU
|
|
|
44
44
|
yt_dlp/downloader/youtube_live_chat.py,sha256=JLpGIUNNbuM7ZuZMY9A6X3xrRDfs3sWz4tzXLXpa1P4,10875
|
|
45
45
|
yt_dlp/extractor/__init__.py,sha256=XMV5BpSWbaDXGkkI2sim_iJk7y0BpCgrDcPjwenA1Y0,1764
|
|
46
46
|
yt_dlp/extractor/_extractors.py,sha256=jkbauREcJu0HUo9eKpKHCLwIpGa-FZd_aXchvTcaIfU,54260
|
|
47
|
-
yt_dlp/extractor/abc.py,sha256=
|
|
47
|
+
yt_dlp/extractor/abc.py,sha256=rGyouEhGP6gdZlDxkYHHmdnMpaOYoQDXeRMy_JeON1I,18876
|
|
48
48
|
yt_dlp/extractor/abcnews.py,sha256=STJP1ynxEOWURHQSoT-568klK6NIl7MY4KSjjUK_CAg,6326
|
|
49
49
|
yt_dlp/extractor/abcotvs.py,sha256=VYLvqEeBr02xOakqx09A5p4e81Ap1Rp2yfcPpNiTu9g,4555
|
|
50
50
|
yt_dlp/extractor/abematv.py,sha256=XvkfnKvOMmdjmFByp8kkDFZuc3MTKXH4cO0qp77vyuU,19922
|
|
@@ -150,7 +150,7 @@ yt_dlp/extractor/brilliantpala.py,sha256=TaBiCo1q1ChGnlKIW28OFkxgIvjS2CUAUJ1KN9e
|
|
|
150
150
|
yt_dlp/extractor/btvplus.py,sha256=5FbwrrT1fcyTX7bQq_qsYPb8WET-0XLk2iVVa6k_bDc,2829
|
|
151
151
|
yt_dlp/extractor/bundesliga.py,sha256=bpY8YnJqONVuywSHGcGs4WtDxXJ2wlC6E9OrjjEmIjw,1348
|
|
152
152
|
yt_dlp/extractor/bundestag.py,sha256=7fo_dEb3qNa-ad579W59CgGf8g7FGnicX6EhfUAnmBI,5013
|
|
153
|
-
yt_dlp/extractor/bunnycdn.py,sha256=
|
|
153
|
+
yt_dlp/extractor/bunnycdn.py,sha256=UDd4h_EONBevdsR6NaMw0awU58UVKlBDO_punFI-fxs,8492
|
|
154
154
|
yt_dlp/extractor/businessinsider.py,sha256=q9wwrAxKb3EagTWDgYALjXDeSb5ZuaWl3d72HUOZyV8,1939
|
|
155
155
|
yt_dlp/extractor/buzzfeed.py,sha256=YKmD6z2aEzPoQnX-qIdPy57x9-A3CTYOp0APnFZutEo,3612
|
|
156
156
|
yt_dlp/extractor/byutv.py,sha256=VAQ2HxNLlOzBgmG6mAhCuF3KDDuxC-cj1lPsHG7nVF0,3930
|
|
@@ -304,7 +304,7 @@ yt_dlp/extractor/firsttv.py,sha256=QAYWEkjRtRpGEB41iCET-aa0OvA3Rja1v-f7NOawEhU,6
|
|
|
304
304
|
yt_dlp/extractor/fivetv.py,sha256=KJ2M9yTDAGIAvOxmXWzNH_0IMwc0TLPwvS61MtAcDII,3045
|
|
305
305
|
yt_dlp/extractor/flextv.py,sha256=3HP9FAgRl7u2TTaEIUpJ6IQN_USX9MTszh8zmjBGXfc,2961
|
|
306
306
|
yt_dlp/extractor/flickr.py,sha256=78oSy37ZS2RNTXWFi0sreGfyqxo6fiEYy6rTNKGib5s,4631
|
|
307
|
-
yt_dlp/extractor/floatplane.py,sha256=
|
|
307
|
+
yt_dlp/extractor/floatplane.py,sha256=yunceYCOfHekzBEKjE9W7MaGgFFXBMUzTnlPO2PagFg,16444
|
|
308
308
|
yt_dlp/extractor/folketinget.py,sha256=5vOBrwGAku45STkac9UJ6djitM9PpHYmYBWVihIeJE4,2540
|
|
309
309
|
yt_dlp/extractor/footyroom.py,sha256=onb3WLkWV__m8ZkE5oJyOHcQ6k00eWY6b8SKVvKgW7E,1819
|
|
310
310
|
yt_dlp/extractor/formula1.py,sha256=Moh-pb3cShbkDFp9Nb6eZu7-4Nt-ZNrWbkrf3V7VD74,938
|
|
@@ -455,7 +455,7 @@ yt_dlp/extractor/la7.py,sha256=GShDLu1N0rS1bY4uIiUkznThvn7gNiwtSgmh7Rs7t08,9435
|
|
|
455
455
|
yt_dlp/extractor/laracasts.py,sha256=PzTqAbHXiUqog-mpp2qR_rpKa-sZel4mLyzWTPkbDuc,4587
|
|
456
456
|
yt_dlp/extractor/lastfm.py,sha256=OpmE-Y-2rcav2r2xaDQzX_EJiltmbbe6fO9VzkLqNWQ,4748
|
|
457
457
|
yt_dlp/extractor/laxarxames.py,sha256=-YyL-5y4t2L9ptTSLXhvK-SJwvXGqv5l1HfT129zF0c,2773
|
|
458
|
-
yt_dlp/extractor/lazy_extractors.py,sha256=
|
|
458
|
+
yt_dlp/extractor/lazy_extractors.py,sha256=ceOyj6vI2T5VRaqdjmTpEA4uqJXs3fA4Hcp9jI6V2vQ,812050
|
|
459
459
|
yt_dlp/extractor/lbry.py,sha256=gC9jRRo8wSXc1-6somhW13brAtmWGlJ5_Q0NMhZpKwk,18078
|
|
460
460
|
yt_dlp/extractor/lci.py,sha256=_0XuoITIt_QFA-6eBNpDXZZfouwUWfcdHQlpAOuiLEs,2131
|
|
461
461
|
yt_dlp/extractor/lcp.py,sha256=edMA8L-eJZLquDvHcSY4oFWI0C8yGgjqW1tmhhLMJ5U,2279
|
|
@@ -902,7 +902,7 @@ yt_dlp/extractor/trueid.py,sha256=zGG-CuiKmOR91xhSxGihGsVZtJ7R0kcj0uct8xWfx6s,63
|
|
|
902
902
|
yt_dlp/extractor/trunews.py,sha256=T_9ovvOwqtPHjCb6kR5ZDxvEXRR3T7tcGvPsc9l-4eE,1444
|
|
903
903
|
yt_dlp/extractor/truth.py,sha256=zND7u4eWsBg8wZDIuxQiloZIOl5bwJv2y9B5eWOmugw,2790
|
|
904
904
|
yt_dlp/extractor/tube8.py,sha256=0CEsgUAnxqb70TkM4tBSH5TpII3rLem_HRUQS1dptPI,6248
|
|
905
|
-
yt_dlp/extractor/tubetugraz.py,sha256=
|
|
905
|
+
yt_dlp/extractor/tubetugraz.py,sha256=rEWNBA469DS-r8hXXmtk-pdRlvD_ZgZyZhlZgvgdTfI,11143
|
|
906
906
|
yt_dlp/extractor/tubitv.py,sha256=Fiko-DtWKetvD09SrsafLgCMsia0wubBWXhumq4PO1s,8599
|
|
907
907
|
yt_dlp/extractor/tumblr.py,sha256=wlLpSdyQCZ-URyDrEcPb4bCJj35CUJFRnY8sEGT-nBM,24113
|
|
908
908
|
yt_dlp/extractor/tunein.py,sha256=Db7maeI5BaLpPbtAlXRLKJCkOKnwg-HFy4MoW1f0Dro,12542
|
|
@@ -931,7 +931,7 @@ yt_dlp/extractor/tweakers.py,sha256=3B8ssCQGPLaaiPBb340aV6-3iEIpxOLqJjooG5_Au3k,
|
|
|
931
931
|
yt_dlp/extractor/twentymin.py,sha256=c3vIstexHUmthQP6R3Hl0DVyI70LfC4MWIb4_VxYhsY,3036
|
|
932
932
|
yt_dlp/extractor/twentythreevideo.py,sha256=bnnGCFO-WVnXTDrpgOKl8jot9nxmelPwR3vnqWyIaUQ,3241
|
|
933
933
|
yt_dlp/extractor/twitcasting.py,sha256=1L0h5kir4_HxCoMD18N-x5wvOJCKuX9Wj6p47uAzPBA,12990
|
|
934
|
-
yt_dlp/extractor/twitch.py,sha256=
|
|
934
|
+
yt_dlp/extractor/twitch.py,sha256=EJHC5LQvWdf2oBbb-h_WaitRev-YVeGmccfqvWPFXhk,47616
|
|
935
935
|
yt_dlp/extractor/twitter.py,sha256=om9bZOW7r-9v5Wqa9VIAsM8BUl8v0l6Jc9aNUChgjkg,82673
|
|
936
936
|
yt_dlp/extractor/txxx.py,sha256=lnYZFfSoZuR9A8gmfCUexZrifLU7JoGdZmiTs0o0Luw,17085
|
|
937
937
|
yt_dlp/extractor/udemy.py,sha256=hcSht3C1N_fnXHYFaIMzv843WeyToj7yMiepDK31sqI,19341
|
|
@@ -1116,13 +1116,13 @@ yt_dlp/utils/progress.py,sha256=t9kVvJ0oWuEqRzo9fdFbIhHUBtO_8mg348QwZ1faqLo,3261
|
|
|
1116
1116
|
yt_dlp/utils/traversal.py,sha256=64E3RcZ56iSX50RI_HbKdDNftkETMLBaEPX791_b7yQ,18265
|
|
1117
1117
|
yt_dlp/utils/jslib/__init__.py,sha256=CbdJiRA7Eh5PnjF2V4lDTcg0J0XjBMaaq0H4pCfq9Tk,87
|
|
1118
1118
|
yt_dlp/utils/jslib/devalue.py,sha256=7DCGK_zUN0ZeV5hwPT06zaRMUxX_hyUyFWqs79rxw24,5621
|
|
1119
|
-
yt_dlp-2025.11.
|
|
1120
|
-
yt_dlp-2025.11.
|
|
1121
|
-
yt_dlp-2025.11.
|
|
1122
|
-
yt_dlp-2025.11.
|
|
1123
|
-
yt_dlp-2025.11.
|
|
1124
|
-
yt_dlp-2025.11.
|
|
1125
|
-
yt_dlp-2025.11.
|
|
1126
|
-
yt_dlp-2025.11.
|
|
1127
|
-
yt_dlp-2025.11.
|
|
1128
|
-
yt_dlp-2025.11.
|
|
1119
|
+
yt_dlp-2025.11.12.data/data/share/bash-completion/completions/yt-dlp,sha256=b0pb9GLseKD27CjnLE6LlhVxhfmQjmyqV6r_CRbd6ko,5989
|
|
1120
|
+
yt_dlp-2025.11.12.data/data/share/doc/yt_dlp/README.txt,sha256=HlfIUV5eXIDl3zifSNk85dFWTwxmEWX8wC6mflaKLpU,164661
|
|
1121
|
+
yt_dlp-2025.11.12.data/data/share/fish/vendor_completions.d/yt-dlp.fish,sha256=1zS0p90dPrTaNex5s-4Pss_eIX2g-qVOF2vos85rxjI,51487
|
|
1122
|
+
yt_dlp-2025.11.12.data/data/share/man/man1/yt-dlp.1,sha256=QQovfAUiq_zuaygexuWSlCfZMufQJBPC10-m_ti1vh0,159124
|
|
1123
|
+
yt_dlp-2025.11.12.data/data/share/zsh/site-functions/_yt-dlp,sha256=pNhu8tT4ZKrksLRI2mXLqarzGGhnOlm_hkCBVhSxLzg,5985
|
|
1124
|
+
yt_dlp-2025.11.12.dist-info/METADATA,sha256=0Mj6zGRKjyvppzrYrirmRzyQWlGTS1nATxpKDYqcigI,180041
|
|
1125
|
+
yt_dlp-2025.11.12.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
|
|
1126
|
+
yt_dlp-2025.11.12.dist-info/entry_points.txt,sha256=vWfetvzYgZIwDfMW6BjCe0Cy4pmTZEXRNzxAkfYlRJA,103
|
|
1127
|
+
yt_dlp-2025.11.12.dist-info/licenses/LICENSE,sha256=fhLl30uuEsshWBuhV87SDhmGoFCN0Q0Oikq5pM-U6Fw,1211
|
|
1128
|
+
yt_dlp-2025.11.12.dist-info/RECORD,,
|
|
File without changes
|
{yt_dlp-2025.11.9.232846.dev0.data → yt_dlp-2025.11.12.data}/data/share/zsh/site-functions/_yt-dlp
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|