logo

oasis

Own branch of Oasis Linux (upstream: <https://git.sr.ht/~mcf/oasis/>) git clone https://anongit.hacktivis.me/git/oasis.git
commit: 7ce067ccc2811d5e36191b012ce337003a3481f2
parent c0783c3e639313e7a027fb754ff1c44c824d0ee9
Author: Michael Forney <mforney@mforney.org>
Date:   Sat, 18 Dec 2021 23:52:11 -0800

Add yt-dlp 2021.12.01

Diffstat:

Mpkg/gen.lua1+
Apkg/yt-dlp/.gitignore2++
Apkg/yt-dlp/gen.lua7+++++++
Apkg/yt-dlp/patch/0001-Disable-use-of-ctypes-and-dynamic-loading.patch350+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Apkg/yt-dlp/pylibs.txt932+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Apkg/yt-dlp/sha2561+
Apkg/yt-dlp/url1+
Apkg/yt-dlp/ver1+
Apkg/yt-dlp/yt-dlp6++++++
Msets.lua1+
10 files changed, 1302 insertions(+), 0 deletions(-)

diff --git a/pkg/gen.lua b/pkg/gen.lua @@ -135,5 +135,6 @@ subgen 'x509cert' subgen 'xkeyboard-config' subgen 'xz' subgen 'youtube-dl' +subgen 'yt-dlp' subgen 'zlib' subgen 'zstd' diff --git a/pkg/yt-dlp/.gitignore b/pkg/yt-dlp/.gitignore @@ -0,0 +1,2 @@ +/src +/yt-dlp.tar.gz diff --git a/pkg/yt-dlp/gen.lua b/pkg/yt-dlp/gen.lua @@ -0,0 +1,7 @@ +file('bin/yt-dlp', '755', '$dir/yt-dlp') +for f in iterlines('pylibs.txt') do + file('lib/python3.10/'..f, '644', '$srcdir/'..f) +end +man{'yt-dlp.1'} + +fetch 'curl' diff --git a/pkg/yt-dlp/patch/0001-Disable-use-of-ctypes-and-dynamic-loading.patch b/pkg/yt-dlp/patch/0001-Disable-use-of-ctypes-and-dynamic-loading.patch @@ -0,0 +1,350 @@ +From 52d1ea4b111432f7a8c3e14f06b4fc2431fe6a5b Mon Sep 17 00:00:00 2001 +From: Michael Forney <mforney@mforney.org> +Date: Mon, 4 Jul 2016 16:14:18 -0700 +Subject: [PATCH] Disable use of ctypes and dynamic loading + +--- + yt_dlp/compat.py | 8 --- + yt_dlp/cookies.py | 69 -------------------- + yt_dlp/utils.py | 161 +--------------------------------------------- + 3 files changed, 1 insertion(+), 237 deletions(-) + +diff --git a/yt_dlp/compat.py b/yt_dlp/compat.py +index 79c8e3494..28f3b065b 100644 +--- a/yt_dlp/compat.py ++++ b/yt_dlp/compat.py +@@ -2,7 +2,6 @@ + + import asyncio + import base64 +-import ctypes + import getpass + import html + import html.parser +@@ -34,12 +33,6 @@ class compat_HTMLParseError(Exception): + pass + + +-# compat_ctypes_WINFUNCTYPE = ctypes.WINFUNCTYPE +-# will not work since ctypes.WINFUNCTYPE does not exist in UNIX machines +-def compat_ctypes_WINFUNCTYPE(*args, **kwargs): +- return ctypes.WINFUNCTYPE(*args, **kwargs) +- +- + class _TreeBuilder(etree.TreeBuilder): + def doctype(self, name, pubid, system): + pass +@@ -249,7 +242,6 @@ __all__ = [ + 'compat_cookiejar_Cookie', + 'compat_cookies', + 'compat_cookies_SimpleCookie', +- 'compat_ctypes_WINFUNCTYPE', + 'compat_etree_Element', + 'compat_etree_fromstring', + 'compat_etree_register_namespace', +diff --git a/yt_dlp/cookies.py b/yt_dlp/cookies.py +index ec68a809d..0ea322074 100644 +--- a/yt_dlp/cookies.py ++++ b/yt_dlp/cookies.py +@@ -1,4 +1,3 @@ +-import ctypes + import json + import os + import shutil +@@ -311,8 +310,6 @@ def get_cookie_decryptor(browser_root, browser_keyring_name, logger): + return LinuxChromeCookieDecryptor(browser_keyring_name, logger) + elif sys.platform == 'darwin': + return MacChromeCookieDecryptor(browser_keyring_name, logger) +- elif sys.platform == 'win32': +- return WindowsChromeCookieDecryptor(browser_root, logger) + else: + raise NotImplementedError('Chrome cookie decryption is not supported ' + 'on this platform: {}'.format(sys.platform)) +@@ -379,40 +376,6 @@ class MacChromeCookieDecryptor(ChromeCookieDecryptor): + return encrypted_value + + +-class WindowsChromeCookieDecryptor(ChromeCookieDecryptor): +- def __init__(self, browser_root, logger): +- self._logger = logger +- self._v10_key = _get_windows_v10_key(browser_root, logger) +- +- def decrypt(self, encrypted_value): +- version = encrypted_value[:3] +- ciphertext = encrypted_value[3:] +- +- if version == b'v10': +- if self._v10_key is None: +- self._logger.warning('cannot decrypt v10 cookies: no key found', only_once=True) +- return None +- +- # https://chromium.googlesource.com/chromium/src/+/refs/heads/main/components/os_crypt/os_crypt_win.cc +- # kNonceLength +- nonce_length = 96 // 8 +- # boringssl +- # EVP_AEAD_AES_GCM_TAG_LEN +- authentication_tag_length = 16 +- +- raw_ciphertext = ciphertext +- nonce = raw_ciphertext[:nonce_length] +- ciphertext = raw_ciphertext[nonce_length:-authentication_tag_length] +- authentication_tag = raw_ciphertext[-authentication_tag_length:] +- +- return _decrypt_aes_gcm(ciphertext, self._v10_key, nonce, authentication_tag, self._logger) +- +- else: +- # any other prefix means the data is DPAPI encrypted +- # https://chromium.googlesource.com/chromium/src/+/refs/heads/main/components/os_crypt/os_crypt_win.cc +- return _decrypt_windows_dpapi(encrypted_value, self._logger).decode('utf-8') +- +- + def _extract_safari_cookies(profile, logger): + if profile is not None: + logger.error('safari does not support profiles') +@@ -663,38 +626,6 @@ def _decrypt_aes_gcm(ciphertext, key, nonce, authentication_tag, logger): + return None + + +-def _decrypt_windows_dpapi(ciphertext, logger): +- """ +- References: +- - https://docs.microsoft.com/en-us/windows/win32/api/dpapi/nf-dpapi-cryptunprotectdata +- """ +- from ctypes.wintypes import DWORD +- +- class DATA_BLOB(ctypes.Structure): +- _fields_ = [('cbData', DWORD), +- ('pbData', ctypes.POINTER(ctypes.c_char))] +- +- buffer = ctypes.create_string_buffer(ciphertext) +- blob_in = DATA_BLOB(ctypes.sizeof(buffer), buffer) +- blob_out = DATA_BLOB() +- ret = ctypes.windll.crypt32.CryptUnprotectData( +- ctypes.byref(blob_in), # pDataIn +- None, # ppszDataDescr: human readable description of pDataIn +- None, # pOptionalEntropy: salt? +- None, # pvReserved: must be NULL +- None, # pPromptStruct: information about prompts to display +- 0, # dwFlags +- ctypes.byref(blob_out) # pDataOut +- ) +- if not ret: +- logger.warning('failed to decrypt with DPAPI', only_once=True) +- return None +- +- result = ctypes.string_at(blob_out.pbData, blob_out.cbData) +- ctypes.windll.kernel32.LocalFree(blob_out.pbData) +- return result +- +- + def _config_home(): + return os.environ.get('XDG_CONFIG_HOME', os.path.expanduser('~/.config')) + +diff --git a/yt_dlp/utils.py b/yt_dlp/utils.py +index 81c95f3e9..34b2eab51 100644 +--- a/yt_dlp/utils.py ++++ b/yt_dlp/utils.py +@@ -9,7 +9,6 @@ import calendar + import codecs + import collections + import contextlib +-import ctypes + import datetime + import email.utils + import email.header +@@ -47,7 +46,6 @@ from .compat import ( + compat_basestring, + compat_chr, + compat_cookiejar, +- compat_ctypes_WINFUNCTYPE, + compat_etree_fromstring, + compat_expanduser, + compat_html_entities, +@@ -1857,90 +1855,11 @@ def get_windows_version(): + return None + + +-def _windows_write_string(s, out): +- """ Returns True if the string was written using special methods, +- False if it has yet to be written out.""" +- # Adapted from http://stackoverflow.com/a/3259271/35070 +- +- import ctypes +- import ctypes.wintypes +- +- WIN_OUTPUT_IDS = { +- 1: -11, +- 2: -12, +- } +- +- try: +- fileno = out.fileno() +- except AttributeError: +- # If the output stream doesn't have a fileno, it's virtual +- return False +- except io.UnsupportedOperation: +- # Some strange Windows pseudo files? +- return False +- if fileno not in WIN_OUTPUT_IDS: +- return False +- +- GetStdHandle = compat_ctypes_WINFUNCTYPE( +- ctypes.wintypes.HANDLE, ctypes.wintypes.DWORD)( +- ('GetStdHandle', ctypes.windll.kernel32)) +- h = GetStdHandle(WIN_OUTPUT_IDS[fileno]) +- +- WriteConsoleW = compat_ctypes_WINFUNCTYPE( +- ctypes.wintypes.BOOL, ctypes.wintypes.HANDLE, ctypes.wintypes.LPWSTR, +- ctypes.wintypes.DWORD, ctypes.POINTER(ctypes.wintypes.DWORD), +- ctypes.wintypes.LPVOID)(('WriteConsoleW', ctypes.windll.kernel32)) +- written = ctypes.wintypes.DWORD(0) +- +- GetFileType = compat_ctypes_WINFUNCTYPE(ctypes.wintypes.DWORD, ctypes.wintypes.DWORD)(('GetFileType', ctypes.windll.kernel32)) +- FILE_TYPE_CHAR = 0x0002 +- FILE_TYPE_REMOTE = 0x8000 +- GetConsoleMode = compat_ctypes_WINFUNCTYPE( +- ctypes.wintypes.BOOL, ctypes.wintypes.HANDLE, +- ctypes.POINTER(ctypes.wintypes.DWORD))( +- ('GetConsoleMode', ctypes.windll.kernel32)) +- INVALID_HANDLE_VALUE = ctypes.wintypes.DWORD(-1).value +- +- def not_a_console(handle): +- if handle == INVALID_HANDLE_VALUE or handle is None: +- return True +- return ((GetFileType(handle) & ~FILE_TYPE_REMOTE) != FILE_TYPE_CHAR +- or GetConsoleMode(handle, ctypes.byref(ctypes.wintypes.DWORD())) == 0) +- +- if not_a_console(h): +- return False +- +- def next_nonbmp_pos(s): +- try: +- return next(i for i, c in enumerate(s) if ord(c) > 0xffff) +- except StopIteration: +- return len(s) +- +- while s: +- count = min(next_nonbmp_pos(s), 1024) +- +- ret = WriteConsoleW( +- h, s, count if count else 2, ctypes.byref(written), None) +- if ret == 0: +- raise OSError('Failed to write string') +- if not count: # We just wrote a non-BMP character +- assert written.value == 2 +- s = s[1:] +- else: +- assert written.value > 0 +- s = s[written.value:] +- return True +- +- + def write_string(s, out=None, encoding=None): + if out is None: + out = sys.stderr + assert type(s) == compat_str + +- if sys.platform == 'win32' and encoding is None and hasattr(out, 'fileno'): +- if _windows_write_string(s, out): +- return +- + if ('b' in getattr(out, 'mode', '') + or sys.version_info[0] < 3): # Python 2 lies about mode of sys.stderr + byt = s.encode(encoding or preferredencoding(), 'ignore') +@@ -1969,62 +1888,6 @@ def intlist_to_bytes(xs): + return compat_struct_pack('%dB' % len(xs), *xs) + + +-# Cross-platform file locking +-if sys.platform == 'win32': +- import ctypes.wintypes +- import msvcrt +- +- class OVERLAPPED(ctypes.Structure): +- _fields_ = [ +- ('Internal', ctypes.wintypes.LPVOID), +- ('InternalHigh', ctypes.wintypes.LPVOID), +- ('Offset', ctypes.wintypes.DWORD), +- ('OffsetHigh', ctypes.wintypes.DWORD), +- ('hEvent', ctypes.wintypes.HANDLE), +- ] +- +- kernel32 = ctypes.windll.kernel32 +- LockFileEx = kernel32.LockFileEx +- LockFileEx.argtypes = [ +- ctypes.wintypes.HANDLE, # hFile +- ctypes.wintypes.DWORD, # dwFlags +- ctypes.wintypes.DWORD, # dwReserved +- ctypes.wintypes.DWORD, # nNumberOfBytesToLockLow +- ctypes.wintypes.DWORD, # nNumberOfBytesToLockHigh +- ctypes.POINTER(OVERLAPPED) # Overlapped +- ] +- LockFileEx.restype = ctypes.wintypes.BOOL +- UnlockFileEx = kernel32.UnlockFileEx +- UnlockFileEx.argtypes = [ +- ctypes.wintypes.HANDLE, # hFile +- ctypes.wintypes.DWORD, # dwReserved +- ctypes.wintypes.DWORD, # nNumberOfBytesToLockLow +- ctypes.wintypes.DWORD, # nNumberOfBytesToLockHigh +- ctypes.POINTER(OVERLAPPED) # Overlapped +- ] +- UnlockFileEx.restype = ctypes.wintypes.BOOL +- whole_low = 0xffffffff +- whole_high = 0x7fffffff +- +- def _lock_file(f, exclusive): +- overlapped = OVERLAPPED() +- overlapped.Offset = 0 +- overlapped.OffsetHigh = 0 +- overlapped.hEvent = 0 +- f._lock_file_overlapped_p = ctypes.pointer(overlapped) +- handle = msvcrt.get_osfhandle(f.fileno()) +- if not LockFileEx(handle, 0x2 if exclusive else 0x0, 0, +- whole_low, whole_high, f._lock_file_overlapped_p): +- raise OSError('Locking file failed: %r' % ctypes.FormatError()) +- +- def _unlock_file(f): +- assert f._lock_file_overlapped_p +- handle = msvcrt.get_osfhandle(f.fileno()) +- if not UnlockFileEx(handle, 0, +- whole_low, whole_high, f._lock_file_overlapped_p): +- raise OSError('Unlocking file failed: %r' % ctypes.FormatError()) +- +-else: + # Some platforms, such as Jython, is missing fcntl + try: + import fcntl +@@ -2287,29 +2150,7 @@ def fix_xml_ampersands(xml_str): + + + def setproctitle(title): +- assert isinstance(title, compat_str) +- +- # ctypes in Jython is not complete +- # http://bugs.jython.org/issue2148 +- if sys.platform.startswith('java'): +- return +- +- try: +- libc = ctypes.cdll.LoadLibrary('libc.so.6') +- except OSError: +- return +- except TypeError: +- # LoadLibrary in Windows Python 2.7.13 only expects +- # a bytestring, but since unicode_literals turns +- # every string into a unicode string, it fails. +- return +- title_bytes = title.encode('utf-8') +- buf = ctypes.create_string_buffer(len(title_bytes)) +- buf.value = title_bytes +- try: +- libc.prctl(15, buf, 0, 0, 0) +- except AttributeError: +- return # Strange libc, just skip this ++ return + + + def remove_start(s, start): +-- +2.34.0 + diff --git a/pkg/yt-dlp/pylibs.txt b/pkg/yt-dlp/pylibs.txt @@ -0,0 +1,932 @@ +# 2,<cd src && find yt_dlp -type f -name '*.py' | LC_COLLATE=C sort +yt_dlp/YoutubeDL.py +yt_dlp/__init__.py +yt_dlp/__main__.py +yt_dlp/aes.py +yt_dlp/cache.py +yt_dlp/compat.py +yt_dlp/cookies.py +yt_dlp/downloader/__init__.py +yt_dlp/downloader/common.py +yt_dlp/downloader/dash.py +yt_dlp/downloader/external.py +yt_dlp/downloader/f4m.py +yt_dlp/downloader/fragment.py +yt_dlp/downloader/hls.py +yt_dlp/downloader/http.py +yt_dlp/downloader/ism.py +yt_dlp/downloader/mhtml.py +yt_dlp/downloader/niconico.py +yt_dlp/downloader/rtmp.py +yt_dlp/downloader/rtsp.py +yt_dlp/downloader/websocket.py +yt_dlp/downloader/youtube_live_chat.py +yt_dlp/extractor/__init__.py +yt_dlp/extractor/abc.py +yt_dlp/extractor/abcnews.py +yt_dlp/extractor/abcotvs.py +yt_dlp/extractor/academicearth.py +yt_dlp/extractor/acast.py +yt_dlp/extractor/adn.py +yt_dlp/extractor/adobeconnect.py +yt_dlp/extractor/adobepass.py +yt_dlp/extractor/adobetv.py +yt_dlp/extractor/adultswim.py +yt_dlp/extractor/aenetworks.py +yt_dlp/extractor/afreecatv.py +yt_dlp/extractor/airmozilla.py +yt_dlp/extractor/aliexpress.py +yt_dlp/extractor/aljazeera.py +yt_dlp/extractor/allocine.py +yt_dlp/extractor/alphaporno.py +yt_dlp/extractor/alura.py +yt_dlp/extractor/amara.py +yt_dlp/extractor/amazon.py +yt_dlp/extractor/amcnetworks.py +yt_dlp/extractor/americastestkitchen.py +yt_dlp/extractor/amp.py +yt_dlp/extractor/animelab.py +yt_dlp/extractor/animeondemand.py +yt_dlp/extractor/anvato.py +yt_dlp/extractor/anvato_token_generator/__init__.py +yt_dlp/extractor/anvato_token_generator/common.py +yt_dlp/extractor/anvato_token_generator/nfl.py +yt_dlp/extractor/aol.py +yt_dlp/extractor/apa.py +yt_dlp/extractor/aparat.py +yt_dlp/extractor/appleconnect.py +yt_dlp/extractor/applepodcasts.py +yt_dlp/extractor/appletrailers.py +yt_dlp/extractor/archiveorg.py +yt_dlp/extractor/arcpublishing.py +yt_dlp/extractor/ard.py +yt_dlp/extractor/arkena.py +yt_dlp/extractor/arnes.py +yt_dlp/extractor/arte.py +yt_dlp/extractor/asiancrush.py +yt_dlp/extractor/atresplayer.py +yt_dlp/extractor/atttechchannel.py +yt_dlp/extractor/atvat.py +yt_dlp/extractor/audimedia.py +yt_dlp/extractor/audioboom.py +yt_dlp/extractor/audiomack.py +yt_dlp/extractor/audius.py +yt_dlp/extractor/awaan.py +yt_dlp/extractor/aws.py +yt_dlp/extractor/azmedien.py +yt_dlp/extractor/baidu.py +yt_dlp/extractor/bandaichannel.py +yt_dlp/extractor/bandcamp.py +yt_dlp/extractor/bannedvideo.py +yt_dlp/extractor/bbc.py +yt_dlp/extractor/beatport.py +yt_dlp/extractor/beeg.py +yt_dlp/extractor/behindkink.py +yt_dlp/extractor/bellmedia.py +yt_dlp/extractor/bet.py +yt_dlp/extractor/bfi.py +yt_dlp/extractor/bfmtv.py +yt_dlp/extractor/bibeltv.py +yt_dlp/extractor/bigflix.py +yt_dlp/extractor/bild.py +yt_dlp/extractor/bilibili.py +yt_dlp/extractor/biobiochiletv.py +yt_dlp/extractor/biqle.py +yt_dlp/extractor/bitchute.py +yt_dlp/extractor/bitwave.py +yt_dlp/extractor/blackboardcollaborate.py +yt_dlp/extractor/bleacherreport.py +yt_dlp/extractor/blinkx.py +yt_dlp/extractor/blogger.py +yt_dlp/extractor/bloomberg.py +yt_dlp/extractor/bokecc.py +yt_dlp/extractor/bongacams.py +yt_dlp/extractor/bostonglobe.py +yt_dlp/extractor/box.py +yt_dlp/extractor/bpb.py +yt_dlp/extractor/br.py +yt_dlp/extractor/bravotv.py +yt_dlp/extractor/breakcom.py +yt_dlp/extractor/breitbart.py +yt_dlp/extractor/brightcove.py +yt_dlp/extractor/businessinsider.py +yt_dlp/extractor/buzzfeed.py +yt_dlp/extractor/byutv.py +yt_dlp/extractor/c56.py +yt_dlp/extractor/cableav.py +yt_dlp/extractor/cam4.py +yt_dlp/extractor/camdemy.py +yt_dlp/extractor/cammodels.py +yt_dlp/extractor/camwithher.py +yt_dlp/extractor/canalalpha.py +yt_dlp/extractor/canalc2.py +yt_dlp/extractor/canalplus.py +yt_dlp/extractor/canvas.py +yt_dlp/extractor/carambatv.py +yt_dlp/extractor/cartoonnetwork.py +yt_dlp/extractor/cbc.py +yt_dlp/extractor/cbs.py +yt_dlp/extractor/cbsinteractive.py +yt_dlp/extractor/cbslocal.py +yt_dlp/extractor/cbsnews.py +yt_dlp/extractor/cbssports.py +yt_dlp/extractor/ccc.py +yt_dlp/extractor/ccma.py +yt_dlp/extractor/cctv.py +yt_dlp/extractor/cda.py +yt_dlp/extractor/ceskatelevize.py +yt_dlp/extractor/cgtn.py +yt_dlp/extractor/channel9.py +yt_dlp/extractor/charlierose.py +yt_dlp/extractor/chaturbate.py +yt_dlp/extractor/chilloutzone.py +yt_dlp/extractor/chingari.py +yt_dlp/extractor/chirbit.py +yt_dlp/extractor/cinchcast.py +yt_dlp/extractor/cinemax.py +yt_dlp/extractor/ciscolive.py +yt_dlp/extractor/ciscowebex.py +yt_dlp/extractor/cjsw.py +yt_dlp/extractor/cliphunter.py +yt_dlp/extractor/clippit.py +yt_dlp/extractor/cliprs.py +yt_dlp/extractor/clipsyndicate.py +yt_dlp/extractor/closertotruth.py +yt_dlp/extractor/cloudflarestream.py +yt_dlp/extractor/cloudy.py +yt_dlp/extractor/clubic.py +yt_dlp/extractor/clyp.py +yt_dlp/extractor/cmt.py +yt_dlp/extractor/cnbc.py +yt_dlp/extractor/cnn.py +yt_dlp/extractor/comedycentral.py +yt_dlp/extractor/common.py +yt_dlp/extractor/commonmistakes.py +yt_dlp/extractor/commonprotocols.py +yt_dlp/extractor/condenast.py +yt_dlp/extractor/contv.py +yt_dlp/extractor/corus.py +yt_dlp/extractor/coub.py +yt_dlp/extractor/cozytv.py +yt_dlp/extractor/cracked.py +yt_dlp/extractor/crackle.py +yt_dlp/extractor/crooksandliars.py +yt_dlp/extractor/crunchyroll.py +yt_dlp/extractor/cspan.py +yt_dlp/extractor/ctsnews.py +yt_dlp/extractor/ctv.py +yt_dlp/extractor/ctvnews.py +yt_dlp/extractor/cultureunplugged.py +yt_dlp/extractor/curiositystream.py +yt_dlp/extractor/cwtv.py +yt_dlp/extractor/dailymail.py +yt_dlp/extractor/dailymotion.py +yt_dlp/extractor/damtomo.py +yt_dlp/extractor/daum.py +yt_dlp/extractor/dbtv.py +yt_dlp/extractor/dctp.py +yt_dlp/extractor/deezer.py +yt_dlp/extractor/defense.py +yt_dlp/extractor/democracynow.py +yt_dlp/extractor/dfb.py +yt_dlp/extractor/dhm.py +yt_dlp/extractor/digg.py +yt_dlp/extractor/digiteka.py +yt_dlp/extractor/discovery.py +yt_dlp/extractor/discoverygo.py +yt_dlp/extractor/discoveryvr.py +yt_dlp/extractor/disney.py +yt_dlp/extractor/dispeak.py +yt_dlp/extractor/dlive.py +yt_dlp/extractor/doodstream.py +yt_dlp/extractor/dotsub.py +yt_dlp/extractor/douyutv.py +yt_dlp/extractor/dplay.py +yt_dlp/extractor/drbonanza.py +yt_dlp/extractor/dreisat.py +yt_dlp/extractor/dropbox.py +yt_dlp/extractor/drtuber.py +yt_dlp/extractor/drtv.py +yt_dlp/extractor/dtube.py +yt_dlp/extractor/duboku.py +yt_dlp/extractor/dumpert.py +yt_dlp/extractor/dvtv.py +yt_dlp/extractor/dw.py +yt_dlp/extractor/eagleplatform.py +yt_dlp/extractor/ebaumsworld.py +yt_dlp/extractor/echomsk.py +yt_dlp/extractor/egghead.py +yt_dlp/extractor/ehow.py +yt_dlp/extractor/eighttracks.py +yt_dlp/extractor/einthusan.py +yt_dlp/extractor/eitb.py +yt_dlp/extractor/ellentube.py +yt_dlp/extractor/elonet.py +yt_dlp/extractor/elpais.py +yt_dlp/extractor/embedly.py +yt_dlp/extractor/engadget.py +yt_dlp/extractor/epicon.py +yt_dlp/extractor/eporner.py +yt_dlp/extractor/eroprofile.py +yt_dlp/extractor/escapist.py +yt_dlp/extractor/espn.py +yt_dlp/extractor/esri.py +yt_dlp/extractor/europa.py +yt_dlp/extractor/euscreen.py +yt_dlp/extractor/everyonesmixtape.py +yt_dlp/extractor/expotv.py +yt_dlp/extractor/expressen.py +yt_dlp/extractor/extractors.py +yt_dlp/extractor/extremetube.py +yt_dlp/extractor/eyedotv.py +yt_dlp/extractor/facebook.py +yt_dlp/extractor/fancode.py +yt_dlp/extractor/faz.py +yt_dlp/extractor/fc2.py +yt_dlp/extractor/fczenit.py +yt_dlp/extractor/filmmodu.py +yt_dlp/extractor/filmon.py +yt_dlp/extractor/filmweb.py +yt_dlp/extractor/firsttv.py +yt_dlp/extractor/fivemin.py +yt_dlp/extractor/fivetv.py +yt_dlp/extractor/flickr.py +yt_dlp/extractor/folketinget.py +yt_dlp/extractor/footyroom.py +yt_dlp/extractor/formula1.py +yt_dlp/extractor/fourtube.py +yt_dlp/extractor/fox.py +yt_dlp/extractor/fox9.py +yt_dlp/extractor/foxgay.py +yt_dlp/extractor/foxnews.py +yt_dlp/extractor/foxsports.py +yt_dlp/extractor/franceculture.py +yt_dlp/extractor/franceinter.py +yt_dlp/extractor/francetv.py +yt_dlp/extractor/freesound.py +yt_dlp/extractor/freespeech.py +yt_dlp/extractor/freshlive.py +yt_dlp/extractor/frontendmasters.py +yt_dlp/extractor/fujitv.py +yt_dlp/extractor/funimation.py +yt_dlp/extractor/funk.py +yt_dlp/extractor/fusion.py +yt_dlp/extractor/fxnetworks.py +yt_dlp/extractor/gab.py +yt_dlp/extractor/gaia.py +yt_dlp/extractor/gameinformer.py +yt_dlp/extractor/gamespot.py +yt_dlp/extractor/gamestar.py +yt_dlp/extractor/gaskrank.py +yt_dlp/extractor/gazeta.py +yt_dlp/extractor/gdcvault.py +yt_dlp/extractor/gedidigital.py +yt_dlp/extractor/generic.py +yt_dlp/extractor/gettr.py +yt_dlp/extractor/gfycat.py +yt_dlp/extractor/giantbomb.py +yt_dlp/extractor/giga.py +yt_dlp/extractor/gigya.py +yt_dlp/extractor/glide.py +yt_dlp/extractor/globo.py +yt_dlp/extractor/go.py +yt_dlp/extractor/godtube.py +yt_dlp/extractor/golem.py +yt_dlp/extractor/googledrive.py +yt_dlp/extractor/googlepodcasts.py +yt_dlp/extractor/googlesearch.py +yt_dlp/extractor/gopro.py +yt_dlp/extractor/goshgay.py +yt_dlp/extractor/gotostage.py +yt_dlp/extractor/gputechconf.py +yt_dlp/extractor/gronkh.py +yt_dlp/extractor/groupon.py +yt_dlp/extractor/hbo.py +yt_dlp/extractor/hearthisat.py +yt_dlp/extractor/heise.py +yt_dlp/extractor/hellporno.py +yt_dlp/extractor/helsinki.py +yt_dlp/extractor/hentaistigma.py +yt_dlp/extractor/hgtv.py +yt_dlp/extractor/hidive.py +yt_dlp/extractor/historicfilms.py +yt_dlp/extractor/hitbox.py +yt_dlp/extractor/hitrecord.py +yt_dlp/extractor/hketv.py +yt_dlp/extractor/hornbunny.py +yt_dlp/extractor/hotnewhiphop.py +yt_dlp/extractor/hotstar.py +yt_dlp/extractor/howcast.py +yt_dlp/extractor/howstuffworks.py +yt_dlp/extractor/hrfensehen.py +yt_dlp/extractor/hrti.py +yt_dlp/extractor/huajiao.py +yt_dlp/extractor/huffpost.py +yt_dlp/extractor/hungama.py +yt_dlp/extractor/hypem.py +yt_dlp/extractor/ichinanalive.py +yt_dlp/extractor/ign.py +yt_dlp/extractor/iheart.py +yt_dlp/extractor/imdb.py +yt_dlp/extractor/imggaming.py +yt_dlp/extractor/imgur.py +yt_dlp/extractor/ina.py +yt_dlp/extractor/inc.py +yt_dlp/extractor/indavideo.py +yt_dlp/extractor/infoq.py +yt_dlp/extractor/instagram.py +yt_dlp/extractor/internazionale.py +yt_dlp/extractor/internetvideoarchive.py +yt_dlp/extractor/iprima.py +yt_dlp/extractor/iqiyi.py +yt_dlp/extractor/ir90tv.py +yt_dlp/extractor/itv.py +yt_dlp/extractor/ivi.py +yt_dlp/extractor/ivideon.py +yt_dlp/extractor/iwara.py +yt_dlp/extractor/izlesene.py +yt_dlp/extractor/jamendo.py +yt_dlp/extractor/jeuxvideo.py +yt_dlp/extractor/joj.py +yt_dlp/extractor/jove.py +yt_dlp/extractor/jwplatform.py +yt_dlp/extractor/kakao.py +yt_dlp/extractor/kaltura.py +yt_dlp/extractor/kanalplay.py +yt_dlp/extractor/kankan.py +yt_dlp/extractor/karaoketv.py +yt_dlp/extractor/karrierevideos.py +yt_dlp/extractor/keezmovies.py +yt_dlp/extractor/ketnet.py +yt_dlp/extractor/khanacademy.py +yt_dlp/extractor/kickstarter.py +yt_dlp/extractor/kinja.py +yt_dlp/extractor/kinopoisk.py +yt_dlp/extractor/konserthusetplay.py +yt_dlp/extractor/koo.py +yt_dlp/extractor/krasview.py +yt_dlp/extractor/ku6.py +yt_dlp/extractor/kusi.py +yt_dlp/extractor/kuwo.py +yt_dlp/extractor/la7.py +yt_dlp/extractor/laola1tv.py +yt_dlp/extractor/lazy_extractors.py +yt_dlp/extractor/lbry.py +yt_dlp/extractor/lci.py +yt_dlp/extractor/lcp.py +yt_dlp/extractor/lecture2go.py +yt_dlp/extractor/lecturio.py +yt_dlp/extractor/leeco.py +yt_dlp/extractor/lego.py +yt_dlp/extractor/lemonde.py +yt_dlp/extractor/lenta.py +yt_dlp/extractor/libraryofcongress.py +yt_dlp/extractor/libsyn.py +yt_dlp/extractor/lifenews.py +yt_dlp/extractor/limelight.py +yt_dlp/extractor/line.py +yt_dlp/extractor/linkedin.py +yt_dlp/extractor/linuxacademy.py +yt_dlp/extractor/litv.py +yt_dlp/extractor/livejournal.py +yt_dlp/extractor/livestream.py +yt_dlp/extractor/lnkgo.py +yt_dlp/extractor/localnews8.py +yt_dlp/extractor/lovehomeporn.py +yt_dlp/extractor/lrt.py +yt_dlp/extractor/lynda.py +yt_dlp/extractor/m6.py +yt_dlp/extractor/magentamusik360.py +yt_dlp/extractor/mailru.py +yt_dlp/extractor/malltv.py +yt_dlp/extractor/mangomolo.py +yt_dlp/extractor/manoto.py +yt_dlp/extractor/manyvids.py +yt_dlp/extractor/maoritv.py +yt_dlp/extractor/markiza.py +yt_dlp/extractor/massengeschmacktv.py +yt_dlp/extractor/matchtv.py +yt_dlp/extractor/mdr.py +yt_dlp/extractor/medaltv.py +yt_dlp/extractor/mediaite.py +yt_dlp/extractor/mediaklikk.py +yt_dlp/extractor/medialaan.py +yt_dlp/extractor/mediaset.py +yt_dlp/extractor/mediasite.py +yt_dlp/extractor/medici.py +yt_dlp/extractor/megaphone.py +yt_dlp/extractor/meipai.py +yt_dlp/extractor/melonvod.py +yt_dlp/extractor/meta.py +yt_dlp/extractor/metacafe.py +yt_dlp/extractor/metacritic.py +yt_dlp/extractor/mgoon.py +yt_dlp/extractor/mgtv.py +yt_dlp/extractor/miaopai.py +yt_dlp/extractor/microsoftstream.py +yt_dlp/extractor/microsoftvirtualacademy.py +yt_dlp/extractor/mildom.py +yt_dlp/extractor/minds.py +yt_dlp/extractor/ministrygrid.py +yt_dlp/extractor/minoto.py +yt_dlp/extractor/miomio.py +yt_dlp/extractor/mirrativ.py +yt_dlp/extractor/mit.py +yt_dlp/extractor/mitele.py +yt_dlp/extractor/mixch.py +yt_dlp/extractor/mixcloud.py +yt_dlp/extractor/mlb.py +yt_dlp/extractor/mlssoccer.py +yt_dlp/extractor/mnet.py +yt_dlp/extractor/moevideo.py +yt_dlp/extractor/mofosex.py +yt_dlp/extractor/mojvideo.py +yt_dlp/extractor/morningstar.py +yt_dlp/extractor/motherless.py +yt_dlp/extractor/motorsport.py +yt_dlp/extractor/movieclips.py +yt_dlp/extractor/moviezine.py +yt_dlp/extractor/movingimage.py +yt_dlp/extractor/msn.py +yt_dlp/extractor/mtv.py +yt_dlp/extractor/muenchentv.py +yt_dlp/extractor/musescore.py +yt_dlp/extractor/mwave.py +yt_dlp/extractor/mxplayer.py +yt_dlp/extractor/mychannels.py +yt_dlp/extractor/myspace.py +yt_dlp/extractor/myspass.py +yt_dlp/extractor/myvi.py +yt_dlp/extractor/myvideoge.py +yt_dlp/extractor/myvidster.py +yt_dlp/extractor/n1.py +yt_dlp/extractor/nationalgeographic.py +yt_dlp/extractor/naver.py +yt_dlp/extractor/nba.py +yt_dlp/extractor/nbc.py +yt_dlp/extractor/ndr.py +yt_dlp/extractor/ndtv.py +yt_dlp/extractor/nebula.py +yt_dlp/extractor/nerdcubed.py +yt_dlp/extractor/neteasemusic.py +yt_dlp/extractor/netzkino.py +yt_dlp/extractor/newgrounds.py +yt_dlp/extractor/newstube.py +yt_dlp/extractor/nextmedia.py +yt_dlp/extractor/nexx.py +yt_dlp/extractor/nfhsnetwork.py +yt_dlp/extractor/nfl.py +yt_dlp/extractor/nhk.py +yt_dlp/extractor/nhl.py +yt_dlp/extractor/nick.py +yt_dlp/extractor/niconico.py +yt_dlp/extractor/ninecninemedia.py +yt_dlp/extractor/ninegag.py +yt_dlp/extractor/ninenow.py +yt_dlp/extractor/nintendo.py +yt_dlp/extractor/nitter.py +yt_dlp/extractor/njpwworld.py +yt_dlp/extractor/nobelprize.py +yt_dlp/extractor/noco.py +yt_dlp/extractor/nonktube.py +yt_dlp/extractor/noovo.py +yt_dlp/extractor/normalboots.py +yt_dlp/extractor/nosvideo.py +yt_dlp/extractor/nova.py +yt_dlp/extractor/novaplay.py +yt_dlp/extractor/nowness.py +yt_dlp/extractor/noz.py +yt_dlp/extractor/npo.py +yt_dlp/extractor/npr.py +yt_dlp/extractor/nrk.py +yt_dlp/extractor/nrl.py +yt_dlp/extractor/ntvcojp.py +yt_dlp/extractor/ntvde.py +yt_dlp/extractor/ntvru.py +yt_dlp/extractor/nuevo.py +yt_dlp/extractor/nuvid.py +yt_dlp/extractor/nytimes.py +yt_dlp/extractor/nzherald.py +yt_dlp/extractor/nzz.py +yt_dlp/extractor/odatv.py +yt_dlp/extractor/odnoklassniki.py +yt_dlp/extractor/oktoberfesttv.py +yt_dlp/extractor/olympics.py +yt_dlp/extractor/on24.py +yt_dlp/extractor/once.py +yt_dlp/extractor/ondemandkorea.py +yt_dlp/extractor/onefootball.py +yt_dlp/extractor/onet.py +yt_dlp/extractor/onionstudios.py +yt_dlp/extractor/ooyala.py +yt_dlp/extractor/openload.py +yt_dlp/extractor/openrec.py +yt_dlp/extractor/ora.py +yt_dlp/extractor/orf.py +yt_dlp/extractor/outsidetv.py +yt_dlp/extractor/packtpub.py +yt_dlp/extractor/palcomp3.py +yt_dlp/extractor/pandoratv.py +yt_dlp/extractor/paramountplus.py +yt_dlp/extractor/parliamentliveuk.py +yt_dlp/extractor/parlview.py +yt_dlp/extractor/patreon.py +yt_dlp/extractor/pbs.py +yt_dlp/extractor/pearvideo.py +yt_dlp/extractor/peertube.py +yt_dlp/extractor/peertv.py +yt_dlp/extractor/peloton.py +yt_dlp/extractor/people.py +yt_dlp/extractor/performgroup.py +yt_dlp/extractor/periscope.py +yt_dlp/extractor/philharmoniedeparis.py +yt_dlp/extractor/phoenix.py +yt_dlp/extractor/photobucket.py +yt_dlp/extractor/picarto.py +yt_dlp/extractor/piksel.py +yt_dlp/extractor/pinkbike.py +yt_dlp/extractor/pinterest.py +yt_dlp/extractor/pladform.py +yt_dlp/extractor/planetmarathi.py +yt_dlp/extractor/platzi.py +yt_dlp/extractor/playfm.py +yt_dlp/extractor/playplustv.py +yt_dlp/extractor/plays.py +yt_dlp/extractor/playstuff.py +yt_dlp/extractor/playtvak.py +yt_dlp/extractor/playvid.py +yt_dlp/extractor/playwire.py +yt_dlp/extractor/pluralsight.py +yt_dlp/extractor/plutotv.py +yt_dlp/extractor/podomatic.py +yt_dlp/extractor/pokemon.py +yt_dlp/extractor/polsatgo.py +yt_dlp/extractor/polskieradio.py +yt_dlp/extractor/popcorntimes.py +yt_dlp/extractor/popcorntv.py +yt_dlp/extractor/porn91.py +yt_dlp/extractor/porncom.py +yt_dlp/extractor/pornflip.py +yt_dlp/extractor/pornhd.py +yt_dlp/extractor/pornhub.py +yt_dlp/extractor/pornotube.py +yt_dlp/extractor/pornovoisines.py +yt_dlp/extractor/pornoxo.py +yt_dlp/extractor/presstv.py +yt_dlp/extractor/projectveritas.py +yt_dlp/extractor/prosiebensat1.py +yt_dlp/extractor/puhutv.py +yt_dlp/extractor/puls4.py +yt_dlp/extractor/pyvideo.py +yt_dlp/extractor/qqmusic.py +yt_dlp/extractor/r7.py +yt_dlp/extractor/radiko.py +yt_dlp/extractor/radiobremen.py +yt_dlp/extractor/radiocanada.py +yt_dlp/extractor/radiode.py +yt_dlp/extractor/radiofrance.py +yt_dlp/extractor/radiojavan.py +yt_dlp/extractor/radiokapital.py +yt_dlp/extractor/radiozet.py +yt_dlp/extractor/radlive.py +yt_dlp/extractor/rai.py +yt_dlp/extractor/raywenderlich.py +yt_dlp/extractor/rbmaradio.py +yt_dlp/extractor/rcs.py +yt_dlp/extractor/rcti.py +yt_dlp/extractor/rds.py +yt_dlp/extractor/redbulltv.py +yt_dlp/extractor/reddit.py +yt_dlp/extractor/redgifs.py +yt_dlp/extractor/redtube.py +yt_dlp/extractor/regiotv.py +yt_dlp/extractor/rentv.py +yt_dlp/extractor/restudy.py +yt_dlp/extractor/reuters.py +yt_dlp/extractor/reverbnation.py +yt_dlp/extractor/rice.py +yt_dlp/extractor/rmcdecouverte.py +yt_dlp/extractor/ro220.py +yt_dlp/extractor/rockstargames.py +yt_dlp/extractor/roosterteeth.py +yt_dlp/extractor/rottentomatoes.py +yt_dlp/extractor/roxwel.py +yt_dlp/extractor/rozhlas.py +yt_dlp/extractor/rtbf.py +yt_dlp/extractor/rte.py +yt_dlp/extractor/rtl2.py +yt_dlp/extractor/rtlnl.py +yt_dlp/extractor/rtp.py +yt_dlp/extractor/rtrfm.py +yt_dlp/extractor/rts.py +yt_dlp/extractor/rtve.py +yt_dlp/extractor/rtvnh.py +yt_dlp/extractor/rtvs.py +yt_dlp/extractor/ruhd.py +yt_dlp/extractor/rumble.py +yt_dlp/extractor/rutube.py +yt_dlp/extractor/rutv.py +yt_dlp/extractor/ruutu.py +yt_dlp/extractor/ruv.py +yt_dlp/extractor/safari.py +yt_dlp/extractor/saitosan.py +yt_dlp/extractor/samplefocus.py +yt_dlp/extractor/sapo.py +yt_dlp/extractor/savefrom.py +yt_dlp/extractor/sbs.py +yt_dlp/extractor/screencast.py +yt_dlp/extractor/screencastomatic.py +yt_dlp/extractor/scrippsnetworks.py +yt_dlp/extractor/scte.py +yt_dlp/extractor/seeker.py +yt_dlp/extractor/senategov.py +yt_dlp/extractor/sendtonews.py +yt_dlp/extractor/servus.py +yt_dlp/extractor/sevenplus.py +yt_dlp/extractor/sexu.py +yt_dlp/extractor/seznamzpravy.py +yt_dlp/extractor/shahid.py +yt_dlp/extractor/shared.py +yt_dlp/extractor/shemaroome.py +yt_dlp/extractor/showroomlive.py +yt_dlp/extractor/simplecast.py +yt_dlp/extractor/sina.py +yt_dlp/extractor/sixplay.py +yt_dlp/extractor/sky.py +yt_dlp/extractor/skyit.py +yt_dlp/extractor/skylinewebcams.py +yt_dlp/extractor/skynewsarabia.py +yt_dlp/extractor/skynewsau.py +yt_dlp/extractor/slideshare.py +yt_dlp/extractor/slideslive.py +yt_dlp/extractor/slutload.py +yt_dlp/extractor/snotr.py +yt_dlp/extractor/sohu.py +yt_dlp/extractor/sonyliv.py +yt_dlp/extractor/soundcloud.py +yt_dlp/extractor/soundgasm.py +yt_dlp/extractor/southpark.py +yt_dlp/extractor/sovietscloset.py +yt_dlp/extractor/spankbang.py +yt_dlp/extractor/spankwire.py +yt_dlp/extractor/spiegel.py +yt_dlp/extractor/spiegeltv.py +yt_dlp/extractor/spike.py +yt_dlp/extractor/sport5.py +yt_dlp/extractor/sportbox.py +yt_dlp/extractor/sportdeutschland.py +yt_dlp/extractor/spotify.py +yt_dlp/extractor/spreaker.py +yt_dlp/extractor/springboardplatform.py +yt_dlp/extractor/sprout.py +yt_dlp/extractor/srgssr.py +yt_dlp/extractor/srmediathek.py +yt_dlp/extractor/stanfordoc.py +yt_dlp/extractor/startv.py +yt_dlp/extractor/steam.py +yt_dlp/extractor/stitcher.py +yt_dlp/extractor/storyfire.py +yt_dlp/extractor/streamable.py +yt_dlp/extractor/streamanity.py +yt_dlp/extractor/streamcloud.py +yt_dlp/extractor/streamcz.py +yt_dlp/extractor/streamff.py +yt_dlp/extractor/streetvoice.py +yt_dlp/extractor/stretchinternet.py +yt_dlp/extractor/stripchat.py +yt_dlp/extractor/stv.py +yt_dlp/extractor/sunporno.py +yt_dlp/extractor/sverigesradio.py +yt_dlp/extractor/svt.py +yt_dlp/extractor/swrmediathek.py +yt_dlp/extractor/syfy.py +yt_dlp/extractor/sztvhu.py +yt_dlp/extractor/tagesschau.py +yt_dlp/extractor/tass.py +yt_dlp/extractor/tastytrade.py +yt_dlp/extractor/tbs.py +yt_dlp/extractor/tdslifeway.py +yt_dlp/extractor/teachable.py +yt_dlp/extractor/teachertube.py +yt_dlp/extractor/teachingchannel.py +yt_dlp/extractor/teamcoco.py +yt_dlp/extractor/teamtreehouse.py +yt_dlp/extractor/techtalks.py +yt_dlp/extractor/ted.py +yt_dlp/extractor/tele13.py +yt_dlp/extractor/tele5.py +yt_dlp/extractor/telebruxelles.py +yt_dlp/extractor/telecinco.py +yt_dlp/extractor/telegraaf.py +yt_dlp/extractor/telemb.py +yt_dlp/extractor/telemundo.py +yt_dlp/extractor/telequebec.py +yt_dlp/extractor/teletask.py +yt_dlp/extractor/telewebion.py +yt_dlp/extractor/tennistv.py +yt_dlp/extractor/tenplay.py +yt_dlp/extractor/testurl.py +yt_dlp/extractor/tf1.py +yt_dlp/extractor/tfo.py +yt_dlp/extractor/theintercept.py +yt_dlp/extractor/theplatform.py +yt_dlp/extractor/thescene.py +yt_dlp/extractor/thestar.py +yt_dlp/extractor/thesun.py +yt_dlp/extractor/theta.py +yt_dlp/extractor/theweatherchannel.py +yt_dlp/extractor/thisamericanlife.py +yt_dlp/extractor/thisav.py +yt_dlp/extractor/thisoldhouse.py +yt_dlp/extractor/threeqsdn.py +yt_dlp/extractor/threespeak.py +yt_dlp/extractor/tiktok.py +yt_dlp/extractor/tinypic.py +yt_dlp/extractor/tmz.py +yt_dlp/extractor/tnaflix.py +yt_dlp/extractor/toggle.py +yt_dlp/extractor/tokentube.py +yt_dlp/extractor/tonline.py +yt_dlp/extractor/toongoggles.py +yt_dlp/extractor/toutv.py +yt_dlp/extractor/toypics.py +yt_dlp/extractor/traileraddict.py +yt_dlp/extractor/trilulilu.py +yt_dlp/extractor/trovo.py +yt_dlp/extractor/trunews.py +yt_dlp/extractor/trutv.py +yt_dlp/extractor/tube8.py +yt_dlp/extractor/tubitv.py +yt_dlp/extractor/tudou.py +yt_dlp/extractor/tumblr.py +yt_dlp/extractor/tunein.py +yt_dlp/extractor/tunepk.py +yt_dlp/extractor/turbo.py +yt_dlp/extractor/turner.py +yt_dlp/extractor/tv2.py +yt_dlp/extractor/tv2dk.py +yt_dlp/extractor/tv2hu.py +yt_dlp/extractor/tv4.py +yt_dlp/extractor/tv5mondeplus.py +yt_dlp/extractor/tv5unis.py +yt_dlp/extractor/tva.py +yt_dlp/extractor/tvanouvelles.py +yt_dlp/extractor/tvc.py +yt_dlp/extractor/tver.py +yt_dlp/extractor/tvigle.py +yt_dlp/extractor/tvland.py +yt_dlp/extractor/tvn24.py +yt_dlp/extractor/tvnet.py +yt_dlp/extractor/tvnoe.py +yt_dlp/extractor/tvnow.py +yt_dlp/extractor/tvp.py +yt_dlp/extractor/tvplay.py +yt_dlp/extractor/tvplayer.py +yt_dlp/extractor/tweakers.py +yt_dlp/extractor/twentyfourvideo.py +yt_dlp/extractor/twentymin.py +yt_dlp/extractor/twentythreevideo.py +yt_dlp/extractor/twitcasting.py +yt_dlp/extractor/twitch.py +yt_dlp/extractor/twitter.py +yt_dlp/extractor/udemy.py +yt_dlp/extractor/udn.py +yt_dlp/extractor/ufctv.py +yt_dlp/extractor/ukcolumn.py +yt_dlp/extractor/uktvplay.py +yt_dlp/extractor/umg.py +yt_dlp/extractor/unistra.py +yt_dlp/extractor/unity.py +yt_dlp/extractor/uol.py +yt_dlp/extractor/uplynk.py +yt_dlp/extractor/urort.py +yt_dlp/extractor/urplay.py +yt_dlp/extractor/usanetwork.py +yt_dlp/extractor/usatoday.py +yt_dlp/extractor/ustream.py +yt_dlp/extractor/ustudio.py +yt_dlp/extractor/utreon.py +yt_dlp/extractor/varzesh3.py +yt_dlp/extractor/vbox7.py +yt_dlp/extractor/veehd.py +yt_dlp/extractor/veo.py +yt_dlp/extractor/veoh.py +yt_dlp/extractor/vesti.py +yt_dlp/extractor/vevo.py +yt_dlp/extractor/vgtv.py +yt_dlp/extractor/vh1.py +yt_dlp/extractor/vice.py +yt_dlp/extractor/vidbit.py +yt_dlp/extractor/viddler.py +yt_dlp/extractor/videa.py +yt_dlp/extractor/videodetective.py +yt_dlp/extractor/videofyme.py +yt_dlp/extractor/videomore.py +yt_dlp/extractor/videopress.py +yt_dlp/extractor/vidio.py +yt_dlp/extractor/vidlii.py +yt_dlp/extractor/vidzi.py +yt_dlp/extractor/vier.py +yt_dlp/extractor/viewlift.py +yt_dlp/extractor/viidea.py +yt_dlp/extractor/viki.py +yt_dlp/extractor/vimeo.py +yt_dlp/extractor/vimple.py +yt_dlp/extractor/vine.py +yt_dlp/extractor/viqeo.py +yt_dlp/extractor/viu.py +yt_dlp/extractor/vk.py +yt_dlp/extractor/vlive.py +yt_dlp/extractor/vodlocker.py +yt_dlp/extractor/vodpl.py +yt_dlp/extractor/vodplatform.py +yt_dlp/extractor/voicerepublic.py +yt_dlp/extractor/voicy.py +yt_dlp/extractor/voot.py +yt_dlp/extractor/voxmedia.py +yt_dlp/extractor/vrak.py +yt_dlp/extractor/vrt.py +yt_dlp/extractor/vrv.py +yt_dlp/extractor/vshare.py +yt_dlp/extractor/vtm.py +yt_dlp/extractor/vube.py +yt_dlp/extractor/vuclip.py +yt_dlp/extractor/vupload.py +yt_dlp/extractor/vvvvid.py +yt_dlp/extractor/vyborymos.py +yt_dlp/extractor/vzaar.py +yt_dlp/extractor/wakanim.py +yt_dlp/extractor/walla.py +yt_dlp/extractor/washingtonpost.py +yt_dlp/extractor/wat.py +yt_dlp/extractor/watchbox.py +yt_dlp/extractor/watchindianporn.py +yt_dlp/extractor/wdr.py +yt_dlp/extractor/webcaster.py +yt_dlp/extractor/webofstories.py +yt_dlp/extractor/weibo.py +yt_dlp/extractor/weiqitv.py +yt_dlp/extractor/whowatch.py +yt_dlp/extractor/willow.py +yt_dlp/extractor/wimtv.py +yt_dlp/extractor/wistia.py +yt_dlp/extractor/worldstarhiphop.py +yt_dlp/extractor/wppilot.py +yt_dlp/extractor/wsj.py +yt_dlp/extractor/wwe.py +yt_dlp/extractor/xbef.py +yt_dlp/extractor/xboxclips.py +yt_dlp/extractor/xfileshare.py +yt_dlp/extractor/xhamster.py +yt_dlp/extractor/xiami.py +yt_dlp/extractor/ximalaya.py +yt_dlp/extractor/xminus.py +yt_dlp/extractor/xnxx.py +yt_dlp/extractor/xstream.py +yt_dlp/extractor/xtube.py +yt_dlp/extractor/xuite.py +yt_dlp/extractor/xvideos.py +yt_dlp/extractor/xxxymovies.py +yt_dlp/extractor/yahoo.py +yt_dlp/extractor/yandexdisk.py +yt_dlp/extractor/yandexmusic.py +yt_dlp/extractor/yandexvideo.py +yt_dlp/extractor/yapfiles.py +yt_dlp/extractor/yesjapan.py +yt_dlp/extractor/yinyuetai.py +yt_dlp/extractor/ynet.py +yt_dlp/extractor/youjizz.py +yt_dlp/extractor/youku.py +yt_dlp/extractor/younow.py +yt_dlp/extractor/youporn.py +yt_dlp/extractor/yourporn.py +yt_dlp/extractor/yourupload.py +yt_dlp/extractor/youtube.py +yt_dlp/extractor/zapiks.py +yt_dlp/extractor/zaq1.py +yt_dlp/extractor/zattoo.py +yt_dlp/extractor/zdf.py +yt_dlp/extractor/zee5.py +yt_dlp/extractor/zhihu.py +yt_dlp/extractor/zingmp3.py +yt_dlp/extractor/zoom.py +yt_dlp/extractor/zype.py +yt_dlp/jsinterp.py +yt_dlp/minicurses.py +yt_dlp/options.py +yt_dlp/postprocessor/__init__.py +yt_dlp/postprocessor/common.py +yt_dlp/postprocessor/embedthumbnail.py +yt_dlp/postprocessor/exec.py +yt_dlp/postprocessor/ffmpeg.py +yt_dlp/postprocessor/metadataparser.py +yt_dlp/postprocessor/modify_chapters.py +yt_dlp/postprocessor/movefilesafterdownload.py +yt_dlp/postprocessor/sponskrub.py +yt_dlp/postprocessor/sponsorblock.py +yt_dlp/postprocessor/xattrpp.py +yt_dlp/socks.py +yt_dlp/update.py +yt_dlp/utils.py +yt_dlp/version.py +yt_dlp/webvtt.py diff --git a/pkg/yt-dlp/sha256 b/pkg/yt-dlp/sha256 @@ -0,0 +1 @@ +bf0cc22d17ffbe59c0d0378026ff135a996b86c546ec9713d838f952dea61e0f yt-dlp.tar.gz diff --git a/pkg/yt-dlp/url b/pkg/yt-dlp/url @@ -0,0 +1 @@ +url = "https://github.com/yt-dlp/yt-dlp/releases/download/2021.12.01/yt-dlp.tar.gz" diff --git a/pkg/yt-dlp/ver b/pkg/yt-dlp/ver @@ -0,0 +1 @@ +2021.12.01 r0 diff --git a/pkg/yt-dlp/yt-dlp b/pkg/yt-dlp/yt-dlp @@ -0,0 +1,6 @@ +#!/bin/python + +import yt_dlp + +if __name__ == '__main__': + yt_dlp.main() diff --git a/sets.lua b/sets.lua @@ -62,6 +62,7 @@ return { 'mpv', 'tinyalsa', 'youtube-dl', + 'yt-dlp', }, net={ 'acme-client',