mirror of
https://github.com/yt-dlp/yt-dlp.git
synced 2026-04-08 18:03:43 +00:00
Compare commits
81 Commits
2026.02.04
...
master
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
a4acc42232 | ||
|
|
8001ff4349 | ||
|
|
9f0fc9a633 | ||
|
|
40ffb79d49 | ||
|
|
88c8a68eb5 | ||
|
|
5f6a214616 | ||
|
|
565dcfec4e | ||
|
|
04b2261cbf | ||
|
|
f14d2f2d54 | ||
|
|
fe5e67c054 | ||
|
|
0f45ecc920 | ||
|
|
2d7b278666 | ||
|
|
a5aae18945 | ||
|
|
fcccbc6849 | ||
|
|
cdc465a346 | ||
|
|
87eaf886f5 | ||
|
|
f01e1a1ced | ||
|
|
7fd74d1009 | ||
|
|
04d6974f50 | ||
|
|
18656b2f2a | ||
|
|
1b6ec8fc25 | ||
|
|
7fab4c2b23 | ||
|
|
66c4947e9c | ||
|
|
4fc768b7f7 | ||
|
|
e68afb2827 | ||
|
|
990fdf36dd | ||
|
|
92f1d99dbe | ||
|
|
db62e438a1 | ||
|
|
3e36cf9cdb | ||
|
|
ae025da023 | ||
|
|
48a61d0f38 | ||
|
|
f2bd3202c0 | ||
|
|
7e145ac1ca | ||
|
|
ff459e5fc0 | ||
|
|
b8058cdf37 | ||
|
|
2ecc4c3bc3 | ||
|
|
d3165e83ff | ||
|
|
bf4dfffe01 | ||
|
|
6f796a2bff | ||
|
|
e3118604aa | ||
|
|
338dbebdb8 | ||
|
|
e2a9cc7d13 | ||
|
|
646bb31f39 | ||
|
|
1fbbe29b99 | ||
|
|
c105461647 | ||
|
|
1d1358d09f | ||
|
|
1fe0bf23aa | ||
|
|
f05e1cd1f1 | ||
|
|
46d5b6f2b7 | ||
|
|
166356d1a1 | ||
|
|
2485653859 | ||
|
|
f532a91cef | ||
|
|
81bdea03f3 | ||
|
|
e74076141d | ||
|
|
97f03660f5 | ||
|
|
772559e3db | ||
|
|
c7945800e4 | ||
|
|
e2444584a3 | ||
|
|
acfc00a955 | ||
|
|
224fe478b0 | ||
|
|
77221098fc | ||
|
|
319a2bda83 | ||
|
|
2204cee6d8 | ||
|
|
071ad7dfa0 | ||
|
|
0d8898c3f4 | ||
|
|
d108ca10b9 | ||
|
|
c9c8651975 | ||
|
|
62574f5763 | ||
|
|
abade83f8d | ||
|
|
43229d1d5f | ||
|
|
8d6e0b29bf | ||
|
|
1ea7329cc9 | ||
|
|
a13f281012 | ||
|
|
02ce3efbfe | ||
|
|
1a9c4b8238 | ||
|
|
637ae202ac | ||
|
|
23c059a455 | ||
|
|
6f38df31b4 | ||
|
|
442c90da3e | ||
|
|
133cb959be | ||
|
|
c7c45f5289 |
1
.github/actionlint.yml
vendored
1
.github/actionlint.yml
vendored
@ -1,5 +1,4 @@
|
|||||||
config-variables:
|
config-variables:
|
||||||
- PUSH_VERSION_COMMIT
|
|
||||||
- UPDATE_TO_VERIFICATION
|
- UPDATE_TO_VERIFICATION
|
||||||
- PYPI_PROJECT
|
- PYPI_PROJECT
|
||||||
- PYPI_SUFFIX
|
- PYPI_SUFFIX
|
||||||
|
|||||||
124
.github/workflows/build.yml
vendored
124
.github/workflows/build.yml
vendored
@ -231,7 +231,7 @@ jobs:
|
|||||||
[[ "${version}" != "${downgraded_version}" ]]
|
[[ "${version}" != "${downgraded_version}" ]]
|
||||||
|
|
||||||
- name: Upload artifacts
|
- name: Upload artifacts
|
||||||
uses: actions/upload-artifact@b7c566a772e6b6bfb58ed0dc250532a479d7789f # v6.0.0
|
uses: actions/upload-artifact@bbbca2ddaa5d8feaa63e36b76fdaad77386f024f # v7.0.0
|
||||||
with:
|
with:
|
||||||
name: build-bin-${{ github.job }}
|
name: build-bin-${{ github.job }}
|
||||||
path: |
|
path: |
|
||||||
@ -267,7 +267,7 @@ jobs:
|
|||||||
|
|
||||||
- name: Set up QEMU
|
- name: Set up QEMU
|
||||||
if: matrix.qemu_platform
|
if: matrix.qemu_platform
|
||||||
uses: docker/setup-qemu-action@c7c53464625b32c7a7e944ae62b3e17d2b600130 # v3.7.0
|
uses: docker/setup-qemu-action@ce360397dd3f832beb865e1373c09c0e9f86d70a # v4.0.0
|
||||||
with:
|
with:
|
||||||
image: tonistiigi/binfmt:qemu-v10.0.4-56@sha256:30cc9a4d03765acac9be2ed0afc23af1ad018aed2c28ea4be8c2eb9afe03fbd1
|
image: tonistiigi/binfmt:qemu-v10.0.4-56@sha256:30cc9a4d03765acac9be2ed0afc23af1ad018aed2c28ea4be8c2eb9afe03fbd1
|
||||||
cache-image: false
|
cache-image: false
|
||||||
@ -277,7 +277,6 @@ jobs:
|
|||||||
env:
|
env:
|
||||||
SERVICE: ${{ matrix.os }}_${{ matrix.arch }}
|
SERVICE: ${{ matrix.os }}_${{ matrix.arch }}
|
||||||
run: |
|
run: |
|
||||||
mkdir -p ./venv
|
|
||||||
mkdir -p ./dist
|
mkdir -p ./dist
|
||||||
pushd bundle/docker
|
pushd bundle/docker
|
||||||
docker compose up --build --exit-code-from "${SERVICE}" "${SERVICE}"
|
docker compose up --build --exit-code-from "${SERVICE}" "${SERVICE}"
|
||||||
@ -294,7 +293,7 @@ jobs:
|
|||||||
docker compose up --build --exit-code-from "${SERVICE}" "${SERVICE}"
|
docker compose up --build --exit-code-from "${SERVICE}" "${SERVICE}"
|
||||||
|
|
||||||
- name: Upload artifacts
|
- name: Upload artifacts
|
||||||
uses: actions/upload-artifact@b7c566a772e6b6bfb58ed0dc250532a479d7789f # v6.0.0
|
uses: actions/upload-artifact@bbbca2ddaa5d8feaa63e36b76fdaad77386f024f # v7.0.0
|
||||||
with:
|
with:
|
||||||
name: build-bin-${{ matrix.os }}_${{ matrix.arch }}
|
name: build-bin-${{ matrix.os }}_${{ matrix.arch }}
|
||||||
path: |
|
path: |
|
||||||
@ -328,39 +327,34 @@ jobs:
|
|||||||
brew uninstall --ignore-dependencies python3
|
brew uninstall --ignore-dependencies python3
|
||||||
python3 -m venv ~/yt-dlp-build-venv
|
python3 -m venv ~/yt-dlp-build-venv
|
||||||
source ~/yt-dlp-build-venv/bin/activate
|
source ~/yt-dlp-build-venv/bin/activate
|
||||||
python3 devscripts/install_deps.py --omit-default --include-extra build
|
python3 -m pip install -U --require-hashes -r "bundle/requirements/requirements-pip.txt"
|
||||||
python3 devscripts/install_deps.py --print --include-extra pyinstaller > requirements.txt
|
rm -rf build
|
||||||
# We need to ignore wheels otherwise we break universal2 builds
|
# Only directly install wheels for "macosx_10_15_universal2" and "any" platforms
|
||||||
python3 -m pip install -U --no-binary :all: -r requirements.txt
|
mkdir -p build/wheels
|
||||||
# We need to fuse our own universal2 wheels for curl_cffi
|
python3 -m pip download \
|
||||||
python3 -m pip install -U 'delocate==0.11.0'
|
--only-binary=:all: \
|
||||||
mkdir curl_cffi_whls curl_cffi_universal2
|
--platform=macosx_10_15_universal2 \
|
||||||
python3 devscripts/install_deps.py --print --omit-default --include-extra build-curl-cffi > requirements.txt
|
--platform=any \
|
||||||
|
-d build/wheels \
|
||||||
|
--require-hashes \
|
||||||
|
-r "bundle/requirements/requirements-macos.txt"
|
||||||
|
python3 -m pip install --force-reinstall --no-deps -U build/wheels/*.whl
|
||||||
|
rm -rf build/wheels/*
|
||||||
|
# We need to fuse our own universal2 wheels for curl_cffi and cffi
|
||||||
|
mkdir -p build/universal2
|
||||||
for platform in "macosx_11_0_arm64" "macosx_11_0_x86_64"; do
|
for platform in "macosx_11_0_arm64" "macosx_11_0_x86_64"; do
|
||||||
python3 -m pip download \
|
python3 -m pip download \
|
||||||
|
--no-deps \
|
||||||
--only-binary=:all: \
|
--only-binary=:all: \
|
||||||
--platform "${platform}" \
|
--platform "${platform}" \
|
||||||
-d curl_cffi_whls \
|
-d build/wheels \
|
||||||
-r requirements.txt
|
--require-hashes \
|
||||||
|
-r "bundle/requirements/requirements-macos-curl_cffi.txt"
|
||||||
done
|
done
|
||||||
( # Overwrite x86_64-only libs with fat/universal2 libs or else Pyinstaller will do the opposite
|
python3 -m delocate.cmd.delocate_merge build/wheels/curl_cffi-*.whl -w build/universal2
|
||||||
# See https://github.com/yt-dlp/yt-dlp/pull/10069
|
python3 -m delocate.cmd.delocate_merge build/wheels/cffi-*.whl -w build/universal2
|
||||||
cd curl_cffi_whls
|
python3 -m pip install --force-reinstall --no-deps -U build/universal2/{curl_,}cffi-*.whl
|
||||||
mkdir -p curl_cffi/.dylibs
|
rm -rf build
|
||||||
python_libdir=$(python3 -c 'import sys; from pathlib import Path; print(Path(sys.path[1]).parent)')
|
|
||||||
for dylib in lib{ssl,crypto}.3.dylib; do
|
|
||||||
cp "${python_libdir}/${dylib}" "curl_cffi/.dylibs/${dylib}"
|
|
||||||
for wheel in curl_cffi*macos*x86_64.whl; do
|
|
||||||
zip "${wheel}" "curl_cffi/.dylibs/${dylib}"
|
|
||||||
done
|
|
||||||
done
|
|
||||||
)
|
|
||||||
python3 -m delocate.cmd.delocate_fuse curl_cffi_whls/curl_cffi*.whl -w curl_cffi_universal2
|
|
||||||
python3 -m delocate.cmd.delocate_fuse curl_cffi_whls/cffi*.whl -w curl_cffi_universal2
|
|
||||||
for wheel in curl_cffi_universal2/*cffi*.whl; do
|
|
||||||
mv -n -- "${wheel}" "${wheel/x86_64/universal2}"
|
|
||||||
done
|
|
||||||
python3 -m pip install --force-reinstall -U curl_cffi_universal2/*cffi*.whl
|
|
||||||
|
|
||||||
- name: Prepare
|
- name: Prepare
|
||||||
run: |
|
run: |
|
||||||
@ -384,7 +378,7 @@ jobs:
|
|||||||
[[ "$version" != "$downgraded_version" ]]
|
[[ "$version" != "$downgraded_version" ]]
|
||||||
|
|
||||||
- name: Upload artifacts
|
- name: Upload artifacts
|
||||||
uses: actions/upload-artifact@b7c566a772e6b6bfb58ed0dc250532a479d7789f # v6.0.0
|
uses: actions/upload-artifact@bbbca2ddaa5d8feaa63e36b76fdaad77386f024f # v7.0.0
|
||||||
with:
|
with:
|
||||||
name: build-bin-${{ github.job }}
|
name: build-bin-${{ github.job }}
|
||||||
path: |
|
path: |
|
||||||
@ -392,6 +386,32 @@ jobs:
|
|||||||
dist/yt-dlp_macos.zip
|
dist/yt-dlp_macos.zip
|
||||||
compression-level: 0
|
compression-level: 0
|
||||||
|
|
||||||
|
macos_verify:
|
||||||
|
name: Verify macos x86_64
|
||||||
|
needs: [macos]
|
||||||
|
if: inputs.macos && vars.UPDATE_TO_VERIFICATION
|
||||||
|
permissions:
|
||||||
|
contents: read
|
||||||
|
runs-on: macos-15-intel
|
||||||
|
env:
|
||||||
|
UPDATE_TO: yt-dlp/yt-dlp@2025.09.05
|
||||||
|
|
||||||
|
steps:
|
||||||
|
- name: Download artifacts
|
||||||
|
uses: actions/download-artifact@3e5f45b2cfb9172054b4087a40e8e0b5a5461e7c # v8.0.1
|
||||||
|
with:
|
||||||
|
path: dist
|
||||||
|
pattern: build-bin-macos
|
||||||
|
|
||||||
|
- name: Verify --update-to on x86_64 architecture
|
||||||
|
run: |
|
||||||
|
chmod +x ./dist/yt-dlp_macos
|
||||||
|
cp ./dist/yt-dlp_macos ./dist/yt-dlp_macos_downgraded
|
||||||
|
version="$(./dist/yt-dlp_macos --version)"
|
||||||
|
./dist/yt-dlp_macos_downgraded -v --update-to "${UPDATE_TO}"
|
||||||
|
downgraded_version="$(./dist/yt-dlp_macos_downgraded --version)"
|
||||||
|
[[ "$version" != "$downgraded_version" ]]
|
||||||
|
|
||||||
windows:
|
windows:
|
||||||
name: windows (${{ matrix.arch }})
|
name: windows (${{ matrix.arch }})
|
||||||
needs: [process]
|
needs: [process]
|
||||||
@ -406,33 +426,18 @@ jobs:
|
|||||||
- arch: 'x64'
|
- arch: 'x64'
|
||||||
runner: windows-2025
|
runner: windows-2025
|
||||||
python_version: '3.10'
|
python_version: '3.10'
|
||||||
platform_tag: win_amd64
|
|
||||||
pyi_version: '6.18.0'
|
|
||||||
pyi_tag: '2026.01.29.160356'
|
|
||||||
pyi_hash: bb9cd0b0b233e4d031a295211cb8aa7c7f8b3c12ff33f1d57a40849ab4d3cf42
|
|
||||||
- arch: 'x86'
|
- arch: 'x86'
|
||||||
runner: windows-2025
|
runner: windows-2025
|
||||||
python_version: '3.10'
|
python_version: '3.10'
|
||||||
platform_tag: win32
|
|
||||||
pyi_version: '6.18.0'
|
|
||||||
pyi_tag: '2026.01.29.160356'
|
|
||||||
pyi_hash: aa8f260e735d94f1e2e1aac42e322f508eb54d0433de803c2998c337f72045e4
|
|
||||||
- arch: 'arm64'
|
- arch: 'arm64'
|
||||||
runner: windows-11-arm
|
runner: windows-11-arm
|
||||||
python_version: '3.13' # arm64 only has Python >= 3.11 available
|
python_version: '3.13' # arm64 only has Python >= 3.11 available
|
||||||
platform_tag: win_arm64
|
|
||||||
pyi_version: '6.18.0'
|
|
||||||
pyi_tag: '2026.01.29.160356'
|
|
||||||
pyi_hash: 4bbca67d0cdfa860d92ac9cc7e4c2586fd393d1e814e3f1375b8c62d5cfb6771
|
|
||||||
env:
|
env:
|
||||||
CHANNEL: ${{ inputs.channel }}
|
CHANNEL: ${{ inputs.channel }}
|
||||||
ORIGIN: ${{ needs.process.outputs.origin }}
|
ORIGIN: ${{ needs.process.outputs.origin }}
|
||||||
VERSION: ${{ needs.process.outputs.version }}
|
VERSION: ${{ needs.process.outputs.version }}
|
||||||
SUFFIX: ${{ (matrix.arch != 'x64' && format('_{0}', matrix.arch)) || '' }}
|
SUFFIX: ${{ (matrix.arch != 'x64' && format('_{0}', matrix.arch)) || '' }}
|
||||||
UPDATE_TO: yt-dlp/yt-dlp@2025.09.05
|
UPDATE_TO: yt-dlp/yt-dlp@2025.09.05
|
||||||
BASE_CACHE_KEY: cache-reqs-${{ github.job }}_${{ matrix.arch }}-${{ matrix.python_version }}
|
|
||||||
PYI_REPO: https://github.com/yt-dlp/Pyinstaller-Builds
|
|
||||||
PYI_WHEEL: pyinstaller-${{ matrix.pyi_version }}-py3-none-${{ matrix.platform_tag }}.whl
|
|
||||||
|
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
|
- uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
|
||||||
@ -447,25 +452,15 @@ jobs:
|
|||||||
- name: Install Requirements
|
- name: Install Requirements
|
||||||
env:
|
env:
|
||||||
ARCH: ${{ matrix.arch }}
|
ARCH: ${{ matrix.arch }}
|
||||||
PYI_URL: ${{ env.PYI_REPO }}/releases/download/${{ matrix.pyi_tag }}/${{ env.PYI_WHEEL }}
|
|
||||||
PYI_HASH: ${{ matrix.pyi_hash }}
|
|
||||||
shell: pwsh
|
shell: pwsh
|
||||||
run: |
|
run: |
|
||||||
$ErrorActionPreference = "Stop"
|
$ErrorActionPreference = "Stop"
|
||||||
$PSNativeCommandUseErrorActionPreference = $true
|
$PSNativeCommandUseErrorActionPreference = $true
|
||||||
python -m venv /yt-dlp-build-venv
|
python -m venv /yt-dlp-build-venv
|
||||||
/yt-dlp-build-venv/Scripts/Activate.ps1
|
/yt-dlp-build-venv/Scripts/Activate.ps1
|
||||||
python -m pip install -U pip
|
python -m pip install -U --require-hashes -r "bundle/requirements/requirements-pip.txt"
|
||||||
# Install custom PyInstaller build and verify hash
|
python -m pip install -U --require-hashes -r "bundle/requirements/requirements-win-${Env:ARCH}-pyinstaller.txt"
|
||||||
mkdir /pyi-wheels
|
python -m pip install -U --require-hashes -r "bundle/requirements/requirements-win-${Env:ARCH}.txt"
|
||||||
python -m pip download -d /pyi-wheels --no-deps --require-hashes "pyinstaller@${Env:PYI_URL}#sha256=${Env:PYI_HASH}"
|
|
||||||
python -m pip install --force-reinstall -U "/pyi-wheels/${Env:PYI_WHEEL}"
|
|
||||||
python devscripts/install_deps.py --omit-default --include-extra build
|
|
||||||
if ("${Env:ARCH}" -eq "x86") {
|
|
||||||
python devscripts/install_deps.py
|
|
||||||
} else {
|
|
||||||
python devscripts/install_deps.py --include-extra build-curl-cffi
|
|
||||||
}
|
|
||||||
|
|
||||||
- name: Prepare
|
- name: Prepare
|
||||||
shell: pwsh
|
shell: pwsh
|
||||||
@ -501,7 +496,7 @@ jobs:
|
|||||||
}
|
}
|
||||||
|
|
||||||
- name: Upload artifacts
|
- name: Upload artifacts
|
||||||
uses: actions/upload-artifact@b7c566a772e6b6bfb58ed0dc250532a479d7789f # v6.0.0
|
uses: actions/upload-artifact@bbbca2ddaa5d8feaa63e36b76fdaad77386f024f # v7.0.0
|
||||||
with:
|
with:
|
||||||
name: build-bin-${{ github.job }}-${{ matrix.arch }}
|
name: build-bin-${{ github.job }}-${{ matrix.arch }}
|
||||||
path: |
|
path: |
|
||||||
@ -516,12 +511,13 @@ jobs:
|
|||||||
- unix
|
- unix
|
||||||
- linux
|
- linux
|
||||||
- macos
|
- macos
|
||||||
|
- macos_verify
|
||||||
- windows
|
- windows
|
||||||
if: always() && !failure() && !cancelled()
|
if: always() && !failure() && !cancelled()
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
steps:
|
steps:
|
||||||
- name: Download artifacts
|
- name: Download artifacts
|
||||||
uses: actions/download-artifact@37930b1c2abaa49bbe596cd826c3c89aef350131 # v7.0.0
|
uses: actions/download-artifact@3e5f45b2cfb9172054b4087a40e8e0b5a5461e7c # v8.0.1
|
||||||
with:
|
with:
|
||||||
path: artifact
|
path: artifact
|
||||||
pattern: build-bin-*
|
pattern: build-bin-*
|
||||||
@ -590,7 +586,7 @@ jobs:
|
|||||||
done
|
done
|
||||||
|
|
||||||
- name: Upload artifacts
|
- name: Upload artifacts
|
||||||
uses: actions/upload-artifact@b7c566a772e6b6bfb58ed0dc250532a479d7789f # v6.0.0
|
uses: actions/upload-artifact@bbbca2ddaa5d8feaa63e36b76fdaad77386f024f # v7.0.0
|
||||||
with:
|
with:
|
||||||
name: build-${{ github.job }}
|
name: build-${{ github.job }}
|
||||||
path: |
|
path: |
|
||||||
|
|||||||
6
.github/workflows/challenge-tests.yml
vendored
6
.github/workflows/challenge-tests.yml
vendored
@ -50,13 +50,13 @@ jobs:
|
|||||||
with:
|
with:
|
||||||
deno-version: '2.0.0' # minimum supported version
|
deno-version: '2.0.0' # minimum supported version
|
||||||
- name: Install Bun
|
- name: Install Bun
|
||||||
uses: oven-sh/setup-bun@3d267786b128fe76c2f16a390aa2448b815359f3 # v2.1.2
|
uses: oven-sh/setup-bun@0c5077e51419868618aeaa5fe8019c62421857d6 # v2.2.0
|
||||||
with:
|
with:
|
||||||
# minimum supported version is 1.0.31 but earliest available Windows version is 1.1.0
|
# minimum supported version is 1.0.31 but earliest available Windows version is 1.1.0
|
||||||
bun-version: ${{ (matrix.os == 'windows-latest' && '1.1.0') || '1.0.31' }}
|
bun-version: ${{ (matrix.os == 'windows-latest' && '1.1.0') || '1.0.31' }}
|
||||||
no-cache: true
|
no-cache: true
|
||||||
- name: Install Node
|
- name: Install Node
|
||||||
uses: actions/setup-node@6044e13b5dc448c55e2357c09f80417699197238 # v6.2.0
|
uses: actions/setup-node@53b83947a5a98c8d113130e565377fae1a50d02f # v6.3.0
|
||||||
with:
|
with:
|
||||||
node-version: '20.0' # minimum supported version
|
node-version: '20.0' # minimum supported version
|
||||||
- name: Install QuickJS (Linux)
|
- name: Install QuickJS (Linux)
|
||||||
@ -77,7 +77,7 @@ jobs:
|
|||||||
- name: Install test requirements
|
- name: Install test requirements
|
||||||
shell: bash
|
shell: bash
|
||||||
run: |
|
run: |
|
||||||
python ./devscripts/install_deps.py --print --omit-default --include-extra test > requirements.txt
|
python ./devscripts/install_deps.py --print --omit-default --include-group test > requirements.txt
|
||||||
python ./devscripts/install_deps.py --print -c certifi -c requests -c urllib3 -c yt-dlp-ejs >> requirements.txt
|
python ./devscripts/install_deps.py --print -c certifi -c requests -c urllib3 -c yt-dlp-ejs >> requirements.txt
|
||||||
python -m pip install -U -r requirements.txt
|
python -m pip install -U -r requirements.txt
|
||||||
- name: Run tests
|
- name: Run tests
|
||||||
|
|||||||
4
.github/workflows/codeql.yml
vendored
4
.github/workflows/codeql.yml
vendored
@ -36,12 +36,12 @@ jobs:
|
|||||||
persist-credentials: false
|
persist-credentials: false
|
||||||
|
|
||||||
- name: Initialize CodeQL
|
- name: Initialize CodeQL
|
||||||
uses: github/codeql-action/init@5d4e8d1aca955e8d8589aabd499c5cae939e33c7 # v4.31.9
|
uses: github/codeql-action/init@b1bff81932f5cdfc8695c7752dcee935dcd061c8 # v4.33.0
|
||||||
with:
|
with:
|
||||||
languages: ${{ matrix.language }}
|
languages: ${{ matrix.language }}
|
||||||
build-mode: none
|
build-mode: none
|
||||||
|
|
||||||
- name: Perform CodeQL Analysis
|
- name: Perform CodeQL Analysis
|
||||||
uses: github/codeql-action/analyze@5d4e8d1aca955e8d8589aabd499c5cae939e33c7 # v4.31.9
|
uses: github/codeql-action/analyze@b1bff81932f5cdfc8695c7752dcee935dcd061c8 # v4.33.0
|
||||||
with:
|
with:
|
||||||
category: "/language:${{matrix.language}}"
|
category: "/language:${{matrix.language}}"
|
||||||
|
|||||||
2
.github/workflows/core.yml
vendored
2
.github/workflows/core.yml
vendored
@ -66,7 +66,7 @@ jobs:
|
|||||||
with:
|
with:
|
||||||
python-version: ${{ matrix.python-version }}
|
python-version: ${{ matrix.python-version }}
|
||||||
- name: Install test requirements
|
- name: Install test requirements
|
||||||
run: python ./devscripts/install_deps.py --include-extra test --include-extra curl-cffi
|
run: python ./devscripts/install_deps.py --include-group test --include-extra curl-cffi
|
||||||
- name: Run tests
|
- name: Run tests
|
||||||
timeout-minutes: 15
|
timeout-minutes: 15
|
||||||
continue-on-error: False
|
continue-on-error: False
|
||||||
|
|||||||
4
.github/workflows/quick-test.yml
vendored
4
.github/workflows/quick-test.yml
vendored
@ -24,7 +24,7 @@ jobs:
|
|||||||
python-version: '3.10'
|
python-version: '3.10'
|
||||||
- name: Install test requirements
|
- name: Install test requirements
|
||||||
shell: bash
|
shell: bash
|
||||||
run: python ./devscripts/install_deps.py --omit-default --include-extra test
|
run: python ./devscripts/install_deps.py --omit-default --include-group test
|
||||||
- name: Run tests
|
- name: Run tests
|
||||||
timeout-minutes: 15
|
timeout-minutes: 15
|
||||||
shell: bash
|
shell: bash
|
||||||
@ -45,7 +45,7 @@ jobs:
|
|||||||
with:
|
with:
|
||||||
python-version: '3.10'
|
python-version: '3.10'
|
||||||
- name: Install dev dependencies
|
- name: Install dev dependencies
|
||||||
run: python ./devscripts/install_deps.py --omit-default --include-extra static-analysis
|
run: python ./devscripts/install_deps.py --omit-default --include-group static-analysis
|
||||||
- name: Make lazy extractors
|
- name: Make lazy extractors
|
||||||
run: python ./devscripts/make_lazy_extractors.py
|
run: python ./devscripts/make_lazy_extractors.py
|
||||||
- name: Run ruff
|
- name: Run ruff
|
||||||
|
|||||||
2
.github/workflows/release-master.yml
vendored
2
.github/workflows/release-master.yml
vendored
@ -42,7 +42,7 @@ jobs:
|
|||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
steps:
|
steps:
|
||||||
- name: Download artifacts
|
- name: Download artifacts
|
||||||
uses: actions/download-artifact@37930b1c2abaa49bbe596cd826c3c89aef350131 # v7.0.0
|
uses: actions/download-artifact@3e5f45b2cfb9172054b4087a40e8e0b5a5461e7c # v8.0.1
|
||||||
with:
|
with:
|
||||||
path: dist
|
path: dist
|
||||||
name: build-pypi
|
name: build-pypi
|
||||||
|
|||||||
4
.github/workflows/release-nightly.yml
vendored
4
.github/workflows/release-nightly.yml
vendored
@ -27,7 +27,7 @@ jobs:
|
|||||||
run: echo "head=$(git rev-parse HEAD)" | tee -a "${GITHUB_OUTPUT}"
|
run: echo "head=$(git rev-parse HEAD)" | tee -a "${GITHUB_OUTPUT}"
|
||||||
|
|
||||||
- name: Cache nightly commit hash
|
- name: Cache nightly commit hash
|
||||||
uses: actions/cache@8b402f58fbc84540c8b491a91e594a4576fec3d7 # v5.0.2
|
uses: actions/cache@cdf6c1fa76f9f475f3d7449005a359c84ca0f306 # v5.0.3
|
||||||
env:
|
env:
|
||||||
SEGMENT_DOWNLOAD_TIMEOUT_MINS: 1
|
SEGMENT_DOWNLOAD_TIMEOUT_MINS: 1
|
||||||
with:
|
with:
|
||||||
@ -94,7 +94,7 @@ jobs:
|
|||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
steps:
|
steps:
|
||||||
- name: Download artifacts
|
- name: Download artifacts
|
||||||
uses: actions/download-artifact@37930b1c2abaa49bbe596cd826c3c89aef350131 # v7.0.0
|
uses: actions/download-artifact@3e5f45b2cfb9172054b4087a40e8e0b5a5461e7c # v8.0.1
|
||||||
with:
|
with:
|
||||||
path: dist
|
path: dist
|
||||||
name: build-pypi
|
name: build-pypi
|
||||||
|
|||||||
46
.github/workflows/release.yml
vendored
46
.github/workflows/release.yml
vendored
@ -27,6 +27,8 @@ on:
|
|||||||
required: false
|
required: false
|
||||||
GPG_SIGNING_KEY:
|
GPG_SIGNING_KEY:
|
||||||
required: false
|
required: false
|
||||||
|
RELEASE_KEY:
|
||||||
|
required: false
|
||||||
workflow_dispatch:
|
workflow_dispatch:
|
||||||
inputs:
|
inputs:
|
||||||
source:
|
source:
|
||||||
@ -67,7 +69,7 @@ jobs:
|
|||||||
prepare:
|
prepare:
|
||||||
name: Prepare
|
name: Prepare
|
||||||
permissions:
|
permissions:
|
||||||
contents: write # Needed to git-push the release commit
|
contents: read # Push via SSH; HTTPS write token is not needed
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
outputs:
|
outputs:
|
||||||
channel: ${{ steps.setup_variables.outputs.channel }}
|
channel: ${{ steps.setup_variables.outputs.channel }}
|
||||||
@ -83,10 +85,11 @@ jobs:
|
|||||||
with:
|
with:
|
||||||
fetch-depth: 0
|
fetch-depth: 0
|
||||||
persist-credentials: true # Needed to git-push the release commit
|
persist-credentials: true # Needed to git-push the release commit
|
||||||
|
ssh-key: ${{ secrets.RELEASE_KEY }}
|
||||||
|
|
||||||
- uses: actions/setup-python@a309ff8b426b58ec0e2a45f0f869d46889d02405 # v6.2.0
|
- uses: actions/setup-python@a309ff8b426b58ec0e2a45f0f869d46889d02405 # v6.2.0
|
||||||
with:
|
with:
|
||||||
python-version: "3.10" # Keep this in sync with test-workflows.yml
|
python-version: "3.13" # Keep this in sync with test-workflows.yml
|
||||||
|
|
||||||
- name: Process inputs
|
- name: Process inputs
|
||||||
id: process_inputs
|
id: process_inputs
|
||||||
@ -101,7 +104,6 @@ jobs:
|
|||||||
INPUTS: ${{ toJSON(inputs) }}
|
INPUTS: ${{ toJSON(inputs) }}
|
||||||
PROCESSED: ${{ toJSON(steps.process_inputs.outputs) }}
|
PROCESSED: ${{ toJSON(steps.process_inputs.outputs) }}
|
||||||
REPOSITORY: ${{ github.repository }}
|
REPOSITORY: ${{ github.repository }}
|
||||||
PUSH_VERSION_COMMIT: ${{ vars.PUSH_VERSION_COMMIT }}
|
|
||||||
PYPI_PROJECT: ${{ vars.PYPI_PROJECT }}
|
PYPI_PROJECT: ${{ vars.PYPI_PROJECT }}
|
||||||
SOURCE_PYPI_PROJECT: ${{ vars[format('{0}_pypi_project', steps.process_inputs.outputs.source_repo)] }}
|
SOURCE_PYPI_PROJECT: ${{ vars[format('{0}_pypi_project', steps.process_inputs.outputs.source_repo)] }}
|
||||||
SOURCE_PYPI_SUFFIX: ${{ vars[format('{0}_pypi_suffix', steps.process_inputs.outputs.source_repo)] }}
|
SOURCE_PYPI_SUFFIX: ${{ vars[format('{0}_pypi_suffix', steps.process_inputs.outputs.source_repo)] }}
|
||||||
@ -110,6 +112,7 @@ jobs:
|
|||||||
SOURCE_ARCHIVE_REPO: ${{ vars[format('{0}_archive_repo', steps.process_inputs.outputs.source_repo)] }}
|
SOURCE_ARCHIVE_REPO: ${{ vars[format('{0}_archive_repo', steps.process_inputs.outputs.source_repo)] }}
|
||||||
TARGET_ARCHIVE_REPO: ${{ vars[format('{0}_archive_repo', steps.process_inputs.outputs.target_repo)] }}
|
TARGET_ARCHIVE_REPO: ${{ vars[format('{0}_archive_repo', steps.process_inputs.outputs.target_repo)] }}
|
||||||
HAS_ARCHIVE_REPO_TOKEN: ${{ !!secrets.ARCHIVE_REPO_TOKEN }}
|
HAS_ARCHIVE_REPO_TOKEN: ${{ !!secrets.ARCHIVE_REPO_TOKEN }}
|
||||||
|
HAS_RELEASE_KEY: ${{ !!secrets.RELEASE_KEY }}
|
||||||
run: |
|
run: |
|
||||||
python -m devscripts.setup_variables
|
python -m devscripts.setup_variables
|
||||||
|
|
||||||
@ -124,32 +127,26 @@ jobs:
|
|||||||
python devscripts/update_changelog.py -vv
|
python devscripts/update_changelog.py -vv
|
||||||
make doc
|
make doc
|
||||||
|
|
||||||
- name: Push to release
|
- name: Push release commit
|
||||||
id: push_release
|
|
||||||
env:
|
env:
|
||||||
VERSION: ${{ steps.setup_variables.outputs.version }}
|
VERSION: ${{ steps.setup_variables.outputs.version }}
|
||||||
GITHUB_EVENT_SENDER_LOGIN: ${{ github.event.sender.login }}
|
GITHUB_EVENT_SENDER_LOGIN: ${{ github.event.sender.login }}
|
||||||
GITHUB_EVENT_REF: ${{ github.event.ref }}
|
GITHUB_EVENT_REF: ${{ github.event.ref }}
|
||||||
if: steps.setup_variables.outputs.target_repo == github.repository && !inputs.prerelease
|
RELEASE_KEY: ${{ secrets.RELEASE_KEY }}
|
||||||
|
if: steps.setup_variables.outputs.target_repo == github.repository && env.RELEASE_KEY && !inputs.prerelease
|
||||||
run: |
|
run: |
|
||||||
git config --global user.name "github-actions[bot]"
|
git config --global user.name "github-actions[bot]"
|
||||||
git config --global user.email "41898282+github-actions[bot]@users.noreply.github.com"
|
git config --global user.email "41898282+github-actions[bot]@users.noreply.github.com"
|
||||||
git add -u
|
git add -u
|
||||||
git commit -m "Release ${VERSION}" \
|
git commit -m "Release ${VERSION}" \
|
||||||
-m "Created by: ${GITHUB_EVENT_SENDER_LOGIN}" -m ":ci skip all"
|
-m "Created by: ${GITHUB_EVENT_SENDER_LOGIN}" -m ":ci skip all"
|
||||||
git push origin --force "${GITHUB_EVENT_REF}:release"
|
git push origin "${GITHUB_EVENT_REF}"
|
||||||
|
|
||||||
- name: Get target commitish
|
- name: Get target commitish
|
||||||
id: get_target
|
id: get_target
|
||||||
run: |
|
run: |
|
||||||
echo "head_sha=$(git rev-parse HEAD)" >> "$GITHUB_OUTPUT"
|
echo "head_sha=$(git rev-parse HEAD)" >> "$GITHUB_OUTPUT"
|
||||||
|
|
||||||
- name: Update master
|
|
||||||
env:
|
|
||||||
GITHUB_EVENT_REF: ${{ github.event.ref }}
|
|
||||||
if: vars.PUSH_VERSION_COMMIT && !inputs.prerelease && steps.setup_variables.outputs.target_repo == github.repository
|
|
||||||
run: git push origin "${GITHUB_EVENT_REF}"
|
|
||||||
|
|
||||||
build:
|
build:
|
||||||
name: Build
|
name: Build
|
||||||
needs: [prepare]
|
needs: [prepare]
|
||||||
@ -180,12 +177,13 @@ jobs:
|
|||||||
persist-credentials: false
|
persist-credentials: false
|
||||||
- uses: actions/setup-python@a309ff8b426b58ec0e2a45f0f869d46889d02405 # v6.2.0
|
- uses: actions/setup-python@a309ff8b426b58ec0e2a45f0f869d46889d02405 # v6.2.0
|
||||||
with:
|
with:
|
||||||
python-version: "3.10"
|
python-version: "3.13"
|
||||||
|
|
||||||
- name: Install Requirements
|
- name: Install Requirements
|
||||||
run: |
|
run: |
|
||||||
sudo apt -y install pandoc man
|
sudo apt -y install pandoc man
|
||||||
python devscripts/install_deps.py --omit-default --include-extra build
|
python -m pip install -U --require-hashes -r "bundle/requirements/requirements-pip.txt"
|
||||||
|
python -m pip install -U --require-hashes -r "bundle/requirements/requirements-pypi-build.txt"
|
||||||
|
|
||||||
- name: Prepare
|
- name: Prepare
|
||||||
env:
|
env:
|
||||||
@ -214,7 +212,7 @@ jobs:
|
|||||||
|
|
||||||
- name: Upload artifacts
|
- name: Upload artifacts
|
||||||
if: github.event.workflow != '.github/workflows/release.yml' # Reusable workflow_call
|
if: github.event.workflow != '.github/workflows/release.yml' # Reusable workflow_call
|
||||||
uses: actions/upload-artifact@b7c566a772e6b6bfb58ed0dc250532a479d7789f # v6.0.0
|
uses: actions/upload-artifact@bbbca2ddaa5d8feaa63e36b76fdaad77386f024f # v7.0.0
|
||||||
with:
|
with:
|
||||||
name: build-pypi
|
name: build-pypi
|
||||||
path: |
|
path: |
|
||||||
@ -242,15 +240,16 @@ jobs:
|
|||||||
- uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
|
- uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
|
||||||
with:
|
with:
|
||||||
fetch-depth: 0
|
fetch-depth: 0
|
||||||
persist-credentials: false
|
persist-credentials: true # Needed to git-push the release tag
|
||||||
- uses: actions/download-artifact@37930b1c2abaa49bbe596cd826c3c89aef350131 # v7.0.0
|
ssh-key: ${{ secrets.RELEASE_KEY }}
|
||||||
|
- uses: actions/download-artifact@3e5f45b2cfb9172054b4087a40e8e0b5a5461e7c # v8.0.1
|
||||||
with:
|
with:
|
||||||
path: artifact
|
path: artifact
|
||||||
pattern: build-*
|
pattern: build-*
|
||||||
merge-multiple: true
|
merge-multiple: true
|
||||||
- uses: actions/setup-python@a309ff8b426b58ec0e2a45f0f869d46889d02405 # v6.2.0
|
- uses: actions/setup-python@a309ff8b426b58ec0e2a45f0f869d46889d02405 # v6.2.0
|
||||||
with:
|
with:
|
||||||
python-version: "3.10"
|
python-version: "3.13"
|
||||||
|
|
||||||
- name: Generate release notes
|
- name: Generate release notes
|
||||||
env:
|
env:
|
||||||
@ -310,6 +309,13 @@ jobs:
|
|||||||
git tag --delete "${TARGET_TAG}" || true
|
git tag --delete "${TARGET_TAG}" || true
|
||||||
sleep 5 # Enough time to cover deletion race condition
|
sleep 5 # Enough time to cover deletion race condition
|
||||||
|
|
||||||
|
- name: Push tag
|
||||||
|
if: env.TARGET_REPO == github.repository
|
||||||
|
run: |
|
||||||
|
git tag "${TARGET_TAG}" "${HEAD_SHA}"
|
||||||
|
git push origin "${TARGET_TAG}"
|
||||||
|
sleep 5 # Enough time to cover git-push vs gh-release-create race condition
|
||||||
|
|
||||||
- name: Publish release
|
- name: Publish release
|
||||||
env:
|
env:
|
||||||
GH_TOKEN: ${{ github.token }}
|
GH_TOKEN: ${{ github.token }}
|
||||||
@ -321,7 +327,7 @@ jobs:
|
|||||||
run: |
|
run: |
|
||||||
gh_options=(
|
gh_options=(
|
||||||
--notes-file "${NOTES_FILE}"
|
--notes-file "${NOTES_FILE}"
|
||||||
--target "${HEAD_SHA}"
|
--verify-tag
|
||||||
--title "${TITLE_PREFIX}${TITLE}${VERSION}"
|
--title "${TITLE_PREFIX}${TITLE}${VERSION}"
|
||||||
)
|
)
|
||||||
if ((PRERELEASE)); then
|
if ((PRERELEASE)); then
|
||||||
|
|||||||
12
.github/workflows/test-workflows.yml
vendored
12
.github/workflows/test-workflows.yml
vendored
@ -26,8 +26,8 @@ concurrency:
|
|||||||
cancel-in-progress: ${{ github.event_name == 'pull_request' }}
|
cancel-in-progress: ${{ github.event_name == 'pull_request' }}
|
||||||
|
|
||||||
env:
|
env:
|
||||||
ACTIONLINT_VERSION: "1.7.9"
|
ACTIONLINT_VERSION: "1.7.11"
|
||||||
ACTIONLINT_SHA256SUM: 233b280d05e100837f4af1433c7b40a5dcb306e3aa68fb4f17f8a7f45a7df7b4
|
ACTIONLINT_SHA256SUM: 900919a84f2229bac68ca9cd4103ea297abc35e9689ebb842c6e34a3d1b01b0a
|
||||||
ACTIONLINT_REPO: https://github.com/rhysd/actionlint
|
ACTIONLINT_REPO: https://github.com/rhysd/actionlint
|
||||||
|
|
||||||
jobs:
|
jobs:
|
||||||
@ -42,13 +42,13 @@ jobs:
|
|||||||
persist-credentials: false
|
persist-credentials: false
|
||||||
- uses: actions/setup-python@a309ff8b426b58ec0e2a45f0f869d46889d02405 # v6.2.0
|
- uses: actions/setup-python@a309ff8b426b58ec0e2a45f0f869d46889d02405 # v6.2.0
|
||||||
with:
|
with:
|
||||||
python-version: "3.10" # Keep this in sync with release.yml's prepare job
|
python-version: "3.13" # Keep this in sync with release.yml's prepare job
|
||||||
- name: Install requirements
|
- name: Install requirements
|
||||||
env:
|
env:
|
||||||
ACTIONLINT_TARBALL: ${{ format('actionlint_{0}_linux_amd64.tar.gz', env.ACTIONLINT_VERSION) }}
|
ACTIONLINT_TARBALL: ${{ format('actionlint_{0}_linux_amd64.tar.gz', env.ACTIONLINT_VERSION) }}
|
||||||
shell: bash
|
shell: bash
|
||||||
run: |
|
run: |
|
||||||
python -m devscripts.install_deps --omit-default --include-extra test
|
python -m devscripts.install_deps --omit-default --include-group test
|
||||||
sudo apt -y install shellcheck
|
sudo apt -y install shellcheck
|
||||||
python -m pip install -U pyflakes
|
python -m pip install -U pyflakes
|
||||||
curl -LO "${ACTIONLINT_REPO}/releases/download/v${ACTIONLINT_VERSION}/${ACTIONLINT_TARBALL}"
|
curl -LO "${ACTIONLINT_REPO}/releases/download/v${ACTIONLINT_VERSION}/${ACTIONLINT_TARBALL}"
|
||||||
@ -76,8 +76,8 @@ jobs:
|
|||||||
with:
|
with:
|
||||||
persist-credentials: false
|
persist-credentials: false
|
||||||
- name: Run zizmor
|
- name: Run zizmor
|
||||||
uses: zizmorcore/zizmor-action@135698455da5c3b3e55f73f4419e481ab68cdd95 # v0.4.1
|
uses: zizmorcore/zizmor-action@71321a20a9ded102f6e9ce5718a2fcec2c4f70d8 # v0.5.2
|
||||||
with:
|
with:
|
||||||
advanced-security: false
|
advanced-security: false
|
||||||
persona: pedantic
|
persona: pedantic
|
||||||
version: v1.22.0
|
version: v1.23.1
|
||||||
|
|||||||
32
.github/workflows/wiki.yml
vendored
Normal file
32
.github/workflows/wiki.yml
vendored
Normal file
@ -0,0 +1,32 @@
|
|||||||
|
name: Update wiki
|
||||||
|
on:
|
||||||
|
schedule:
|
||||||
|
- cron: '22 22 * * *'
|
||||||
|
workflow_dispatch:
|
||||||
|
|
||||||
|
permissions: {}
|
||||||
|
|
||||||
|
concurrency:
|
||||||
|
group: wiki
|
||||||
|
cancel-in-progress: true
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
update_wiki:
|
||||||
|
name: Update wiki
|
||||||
|
if: github.ref == 'refs/heads/master' && github.repository == 'yt-dlp/yt-dlp'
|
||||||
|
permissions:
|
||||||
|
contents: write # Needed to git-push to the wiki
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
steps:
|
||||||
|
- uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
|
||||||
|
with:
|
||||||
|
repository: yt-dlp/yt-dlp-wiki
|
||||||
|
ref: master
|
||||||
|
fetch-depth: 0
|
||||||
|
persist-credentials: true # Needed to git-push to the wiki
|
||||||
|
|
||||||
|
- name: Push to wiki
|
||||||
|
run: |
|
||||||
|
git remote add upstream https://github.com/yt-dlp/yt-dlp.wiki.git
|
||||||
|
git fetch upstream
|
||||||
|
git push --force upstream master
|
||||||
4
.github/zizmor.yml
vendored
4
.github/zizmor.yml
vendored
@ -9,6 +9,10 @@ rules:
|
|||||||
obfuscation:
|
obfuscation:
|
||||||
ignore:
|
ignore:
|
||||||
- release.yml # Not actual obfuscation
|
- release.yml # Not actual obfuscation
|
||||||
|
secrets-outside-env:
|
||||||
|
ignore:
|
||||||
|
- build.yml
|
||||||
|
- release.yml
|
||||||
unpinned-uses:
|
unpinned-uses:
|
||||||
config:
|
config:
|
||||||
policies:
|
policies:
|
||||||
|
|||||||
1
.gitignore
vendored
1
.gitignore
vendored
@ -92,7 +92,6 @@ updates_key.pem
|
|||||||
*.class
|
*.class
|
||||||
*.isorted
|
*.isorted
|
||||||
*.stackdump
|
*.stackdump
|
||||||
uv.lock
|
|
||||||
|
|
||||||
# Generated
|
# Generated
|
||||||
AUTHORS
|
AUTHORS
|
||||||
|
|||||||
@ -177,7 +177,7 @@ While it is strongly recommended to use `hatch` for yt-dlp development, if you a
|
|||||||
|
|
||||||
```shell
|
```shell
|
||||||
# To only install development dependencies:
|
# To only install development dependencies:
|
||||||
$ python -m devscripts.install_deps --include-extra dev
|
$ python -m devscripts.install_deps --include-group dev
|
||||||
|
|
||||||
# Or, for an editable install plus dev dependencies:
|
# Or, for an editable install plus dev dependencies:
|
||||||
$ python -m pip install -e ".[default,dev]"
|
$ python -m pip install -e ".[default,dev]"
|
||||||
|
|||||||
13
CONTRIBUTORS
13
CONTRIBUTORS
@ -864,3 +864,16 @@ Sytm
|
|||||||
zahlman
|
zahlman
|
||||||
azdlonky
|
azdlonky
|
||||||
thematuu
|
thematuu
|
||||||
|
beacdeac
|
||||||
|
blauerdorf
|
||||||
|
CanOfSocks
|
||||||
|
gravesducking
|
||||||
|
gseddon
|
||||||
|
hunter-gatherer8
|
||||||
|
LordMZTE
|
||||||
|
regulad
|
||||||
|
stastix
|
||||||
|
syphyr
|
||||||
|
FriederHannenheim
|
||||||
|
Peter-Devine
|
||||||
|
SparseOrnament15
|
||||||
|
|||||||
96
Changelog.md
96
Changelog.md
@ -4,6 +4,102 @@
|
|||||||
# To create a release, dispatch the https://github.com/yt-dlp/yt-dlp/actions/workflows/release.yml workflow on master
|
# To create a release, dispatch the https://github.com/yt-dlp/yt-dlp/actions/workflows/release.yml workflow on master
|
||||||
-->
|
-->
|
||||||
|
|
||||||
|
### 2026.03.17
|
||||||
|
|
||||||
|
#### Extractor changes
|
||||||
|
- **youtube**
|
||||||
|
- [Always respect `webpage_client` extractor-arg](https://github.com/yt-dlp/yt-dlp/commit/66c4947e9cb70c9de96f7da75f9acbe4192d6c9d) ([#16250](https://github.com/yt-dlp/yt-dlp/issues/16250)) by [bashonly](https://github.com/bashonly)
|
||||||
|
- [Fix `--live-from-start` support](https://github.com/yt-dlp/yt-dlp/commit/1b6ec8fc2589a1733a0937270faa4230ce6b1ca5) ([#16254](https://github.com/yt-dlp/yt-dlp/issues/16254)) by [bashonly](https://github.com/bashonly)
|
||||||
|
- [Update ejs to 0.8.0](https://github.com/yt-dlp/yt-dlp/commit/04d6974f502bbdfaed72c624344f262e30ad9708) ([#16269](https://github.com/yt-dlp/yt-dlp/issues/16269)) by [bashonly](https://github.com/bashonly), [Grub4K](https://github.com/Grub4K)
|
||||||
|
|
||||||
|
#### Misc. changes
|
||||||
|
- **build**: [Use PyInstaller v6.19.0 for Windows](https://github.com/yt-dlp/yt-dlp/commit/7fab4c2b23e16c4a4f94020a37a6bdf8d502be37) ([#16265](https://github.com/yt-dlp/yt-dlp/issues/16265)) by [bashonly](https://github.com/bashonly)
|
||||||
|
- **ci**: [Bump actions pins](https://github.com/yt-dlp/yt-dlp/commit/4fc768b7f7194a05b13ad3e7bc5bfde84ed9ede7) ([#16252](https://github.com/yt-dlp/yt-dlp/issues/16252)) by [bashonly](https://github.com/bashonly)
|
||||||
|
- **docs**: [Fix `player_client` extractor-arg documentation](https://github.com/yt-dlp/yt-dlp/commit/e68afb28277b4bee39726dbcbb06801edde9f659) ([#16235](https://github.com/yt-dlp/yt-dlp/issues/16235)) by [bashonly](https://github.com/bashonly)
|
||||||
|
- **test**: networking: [Mark all CurlCFFIRH tests as flaky for any OS](https://github.com/yt-dlp/yt-dlp/commit/18656b2f2af41a138793c7012a88f467c0d90274) ([#16266](https://github.com/yt-dlp/yt-dlp/issues/16266)) by [bashonly](https://github.com/bashonly)
|
||||||
|
|
||||||
|
### 2026.03.13
|
||||||
|
|
||||||
|
#### Extractor changes
|
||||||
|
- **tiktok**: [Fix challenge solving](https://github.com/yt-dlp/yt-dlp/commit/db62e438a15743b156ca5ebfc6dbe160e9bc1662) ([#16223](https://github.com/yt-dlp/yt-dlp/issues/16223)) by [bashonly](https://github.com/bashonly)
|
||||||
|
- **youtube**
|
||||||
|
- [Fix `android_vr` player client](https://github.com/yt-dlp/yt-dlp/commit/ff459e5fc04b1a061212672626b7bfa23ff3cdcd) ([#16168](https://github.com/yt-dlp/yt-dlp/issues/16168)) by [gamer191](https://github.com/gamer191)
|
||||||
|
- [Fix `use_ad_playback_context` extractor-arg](https://github.com/yt-dlp/yt-dlp/commit/7e145ac1cae8f891e18c9375fa23097f1dfa0b19) ([#16196](https://github.com/yt-dlp/yt-dlp/issues/16196)) by [bashonly](https://github.com/bashonly)
|
||||||
|
- [Fix `web_embedded` player client](https://github.com/yt-dlp/yt-dlp/commit/f2bd3202c0ffa3f0c0069c44ca53b625dca568bc) ([#16177](https://github.com/yt-dlp/yt-dlp/issues/16177)) by [bashonly](https://github.com/bashonly), [SparseOrnament15](https://github.com/SparseOrnament15)
|
||||||
|
- [Request `web_safari` & `web_creator` client configs](https://github.com/yt-dlp/yt-dlp/commit/48a61d0f38b156785d24df628d42892441e008c4) ([#16198](https://github.com/yt-dlp/yt-dlp/issues/16198)) by [bashonly](https://github.com/bashonly)
|
||||||
|
- [Update ejs to 0.7.0](https://github.com/yt-dlp/yt-dlp/commit/92f1d99dbe1e10d942ef0963f625dbc5bc0768aa) ([#16231](https://github.com/yt-dlp/yt-dlp/issues/16231)) by [bashonly](https://github.com/bashonly), [Grub4K](https://github.com/Grub4K)
|
||||||
|
- tab
|
||||||
|
- [Fix album extraction](https://github.com/yt-dlp/yt-dlp/commit/ae025da02364f4d085953f41fd0d32ade3c4afb9) ([#16041](https://github.com/yt-dlp/yt-dlp/issues/16041)) by [FriederHannenheim](https://github.com/FriederHannenheim)
|
||||||
|
- [Improve description extraction](https://github.com/yt-dlp/yt-dlp/commit/3e36cf9cdb12ef566416c5620a1a95b5a0221017) ([#16057](https://github.com/yt-dlp/yt-dlp/issues/16057)) by [Peter-Devine](https://github.com/Peter-Devine)
|
||||||
|
|
||||||
|
### 2026.03.03
|
||||||
|
|
||||||
|
#### Extractor changes
|
||||||
|
- **aenetworks**: [Fix extraction](https://github.com/yt-dlp/yt-dlp/commit/338dbebdb8627a95bd8f72ed86fdc2d50c8e2d14) ([#16036](https://github.com/yt-dlp/yt-dlp/issues/16036)) by [bashonly](https://github.com/bashonly)
|
||||||
|
- **patreon**: [Fix extractors](https://github.com/yt-dlp/yt-dlp/commit/bf4dfffe0164385c29a2dcb0367110babe4d4f27) ([#16112](https://github.com/yt-dlp/yt-dlp/issues/16112)) by [bashonly](https://github.com/bashonly)
|
||||||
|
- **thechosen**: [Rework extractor](https://github.com/yt-dlp/yt-dlp/commit/e3118604aa99a5514342d6a002c9b4a3fe1235b4) ([#16021](https://github.com/yt-dlp/yt-dlp/issues/16021)) by [0xvd](https://github.com/0xvd)
|
||||||
|
- **youtube**
|
||||||
|
- [Force player `9f4cc5e4`](https://github.com/yt-dlp/yt-dlp/commit/d3165e83ffc0088eef5e594927ea9ac99a6e2ce6) ([#16123](https://github.com/yt-dlp/yt-dlp/issues/16123)) by [bashonly](https://github.com/bashonly)
|
||||||
|
- [Skip webpage player response by default](https://github.com/yt-dlp/yt-dlp/commit/2ecc4c3bc300701d85e2cbaeb2b28a921a68f0f0) ([#16126](https://github.com/yt-dlp/yt-dlp/issues/16126)) by [bashonly](https://github.com/bashonly)
|
||||||
|
- **zapiks**: [Improve extraction](https://github.com/yt-dlp/yt-dlp/commit/6f796a2bff332f72c3f250207cdf10db852f6016) ([#16030](https://github.com/yt-dlp/yt-dlp/issues/16030)) by [doe1080](https://github.com/doe1080)
|
||||||
|
|
||||||
|
### 2026.02.21
|
||||||
|
|
||||||
|
#### Important changes
|
||||||
|
- Security: [[CVE-2026-26331](https://nvd.nist.gov/vuln/detail/CVE-2026-26331)] [Arbitrary command injection with the `--netrc-cmd` option](https://github.com/yt-dlp/yt-dlp/security/advisories/GHSA-g3gw-q23r-pgqm)
|
||||||
|
- The argument passed to the command in `--netrc-cmd` is now limited to a safe subset of characters
|
||||||
|
|
||||||
|
#### Core changes
|
||||||
|
- **cookies**: [Ignore cookies with control characters](https://github.com/yt-dlp/yt-dlp/commit/43229d1d5f47b313e1958d719faff6321d853ed3) ([#15862](https://github.com/yt-dlp/yt-dlp/issues/15862)) by [bashonly](https://github.com/bashonly), [syphyr](https://github.com/syphyr)
|
||||||
|
- **jsinterp**
|
||||||
|
- [Fix bitwise operations](https://github.com/yt-dlp/yt-dlp/commit/62574f5763755a8637880044630b12582e4a55a5) ([#15985](https://github.com/yt-dlp/yt-dlp/issues/15985)) by [bashonly](https://github.com/bashonly)
|
||||||
|
- [Stringify bracket notation keys in object access](https://github.com/yt-dlp/yt-dlp/commit/c9c86519753d6cdafa052945d2de0d3fcd448927) ([#15989](https://github.com/yt-dlp/yt-dlp/issues/15989)) by [bashonly](https://github.com/bashonly)
|
||||||
|
- [Support string concatenation with `+` and `+=`](https://github.com/yt-dlp/yt-dlp/commit/d108ca10b926410ed99031fec86894bfdea8f8eb) ([#15990](https://github.com/yt-dlp/yt-dlp/issues/15990)) by [bashonly](https://github.com/bashonly)
|
||||||
|
|
||||||
|
#### Extractor changes
|
||||||
|
- [Add browser impersonation support to more extractors](https://github.com/yt-dlp/yt-dlp/commit/1d1358d09fedcdc6b3e83538a29b0b539cb9be3f) ([#16029](https://github.com/yt-dlp/yt-dlp/issues/16029)) by [bashonly](https://github.com/bashonly)
|
||||||
|
- [Limit `netrc_machine` parameter to shell-safe characters](https://github.com/yt-dlp/yt-dlp/commit/1fbbe29b99dc61375bf6d786f824d9fcf6ea9c1a) by [Grub4K](https://github.com/Grub4K)
|
||||||
|
- **1tv**: [Extract chapters](https://github.com/yt-dlp/yt-dlp/commit/23c059a455acbb317b2bbe657efd59113bf4d5ac) ([#15848](https://github.com/yt-dlp/yt-dlp/issues/15848)) by [hunter-gatherer8](https://github.com/hunter-gatherer8)
|
||||||
|
- **aenetworks**: [Fix extractor](https://github.com/yt-dlp/yt-dlp/commit/24856538595a3b25c75e1199146fcc82ea812d97) ([#14959](https://github.com/yt-dlp/yt-dlp/issues/14959)) by [Sipherdrakon](https://github.com/Sipherdrakon)
|
||||||
|
- **applepodcasts**: [Fix extractor](https://github.com/yt-dlp/yt-dlp/commit/1ea7329cc91da38a790174e831fffafcb3ea3c3d) ([#15901](https://github.com/yt-dlp/yt-dlp/issues/15901)) by [coreywright](https://github.com/coreywright)
|
||||||
|
- **dailymotion**: [Fix extraction](https://github.com/yt-dlp/yt-dlp/commit/224fe478b0ef83d13b36924befa53686290cb000) ([#15995](https://github.com/yt-dlp/yt-dlp/issues/15995)) by [bashonly](https://github.com/bashonly)
|
||||||
|
- **facebook**: ads: [Fix extractor](https://github.com/yt-dlp/yt-dlp/commit/e2444584a3e590077b81828ad8a12fc4c3b1aa6d) ([#16002](https://github.com/yt-dlp/yt-dlp/issues/16002)) by [bashonly](https://github.com/bashonly)
|
||||||
|
- **gem.cbc.ca**: [Support standalone, series & Olympics URLs](https://github.com/yt-dlp/yt-dlp/commit/637ae202aca7a990b3b61bc33d692870dc16c3ad) ([#15878](https://github.com/yt-dlp/yt-dlp/issues/15878)) by [0xvd](https://github.com/0xvd), [bashonly](https://github.com/bashonly), [makew0rld](https://github.com/makew0rld)
|
||||||
|
- **learningonscreen**: [Fix extractor](https://github.com/yt-dlp/yt-dlp/commit/46d5b6f2b7989d8991a59215d434fb8b5a8ec7bb) ([#16028](https://github.com/yt-dlp/yt-dlp/issues/16028)) by [0xvd](https://github.com/0xvd), [bashonly](https://github.com/bashonly)
|
||||||
|
- **locipo**: [Add extractors](https://github.com/yt-dlp/yt-dlp/commit/442c90da3ec680037b7d94abf91ec63b2e5a9ade) ([#15486](https://github.com/yt-dlp/yt-dlp/issues/15486)) by [doe1080](https://github.com/doe1080), [gravesducking](https://github.com/gravesducking)
|
||||||
|
- **matchitv**: [Add extractor](https://github.com/yt-dlp/yt-dlp/commit/8d6e0b29bf15365638e0ceeb803a274e4db6157d) ([#15204](https://github.com/yt-dlp/yt-dlp/issues/15204)) by [gseddon](https://github.com/gseddon)
|
||||||
|
- **odnoklassniki**: [Fix inefficient regular expression](https://github.com/yt-dlp/yt-dlp/commit/071ad7dfa012f5b71572d29ef96fc154cb2dc9cc) ([#15974](https://github.com/yt-dlp/yt-dlp/issues/15974)) by [bashonly](https://github.com/bashonly)
|
||||||
|
- **opencast**: [Support `oc-p.uni-jena.de` URLs](https://github.com/yt-dlp/yt-dlp/commit/166356d1a1cac19cac14298e735eeae44b52c70e) ([#16026](https://github.com/yt-dlp/yt-dlp/issues/16026)) by [LordMZTE](https://github.com/LordMZTE)
|
||||||
|
- **pornhub**: [Fix extractor](https://github.com/yt-dlp/yt-dlp/commit/6f38df31b477cf5ea3c8f91207452e3a4e8d5aa6) ([#15858](https://github.com/yt-dlp/yt-dlp/issues/15858)) by [beacdeac](https://github.com/beacdeac)
|
||||||
|
- **saucepluschannel**: [Add extractor](https://github.com/yt-dlp/yt-dlp/commit/97f03660f55696dc9fce56e7ee43fbe3324a9867) ([#15830](https://github.com/yt-dlp/yt-dlp/issues/15830)) by [regulad](https://github.com/regulad)
|
||||||
|
- **soundcloud**
|
||||||
|
- [Fix client ID extraction](https://github.com/yt-dlp/yt-dlp/commit/81bdea03f3414dd4d086610c970ec14e15bd3d36) ([#16019](https://github.com/yt-dlp/yt-dlp/issues/16019)) by [bashonly](https://github.com/bashonly)
|
||||||
|
- [Support browser impersonation](https://github.com/yt-dlp/yt-dlp/commit/f532a91cef11075eb5a7809255259b32d2bca8ca) ([#16020](https://github.com/yt-dlp/yt-dlp/issues/16020)) by [bashonly](https://github.com/bashonly)
|
||||||
|
- **spankbang**
|
||||||
|
- [Fix playlist title extraction](https://github.com/yt-dlp/yt-dlp/commit/1fe0bf23aa2249858c08408b7cc6287aaf528690) ([#14132](https://github.com/yt-dlp/yt-dlp/issues/14132)) by [blauerdorf](https://github.com/blauerdorf)
|
||||||
|
- [Support browser impersonation](https://github.com/yt-dlp/yt-dlp/commit/f05e1cd1f1052cb40fc966d2fc175571986da863) ([#14130](https://github.com/yt-dlp/yt-dlp/issues/14130)) by [blauerdorf](https://github.com/blauerdorf)
|
||||||
|
- **steam**: [Fix extractor](https://github.com/yt-dlp/yt-dlp/commit/1a9c4b8238434c760b3e27d0c9df6a4a2482d918) ([#15028](https://github.com/yt-dlp/yt-dlp/issues/15028)) by [doe1080](https://github.com/doe1080)
|
||||||
|
- **tele5**: [Fix extractor](https://github.com/yt-dlp/yt-dlp/commit/772559e3db2eb82e5d862d6d779588ca4b0b048d) ([#16005](https://github.com/yt-dlp/yt-dlp/issues/16005)) by [bashonly](https://github.com/bashonly)
|
||||||
|
- **tver**: olympic: [Add extractor](https://github.com/yt-dlp/yt-dlp/commit/02ce3efbfe51d54cb0866953af423fc6d1f38933) ([#15885](https://github.com/yt-dlp/yt-dlp/issues/15885)) by [doe1080](https://github.com/doe1080)
|
||||||
|
- **tvo**: [Add extractor](https://github.com/yt-dlp/yt-dlp/commit/a13f281012a21c85f76cf3e320fc3b00d480d6c6) ([#15903](https://github.com/yt-dlp/yt-dlp/issues/15903)) by [doe1080](https://github.com/doe1080)
|
||||||
|
- **twitter**: [Fix error handling](https://github.com/yt-dlp/yt-dlp/commit/0d8898c3f4e76742afb2b877f817fdee89fa1258) ([#15993](https://github.com/yt-dlp/yt-dlp/issues/15993)) by [bashonly](https://github.com/bashonly) (With fixes in [7722109](https://github.com/yt-dlp/yt-dlp/commit/77221098fc5016f12118421982f02b662021972c))
|
||||||
|
- **visir**: [Add extractor](https://github.com/yt-dlp/yt-dlp/commit/c7c45f52890eee40565188aee874ff4e58e95c4f) ([#15811](https://github.com/yt-dlp/yt-dlp/issues/15811)) by [doe1080](https://github.com/doe1080)
|
||||||
|
- **vk**: [Solve JS challenges using native JS interpreter](https://github.com/yt-dlp/yt-dlp/commit/acfc00a955208ee780b4cb18ae26de7b62444153) ([#15992](https://github.com/yt-dlp/yt-dlp/issues/15992)) by [0xvd](https://github.com/0xvd), [bashonly](https://github.com/bashonly)
|
||||||
|
- **xhamster**: [Fix extractor](https://github.com/yt-dlp/yt-dlp/commit/133cb959be4d268e2cd6b3f1d9bf87fba4c3743e) ([#15831](https://github.com/yt-dlp/yt-dlp/issues/15831)) by [0xvd](https://github.com/0xvd)
|
||||||
|
- **youtube**
|
||||||
|
- [Add more known player JS variants](https://github.com/yt-dlp/yt-dlp/commit/2204cee6d8301e491d8455a2c54fd0e1b23468f5) ([#15975](https://github.com/yt-dlp/yt-dlp/issues/15975)) by [bashonly](https://github.com/bashonly)
|
||||||
|
- [Extract live adaptive `incomplete` formats](https://github.com/yt-dlp/yt-dlp/commit/319a2bda83f5e54054661c56c1391533f82473c2) ([#15937](https://github.com/yt-dlp/yt-dlp/issues/15937)) by [bashonly](https://github.com/bashonly), [CanOfSocks](https://github.com/CanOfSocks)
|
||||||
|
- [Update ejs to 0.5.0](https://github.com/yt-dlp/yt-dlp/commit/c105461647315f7f479091194944713b392ca729) ([#16031](https://github.com/yt-dlp/yt-dlp/issues/16031)) by [bashonly](https://github.com/bashonly)
|
||||||
|
- date, search: [Remove broken `ytsearchdate` support](https://github.com/yt-dlp/yt-dlp/commit/c7945800e4ccd8cad2d5ee7806a872963c0c6d44) ([#15959](https://github.com/yt-dlp/yt-dlp/issues/15959)) by [stastix](https://github.com/stastix)
|
||||||
|
|
||||||
|
#### Networking changes
|
||||||
|
- **Request Handler**: curl_cffi: [Deprioritize unreliable impersonate targets](https://github.com/yt-dlp/yt-dlp/commit/e74076141dc86d5603680ea641d7cec86a821ac8) ([#16018](https://github.com/yt-dlp/yt-dlp/issues/16018)) by [bashonly](https://github.com/bashonly)
|
||||||
|
|
||||||
|
#### Misc. changes
|
||||||
|
- **cleanup**
|
||||||
|
- [Bump ruff to 0.15.x](https://github.com/yt-dlp/yt-dlp/commit/abade83f8ddb63a11746b69038ebcd9c1405a00a) ([#15951](https://github.com/yt-dlp/yt-dlp/issues/15951)) by [Grub4K](https://github.com/Grub4K)
|
||||||
|
- Miscellaneous: [646bb31](https://github.com/yt-dlp/yt-dlp/commit/646bb31f39614e6c2f7ba687c53e7496394cbadb) by [Grub4K](https://github.com/Grub4K)
|
||||||
|
|
||||||
### 2026.02.04
|
### 2026.02.04
|
||||||
|
|
||||||
#### Extractor changes
|
#### Extractor changes
|
||||||
|
|||||||
6
Makefile
6
Makefile
@ -202,9 +202,9 @@ CONTRIBUTORS: Changelog.md
|
|||||||
|
|
||||||
# The following EJS_-prefixed variables are auto-generated by devscripts/update_ejs.py
|
# The following EJS_-prefixed variables are auto-generated by devscripts/update_ejs.py
|
||||||
# DO NOT EDIT!
|
# DO NOT EDIT!
|
||||||
EJS_VERSION = 0.4.0
|
EJS_VERSION = 0.8.0
|
||||||
EJS_WHEEL_NAME = yt_dlp_ejs-0.4.0-py3-none-any.whl
|
EJS_WHEEL_NAME = yt_dlp_ejs-0.8.0-py3-none-any.whl
|
||||||
EJS_WHEEL_HASH = sha256:19278cff397b243074df46342bb7616c404296aeaff01986b62b4e21823b0b9c
|
EJS_WHEEL_HASH = sha256:79300e5fca7f937a1eeede11f0456862c1b41107ce1d726871e0207424f4bdb4
|
||||||
EJS_PY_FOLDERS = yt_dlp_ejs yt_dlp_ejs/yt yt_dlp_ejs/yt/solver
|
EJS_PY_FOLDERS = yt_dlp_ejs yt_dlp_ejs/yt yt_dlp_ejs/yt/solver
|
||||||
EJS_PY_FILES = yt_dlp_ejs/__init__.py yt_dlp_ejs/_version.py yt_dlp_ejs/yt/__init__.py yt_dlp_ejs/yt/solver/__init__.py
|
EJS_PY_FILES = yt_dlp_ejs/__init__.py yt_dlp_ejs/_version.py yt_dlp_ejs/yt/__init__.py yt_dlp_ejs/yt/solver/__init__.py
|
||||||
EJS_JS_FOLDERS = yt_dlp_ejs/yt/solver
|
EJS_JS_FOLDERS = yt_dlp_ejs/yt/solver
|
||||||
|
|||||||
21
README.md
21
README.md
@ -229,7 +229,7 @@ The following provide support for impersonating browser requests. This may be re
|
|||||||
|
|
||||||
* [**curl_cffi**](https://github.com/lexiforest/curl_cffi) (recommended) - Python binding for [curl-impersonate](https://github.com/lexiforest/curl-impersonate). Provides impersonation targets for Chrome, Edge and Safari. Licensed under [MIT](https://github.com/lexiforest/curl_cffi/blob/main/LICENSE)
|
* [**curl_cffi**](https://github.com/lexiforest/curl_cffi) (recommended) - Python binding for [curl-impersonate](https://github.com/lexiforest/curl-impersonate). Provides impersonation targets for Chrome, Edge and Safari. Licensed under [MIT](https://github.com/lexiforest/curl_cffi/blob/main/LICENSE)
|
||||||
* Can be installed with the `curl-cffi` extra, e.g. `pip install "yt-dlp[default,curl-cffi]"`
|
* Can be installed with the `curl-cffi` extra, e.g. `pip install "yt-dlp[default,curl-cffi]"`
|
||||||
* Currently included in most builds *except* `yt-dlp` (Unix zipimport binary), `yt-dlp_x86` (Windows 32-bit) and `yt-dlp_musllinux_aarch64`
|
* Currently included in most builds *except* `yt-dlp` (Unix zipimport binary) and `yt-dlp_x86` (Windows 32-bit)
|
||||||
|
|
||||||
|
|
||||||
### Metadata
|
### Metadata
|
||||||
@ -265,7 +265,7 @@ To build the standalone executable, you must have Python and `pyinstaller` (plus
|
|||||||
You can run the following commands:
|
You can run the following commands:
|
||||||
|
|
||||||
```
|
```
|
||||||
python devscripts/install_deps.py --include-extra pyinstaller
|
python devscripts/install_deps.py --include-group pyinstaller
|
||||||
python devscripts/make_lazy_extractors.py
|
python devscripts/make_lazy_extractors.py
|
||||||
python -m bundle.pyinstaller
|
python -m bundle.pyinstaller
|
||||||
```
|
```
|
||||||
@ -406,7 +406,7 @@ Tip: Use `CTRL`+`F` (or `Command`+`F`) to search by keywords
|
|||||||
(default)
|
(default)
|
||||||
--live-from-start Download livestreams from the start.
|
--live-from-start Download livestreams from the start.
|
||||||
Currently experimental and only supported
|
Currently experimental and only supported
|
||||||
for YouTube and Twitch
|
for YouTube, Twitch, and TVer
|
||||||
--no-live-from-start Download livestreams from the current time
|
--no-live-from-start Download livestreams from the current time
|
||||||
(default)
|
(default)
|
||||||
--wait-for-video MIN[-MAX] Wait for scheduled streams to become
|
--wait-for-video MIN[-MAX] Wait for scheduled streams to become
|
||||||
@ -1860,17 +1860,18 @@ The following extractors use this feature:
|
|||||||
#### youtube
|
#### youtube
|
||||||
* `lang`: Prefer translated metadata (`title`, `description` etc) of this language code (case-sensitive). By default, the video primary language metadata is preferred, with a fallback to `en` translated. See [youtube/_base.py](https://github.com/yt-dlp/yt-dlp/blob/415b4c9f955b1a0391204bd24a7132590e7b3bdb/yt_dlp/extractor/youtube/_base.py#L402-L409) for the list of supported content language codes
|
* `lang`: Prefer translated metadata (`title`, `description` etc) of this language code (case-sensitive). By default, the video primary language metadata is preferred, with a fallback to `en` translated. See [youtube/_base.py](https://github.com/yt-dlp/yt-dlp/blob/415b4c9f955b1a0391204bd24a7132590e7b3bdb/yt_dlp/extractor/youtube/_base.py#L402-L409) for the list of supported content language codes
|
||||||
* `skip`: One or more of `hls`, `dash` or `translated_subs` to skip extraction of the m3u8 manifests, dash manifests and [auto-translated subtitles](https://github.com/yt-dlp/yt-dlp/issues/4090#issuecomment-1158102032) respectively
|
* `skip`: One or more of `hls`, `dash` or `translated_subs` to skip extraction of the m3u8 manifests, dash manifests and [auto-translated subtitles](https://github.com/yt-dlp/yt-dlp/issues/4090#issuecomment-1158102032) respectively
|
||||||
* `player_client`: Clients to extract video data from. The currently available clients are `web`, `web_safari`, `web_embedded`, `web_music`, `web_creator`, `mweb`, `ios`, `android`, `android_vr`, `tv`, `tv_downgraded`, and `tv_simply`. By default, `android_vr,web,web_safari` is used. If no JavaScript runtime/engine is available, then only `android_vr` is used. If logged-in cookies are passed to yt-dlp, then `tv_downgraded,web,web_safari` is used for free accounts and `tv_downgraded,web_creator,web` is used for premium accounts. The `web_music` client is added for `music.youtube.com` URLs when logged-in cookies are used. The `web_embedded` client is added for age-restricted videos but only successfully works around the age-restriction sometimes (e.g. if the video is embeddable), and may be added as a fallback if `android_vr` is unable to access a video. The `web_creator` client is added for age-restricted videos if account age-verification is required. Some clients, such as `web_creator` and `web_music`, require a `po_token` for their formats to be downloadable. Some clients, such as `web_creator`, will only work with authentication. Not all clients support authentication via cookies. You can use `default` for the default clients, or you can use `all` for all clients (not recommended). You can prefix a client with `-` to exclude it, e.g. `youtube:player_client=default,-web`
|
* `player_client`: Clients to extract video data from. The currently available clients are `web`, `web_safari`, `web_embedded`, `web_music`, `web_creator`, `mweb`, `ios`, `android`, `android_vr`, `tv`, `tv_downgraded`, and `tv_simply`. By default, `android_vr,web_safari` is used. If no JavaScript runtime/engine is available, then only `android_vr` is used. If logged-in cookies are passed to yt-dlp, then `tv_downgraded,web_safari` is used for free accounts and `tv_downgraded,web_creator` is used for premium accounts. The `web_music` client is added for `music.youtube.com` URLs when logged-in cookies are used. The `web_embedded` client is added for age-restricted videos but only successfully works around the age-restriction sometimes (e.g. if the video is embeddable), and may be added as a fallback if `android_vr` is unable to access a video. The `web_creator` client is added for age-restricted videos if account age-verification is required. Some clients, such as `web_creator` and `web_music`, require a `po_token` for their formats to be downloadable. Some clients, such as `web_creator`, will only work with authentication. Not all clients support authentication via cookies. You can use `default` for the default clients, or you can use `all` for all clients (not recommended). You can prefix a client with `-` to exclude it, e.g. `youtube:player_client=default,-web_safari`
|
||||||
* `player_skip`: Skip some network requests that are generally needed for robust extraction. One or more of `configs` (skip client configs), `webpage` (skip initial webpage), `js` (skip js player), `initial_data` (skip initial data/next ep request). While these options can help reduce the number of requests needed or avoid some rate-limiting, they could cause issues such as missing formats or metadata. See [#860](https://github.com/yt-dlp/yt-dlp/pull/860) and [#12826](https://github.com/yt-dlp/yt-dlp/issues/12826) for more details
|
* `player_skip`: Skip some network requests that are generally needed for robust extraction. One or more of `configs` (skip client configs), `webpage` (skip initial webpage), `js` (skip js player), `initial_data` (skip initial data/next ep request). While these options can help reduce the number of requests needed or avoid some rate-limiting, they could cause issues such as missing formats or metadata. See [#860](https://github.com/yt-dlp/yt-dlp/pull/860) and [#12826](https://github.com/yt-dlp/yt-dlp/issues/12826) for more details
|
||||||
* `webpage_skip`: Skip extraction of embedded webpage data. One or both of `player_response`, `initial_data`. These options are for testing purposes and don't skip any network requests
|
* `webpage_skip`: Skip extraction of embedded webpage data. One or both of `player_response`, `initial_data`. These options are for testing purposes and don't skip any network requests. Neither is skipped by default; however, if a `player_js_version` value other than `actual` is used, then `webpage_skip=player_response` is implied
|
||||||
|
* `webpage_client`: Client to use for the video webpage request. One of `web` or `web_safari` (default)
|
||||||
* `player_params`: YouTube player parameters to use for player requests. Will overwrite any default ones set by yt-dlp.
|
* `player_params`: YouTube player parameters to use for player requests. Will overwrite any default ones set by yt-dlp.
|
||||||
* `player_js_variant`: The player javascript variant to use for n/sig deciphering. The known variants are: `main`, `tcc`, `tce`, `es5`, `es6`, `tv`, `tv_es6`, `phone`. The default is `tv`, and the others are for debugging purposes. You can use `actual` to go with what is prescribed by the site
|
* `player_js_variant`: The player javascript variant to use for n/sig deciphering. The known variants are: `main`, `tcc`, `tce`, `es5`, `es6`, `es6_tcc`, `es6_tce`, `tv`, `tv_es6`, `phone`, `house`. The default is `main`, and the others are for debugging purposes. You can use `actual` to go with what is prescribed by the site
|
||||||
* `player_js_version`: The player javascript version to use for n/sig deciphering, in the format of `signature_timestamp@hash` (e.g. `20348@0004de42`). The default is to use what is prescribed by the site, and can be selected with `actual`
|
* `player_js_version`: The player javascript version to use for n/sig deciphering, in the format of `signature_timestamp@hash` (e.g. `20348@0004de42`). The default is to use what is prescribed by the site, and can be selected with `actual`. Using any other value will imply `webpage_skip=player_response`
|
||||||
* `comment_sort`: `top` or `new` (default) - choose comment sorting mode (on YouTube's side)
|
* `comment_sort`: `top` or `new` (default) - choose comment sorting mode (on YouTube's side)
|
||||||
* `max_comments`: Limit the amount of comments to gather. Comma-separated list of integers representing `max-comments,max-parents,max-replies,max-replies-per-thread,max-depth`. Default is `all,all,all,all,all`
|
* `max_comments`: Limit the amount of comments to gather. Comma-separated list of integers representing `max-comments,max-parents,max-replies,max-replies-per-thread,max-depth`. Default is `all,all,all,all,all`
|
||||||
* A `max-depth` value of `1` will discard all replies, regardless of the `max-replies` or `max-replies-per-thread` values given
|
* A `max-depth` value of `1` will discard all replies, regardless of the `max-replies` or `max-replies-per-thread` values given
|
||||||
* E.g. `all,all,1000,10,2` will get a maximum of 1000 replies total, with up to 10 replies per thread, and only 2 levels of depth (i.e. top-level comments plus their immediate replies). `1000,all,100` will get a maximum of 1000 comments, with a maximum of 100 replies total
|
* E.g. `all,all,1000,10,2` will get a maximum of 1000 replies total, with up to 10 replies per thread, and only 2 levels of depth (i.e. top-level comments plus their immediate replies). `1000,all,100` will get a maximum of 1000 comments, with a maximum of 100 replies total
|
||||||
* `formats`: Change the types of formats to return. `dashy` (convert HTTP to DASH), `duplicate` (identical content but different URLs or protocol; includes `dashy`), `incomplete` (cannot be downloaded completely - live dash and post-live m3u8), `missing_pot` (include formats that require a PO Token but are missing one)
|
* `formats`: Change the types of formats to return. `dashy` (convert HTTP to DASH), `duplicate` (identical content but different URLs or protocol; includes `dashy`), `incomplete` (cannot be downloaded completely - live dash, live adaptive https, and post-live m3u8), `missing_pot` (include formats that require a PO Token but are missing one)
|
||||||
* `innertube_host`: Innertube API host to use for all API requests; e.g. `studio.youtube.com`, `youtubei.googleapis.com`. Note that cookies exported from one subdomain will not work on others
|
* `innertube_host`: Innertube API host to use for all API requests; e.g. `studio.youtube.com`, `youtubei.googleapis.com`. Note that cookies exported from one subdomain will not work on others
|
||||||
* `innertube_key`: Innertube API key to use for all API requests. By default, no API key is used
|
* `innertube_key`: Innertube API key to use for all API requests. By default, no API key is used
|
||||||
* `raise_incomplete_data`: `Incomplete Data Received` raises an error instead of reporting a warning
|
* `raise_incomplete_data`: `Incomplete Data Received` raises an error instead of reporting a warning
|
||||||
@ -1880,7 +1881,7 @@ The following extractors use this feature:
|
|||||||
* `pot_trace`: Enable debug logging for PO Token fetching. Either `true` or `false` (default)
|
* `pot_trace`: Enable debug logging for PO Token fetching. Either `true` or `false` (default)
|
||||||
* `fetch_pot`: Policy to use for fetching a PO Token from providers. One of `always` (always try fetch a PO Token regardless if the client requires one for the given context), `never` (never fetch a PO Token), or `auto` (default; only fetch a PO Token if the client requires one for the given context)
|
* `fetch_pot`: Policy to use for fetching a PO Token from providers. One of `always` (always try fetch a PO Token regardless if the client requires one for the given context), `never` (never fetch a PO Token), or `auto` (default; only fetch a PO Token if the client requires one for the given context)
|
||||||
* `jsc_trace`: Enable debug logging for JS Challenge fetching. Either `true` or `false` (default)
|
* `jsc_trace`: Enable debug logging for JS Challenge fetching. Either `true` or `false` (default)
|
||||||
* `use_ad_playback_context`: Skip preroll ads to eliminate the mandatory wait period before download. Do NOT use this when passing premium account cookies to yt-dlp, as it will result in a loss of premium formats. Only effective with the `web`, `web_safari`, `web_music` and `mweb` player clients. Either `true` or `false` (default)
|
* `use_ad_playback_context`: Skip preroll ads to eliminate the mandatory wait period before download. Do NOT use this when passing premium account cookies to yt-dlp, as it will result in a loss of premium formats. Only effective with the `mweb` and `web_music` player clients. Either `true` or `false` (default)
|
||||||
|
|
||||||
#### youtube-ejs
|
#### youtube-ejs
|
||||||
* `jitless`: Run supported Javascript engines in JIT-less mode. Supported runtimes are `deno`, `node` and `bun`. Provides better security at the cost of performance/speed. Do note that `node` and `bun` are still considered insecure. Either `true` or `false` (default)
|
* `jitless`: Run supported Javascript engines in JIT-less mode. Supported runtimes are `deno`, `node` and `bun`. Provides better security at the cost of performance/speed. Do note that `node` and `bun` are still considered insecure. Either `true` or `false` (default)
|
||||||
@ -2261,7 +2262,7 @@ with yt_dlp.YoutubeDL(ydl_opts) as ydl:
|
|||||||
* **Merged with animelover1984/youtube-dl**: You get most of the features and improvements from [animelover1984/youtube-dl](https://github.com/animelover1984/youtube-dl) including `--write-comments`, `BiliBiliSearch`, `BilibiliChannel`, Embedding thumbnail in mp4/ogg/opus, playlist infojson etc. See [#31](https://github.com/yt-dlp/yt-dlp/pull/31) for details.
|
* **Merged with animelover1984/youtube-dl**: You get most of the features and improvements from [animelover1984/youtube-dl](https://github.com/animelover1984/youtube-dl) including `--write-comments`, `BiliBiliSearch`, `BilibiliChannel`, Embedding thumbnail in mp4/ogg/opus, playlist infojson etc. See [#31](https://github.com/yt-dlp/yt-dlp/pull/31) for details.
|
||||||
|
|
||||||
* **YouTube improvements**:
|
* **YouTube improvements**:
|
||||||
* Supports Clips, Stories (`ytstories:<channel UCID>`), Search (including filters)**\***, YouTube Music Search, Channel-specific search, Search prefixes (`ytsearch:`, `ytsearchdate:`)**\***, Mixes, and Feeds (`:ytfav`, `:ytwatchlater`, `:ytsubs`, `:ythistory`, `:ytrec`, `:ytnotif`)
|
* Supports Clips, Stories (`ytstories:<channel UCID>`), Search (including filters)**\***, YouTube Music Search, Channel-specific search, Search prefix (`ytsearch:`)**\***, Mixes, and Feeds (`:ytfav`, `:ytwatchlater`, `:ytsubs`, `:ythistory`, `:ytrec`, `:ytnotif`)
|
||||||
* Fix for [n-sig based throttling](https://github.com/ytdl-org/youtube-dl/issues/29326) **\***
|
* Fix for [n-sig based throttling](https://github.com/ytdl-org/youtube-dl/issues/29326) **\***
|
||||||
* Download livestreams from the start using `--live-from-start` (*experimental*)
|
* Download livestreams from the start using `--live-from-start` (*experimental*)
|
||||||
* Channel URLs download all uploads of the channel, including shorts and live
|
* Channel URLs download all uploads of the channel, including shorts and live
|
||||||
|
|||||||
@ -9,6 +9,7 @@ services:
|
|||||||
args:
|
args:
|
||||||
BUILDIMAGE: ghcr.io/yt-dlp/manylinux2014_x86_64-shared:latest
|
BUILDIMAGE: ghcr.io/yt-dlp/manylinux2014_x86_64-shared:latest
|
||||||
environment:
|
environment:
|
||||||
|
REQUIREMENTS: linux-x86_64
|
||||||
EXE_NAME: ${EXE_NAME:?}
|
EXE_NAME: ${EXE_NAME:?}
|
||||||
CHANNEL: ${CHANNEL:?}
|
CHANNEL: ${CHANNEL:?}
|
||||||
ORIGIN: ${ORIGIN:?}
|
ORIGIN: ${ORIGIN:?}
|
||||||
@ -44,6 +45,7 @@ services:
|
|||||||
args:
|
args:
|
||||||
BUILDIMAGE: ghcr.io/yt-dlp/manylinux2014_aarch64-shared:latest
|
BUILDIMAGE: ghcr.io/yt-dlp/manylinux2014_aarch64-shared:latest
|
||||||
environment:
|
environment:
|
||||||
|
REQUIREMENTS: linux-aarch64
|
||||||
EXE_NAME: ${EXE_NAME:?}
|
EXE_NAME: ${EXE_NAME:?}
|
||||||
CHANNEL: ${CHANNEL:?}
|
CHANNEL: ${CHANNEL:?}
|
||||||
ORIGIN: ${ORIGIN:?}
|
ORIGIN: ${ORIGIN:?}
|
||||||
@ -79,6 +81,7 @@ services:
|
|||||||
args:
|
args:
|
||||||
BUILDIMAGE: ghcr.io/yt-dlp/manylinux_2_31_armv7l-shared:latest
|
BUILDIMAGE: ghcr.io/yt-dlp/manylinux_2_31_armv7l-shared:latest
|
||||||
environment:
|
environment:
|
||||||
|
REQUIREMENTS: linux-armv7l
|
||||||
EXE_NAME: ${EXE_NAME:?}
|
EXE_NAME: ${EXE_NAME:?}
|
||||||
CHANNEL: ${CHANNEL:?}
|
CHANNEL: ${CHANNEL:?}
|
||||||
ORIGIN: ${ORIGIN:?}
|
ORIGIN: ${ORIGIN:?}
|
||||||
@ -88,7 +91,6 @@ services:
|
|||||||
SKIP_ONEFILE_BUILD:
|
SKIP_ONEFILE_BUILD:
|
||||||
volumes:
|
volumes:
|
||||||
- ../..:/yt-dlp
|
- ../..:/yt-dlp
|
||||||
- ../../venv:/yt-dlp-build-venv
|
|
||||||
|
|
||||||
linux_armv7l_verify:
|
linux_armv7l_verify:
|
||||||
build:
|
build:
|
||||||
@ -115,6 +117,7 @@ services:
|
|||||||
args:
|
args:
|
||||||
BUILDIMAGE: ghcr.io/yt-dlp/musllinux_1_2_x86_64-shared:latest
|
BUILDIMAGE: ghcr.io/yt-dlp/musllinux_1_2_x86_64-shared:latest
|
||||||
environment:
|
environment:
|
||||||
|
REQUIREMENTS: musllinux-x86_64
|
||||||
EXE_NAME: ${EXE_NAME:?}
|
EXE_NAME: ${EXE_NAME:?}
|
||||||
CHANNEL: ${CHANNEL:?}
|
CHANNEL: ${CHANNEL:?}
|
||||||
ORIGIN: ${ORIGIN:?}
|
ORIGIN: ${ORIGIN:?}
|
||||||
@ -150,6 +153,7 @@ services:
|
|||||||
args:
|
args:
|
||||||
BUILDIMAGE: ghcr.io/yt-dlp/musllinux_1_2_aarch64-shared:latest
|
BUILDIMAGE: ghcr.io/yt-dlp/musllinux_1_2_aarch64-shared:latest
|
||||||
environment:
|
environment:
|
||||||
|
REQUIREMENTS: musllinux-aarch64
|
||||||
EXE_NAME: ${EXE_NAME:?}
|
EXE_NAME: ${EXE_NAME:?}
|
||||||
CHANNEL: ${CHANNEL:?}
|
CHANNEL: ${CHANNEL:?}
|
||||||
ORIGIN: ${ORIGIN:?}
|
ORIGIN: ${ORIGIN:?}
|
||||||
@ -157,7 +161,6 @@ services:
|
|||||||
PYTHON_VERSION:
|
PYTHON_VERSION:
|
||||||
SKIP_ONEDIR_BUILD:
|
SKIP_ONEDIR_BUILD:
|
||||||
SKIP_ONEFILE_BUILD:
|
SKIP_ONEFILE_BUILD:
|
||||||
EXCLUDE_CURL_CFFI: "1"
|
|
||||||
volumes:
|
volumes:
|
||||||
- ../..:/yt-dlp
|
- ../..:/yt-dlp
|
||||||
|
|
||||||
|
|||||||
@ -6,20 +6,15 @@ if [[ -z "${PYTHON_VERSION:-}" ]]; then
|
|||||||
echo "Defaulting to using Python ${PYTHON_VERSION}"
|
echo "Defaulting to using Python ${PYTHON_VERSION}"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
INCLUDES=(
|
# Set up virtual environment
|
||||||
--include-extra pyinstaller
|
rm -rf .venv
|
||||||
--include-extra secretstorage
|
py"${PYTHON_VERSION}" -m venv .venv --without-pip
|
||||||
)
|
PYTHONPATH="$(py"${PYTHON_VERSION}" -c 'import sysconfig; print(sysconfig.get_path("purelib"))')"
|
||||||
|
export PYTHONPATH
|
||||||
if [[ -z "${EXCLUDE_CURL_CFFI:-}" ]]; then
|
|
||||||
INCLUDES+=(--include-extra build-curl-cffi)
|
|
||||||
fi
|
|
||||||
|
|
||||||
py"${PYTHON_VERSION}" -m venv /yt-dlp-build-venv
|
|
||||||
# shellcheck disable=SC1091
|
# shellcheck disable=SC1091
|
||||||
source /yt-dlp-build-venv/bin/activate
|
source .venv/bin/activate
|
||||||
# Inside the venv we can use python instead of py3.13 or py3.14 etc
|
|
||||||
python -m devscripts.install_deps "${INCLUDES[@]}"
|
python -m pip install -U --require-hashes -r "bundle/requirements/requirements-${REQUIREMENTS}.txt"
|
||||||
python -m devscripts.make_lazy_extractors
|
python -m devscripts.make_lazy_extractors
|
||||||
python devscripts/update-version.py -c "${CHANNEL}" -r "${ORIGIN}" "${VERSION}"
|
python devscripts/update-version.py -c "${CHANNEL}" -r "${ORIGIN}" "${VERSION}"
|
||||||
|
|
||||||
|
|||||||
524
bundle/requirements/requirements-linux-aarch64.txt
Normal file
524
bundle/requirements/requirements-linux-aarch64.txt
Normal file
@ -0,0 +1,524 @@
|
|||||||
|
# This file was autogenerated by uv via the following command:
|
||||||
|
# uv export --no-python-downloads --no-progress --color=never --format=requirements.txt --frozen --refresh --no-emit-project --no-default-groups --extra=default --extra=curl-cffi --extra=secretstorage --group=pyinstaller --output-file=bundle/requirements/requirements-linux-aarch64.txt
|
||||||
|
altgraph==0.17.5 \
|
||||||
|
--hash=sha256:c87b395dd12fabde9c99573a9749d67da8d29ef9de0125c7f536699b4a9bc9e7 \
|
||||||
|
--hash=sha256:f3a22400bce1b0c701683820ac4f3b159cd301acab067c51c653e06961600597
|
||||||
|
# via
|
||||||
|
# macholib
|
||||||
|
# pyinstaller
|
||||||
|
brotli==1.2.0 ; implementation_name == 'cpython' and sys_platform != 'ios' \
|
||||||
|
--hash=sha256:022426c9e99fd65d9475dce5c195526f04bb8be8907607e27e747893f6ee3e24 \
|
||||||
|
--hash=sha256:072e7624b1fc4d601036ab3f4f27942ef772887e876beff0301d261210bca97f \
|
||||||
|
--hash=sha256:0bbd5b5ccd157ae7913750476d48099aaf507a79841c0d04a9db4415b14842de \
|
||||||
|
--hash=sha256:0cf8c3b8ba93d496b2fae778039e2f5ecc7cff99df84df337ca31d8f2252896c \
|
||||||
|
--hash=sha256:15b33fe93cedc4caaff8a0bd1eb7e3dab1c61bb22a0bf5bdfdfd97cd7da79744 \
|
||||||
|
--hash=sha256:1b1d6a4efedd53671c793be6dd760fcf2107da3a52331ad9ea429edf0902f27a \
|
||||||
|
--hash=sha256:1b557b29782a643420e08d75aea889462a4a8796e9a6cf5621ab05a3f7da8ef2 \
|
||||||
|
--hash=sha256:260d3692396e1895c5034f204f0db022c056f9e2ac841593a4cf9426e2a3faca \
|
||||||
|
--hash=sha256:26e8d3ecb0ee458a9804f47f21b74845cc823fd1bb19f02272be70774f56e2a6 \
|
||||||
|
--hash=sha256:2a7f1d03727130fc875448b65b127a9ec5d06d19d0148e7554384229706f9d1b \
|
||||||
|
--hash=sha256:2e1ad3fda65ae0d93fec742a128d72e145c9c7a99ee2fcd667785d99eb25a7fe \
|
||||||
|
--hash=sha256:3219bd9e69868e57183316ee19c84e03e8f8b5a1d1f2667e1aa8c2f91cb061ac \
|
||||||
|
--hash=sha256:350c8348f0e76fff0a0fd6c26755d2653863279d086d3aa2c290a6a7251135dd \
|
||||||
|
--hash=sha256:35d382625778834a7f3061b15423919aa03e4f5da34ac8e02c074e4b75ab4f84 \
|
||||||
|
--hash=sha256:3b90b767916ac44e93a8e28ce6adf8d551e43affb512f2377c732d486ac6514e \
|
||||||
|
--hash=sha256:3e1b35d56856f3ed326b140d3c6d9db91740f22e14b06e840fe4bb1923439a18 \
|
||||||
|
--hash=sha256:3f3c908bcc404c90c77d5a073e55271a0a498f4e0756e48127c35d91cf155947 \
|
||||||
|
--hash=sha256:40d918bce2b427a0c4ba189df7a006ac0c7277c180aee4617d99e9ccaaf59e6a \
|
||||||
|
--hash=sha256:4ecdb3b6dc36e6d6e14d3a1bdc6c1057c8cbf80db04031d566eb6080ce283a48 \
|
||||||
|
--hash=sha256:54a50a9dad16b32136b2241ddea9e4df159b41247b2ce6aac0b3276a66a8f1e5 \
|
||||||
|
--hash=sha256:67a91c5187e1eec76a61625c77a6c8c785650f5b576ca732bd33ef58b0dff49c \
|
||||||
|
--hash=sha256:6be67c19e0b0c56365c6a76e393b932fb0e78b3b56b711d180dd7013cb1fd984 \
|
||||||
|
--hash=sha256:6c12dad5cd04530323e723787ff762bac749a7b256a5bece32b2243dd5c27b21 \
|
||||||
|
--hash=sha256:7547369c4392b47d30a3467fe8c3330b4f2e0f7730e45e3103d7d636678a808b \
|
||||||
|
--hash=sha256:7a47ce5c2288702e09dc22a44d0ee6152f2c7eda97b3c8482d826a1f3cfc7da7 \
|
||||||
|
--hash=sha256:7a61c06b334bd99bc5ae84f1eeb36bfe01400264b3c352f968c6e30a10f9d08b \
|
||||||
|
--hash=sha256:81da1b229b1889f25adadc929aeb9dbc4e922bd18561b65b08dd9343cfccca84 \
|
||||||
|
--hash=sha256:832c115a020e463c2f67664560449a7bea26b0c1fdd690352addad6d0a08714d \
|
||||||
|
--hash=sha256:844a8ceb8483fefafc412f85c14f2aae2fb69567bf2a0de53cdb88b73e7c43ae \
|
||||||
|
--hash=sha256:898be2be399c221d2671d29eed26b6b2713a02c2119168ed914e7d00ceadb56f \
|
||||||
|
--hash=sha256:9322b9f8656782414b37e6af884146869d46ab85158201d82bab9abbcb971dc7 \
|
||||||
|
--hash=sha256:963a08f3bebd8b75ac57661045402da15991468a621f014be54e50f53a58d19e \
|
||||||
|
--hash=sha256:9c79f57faa25d97900bfb119480806d783fba83cd09ee0b33c17623935b05fa3 \
|
||||||
|
--hash=sha256:9e5825ba2c9998375530504578fd4d5d1059d09621a02065d1b6bfc41a8e05ab \
|
||||||
|
--hash=sha256:a1778532b978d2536e79c05dac2d8cd857f6c55cd0c95ace5b03740824e0e2f1 \
|
||||||
|
--hash=sha256:aa47441fa3026543513139cb8926a92a8e305ee9c71a6209ef7a97d91640ea03 \
|
||||||
|
--hash=sha256:acec55bb7c90f1dfc476126f9711a8e81c9af7fb617409a9ee2953115343f08d \
|
||||||
|
--hash=sha256:adedc4a67e15327dfdd04884873c6d5a01d3e3b6f61406f99b1ed4865a2f6d28 \
|
||||||
|
--hash=sha256:af43b8711a8264bb4e7d6d9a6d004c3a2019c04c01127a868709ec29962b6036 \
|
||||||
|
--hash=sha256:b232029d100d393ae3c603c8ffd7e3fe6f798c5e28ddca5feabb8e8fdb732997 \
|
||||||
|
--hash=sha256:b35c13ce241abdd44cb8ca70683f20c0c079728a36a996297adb5334adfc1c44 \
|
||||||
|
--hash=sha256:b63daa43d82f0cdabf98dee215b375b4058cce72871fd07934f179885aad16e8 \
|
||||||
|
--hash=sha256:c8565e3cdc1808b1a34714b553b262c5de5fbda202285782173ec137fd13709f \
|
||||||
|
--hash=sha256:cf9cba6f5b78a2071ec6fb1e7bd39acf35071d90a81231d67e92d637776a6a63 \
|
||||||
|
--hash=sha256:d2d085ded05278d1c7f65560aae97b3160aeb2ea2c0b3e26204856beccb60888 \
|
||||||
|
--hash=sha256:e310f77e41941c13340a95976fe66a8a95b01e783d430eeaf7a2f87e0a57dd0a \
|
||||||
|
--hash=sha256:e7c0af964e0b4e3412a0ebf341ea26ec767fa0b4cf81abb5e897c9338b5ad6a3 \
|
||||||
|
--hash=sha256:e99befa0b48f3cd293dafeacdd0d191804d105d279e0b387a32054c1180f3161 \
|
||||||
|
--hash=sha256:ef87b8ab2704da227e83a246356a2b179ef826f550f794b2c52cddb4efbd0196 \
|
||||||
|
--hash=sha256:fc1530af5c3c275b8524f2e24841cbe2599d74462455e9bae5109e9ff42e9361 \
|
||||||
|
--hash=sha256:ff09cd8c5eec3b9d02d2408db41be150d8891c5566addce57513bf546e3d6c6d
|
||||||
|
# via yt-dlp
|
||||||
|
brotlicffi==1.2.0.1 ; implementation_name != 'cpython' \
|
||||||
|
--hash=sha256:2c85e65913cf2b79c57a3fdd05b98d9731d9255dc0cb696b09376cc091b9cddd \
|
||||||
|
--hash=sha256:37cb587d32bf7168e2218c455e22e409ad1f3157c6c71945879a311f3e6b6abf \
|
||||||
|
--hash=sha256:3c9544f83cb715d95d7eab3af4adbbef8b2093ad6382288a83b3a25feb1a57ec \
|
||||||
|
--hash=sha256:535f2d05d0273408abc13fc0eebb467afac17b0ad85090c8913690d40207dac5 \
|
||||||
|
--hash=sha256:625f8115d32ae9c0740d01ea51518437c3fbaa3e78d41cb18459f6f7ac326000 \
|
||||||
|
--hash=sha256:6f3314a3476f59e5443f9f72a6dff16edc0c3463c9b318feaef04ae3e4683f5a \
|
||||||
|
--hash=sha256:82ea52e2b5d3145b6c406ebd3efb0d55db718b7ad996bd70c62cec0439de1187 \
|
||||||
|
--hash=sha256:91ba5f0ccc040f6ff8f7efaf839f797723d03ed46acb8ae9408f99ffd2572cf4 \
|
||||||
|
--hash=sha256:9d6ba65dd528892b4d9960beba2ae011a753620bcfc66cf6fa3cee18d7b0baa4 \
|
||||||
|
--hash=sha256:be9a670c6811af30a4bd42d7116dc5895d3b41beaa8ed8a89050447a0181f5ce \
|
||||||
|
--hash=sha256:c20d5c596278307ad06414a6d95a892377ea274a5c6b790c2548c009385d621c \
|
||||||
|
--hash=sha256:ce17eb798ca59ecec67a9bb3fd7a4304e120d1cd02953ce522d959b9a84d58ac \
|
||||||
|
--hash=sha256:da2e82a08e7778b8bc539d27ca03cdd684113e81394bfaaad8d0dfc6a17ddede \
|
||||||
|
--hash=sha256:e015af99584c6db1490a69a210c765953e473e63adc2d891ac3062a737c9e851 \
|
||||||
|
--hash=sha256:f2a5575653b0672638ba039b82fda56854934d7a6a24d4b8b5033f73ab43cbc1
|
||||||
|
# via yt-dlp
|
||||||
|
certifi==2026.2.25 \
|
||||||
|
--hash=sha256:027692e4402ad994f1c42e52a4997a9763c646b73e4096e4d5d6db8af1d6f0fa \
|
||||||
|
--hash=sha256:e887ab5cee78ea814d3472169153c2d12cd43b14bd03329a39a9c6e2e80bfba7
|
||||||
|
# via
|
||||||
|
# curl-cffi
|
||||||
|
# requests
|
||||||
|
# yt-dlp
|
||||||
|
cffi==2.0.0 \
|
||||||
|
--hash=sha256:00bdf7acc5f795150faa6957054fbbca2439db2f775ce831222b66f192f03beb \
|
||||||
|
--hash=sha256:07b271772c100085dd28b74fa0cd81c8fb1a3ba18b21e03d7c27f3436a10606b \
|
||||||
|
--hash=sha256:087067fa8953339c723661eda6b54bc98c5625757ea62e95eb4898ad5e776e9f \
|
||||||
|
--hash=sha256:0a1527a803f0a659de1af2e1fd700213caba79377e27e4693648c2923da066f9 \
|
||||||
|
--hash=sha256:0cf2d91ecc3fcc0625c2c530fe004f82c110405f101548512cce44322fa8ac44 \
|
||||||
|
--hash=sha256:12873ca6cb9b0f0d3a0da705d6086fe911591737a59f28b7936bdfed27c0d47c \
|
||||||
|
--hash=sha256:19f705ada2530c1167abacb171925dd886168931e0a7b78f5bffcae5c6b5be75 \
|
||||||
|
--hash=sha256:1e3a615586f05fc4065a8b22b8152f0c1b00cdbc60596d187c2a74f9e3036e4e \
|
||||||
|
--hash=sha256:1f72fb8906754ac8a2cc3f9f5aaa298070652a0ffae577e0ea9bd480dc3c931a \
|
||||||
|
--hash=sha256:1fc9ea04857caf665289b7a75923f2c6ed559b8298a1b8c49e59f7dd95c8481e \
|
||||||
|
--hash=sha256:203a48d1fb583fc7d78a4c6655692963b860a417c0528492a6bc21f1aaefab25 \
|
||||||
|
--hash=sha256:21d1152871b019407d8ac3985f6775c079416c282e431a4da6afe7aefd2bccbe \
|
||||||
|
--hash=sha256:24b6f81f1983e6df8db3adc38562c83f7d4a0c36162885ec7f7b77c7dcbec97b \
|
||||||
|
--hash=sha256:256f80b80ca3853f90c21b23ee78cd008713787b1b1e93eae9f3d6a7134abd91 \
|
||||||
|
--hash=sha256:28a3a209b96630bca57cce802da70c266eb08c6e97e5afd61a75611ee6c64592 \
|
||||||
|
--hash=sha256:2c8f814d84194c9ea681642fd164267891702542f028a15fc97d4674b6206187 \
|
||||||
|
--hash=sha256:2de9a304e27f7596cd03d16f1b7c72219bd944e99cc52b84d0145aefb07cbd3c \
|
||||||
|
--hash=sha256:38100abb9d1b1435bc4cc340bb4489635dc2f0da7456590877030c9b3d40b0c1 \
|
||||||
|
--hash=sha256:3925dd22fa2b7699ed2617149842d2e6adde22b262fcbfada50e3d195e4b3a94 \
|
||||||
|
--hash=sha256:3e17ed538242334bf70832644a32a7aae3d83b57567f9fd60a26257e992b79ba \
|
||||||
|
--hash=sha256:3e837e369566884707ddaf85fc1744b47575005c0a229de3327f8f9a20f4efeb \
|
||||||
|
--hash=sha256:44d1b5909021139fe36001ae048dbdde8214afa20200eda0f64c068cac5d5529 \
|
||||||
|
--hash=sha256:45d5e886156860dc35862657e1494b9bae8dfa63bf56796f2fb56e1679fc0bca \
|
||||||
|
--hash=sha256:4671d9dd5ec934cb9a73e7ee9676f9362aba54f7f34910956b84d727b0d73fb6 \
|
||||||
|
--hash=sha256:53f77cbe57044e88bbd5ed26ac1d0514d2acf0591dd6bb02a3ae37f76811b80c \
|
||||||
|
--hash=sha256:5eda85d6d1879e692d546a078b44251cdd08dd1cfb98dfb77b670c97cee49ea0 \
|
||||||
|
--hash=sha256:5fed36fccc0612a53f1d4d9a816b50a36702c28a2aa880cb8a122b3466638743 \
|
||||||
|
--hash=sha256:66f011380d0e49ed280c789fbd08ff0d40968ee7b665575489afa95c98196ab5 \
|
||||||
|
--hash=sha256:6824f87845e3396029f3820c206e459ccc91760e8fa24422f8b0c3d1731cbec5 \
|
||||||
|
--hash=sha256:6c6c373cfc5c83a975506110d17457138c8c63016b563cc9ed6e056a82f13ce4 \
|
||||||
|
--hash=sha256:6d02d6655b0e54f54c4ef0b94eb6be0607b70853c45ce98bd278dc7de718be5d \
|
||||||
|
--hash=sha256:6d50360be4546678fc1b79ffe7a66265e28667840010348dd69a314145807a1b \
|
||||||
|
--hash=sha256:730cacb21e1bdff3ce90babf007d0a0917cc3e6492f336c2f0134101e0944f93 \
|
||||||
|
--hash=sha256:737fe7d37e1a1bffe70bd5754ea763a62a066dc5913ca57e957824b72a85e205 \
|
||||||
|
--hash=sha256:74a03b9698e198d47562765773b4a8309919089150a0bb17d829ad7b44b60d27 \
|
||||||
|
--hash=sha256:7553fb2090d71822f02c629afe6042c299edf91ba1bf94951165613553984512 \
|
||||||
|
--hash=sha256:7a66c7204d8869299919db4d5069a82f1561581af12b11b3c9f48c584eb8743d \
|
||||||
|
--hash=sha256:7cc09976e8b56f8cebd752f7113ad07752461f48a58cbba644139015ac24954c \
|
||||||
|
--hash=sha256:81afed14892743bbe14dacb9e36d9e0e504cd204e0b165062c488942b9718037 \
|
||||||
|
--hash=sha256:8941aaadaf67246224cee8c3803777eed332a19d909b47e29c9842ef1e79ac26 \
|
||||||
|
--hash=sha256:8ea985900c5c95ce9db1745f7933eeef5d314f0565b27625d9a10ec9881e1bfb \
|
||||||
|
--hash=sha256:8eca2a813c1cb7ad4fb74d368c2ffbbb4789d377ee5bb8df98373c2cc0dee76c \
|
||||||
|
--hash=sha256:92b68146a71df78564e4ef48af17551a5ddd142e5190cdf2c5624d0c3ff5b2e8 \
|
||||||
|
--hash=sha256:9332088d75dc3241c702d852d4671613136d90fa6881da7d770a483fd05248b4 \
|
||||||
|
--hash=sha256:94698a9c5f91f9d138526b48fe26a199609544591f859c870d477351dc7b2414 \
|
||||||
|
--hash=sha256:9a67fc9e8eb39039280526379fb3a70023d77caec1852002b4da7e8b270c4dd9 \
|
||||||
|
--hash=sha256:9de40a7b0323d889cf8d23d1ef214f565ab154443c42737dfe52ff82cf857664 \
|
||||||
|
--hash=sha256:a05d0c237b3349096d3981b727493e22147f934b20f6f125a3eba8f994bec4a9 \
|
||||||
|
--hash=sha256:afb8db5439b81cf9c9d0c80404b60c3cc9c3add93e114dcae767f1477cb53775 \
|
||||||
|
--hash=sha256:b18a3ed7d5b3bd8d9ef7a8cb226502c6bf8308df1525e1cc676c3680e7176739 \
|
||||||
|
--hash=sha256:b1e74d11748e7e98e2f426ab176d4ed720a64412b6a15054378afdb71e0f37dc \
|
||||||
|
--hash=sha256:b21e08af67b8a103c71a250401c78d5e0893beff75e28c53c98f4de42f774062 \
|
||||||
|
--hash=sha256:b4c854ef3adc177950a8dfc81a86f5115d2abd545751a304c5bcf2c2c7283cfe \
|
||||||
|
--hash=sha256:baf5215e0ab74c16e2dd324e8ec067ef59e41125d3eade2b863d294fd5035c92 \
|
||||||
|
--hash=sha256:c649e3a33450ec82378822b3dad03cc228b8f5963c0c12fc3b1e0ab940f768a5 \
|
||||||
|
--hash=sha256:c654de545946e0db659b3400168c9ad31b5d29593291482c43e3564effbcee13 \
|
||||||
|
--hash=sha256:c6638687455baf640e37344fe26d37c404db8b80d037c3d29f58fe8d1c3b194d \
|
||||||
|
--hash=sha256:c8d3b5532fc71b7a77c09192b4a5a200ea992702734a2e9279a37f2478236f26 \
|
||||||
|
--hash=sha256:cf364028c016c03078a23b503f02058f1814320a56ad535686f90565636a9495 \
|
||||||
|
--hash=sha256:d48a880098c96020b02d5a1f7d9251308510ce8858940e6fa99ece33f610838b \
|
||||||
|
--hash=sha256:d68b6cef7827e8641e8ef16f4494edda8b36104d79773a334beaa1e3521430f6 \
|
||||||
|
--hash=sha256:d9b29c1f0ae438d5ee9acb31cadee00a58c46cc9c0b2f9038c6b0b3470877a8c \
|
||||||
|
--hash=sha256:d9b97165e8aed9272a6bb17c01e3cc5871a594a446ebedc996e2397a1c1ea8ef \
|
||||||
|
--hash=sha256:da68248800ad6320861f129cd9c1bf96ca849a2771a59e0344e88681905916f5 \
|
||||||
|
--hash=sha256:da902562c3e9c550df360bfa53c035b2f241fed6d9aef119048073680ace4a18 \
|
||||||
|
--hash=sha256:dbd5c7a25a7cb98f5ca55d258b103a2054f859a46ae11aaf23134f9cc0d356ad \
|
||||||
|
--hash=sha256:dd4f05f54a52fb558f1ba9f528228066954fee3ebe629fc1660d874d040ae5a3 \
|
||||||
|
--hash=sha256:e11e82b744887154b182fd3e7e8512418446501191994dbf9c9fc1f32cc8efd5 \
|
||||||
|
--hash=sha256:f73b96c41e3b2adedc34a7356e64c8eb96e03a3782b535e043a986276ce12a49 \
|
||||||
|
--hash=sha256:f93fd8e5c8c0a4aa1f424d6173f14a892044054871c771f8566e4008eaa359d2 \
|
||||||
|
--hash=sha256:fc33c5141b55ed366cfaad382df24fe7dcbc686de5be719b207bb248e3053dc5 \
|
||||||
|
--hash=sha256:fc7de24befaeae77ba923797c7c87834c73648a05a4bde34b3b7e5588973a453
|
||||||
|
# via
|
||||||
|
# brotlicffi
|
||||||
|
# cryptography
|
||||||
|
# curl-cffi
|
||||||
|
charset-normalizer==3.4.6 \
|
||||||
|
--hash=sha256:06a7e86163334edfc5d20fe104db92fcd666e5a5df0977cb5680a506fe26cc8e \
|
||||||
|
--hash=sha256:0c173ce3a681f309f31b87125fecec7a5d1347261ea11ebbb856fa6006b23c8c \
|
||||||
|
--hash=sha256:0e28d62a8fc7a1fa411c43bd65e346f3bce9716dc51b897fbe930c5987b402d5 \
|
||||||
|
--hash=sha256:0e901eb1049fdb80f5bd11ed5ea1e498ec423102f7a9b9e4645d5b8204ff2815 \
|
||||||
|
--hash=sha256:11afb56037cbc4b1555a34dd69151e8e069bee82e613a73bef6e714ce733585f \
|
||||||
|
--hash=sha256:150b8ce8e830eb7ccb029ec9ca36022f756986aaaa7956aad6d9ec90089338c0 \
|
||||||
|
--hash=sha256:172985e4ff804a7ad08eebec0a1640ece87ba5041d565fff23c8f99c1f389484 \
|
||||||
|
--hash=sha256:197c1a244a274bb016dd8b79204850144ef77fe81c5b797dc389327adb552407 \
|
||||||
|
--hash=sha256:1ae6b62897110aa7c79ea2f5dd38d1abca6db663687c0b1ad9aed6f6bae3d9d6 \
|
||||||
|
--hash=sha256:22c6f0c2fbc31e76c3b8a86fba1a56eda6166e238c29cdd3d14befdb4a4e4815 \
|
||||||
|
--hash=sha256:231d4da14bcd9301310faf492051bee27df11f2bc7549bc0bb41fef11b82daa2 \
|
||||||
|
--hash=sha256:259695e2ccc253feb2a016303543d691825e920917e31f894ca1a687982b1de4 \
|
||||||
|
--hash=sha256:2a24157fa36980478dd1770b585c0f30d19e18f4fb0c47c13aa568f871718579 \
|
||||||
|
--hash=sha256:2b1a63e8224e401cafe7739f77efd3f9e7f5f2026bda4aead8e59afab537784f \
|
||||||
|
--hash=sha256:2e1d8ca8611099001949d1cdfaefc510cf0f212484fe7c565f735b68c78c3c95 \
|
||||||
|
--hash=sha256:2ef7fedc7a6ecbe99969cd09632516738a97eeb8bd7258bf8a0f23114c057dab \
|
||||||
|
--hash=sha256:30f445ae60aad5e1f8bdbb3108e39f6fbc09f4ea16c815c66578878325f8f15a \
|
||||||
|
--hash=sha256:34315ff4fc374b285ad7f4a0bf7dcbfe769e1b104230d40f49f700d4ab6bbd84 \
|
||||||
|
--hash=sha256:3778fd7d7cd04ae8f54651f4a7a0bd6e39a0cf20f801720a4c21d80e9b7ad6b0 \
|
||||||
|
--hash=sha256:39f5068d35621da2881271e5c3205125cc456f54e9030d3f723288c873a71bf9 \
|
||||||
|
--hash=sha256:404a1e552cf5b675a87f0651f8b79f5f1e6fd100ee88dc612f89aa16abd4486f \
|
||||||
|
--hash=sha256:419a9d91bd238052642a51938af8ac05da5b3343becde08d5cdeab9046df9ee1 \
|
||||||
|
--hash=sha256:423fb7e748a08f854a08a222b983f4df1912b1daedce51a72bd24fe8f26a1843 \
|
||||||
|
--hash=sha256:4482481cb0572180b6fd976a4d5c72a30263e98564da68b86ec91f0fe35e8565 \
|
||||||
|
--hash=sha256:47955475ac79cc504ef2704b192364e51d0d473ad452caedd0002605f780101c \
|
||||||
|
--hash=sha256:4be9f4830ba8741527693848403e2c457c16e499100963ec711b1c6f2049b7c7 \
|
||||||
|
--hash=sha256:51fb3c322c81d20567019778cb5a4a6f2dc1c200b886bc0d636238e364848c89 \
|
||||||
|
--hash=sha256:5273b9f0b5835ff0350c0828faea623c68bfa65b792720c453e22b25cc72930f \
|
||||||
|
--hash=sha256:530d548084c4a9f7a16ed4a294d459b4f229db50df689bfe92027452452943a0 \
|
||||||
|
--hash=sha256:530e8cebeea0d76bdcf93357aa5e41336f48c3dc709ac52da2bb167c5b8271d9 \
|
||||||
|
--hash=sha256:572d7c822caf521f0525ba1bce1a622a0b85cf47ffbdae6c9c19e3b5ac3c4389 \
|
||||||
|
--hash=sha256:58c948d0d086229efc484fe2f30c2d382c86720f55cd9bc33591774348ad44e0 \
|
||||||
|
--hash=sha256:5d11595abf8dd942a77883a39d81433739b287b6aa71620f15164f8096221b30 \
|
||||||
|
--hash=sha256:5f8ddd609f9e1af8c7bd6e2aca279c931aefecd148a14402d4e368f3171769fd \
|
||||||
|
--hash=sha256:5feb91325bbceade6afab43eb3b508c63ee53579fe896c77137ded51c6b6958e \
|
||||||
|
--hash=sha256:60c74963d8350241a79cb8feea80e54d518f72c26db618862a8f53e5023deaf9 \
|
||||||
|
--hash=sha256:613f19aa6e082cf96e17e3ffd89383343d0d589abda756b7764cf78361fd41dc \
|
||||||
|
--hash=sha256:695f5c2823691a25f17bc5d5ffe79fa90972cc34b002ac6c843bb8a1720e950d \
|
||||||
|
--hash=sha256:6cceb5473417d28edd20c6c984ab6fee6c6267d38d906823ebfe20b03d607dc2 \
|
||||||
|
--hash=sha256:74119174722c4349af9708993118581686f343adc1c8c9c007d59be90d077f3f \
|
||||||
|
--hash=sha256:74a2e659c7ecbc73562e2a15e05039f1e22c75b7c7618b4b574a3ea9118d1557 \
|
||||||
|
--hash=sha256:7504e9b7dc05f99a9bbb4525c67a2c155073b44d720470a148b34166a69c054e \
|
||||||
|
--hash=sha256:79090741d842f564b1b2827c0b82d846405b744d31e84f18d7a7b41c20e473ff \
|
||||||
|
--hash=sha256:7a6967aaf043bceabab5412ed6bd6bd26603dae84d5cb75bf8d9a74a4959d398 \
|
||||||
|
--hash=sha256:7bda6eebafd42133efdca535b04ccb338ab29467b3f7bf79569883676fc628db \
|
||||||
|
--hash=sha256:7edbed096e4a4798710ed6bc75dcaa2a21b68b6c356553ac4823c3658d53743a \
|
||||||
|
--hash=sha256:7f9019c9cb613f084481bd6a100b12e1547cf2efe362d873c2e31e4035a6fa43 \
|
||||||
|
--hash=sha256:80d0a5615143c0b3225e5e3ef22c8d5d51f3f72ce0ea6fb84c943546c7b25b6c \
|
||||||
|
--hash=sha256:82060f995ab5003a2d6e0f4ad29065b7672b6593c8c63559beefe5b443242c3e \
|
||||||
|
--hash=sha256:836ab36280f21fc1a03c99cd05c6b7af70d2697e374c7af0b61ed271401a72a2 \
|
||||||
|
--hash=sha256:87725cfb1a4f1f8c2fc9890ae2f42094120f4b44db9360be5d99a4c6b0e03a9e \
|
||||||
|
--hash=sha256:899d28f422116b08be5118ef350c292b36fc15ec2daeb9ea987c89281c7bb5c4 \
|
||||||
|
--hash=sha256:8bea55c4eef25b0b19a0337dc4e3f9a15b00d569c77211fa8cde38684f234fb7 \
|
||||||
|
--hash=sha256:8e5a94886bedca0f9b78fecd6afb6629142fd2605aa70a125d49f4edc6037ee6 \
|
||||||
|
--hash=sha256:90ca27cd8da8118b18a52d5f547859cc1f8354a00cd1e8e5120df3e30d6279e5 \
|
||||||
|
--hash=sha256:92734d4d8d187a354a556626c221cd1a892a4e0802ccb2af432a1d85ec012194 \
|
||||||
|
--hash=sha256:947cf925bc916d90adba35a64c82aace04fa39b46b52d4630ece166655905a69 \
|
||||||
|
--hash=sha256:95b52c68d64c1878818687a473a10547b3292e82b6f6fe483808fb1468e2f52f \
|
||||||
|
--hash=sha256:97d0235baafca5f2b09cf332cc275f021e694e8362c6bb9c96fc9a0eb74fc316 \
|
||||||
|
--hash=sha256:9ca4c0b502ab399ef89248a2c84c54954f77a070f28e546a85e91da627d1301e \
|
||||||
|
--hash=sha256:9cc4fc6c196d6a8b76629a70ddfcd4635a6898756e2d9cac5565cf0654605d73 \
|
||||||
|
--hash=sha256:9cc6e6d9e571d2f863fa77700701dae73ed5f78881efc8b3f9a4398772ff53e8 \
|
||||||
|
--hash=sha256:a056d1ad2633548ca18ffa2f85c202cfb48b68615129143915b8dc72a806a923 \
|
||||||
|
--hash=sha256:a26611d9987b230566f24a0a125f17fe0de6a6aff9f25c9f564aaa2721a5fb88 \
|
||||||
|
--hash=sha256:a4474d924a47185a06411e0064b803c68be044be2d60e50e8bddcc2649957c1f \
|
||||||
|
--hash=sha256:a4ea868bc28109052790eb2b52a9ab33f3aa7adc02f96673526ff47419490e21 \
|
||||||
|
--hash=sha256:a9e68c9d88823b274cf1e72f28cb5dc89c990edf430b0bfd3e2fb0785bfeabf4 \
|
||||||
|
--hash=sha256:aa9cccf4a44b9b62d8ba8b4dd06c649ba683e4bf04eea606d2e94cfc2d6ff4d6 \
|
||||||
|
--hash=sha256:ac2393c73378fea4e52aa56285a3d64be50f1a12395afef9cce47772f60334c2 \
|
||||||
|
--hash=sha256:ad8faf8df23f0378c6d527d8b0b15ea4a2e23c89376877c598c4870d1b2c7866 \
|
||||||
|
--hash=sha256:b35b200d6a71b9839a46b9b7fff66b6638bb52fc9658aa58796b0326595d3021 \
|
||||||
|
--hash=sha256:b3694e3f87f8ac7ce279d4355645b3c878d24d1424581b46282f24b92f5a4ae2 \
|
||||||
|
--hash=sha256:b4ff1d35e8c5bd078be89349b6f3a845128e685e751b6ea1169cf2160b344c4d \
|
||||||
|
--hash=sha256:bbc8c8650c6e51041ad1be191742b8b421d05bbd3410f43fa2a00c8db87678e8 \
|
||||||
|
--hash=sha256:bc72863f4d9aba2e8fd9085e63548a324ba706d2ea2c83b260da08a59b9482de \
|
||||||
|
--hash=sha256:c2274ca724536f173122f36c98ce188fd24ce3dad886ec2b7af859518ce008a4 \
|
||||||
|
--hash=sha256:c8ae56368f8cc97c7e40a7ee18e1cedaf8e780cd8bc5ed5ac8b81f238614facb \
|
||||||
|
--hash=sha256:c907cdc8109f6c619e6254212e794d6548373cc40e1ec75e6e3823d9135d29cc \
|
||||||
|
--hash=sha256:ca0276464d148c72defa8bb4390cce01b4a0e425f3b50d1435aa6d7a18107602 \
|
||||||
|
--hash=sha256:cd5e2801c89992ed8c0a3f0293ae83c159a60d9a5d685005383ef4caca77f2c4 \
|
||||||
|
--hash=sha256:d60377dce4511655582e300dc1e5a5f24ba0cb229005a1d5c8d0cb72bb758ab8 \
|
||||||
|
--hash=sha256:d73beaac5e90173ac3deb9928a74763a6d230f494e4bfb422c217a0ad8e629bf \
|
||||||
|
--hash=sha256:d7de2637729c67d67cf87614b566626057e95c303bc0a55ffe391f5205e7003d \
|
||||||
|
--hash=sha256:dad6e0f2e481fffdcf776d10ebee25e0ef89f16d691f1e5dee4b586375fdc64b \
|
||||||
|
--hash=sha256:dda86aba335c902b6149a02a55b38e96287157e609200811837678214ba2b1db \
|
||||||
|
--hash=sha256:e1f6e2f00a6b8edb562826e4632e26d063ac10307e80f7461f7de3ad8ef3f077 \
|
||||||
|
--hash=sha256:e25369dc110d58ddf29b949377a93e0716d72a24f62bad72b2b39f155949c1fd \
|
||||||
|
--hash=sha256:e3c701e954abf6fc03a49f7c579cc80c2c6cc52525340ca3186c41d3f33482ef \
|
||||||
|
--hash=sha256:e5bcc1a1ae744e0bb59641171ae53743760130600da8db48cbb6e4918e186e4e \
|
||||||
|
--hash=sha256:e68c14b04827dd76dcbd1aeea9e604e3e4b78322d8faf2f8132c7138efa340a8 \
|
||||||
|
--hash=sha256:e985a16ff513596f217cee86c21371b8cd011c0f6f056d0920aa2d926c544058 \
|
||||||
|
--hash=sha256:ef5960d965e67165d75b7c7ffc60a83ec5abfc5c11b764ec13ea54fbef8b4421 \
|
||||||
|
--hash=sha256:f0cdaecd4c953bfae0b6bb64910aaaca5a424ad9c72d85cb88417bb9814f7550 \
|
||||||
|
--hash=sha256:f1ce721c8a7dfec21fcbdfe04e8f68174183cf4e8188e0645e92aa23985c57ff \
|
||||||
|
--hash=sha256:f5ea69428fa1b49573eef0cc44a1d43bebd45ad0c611eb7d7eac760c7ae771bc \
|
||||||
|
--hash=sha256:f6e4333fb15c83f7d1482a76d45a0818897b3d33f00efd215528ff7c51b8e35d \
|
||||||
|
--hash=sha256:f820f24b09e3e779fe84c3c456cb4108a7aa639b0d1f02c28046e11bfcd088ed \
|
||||||
|
--hash=sha256:fcce033e4021347d80ed9c66dcf1e7b1546319834b74445f561d2e2221de5659
|
||||||
|
# via requests
|
||||||
|
cryptography==46.0.6 \
|
||||||
|
--hash=sha256:02fad249cb0e090b574e30b276a3da6a149e04ee2f049725b1f69e7b8351ec70 \
|
||||||
|
--hash=sha256:063b67749f338ca9c5a0b7fe438a52c25f9526b851e24e6c9310e7195aad3b4d \
|
||||||
|
--hash=sha256:12cae594e9473bca1a7aceb90536060643128bb274fcea0fc459ab90f7d1ae7a \
|
||||||
|
--hash=sha256:12f0fa16cc247b13c43d56d7b35287ff1569b5b1f4c5e87e92cc4fcc00cd10c0 \
|
||||||
|
--hash=sha256:22259338084d6ae497a19bae5d4c66b7ca1387d3264d1c2c0e72d9e9b6a77b97 \
|
||||||
|
--hash=sha256:26031f1e5ca62fcb9d1fcb34b2b60b390d1aacaa15dc8b895a9ed00968b97b30 \
|
||||||
|
--hash=sha256:27550628a518c5c6c903d84f637fbecf287f6cb9ced3804838a1295dc1fd0759 \
|
||||||
|
--hash=sha256:2b417edbe8877cda9022dde3a008e2deb50be9c407eef034aeeb3a8b11d9db3c \
|
||||||
|
--hash=sha256:2ea0f37e9a9cf0df2952893ad145fd9627d326a59daec9b0802480fa3bcd2ead \
|
||||||
|
--hash=sha256:2ef9e69886cbb137c2aef9772c2e7138dc581fad4fcbcf13cc181eb5a3ab6275 \
|
||||||
|
--hash=sha256:341359d6c9e68834e204ceaf25936dffeafea3829ab80e9503860dcc4f4dac58 \
|
||||||
|
--hash=sha256:380343e0653b1c9d7e1f55b52aaa2dbb2fdf2730088d48c43ca1c7c0abb7cc2f \
|
||||||
|
--hash=sha256:3c21d92ed15e9cfc6eb64c1f5a0326db22ca9c2566ca46d845119b45b4400361 \
|
||||||
|
--hash=sha256:3dfa6567f2e9e4c5dceb8ccb5a708158a2a871052fa75c8b78cb0977063f1507 \
|
||||||
|
--hash=sha256:456b3215172aeefb9284550b162801d62f5f264a081049a3e94307fe20792cfa \
|
||||||
|
--hash=sha256:4668298aef7cddeaf5c6ecc244c2302a2b8e40f384255505c22875eebb47888b \
|
||||||
|
--hash=sha256:50575a76e2951fe7dbd1f56d181f8c5ceeeb075e9ff88e7ad997d2f42af06e7b \
|
||||||
|
--hash=sha256:639301950939d844a9e1c4464d7e07f902fe9a7f6b215bb0d4f28584729935d8 \
|
||||||
|
--hash=sha256:64235194bad039a10bb6d2d930ab3323baaec67e2ce36215fd0952fad0930ca8 \
|
||||||
|
--hash=sha256:6617f67b1606dfd9fe4dbfa354a9508d4a6d37afe30306fe6c101b7ce3274b72 \
|
||||||
|
--hash=sha256:67177e8a9f421aa2d3a170c3e56eca4e0128883cf52a071a7cbf53297f18b175 \
|
||||||
|
--hash=sha256:6728c49e3b2c180ef26f8e9f0a883a2c585638db64cf265b49c9ba10652d430e \
|
||||||
|
--hash=sha256:6739d56300662c468fddb0e5e291f9b4d084bead381667b9e654c7dd81705124 \
|
||||||
|
--hash=sha256:69cf0056d6947edc6e6760e5f17afe4bea06b56a9ac8a06de9d2bd6b532d4f3a \
|
||||||
|
--hash=sha256:760997a4b950ff00d418398ad73fbc91aa2894b5c1db7ccb45b4f68b42a63b3c \
|
||||||
|
--hash=sha256:79e865c642cfc5c0b3eb12af83c35c5aeff4fa5c672dc28c43721c2c9fdd2f0f \
|
||||||
|
--hash=sha256:7e6142674f2a9291463e5e150090b95a8519b2fb6e6aaec8917dd8d094ce750d \
|
||||||
|
--hash=sha256:7f417f034f91dcec1cb6c5c35b07cdbb2ef262557f701b4ecd803ee8cefed4f4 \
|
||||||
|
--hash=sha256:7f6690b6c55e9c5332c0b59b9c8a3fb232ebf059094c17f9019a51e9827df91c \
|
||||||
|
--hash=sha256:8927ccfbe967c7df312ade694f987e7e9e22b2425976ddbf28271d7e58845290 \
|
||||||
|
--hash=sha256:8ce35b77aaf02f3b59c90b2c8a05c73bac12cea5b4e8f3fbece1f5fddea5f0ca \
|
||||||
|
--hash=sha256:8e7304c4f4e9490e11efe56af6713983460ee0780f16c63f219984dab3af9d2d \
|
||||||
|
--hash=sha256:90e5f0a7b3be5f40c3a0a0eafb32c681d8d2c181fc2a1bdabe9b3f611d9f6b1a \
|
||||||
|
--hash=sha256:97c8115b27e19e592a05c45d0dd89c57f81f841cc9880e353e0d3bf25b2139ed \
|
||||||
|
--hash=sha256:9a693028b9cbe51b5a1136232ee8f2bc242e4e19d456ded3fa7c86e43c713b4a \
|
||||||
|
--hash=sha256:9a9c42a2723999a710445bc0d974e345c32adfd8d2fac6d8a251fa829ad31cfb \
|
||||||
|
--hash=sha256:a3e84d5ec9ba01f8fd03802b2147ba77f0c8f2617b2aff254cedd551844209c8 \
|
||||||
|
--hash=sha256:aad75154a7ac9039936d50cf431719a2f8d4ed3d3c277ac03f3339ded1a5e707 \
|
||||||
|
--hash=sha256:b12c6b1e1651e42ab5de8b1e00dc3b6354fdfd778e7fa60541ddacc27cd21410 \
|
||||||
|
--hash=sha256:b928a3ca837c77a10e81a814a693f2295200adb3352395fad024559b7be7a736 \
|
||||||
|
--hash=sha256:bcb87663e1f7b075e48c3be3ecb5f0b46c8fc50b50a97cf264e7f60242dca3f2 \
|
||||||
|
--hash=sha256:c797e2517cb7880f8297e2c0f43bb910e91381339336f75d2c1c2cbf811b70b4 \
|
||||||
|
--hash=sha256:c89eb37fae9216985d8734c1afd172ba4927f5a05cfd9bf0e4863c6d5465b013 \
|
||||||
|
--hash=sha256:cdcd3edcbc5d55757e5f5f3d330dd00007ae463a7e7aa5bf132d1f22a4b62b19 \
|
||||||
|
--hash=sha256:d24c13369e856b94892a89ddf70b332e0b70ad4a5c43cf3e9cb71d6d7ffa1f7b \
|
||||||
|
--hash=sha256:d4e4aadb7fc1f88687f47ca20bb7227981b03afaae69287029da08096853b738 \
|
||||||
|
--hash=sha256:d9528b535a6c4f8ff37847144b8986a9a143585f0540fbcb1a98115b543aa463 \
|
||||||
|
--hash=sha256:ed3775295fb91f70b4027aeba878d79b3e55c0b3e97eaa4de71f8f23a9f2eb77 \
|
||||||
|
--hash=sha256:ed418c37d095aeddf5336898a132fba01091f0ac5844e3e8018506f014b6d2c4
|
||||||
|
# via secretstorage
|
||||||
|
curl-cffi==0.15.0 ; implementation_name == 'cpython' \
|
||||||
|
--hash=sha256:08c799b89740b9bc49c09fbc3d5907f13ac1f845ca52620507ef9466d4639dd5 \
|
||||||
|
--hash=sha256:0b6c0543b993996670e9e4b78e305a2d60809d5681903ffb5568e21a387434d3 \
|
||||||
|
--hash=sha256:1977e1e12cfb5c11352cbb74acef1bed24eb7d226dab61ca57c168c21acd4d61 \
|
||||||
|
--hash=sha256:2b6c847d86283b07ae69bb72c82eb8a59242277142aa35b89850f89e792a02fc \
|
||||||
|
--hash=sha256:408d6f14e346841cd889c2e0962832bb235ba3b6749ebf609f347f747da5e60f \
|
||||||
|
--hash=sha256:41f80170ba844009273b2660da1964ec31e99e5719d16b3422ada87177e32e13 \
|
||||||
|
--hash=sha256:4682dc38d4336e0eb0b185374db90a760efde63cbea994b4e63f3521d44c4c92 \
|
||||||
|
--hash=sha256:582e570aa2586b96ed47cf4a17586b9a3c462cbe43f780487c3dc245c6ef1527 \
|
||||||
|
--hash=sha256:5a0c1896a0d5a5ac1eb89cd24b008d2b718dd1df6fd2f75451b59ca66e49e572 \
|
||||||
|
--hash=sha256:7b7a92767a888ee90147e18964b396d8435ff42737030d6fb00824ffd6094805 \
|
||||||
|
--hash=sha256:7e63539d0d839d0a8c5eacf86229bc68c57803547f35e0db7ee0986328b478c3 \
|
||||||
|
--hash=sha256:829cc357061ecb99cc2d406301f609a039e05665322f5c025ec67c38b0dc49ce \
|
||||||
|
--hash=sha256:838e48212447d9c81364b04707a5c861daf08f8320f9ecb3406a8919d1d5c3b3 \
|
||||||
|
--hash=sha256:967ad7355bd8e9586f8c2d02eaa99953747549e7ea4a9b25cd53353e6b67fe6d \
|
||||||
|
--hash=sha256:9e5e69eee735f659287e2c84444319d68a1fa68dd37abf228943a4074864283a \
|
||||||
|
--hash=sha256:a25620d9bf989c9c029a7d1642999c4c265abb0bad811deb2f77b0b5b2b12e5b \
|
||||||
|
--hash=sha256:a6d57f8389273a3a1f94370473c74897467bcc36af0a17336989780c507fa43d \
|
||||||
|
--hash=sha256:aa1323950224db24f4c510d010b3affa02196ca853fb424191fa917a513d3f4b \
|
||||||
|
--hash=sha256:b624c7ce087bfda967a013ed0a64702a525444e5b6e97d23534d567ccc6525aa \
|
||||||
|
--hash=sha256:bda66404010e9ed743b1b83c20c86f24fe21a9a6873e17479d6e67e29d8ded28 \
|
||||||
|
--hash=sha256:ea0c67652bf6893d34ee0f82c944f37e488f6147e9421bef1771cc6545b02ded
|
||||||
|
# via yt-dlp
|
||||||
|
idna==3.11 \
|
||||||
|
--hash=sha256:771a87f49d9defaf64091e6e6fe9c18d4833f140bd19464795bc32d966ca37ea \
|
||||||
|
--hash=sha256:795dafcc9c04ed0c1fb032c2aa73654d8e8c5023a7df64a53f39190ada629902
|
||||||
|
# via requests
|
||||||
|
jeepney==0.9.0 \
|
||||||
|
--hash=sha256:97e5714520c16fc0a45695e5365a2e11b81ea79bba796e26f9f1d178cb182683 \
|
||||||
|
--hash=sha256:cf0e9e845622b81e4a28df94c40345400256ec608d0e55bb8a3feaa9163f5732
|
||||||
|
# via secretstorage
|
||||||
|
macholib==1.16.4 ; sys_platform == 'darwin' \
|
||||||
|
--hash=sha256:da1a3fa8266e30f0ce7e97c6a54eefaae8edd1e5f86f3eb8b95457cae90265ea \
|
||||||
|
--hash=sha256:f408c93ab2e995cd2c46e34fe328b130404be143469e41bc366c807448979362
|
||||||
|
# via pyinstaller
|
||||||
|
markdown-it-py==4.0.0 ; implementation_name == 'cpython' \
|
||||||
|
--hash=sha256:87327c59b172c5011896038353a81343b6754500a08cd7a4973bb48c6d578147 \
|
||||||
|
--hash=sha256:cb0a2b4aa34f932c007117b194e945bd74e0ec24133ceb5bac59009cda1cb9f3
|
||||||
|
# via rich
|
||||||
|
mdurl==0.1.2 ; implementation_name == 'cpython' \
|
||||||
|
--hash=sha256:84008a41e51615a49fc9966191ff91509e3c40b939176e643fd50a5c2196b8f8 \
|
||||||
|
--hash=sha256:bb413d29f5eea38f31dd4754dd7377d4465116fb207585f97bf925588687c1ba
|
||||||
|
# via markdown-it-py
|
||||||
|
mutagen==1.47.0 \
|
||||||
|
--hash=sha256:719fadef0a978c31b4cf3c956261b3c58b6948b32023078a2117b1de09f0fc99 \
|
||||||
|
--hash=sha256:edd96f50c5907a9539d8e5bba7245f62c9f520aef333d13392a79a4f70aca719
|
||||||
|
# via yt-dlp
|
||||||
|
packaging==26.0 \
|
||||||
|
--hash=sha256:00243ae351a257117b6a241061796684b084ed1c516a08c48a3f7e147a9d80b4 \
|
||||||
|
--hash=sha256:b36f1fef9334a5588b4166f8bcd26a14e521f2b55e6b9de3aaa80d3ff7a37529
|
||||||
|
# via
|
||||||
|
# pyinstaller
|
||||||
|
# pyinstaller-hooks-contrib
|
||||||
|
pefile==2024.8.26 ; sys_platform == 'win32' \
|
||||||
|
--hash=sha256:3ff6c5d8b43e8c37bb6e6dd5085658d658a7a0bdcd20b6a07b1fcfc1c4e9d632 \
|
||||||
|
--hash=sha256:76f8b485dcd3b1bb8166f1128d395fa3d87af26360c2358fb75b80019b957c6f
|
||||||
|
# via pyinstaller
|
||||||
|
pycparser==3.0 ; implementation_name != 'PyPy' \
|
||||||
|
--hash=sha256:600f49d217304a5902ac3c37e1281c9fe94e4d0489de643a9504c5cdfdfc6b29 \
|
||||||
|
--hash=sha256:b727414169a36b7d524c1c3e31839a521725078d7b2ff038656844266160a992
|
||||||
|
# via cffi
|
||||||
|
pycryptodomex==3.23.0 \
|
||||||
|
--hash=sha256:02d87b80778c171445d67e23d1caef279bf4b25c3597050ccd2e13970b57fd51 \
|
||||||
|
--hash=sha256:06698f957fe1ab229a99ba2defeeae1c09af185baa909a31a5d1f9d42b1aaed6 \
|
||||||
|
--hash=sha256:14c37aaece158d0ace436f76a7bb19093db3b4deade9797abfc39ec6cd6cc2fe \
|
||||||
|
--hash=sha256:189afbc87f0b9f158386bf051f720e20fa6145975f1e76369303d0f31d1a8d7c \
|
||||||
|
--hash=sha256:43c446e2ba8df8889e0e16f02211c25b4934898384c1ec1ec04d7889c0333587 \
|
||||||
|
--hash=sha256:4f2596e643d4365e14d0879dc5aafe6355616c61c2176009270f3048f6d9a61f \
|
||||||
|
--hash=sha256:52e5ca58c3a0b0bd5e100a9fbc8015059b05cffc6c66ce9d98b4b45e023443b9 \
|
||||||
|
--hash=sha256:55ccbe27f049743a4caf4f4221b166560d3438d0b1e5ab929e07ae1702a4d6fd \
|
||||||
|
--hash=sha256:58b851b9effd0d072d4ca2e4542bf2a4abcf13c82a29fd2c93ce27ee2a2e9462 \
|
||||||
|
--hash=sha256:6b8962204c47464d5c1c4038abeadd4514a133b28748bcd9fa5b6d62e3cec6fa \
|
||||||
|
--hash=sha256:6bbcb1dd0f646484939e142462d9e532482bc74475cecf9c4903d4e1cd21f003 \
|
||||||
|
--hash=sha256:71909758f010c82bc99b0abf4ea12012c98962fbf0583c2164f8b84533c2e4da \
|
||||||
|
--hash=sha256:7b37e08e3871efe2187bc1fd9320cc81d87caf19816c648f24443483005ff886 \
|
||||||
|
--hash=sha256:8a4fcd42ccb04c31268d1efeecfccfd1249612b4de6374205376b8f280321744 \
|
||||||
|
--hash=sha256:91979028227543010d7b2ba2471cf1d1e398b3f183cb105ac584df0c36dac28d \
|
||||||
|
--hash=sha256:a33986a0066860f7fcf7c7bd2bc804fa90e434183645595ae7b33d01f3c91ed8 \
|
||||||
|
--hash=sha256:a9d446e844f08299236780f2efa9898c818fe7e02f17263866b8550c7d5fb328 \
|
||||||
|
--hash=sha256:b2c2537863eccef2d41061e82a881dcabb04944c5c06c5aa7110b577cc487545 \
|
||||||
|
--hash=sha256:bc65bdd9fc8de7a35a74cab1c898cab391a4add33a8fe740bda00f5976ca4708 \
|
||||||
|
--hash=sha256:bdc69d0d3d989a1029df0eed67cc5e8e5d968f3724f4519bd03e0ec68df7543c \
|
||||||
|
--hash=sha256:c25e30a20e1b426e1f0fa00131c516f16e474204eee1139d1603e132acffc314 \
|
||||||
|
--hash=sha256:c7947ab8d589e3178da3d7cdeabe14f841b391e17046954f2fbcd941705762b5 \
|
||||||
|
--hash=sha256:c885da45e70139464f082018ac527fdaad26f1657a99ee13eecdce0f0ca24ab4 \
|
||||||
|
--hash=sha256:da4fa650cef02db88c2b98acc5434461e027dce0ae8c22dd5a69013eaf510006 \
|
||||||
|
--hash=sha256:ebfff755c360d674306e5891c564a274a47953562b42fb74a5c25b8fc1fb1cb5 \
|
||||||
|
--hash=sha256:eca54f4bb349d45afc17e3011ed4264ef1cc9e266699874cdd1349c504e64798 \
|
||||||
|
--hash=sha256:f489c4765093fb60e2edafdf223397bc716491b2b69fe74367b70d6999257a5c \
|
||||||
|
--hash=sha256:fdfac7cda115bca3a5abb2f9e43bc2fb66c2b65ab074913643803ca7083a79ea
|
||||||
|
# via yt-dlp
|
||||||
|
pygments==2.19.2 ; implementation_name == 'cpython' \
|
||||||
|
--hash=sha256:636cb2477cec7f8952536970bc533bc43743542f70392ae026374600add5b887 \
|
||||||
|
--hash=sha256:86540386c03d588bb81d44bc3928634ff26449851e99741617ecb9037ee5ec0b
|
||||||
|
# via rich
|
||||||
|
pyinstaller==6.19.0 \
|
||||||
|
--hash=sha256:1ec54ef967996ca61dacba676227e2b23219878ccce5ee9d6f3aada7b8ed8abf \
|
||||||
|
--hash=sha256:3c5c251054fe4cfaa04c34a363dcfbf811545438cb7198304cd444756bc2edd2 \
|
||||||
|
--hash=sha256:4190e76b74f0c4b5c5f11ac360928cd2e36ec8e3194d437bf6b8648c7bc0c134 \
|
||||||
|
--hash=sha256:481a909c8e60c8692fc60fcb1344d984b44b943f8bc9682f2fcdae305ad297e6 \
|
||||||
|
--hash=sha256:4ab2bb52e58448e14ddf9450601bdedd66800465043501c1d8f1cab87b60b122 \
|
||||||
|
--hash=sha256:8bd68abd812d8a6ba33b9f1810e91fee0f325969733721b78151f0065319ca11 \
|
||||||
|
--hash=sha256:a0fc5f6b3c55aa54353f0c74ffa59b1115433c1850c6f655d62b461a2ed6cbbe \
|
||||||
|
--hash=sha256:b5bb6536c6560330d364d91522250f254b107cf69129d9cbcd0e6727c570be33 \
|
||||||
|
--hash=sha256:c2d5a539b0bfe6159d5522c8c70e1c0e487f22c2badae0f97d45246223b798ea \
|
||||||
|
--hash=sha256:da6d5c6391ccefe73554b9fa29b86001c8e378e0f20c2a4004f836ba537eff63 \
|
||||||
|
--hash=sha256:e649ba6bd1b0b89b210ad92adb5fbdc8a42dd2c5ca4f72ef3a0bfec83a424b83 \
|
||||||
|
--hash=sha256:ec73aeb8bd9b7f2f1240d328a4542e90b3c6e6fbc106014778431c616592a865
|
||||||
|
pyinstaller-hooks-contrib==2026.3 \
|
||||||
|
--hash=sha256:5ecd1068ad262afecadf07556279d2be52ca93a88b049fae17f1a2eb2969254a \
|
||||||
|
--hash=sha256:800d3a198a49a6cd0de2d7fb795005fdca7a0222ed9cb47c0691abd1c27b9310
|
||||||
|
# via pyinstaller
|
||||||
|
pywin32-ctypes==0.2.3 ; sys_platform == 'win32' \
|
||||||
|
--hash=sha256:8a1513379d709975552d202d942d9837758905c8d01eb82b8bcc30918929e7b8 \
|
||||||
|
--hash=sha256:d162dc04946d704503b2edc4d55f3dba5c1d539ead017afa00142c38b9885755
|
||||||
|
# via pyinstaller
|
||||||
|
requests==2.33.0 \
|
||||||
|
--hash=sha256:3324635456fa185245e24865e810cecec7b4caf933d7eb133dcde67d48cee69b \
|
||||||
|
--hash=sha256:c7ebc5e8b0f21837386ad0e1c8fe8b829fa5f544d8df3b2253bff14ef29d7652
|
||||||
|
# via yt-dlp
|
||||||
|
rich==14.3.3 ; implementation_name == 'cpython' \
|
||||||
|
--hash=sha256:793431c1f8619afa7d3b52b2cdec859562b950ea0d4b6b505397612db8d5362d \
|
||||||
|
--hash=sha256:b8daa0b9e4eef54dd8cf7c86c03713f53241884e814f4e2f5fb342fe520f639b
|
||||||
|
# via curl-cffi
|
||||||
|
secretstorage==3.5.0 \
|
||||||
|
--hash=sha256:0ce65888c0725fcb2c5bc0fdb8e5438eece02c523557ea40ce0703c266248137 \
|
||||||
|
--hash=sha256:f04b8e4689cbce351744d5537bf6b1329c6fc68f91fa666f60a380edddcd11be
|
||||||
|
# via yt-dlp
|
||||||
|
setuptools==82.0.1 \
|
||||||
|
--hash=sha256:7d872682c5d01cfde07da7bccc7b65469d3dca203318515ada1de5eda35efbf9 \
|
||||||
|
--hash=sha256:a59e362652f08dcd477c78bb6e7bd9d80a7995bc73ce773050228a348ce2e5bb
|
||||||
|
# via
|
||||||
|
# pyinstaller
|
||||||
|
# pyinstaller-hooks-contrib
|
||||||
|
typing-extensions==4.15.0 ; python_full_version < '3.11' \
|
||||||
|
--hash=sha256:0cea48d173cc12fa28ecabc3b837ea3cf6f38c6d1136f85cbaaf598984861466 \
|
||||||
|
--hash=sha256:f0fa19c6845758ab08074a0cfa8b7aecb71c999ca73d62883bc25cc018c4e548
|
||||||
|
# via cryptography
|
||||||
|
urllib3==2.6.3 \
|
||||||
|
--hash=sha256:1b62b6884944a57dbe321509ab94fd4d3b307075e0c2eae991ac71ee15ad38ed \
|
||||||
|
--hash=sha256:bf272323e553dfb2e87d9bfd225ca7b0f467b919d7bbd355436d3fd37cb0acd4
|
||||||
|
# via
|
||||||
|
# requests
|
||||||
|
# yt-dlp
|
||||||
|
websockets==16.0 \
|
||||||
|
--hash=sha256:0298d07ee155e2e9fda5be8a9042200dd2e3bb0b8a38482156576f863a9d457c \
|
||||||
|
--hash=sha256:04cdd5d2d1dacbad0a7bf36ccbcd3ccd5a30ee188f2560b7a62a30d14107b31a \
|
||||||
|
--hash=sha256:08d7af67b64d29823fed316505a89b86705f2b7981c07848fb5e3ea3020c1abe \
|
||||||
|
--hash=sha256:152284a83a00c59b759697b7f9e9cddf4e3c7861dd0d964b472b70f78f89e80e \
|
||||||
|
--hash=sha256:1637db62fad1dc833276dded54215f2c7fa46912301a24bd94d45d46a011ceec \
|
||||||
|
--hash=sha256:19c4dc84098e523fd63711e563077d39e90ec6702aff4b5d9e344a60cb3c0cb1 \
|
||||||
|
--hash=sha256:1c1b30e4f497b0b354057f3467f56244c603a79c0d1dafce1d16c283c25f6e64 \
|
||||||
|
--hash=sha256:2b9f1e0d69bc60a4a87349d50c09a037a2607918746f07de04df9e43252c77a3 \
|
||||||
|
--hash=sha256:31a52addea25187bde0797a97d6fc3d2f92b6f72a9370792d65a6e84615ac8a8 \
|
||||||
|
--hash=sha256:32da954ffa2814258030e5a57bc73a3635463238e797c7375dc8091327434206 \
|
||||||
|
--hash=sha256:335c23addf3d5e6a8633f9f8eda77efad001671e80b95c491dd0924587ece0b3 \
|
||||||
|
--hash=sha256:3425ac5cf448801335d6fdc7ae1eb22072055417a96cc6b31b3861f455fbc156 \
|
||||||
|
--hash=sha256:349f83cd6c9a415428ee1005cadb5c2c56f4389bc06a9af16103c3bc3dcc8b7d \
|
||||||
|
--hash=sha256:37b31c1623c6605e4c00d466c9d633f9b812ea430c11c8a278774a1fde1acfa9 \
|
||||||
|
--hash=sha256:417b28978cdccab24f46400586d128366313e8a96312e4b9362a4af504f3bbad \
|
||||||
|
--hash=sha256:485c49116d0af10ac698623c513c1cc01c9446c058a4e61e3bf6c19dff7335a2 \
|
||||||
|
--hash=sha256:4a1aba3340a8dca8db6eb5a7986157f52eb9e436b74813764241981ca4888f03 \
|
||||||
|
--hash=sha256:50f23cdd8343b984957e4077839841146f67a3d31ab0d00e6b824e74c5b2f6e8 \
|
||||||
|
--hash=sha256:52a0fec0e6c8d9a784c2c78276a48a2bdf099e4ccc2a4cad53b27718dbfd0230 \
|
||||||
|
--hash=sha256:52ac480f44d32970d66763115edea932f1c5b1312de36df06d6b219f6741eed8 \
|
||||||
|
--hash=sha256:5569417dc80977fc8c2d43a86f78e0a5a22fee17565d78621b6bb264a115d4ea \
|
||||||
|
--hash=sha256:569d01a4e7fba956c5ae4fc988f0d4e187900f5497ce46339c996dbf24f17641 \
|
||||||
|
--hash=sha256:583b7c42688636f930688d712885cf1531326ee05effd982028212ccc13e5957 \
|
||||||
|
--hash=sha256:5a4b4cc550cb665dd8a47f868c8d04c8230f857363ad3c9caf7a0c3bf8c61ca6 \
|
||||||
|
--hash=sha256:5f451484aeb5cafee1ccf789b1b66f535409d038c56966d6101740c1614b86c6 \
|
||||||
|
--hash=sha256:5f6261a5e56e8d5c42a4497b364ea24d94d9563e8fbd44e78ac40879c60179b5 \
|
||||||
|
--hash=sha256:6e5a82b677f8f6f59e8dfc34ec06ca6b5b48bc4fcda346acd093694cc2c24d8f \
|
||||||
|
--hash=sha256:71c989cbf3254fbd5e84d3bff31e4da39c43f884e64f2551d14bb3c186230f00 \
|
||||||
|
--hash=sha256:781caf5e8eee67f663126490c2f96f40906594cb86b408a703630f95550a8c3e \
|
||||||
|
--hash=sha256:7be95cfb0a4dae143eaed2bcba8ac23f4892d8971311f1b06f3c6b78952ee70b \
|
||||||
|
--hash=sha256:7d837379b647c0c4c2355c2499723f82f1635fd2c26510e1f587d89bc2199e72 \
|
||||||
|
--hash=sha256:86890e837d61574c92a97496d590968b23c2ef0aeb8a9bc9421d174cd378ae39 \
|
||||||
|
--hash=sha256:878b336ac47938b474c8f982ac2f7266a540adc3fa4ad74ae96fea9823a02cc9 \
|
||||||
|
--hash=sha256:8b6e209ffee39ff1b6d0fa7bfef6de950c60dfb91b8fcead17da4ee539121a79 \
|
||||||
|
--hash=sha256:8cc451a50f2aee53042ac52d2d053d08bf89bcb31ae799cb4487587661c038a0 \
|
||||||
|
--hash=sha256:8d7f0659570eefb578dacde98e24fb60af35350193e4f56e11190787bee77dac \
|
||||||
|
--hash=sha256:8e1dab317b6e77424356e11e99a432b7cb2f3ec8c5ab4dabbcee6add48f72b35 \
|
||||||
|
--hash=sha256:8ff32bb86522a9e5e31439a58addbb0166f0204d64066fb955265c4e214160f0 \
|
||||||
|
--hash=sha256:95724e638f0f9c350bb1c2b0a7ad0e83d9cc0c9259f3ea94e40d7b02a2179ae5 \
|
||||||
|
--hash=sha256:9b5aca38b67492ef518a8ab76851862488a478602229112c4b0d58d63a7a4d5c \
|
||||||
|
--hash=sha256:a069d734c4a043182729edd3e9f247c3b2a4035415a9172fd0f1b71658a320a8 \
|
||||||
|
--hash=sha256:a0b31e0b424cc6b5a04b8838bbaec1688834b2383256688cf47eb97412531da1 \
|
||||||
|
--hash=sha256:a35539cacc3febb22b8f4d4a99cc79b104226a756aa7400adc722e83b0d03244 \
|
||||||
|
--hash=sha256:a5e18a238a2b2249c9a9235466b90e96ae4795672598a58772dd806edc7ac6d3 \
|
||||||
|
--hash=sha256:a653aea902e0324b52f1613332ddf50b00c06fdaf7e92624fbf8c77c78fa5767 \
|
||||||
|
--hash=sha256:abf050a199613f64c886ea10f38b47770a65154dc37181bfaff70c160f45315a \
|
||||||
|
--hash=sha256:af80d74d4edfa3cb9ed973a0a5ba2b2a549371f8a741e0800cb07becdd20f23d \
|
||||||
|
--hash=sha256:b14dc141ed6d2dde437cddb216004bcac6a1df0935d79656387bd41632ba0bbd \
|
||||||
|
--hash=sha256:b784ca5de850f4ce93ec85d3269d24d4c82f22b7212023c974c401d4980ebc5e \
|
||||||
|
--hash=sha256:bc59589ab64b0022385f429b94697348a6a234e8ce22544e3681b2e9331b5944 \
|
||||||
|
--hash=sha256:c0204dc62a89dc9d50d682412c10b3542d748260d743500a85c13cd1ee4bde82 \
|
||||||
|
--hash=sha256:c0ee0e63f23914732c6d7e0cce24915c48f3f1512ec1d079ed01fc629dab269d \
|
||||||
|
--hash=sha256:caab51a72c51973ca21fa8a18bd8165e1a0183f1ac7066a182ff27107b71e1a4 \
|
||||||
|
--hash=sha256:d6297ce39ce5c2e6feb13c1a996a2ded3b6832155fcfc920265c76f24c7cceb5 \
|
||||||
|
--hash=sha256:daa3b6ff70a9241cf6c7fc9e949d41232d9d7d26fd3522b1ad2b4d62487e9904 \
|
||||||
|
--hash=sha256:df57afc692e517a85e65b72e165356ed1df12386ecb879ad5693be08fac65dde \
|
||||||
|
--hash=sha256:e0334872c0a37b606418ac52f6ab9cfd17317ac26365f7f65e203e2d0d0d359f \
|
||||||
|
--hash=sha256:e6578ed5b6981005df1860a56e3617f14a6c307e6a71b4fff8c48fdc50f3ed2c \
|
||||||
|
--hash=sha256:eaded469f5e5b7294e2bdca0ab06becb6756ea86894a47806456089298813c89 \
|
||||||
|
--hash=sha256:f4a32d1bd841d4bcbffdcb3d2ce50c09c3909fbead375ab28d0181af89fd04da \
|
||||||
|
--hash=sha256:fd3cb4adb94a2a6e2b7c0d8d05cb94e6f1c81a0cf9dc2694fb65c7e8d94c42e4
|
||||||
|
# via yt-dlp
|
||||||
|
yt-dlp-ejs==0.8.0 \
|
||||||
|
--hash=sha256:79300e5fca7f937a1eeede11f0456862c1b41107ce1d726871e0207424f4bdb4 \
|
||||||
|
--hash=sha256:d5fa1639f63b5c4af8d932495f60689d5370f1a095782c944f7f62a303eb104e
|
||||||
|
# via yt-dlp
|
||||||
524
bundle/requirements/requirements-linux-armv7l.txt
Normal file
524
bundle/requirements/requirements-linux-armv7l.txt
Normal file
@ -0,0 +1,524 @@
|
|||||||
|
# This file was autogenerated by uv via the following command:
|
||||||
|
# uv export --no-python-downloads --no-progress --color=never --format=requirements.txt --frozen --refresh --no-emit-project --no-default-groups --extra=default --extra=curl-cffi --extra=secretstorage --group=pyinstaller --output-file=bundle/requirements/requirements-linux-armv7l.txt
|
||||||
|
altgraph==0.17.5 \
|
||||||
|
--hash=sha256:c87b395dd12fabde9c99573a9749d67da8d29ef9de0125c7f536699b4a9bc9e7 \
|
||||||
|
--hash=sha256:f3a22400bce1b0c701683820ac4f3b159cd301acab067c51c653e06961600597
|
||||||
|
# via
|
||||||
|
# macholib
|
||||||
|
# pyinstaller
|
||||||
|
brotli==1.2.0 ; implementation_name == 'cpython' and sys_platform != 'ios' \
|
||||||
|
--hash=sha256:022426c9e99fd65d9475dce5c195526f04bb8be8907607e27e747893f6ee3e24 \
|
||||||
|
--hash=sha256:072e7624b1fc4d601036ab3f4f27942ef772887e876beff0301d261210bca97f \
|
||||||
|
--hash=sha256:0bbd5b5ccd157ae7913750476d48099aaf507a79841c0d04a9db4415b14842de \
|
||||||
|
--hash=sha256:0cf8c3b8ba93d496b2fae778039e2f5ecc7cff99df84df337ca31d8f2252896c \
|
||||||
|
--hash=sha256:15b33fe93cedc4caaff8a0bd1eb7e3dab1c61bb22a0bf5bdfdfd97cd7da79744 \
|
||||||
|
--hash=sha256:1b1d6a4efedd53671c793be6dd760fcf2107da3a52331ad9ea429edf0902f27a \
|
||||||
|
--hash=sha256:1b557b29782a643420e08d75aea889462a4a8796e9a6cf5621ab05a3f7da8ef2 \
|
||||||
|
--hash=sha256:260d3692396e1895c5034f204f0db022c056f9e2ac841593a4cf9426e2a3faca \
|
||||||
|
--hash=sha256:26e8d3ecb0ee458a9804f47f21b74845cc823fd1bb19f02272be70774f56e2a6 \
|
||||||
|
--hash=sha256:2a7f1d03727130fc875448b65b127a9ec5d06d19d0148e7554384229706f9d1b \
|
||||||
|
--hash=sha256:2e1ad3fda65ae0d93fec742a128d72e145c9c7a99ee2fcd667785d99eb25a7fe \
|
||||||
|
--hash=sha256:3219bd9e69868e57183316ee19c84e03e8f8b5a1d1f2667e1aa8c2f91cb061ac \
|
||||||
|
--hash=sha256:350c8348f0e76fff0a0fd6c26755d2653863279d086d3aa2c290a6a7251135dd \
|
||||||
|
--hash=sha256:35d382625778834a7f3061b15423919aa03e4f5da34ac8e02c074e4b75ab4f84 \
|
||||||
|
--hash=sha256:3b90b767916ac44e93a8e28ce6adf8d551e43affb512f2377c732d486ac6514e \
|
||||||
|
--hash=sha256:3e1b35d56856f3ed326b140d3c6d9db91740f22e14b06e840fe4bb1923439a18 \
|
||||||
|
--hash=sha256:3f3c908bcc404c90c77d5a073e55271a0a498f4e0756e48127c35d91cf155947 \
|
||||||
|
--hash=sha256:40d918bce2b427a0c4ba189df7a006ac0c7277c180aee4617d99e9ccaaf59e6a \
|
||||||
|
--hash=sha256:4ecdb3b6dc36e6d6e14d3a1bdc6c1057c8cbf80db04031d566eb6080ce283a48 \
|
||||||
|
--hash=sha256:54a50a9dad16b32136b2241ddea9e4df159b41247b2ce6aac0b3276a66a8f1e5 \
|
||||||
|
--hash=sha256:67a91c5187e1eec76a61625c77a6c8c785650f5b576ca732bd33ef58b0dff49c \
|
||||||
|
--hash=sha256:6be67c19e0b0c56365c6a76e393b932fb0e78b3b56b711d180dd7013cb1fd984 \
|
||||||
|
--hash=sha256:6c12dad5cd04530323e723787ff762bac749a7b256a5bece32b2243dd5c27b21 \
|
||||||
|
--hash=sha256:7547369c4392b47d30a3467fe8c3330b4f2e0f7730e45e3103d7d636678a808b \
|
||||||
|
--hash=sha256:7a47ce5c2288702e09dc22a44d0ee6152f2c7eda97b3c8482d826a1f3cfc7da7 \
|
||||||
|
--hash=sha256:7a61c06b334bd99bc5ae84f1eeb36bfe01400264b3c352f968c6e30a10f9d08b \
|
||||||
|
--hash=sha256:81da1b229b1889f25adadc929aeb9dbc4e922bd18561b65b08dd9343cfccca84 \
|
||||||
|
--hash=sha256:832c115a020e463c2f67664560449a7bea26b0c1fdd690352addad6d0a08714d \
|
||||||
|
--hash=sha256:844a8ceb8483fefafc412f85c14f2aae2fb69567bf2a0de53cdb88b73e7c43ae \
|
||||||
|
--hash=sha256:898be2be399c221d2671d29eed26b6b2713a02c2119168ed914e7d00ceadb56f \
|
||||||
|
--hash=sha256:9322b9f8656782414b37e6af884146869d46ab85158201d82bab9abbcb971dc7 \
|
||||||
|
--hash=sha256:963a08f3bebd8b75ac57661045402da15991468a621f014be54e50f53a58d19e \
|
||||||
|
--hash=sha256:9c79f57faa25d97900bfb119480806d783fba83cd09ee0b33c17623935b05fa3 \
|
||||||
|
--hash=sha256:9e5825ba2c9998375530504578fd4d5d1059d09621a02065d1b6bfc41a8e05ab \
|
||||||
|
--hash=sha256:a1778532b978d2536e79c05dac2d8cd857f6c55cd0c95ace5b03740824e0e2f1 \
|
||||||
|
--hash=sha256:aa47441fa3026543513139cb8926a92a8e305ee9c71a6209ef7a97d91640ea03 \
|
||||||
|
--hash=sha256:acec55bb7c90f1dfc476126f9711a8e81c9af7fb617409a9ee2953115343f08d \
|
||||||
|
--hash=sha256:adedc4a67e15327dfdd04884873c6d5a01d3e3b6f61406f99b1ed4865a2f6d28 \
|
||||||
|
--hash=sha256:af43b8711a8264bb4e7d6d9a6d004c3a2019c04c01127a868709ec29962b6036 \
|
||||||
|
--hash=sha256:b232029d100d393ae3c603c8ffd7e3fe6f798c5e28ddca5feabb8e8fdb732997 \
|
||||||
|
--hash=sha256:b35c13ce241abdd44cb8ca70683f20c0c079728a36a996297adb5334adfc1c44 \
|
||||||
|
--hash=sha256:b63daa43d82f0cdabf98dee215b375b4058cce72871fd07934f179885aad16e8 \
|
||||||
|
--hash=sha256:c8565e3cdc1808b1a34714b553b262c5de5fbda202285782173ec137fd13709f \
|
||||||
|
--hash=sha256:cf9cba6f5b78a2071ec6fb1e7bd39acf35071d90a81231d67e92d637776a6a63 \
|
||||||
|
--hash=sha256:d2d085ded05278d1c7f65560aae97b3160aeb2ea2c0b3e26204856beccb60888 \
|
||||||
|
--hash=sha256:e310f77e41941c13340a95976fe66a8a95b01e783d430eeaf7a2f87e0a57dd0a \
|
||||||
|
--hash=sha256:e7c0af964e0b4e3412a0ebf341ea26ec767fa0b4cf81abb5e897c9338b5ad6a3 \
|
||||||
|
--hash=sha256:e99befa0b48f3cd293dafeacdd0d191804d105d279e0b387a32054c1180f3161 \
|
||||||
|
--hash=sha256:ef87b8ab2704da227e83a246356a2b179ef826f550f794b2c52cddb4efbd0196 \
|
||||||
|
--hash=sha256:fc1530af5c3c275b8524f2e24841cbe2599d74462455e9bae5109e9ff42e9361 \
|
||||||
|
--hash=sha256:ff09cd8c5eec3b9d02d2408db41be150d8891c5566addce57513bf546e3d6c6d
|
||||||
|
# via yt-dlp
|
||||||
|
brotlicffi==1.2.0.1 ; implementation_name != 'cpython' \
|
||||||
|
--hash=sha256:2c85e65913cf2b79c57a3fdd05b98d9731d9255dc0cb696b09376cc091b9cddd \
|
||||||
|
--hash=sha256:37cb587d32bf7168e2218c455e22e409ad1f3157c6c71945879a311f3e6b6abf \
|
||||||
|
--hash=sha256:3c9544f83cb715d95d7eab3af4adbbef8b2093ad6382288a83b3a25feb1a57ec \
|
||||||
|
--hash=sha256:535f2d05d0273408abc13fc0eebb467afac17b0ad85090c8913690d40207dac5 \
|
||||||
|
--hash=sha256:625f8115d32ae9c0740d01ea51518437c3fbaa3e78d41cb18459f6f7ac326000 \
|
||||||
|
--hash=sha256:6f3314a3476f59e5443f9f72a6dff16edc0c3463c9b318feaef04ae3e4683f5a \
|
||||||
|
--hash=sha256:82ea52e2b5d3145b6c406ebd3efb0d55db718b7ad996bd70c62cec0439de1187 \
|
||||||
|
--hash=sha256:91ba5f0ccc040f6ff8f7efaf839f797723d03ed46acb8ae9408f99ffd2572cf4 \
|
||||||
|
--hash=sha256:9d6ba65dd528892b4d9960beba2ae011a753620bcfc66cf6fa3cee18d7b0baa4 \
|
||||||
|
--hash=sha256:be9a670c6811af30a4bd42d7116dc5895d3b41beaa8ed8a89050447a0181f5ce \
|
||||||
|
--hash=sha256:c20d5c596278307ad06414a6d95a892377ea274a5c6b790c2548c009385d621c \
|
||||||
|
--hash=sha256:ce17eb798ca59ecec67a9bb3fd7a4304e120d1cd02953ce522d959b9a84d58ac \
|
||||||
|
--hash=sha256:da2e82a08e7778b8bc539d27ca03cdd684113e81394bfaaad8d0dfc6a17ddede \
|
||||||
|
--hash=sha256:e015af99584c6db1490a69a210c765953e473e63adc2d891ac3062a737c9e851 \
|
||||||
|
--hash=sha256:f2a5575653b0672638ba039b82fda56854934d7a6a24d4b8b5033f73ab43cbc1
|
||||||
|
# via yt-dlp
|
||||||
|
certifi==2026.2.25 \
|
||||||
|
--hash=sha256:027692e4402ad994f1c42e52a4997a9763c646b73e4096e4d5d6db8af1d6f0fa \
|
||||||
|
--hash=sha256:e887ab5cee78ea814d3472169153c2d12cd43b14bd03329a39a9c6e2e80bfba7
|
||||||
|
# via
|
||||||
|
# curl-cffi
|
||||||
|
# requests
|
||||||
|
# yt-dlp
|
||||||
|
cffi==2.0.0 \
|
||||||
|
--hash=sha256:00bdf7acc5f795150faa6957054fbbca2439db2f775ce831222b66f192f03beb \
|
||||||
|
--hash=sha256:07b271772c100085dd28b74fa0cd81c8fb1a3ba18b21e03d7c27f3436a10606b \
|
||||||
|
--hash=sha256:087067fa8953339c723661eda6b54bc98c5625757ea62e95eb4898ad5e776e9f \
|
||||||
|
--hash=sha256:0a1527a803f0a659de1af2e1fd700213caba79377e27e4693648c2923da066f9 \
|
||||||
|
--hash=sha256:0cf2d91ecc3fcc0625c2c530fe004f82c110405f101548512cce44322fa8ac44 \
|
||||||
|
--hash=sha256:12873ca6cb9b0f0d3a0da705d6086fe911591737a59f28b7936bdfed27c0d47c \
|
||||||
|
--hash=sha256:19f705ada2530c1167abacb171925dd886168931e0a7b78f5bffcae5c6b5be75 \
|
||||||
|
--hash=sha256:1e3a615586f05fc4065a8b22b8152f0c1b00cdbc60596d187c2a74f9e3036e4e \
|
||||||
|
--hash=sha256:1f72fb8906754ac8a2cc3f9f5aaa298070652a0ffae577e0ea9bd480dc3c931a \
|
||||||
|
--hash=sha256:1fc9ea04857caf665289b7a75923f2c6ed559b8298a1b8c49e59f7dd95c8481e \
|
||||||
|
--hash=sha256:203a48d1fb583fc7d78a4c6655692963b860a417c0528492a6bc21f1aaefab25 \
|
||||||
|
--hash=sha256:21d1152871b019407d8ac3985f6775c079416c282e431a4da6afe7aefd2bccbe \
|
||||||
|
--hash=sha256:24b6f81f1983e6df8db3adc38562c83f7d4a0c36162885ec7f7b77c7dcbec97b \
|
||||||
|
--hash=sha256:256f80b80ca3853f90c21b23ee78cd008713787b1b1e93eae9f3d6a7134abd91 \
|
||||||
|
--hash=sha256:28a3a209b96630bca57cce802da70c266eb08c6e97e5afd61a75611ee6c64592 \
|
||||||
|
--hash=sha256:2c8f814d84194c9ea681642fd164267891702542f028a15fc97d4674b6206187 \
|
||||||
|
--hash=sha256:2de9a304e27f7596cd03d16f1b7c72219bd944e99cc52b84d0145aefb07cbd3c \
|
||||||
|
--hash=sha256:38100abb9d1b1435bc4cc340bb4489635dc2f0da7456590877030c9b3d40b0c1 \
|
||||||
|
--hash=sha256:3925dd22fa2b7699ed2617149842d2e6adde22b262fcbfada50e3d195e4b3a94 \
|
||||||
|
--hash=sha256:3e17ed538242334bf70832644a32a7aae3d83b57567f9fd60a26257e992b79ba \
|
||||||
|
--hash=sha256:3e837e369566884707ddaf85fc1744b47575005c0a229de3327f8f9a20f4efeb \
|
||||||
|
--hash=sha256:44d1b5909021139fe36001ae048dbdde8214afa20200eda0f64c068cac5d5529 \
|
||||||
|
--hash=sha256:45d5e886156860dc35862657e1494b9bae8dfa63bf56796f2fb56e1679fc0bca \
|
||||||
|
--hash=sha256:4671d9dd5ec934cb9a73e7ee9676f9362aba54f7f34910956b84d727b0d73fb6 \
|
||||||
|
--hash=sha256:53f77cbe57044e88bbd5ed26ac1d0514d2acf0591dd6bb02a3ae37f76811b80c \
|
||||||
|
--hash=sha256:5eda85d6d1879e692d546a078b44251cdd08dd1cfb98dfb77b670c97cee49ea0 \
|
||||||
|
--hash=sha256:5fed36fccc0612a53f1d4d9a816b50a36702c28a2aa880cb8a122b3466638743 \
|
||||||
|
--hash=sha256:66f011380d0e49ed280c789fbd08ff0d40968ee7b665575489afa95c98196ab5 \
|
||||||
|
--hash=sha256:6824f87845e3396029f3820c206e459ccc91760e8fa24422f8b0c3d1731cbec5 \
|
||||||
|
--hash=sha256:6c6c373cfc5c83a975506110d17457138c8c63016b563cc9ed6e056a82f13ce4 \
|
||||||
|
--hash=sha256:6d02d6655b0e54f54c4ef0b94eb6be0607b70853c45ce98bd278dc7de718be5d \
|
||||||
|
--hash=sha256:6d50360be4546678fc1b79ffe7a66265e28667840010348dd69a314145807a1b \
|
||||||
|
--hash=sha256:730cacb21e1bdff3ce90babf007d0a0917cc3e6492f336c2f0134101e0944f93 \
|
||||||
|
--hash=sha256:737fe7d37e1a1bffe70bd5754ea763a62a066dc5913ca57e957824b72a85e205 \
|
||||||
|
--hash=sha256:74a03b9698e198d47562765773b4a8309919089150a0bb17d829ad7b44b60d27 \
|
||||||
|
--hash=sha256:7553fb2090d71822f02c629afe6042c299edf91ba1bf94951165613553984512 \
|
||||||
|
--hash=sha256:7a66c7204d8869299919db4d5069a82f1561581af12b11b3c9f48c584eb8743d \
|
||||||
|
--hash=sha256:7cc09976e8b56f8cebd752f7113ad07752461f48a58cbba644139015ac24954c \
|
||||||
|
--hash=sha256:81afed14892743bbe14dacb9e36d9e0e504cd204e0b165062c488942b9718037 \
|
||||||
|
--hash=sha256:8941aaadaf67246224cee8c3803777eed332a19d909b47e29c9842ef1e79ac26 \
|
||||||
|
--hash=sha256:8ea985900c5c95ce9db1745f7933eeef5d314f0565b27625d9a10ec9881e1bfb \
|
||||||
|
--hash=sha256:8eca2a813c1cb7ad4fb74d368c2ffbbb4789d377ee5bb8df98373c2cc0dee76c \
|
||||||
|
--hash=sha256:92b68146a71df78564e4ef48af17551a5ddd142e5190cdf2c5624d0c3ff5b2e8 \
|
||||||
|
--hash=sha256:9332088d75dc3241c702d852d4671613136d90fa6881da7d770a483fd05248b4 \
|
||||||
|
--hash=sha256:94698a9c5f91f9d138526b48fe26a199609544591f859c870d477351dc7b2414 \
|
||||||
|
--hash=sha256:9a67fc9e8eb39039280526379fb3a70023d77caec1852002b4da7e8b270c4dd9 \
|
||||||
|
--hash=sha256:9de40a7b0323d889cf8d23d1ef214f565ab154443c42737dfe52ff82cf857664 \
|
||||||
|
--hash=sha256:a05d0c237b3349096d3981b727493e22147f934b20f6f125a3eba8f994bec4a9 \
|
||||||
|
--hash=sha256:afb8db5439b81cf9c9d0c80404b60c3cc9c3add93e114dcae767f1477cb53775 \
|
||||||
|
--hash=sha256:b18a3ed7d5b3bd8d9ef7a8cb226502c6bf8308df1525e1cc676c3680e7176739 \
|
||||||
|
--hash=sha256:b1e74d11748e7e98e2f426ab176d4ed720a64412b6a15054378afdb71e0f37dc \
|
||||||
|
--hash=sha256:b21e08af67b8a103c71a250401c78d5e0893beff75e28c53c98f4de42f774062 \
|
||||||
|
--hash=sha256:b4c854ef3adc177950a8dfc81a86f5115d2abd545751a304c5bcf2c2c7283cfe \
|
||||||
|
--hash=sha256:baf5215e0ab74c16e2dd324e8ec067ef59e41125d3eade2b863d294fd5035c92 \
|
||||||
|
--hash=sha256:c649e3a33450ec82378822b3dad03cc228b8f5963c0c12fc3b1e0ab940f768a5 \
|
||||||
|
--hash=sha256:c654de545946e0db659b3400168c9ad31b5d29593291482c43e3564effbcee13 \
|
||||||
|
--hash=sha256:c6638687455baf640e37344fe26d37c404db8b80d037c3d29f58fe8d1c3b194d \
|
||||||
|
--hash=sha256:c8d3b5532fc71b7a77c09192b4a5a200ea992702734a2e9279a37f2478236f26 \
|
||||||
|
--hash=sha256:cf364028c016c03078a23b503f02058f1814320a56ad535686f90565636a9495 \
|
||||||
|
--hash=sha256:d48a880098c96020b02d5a1f7d9251308510ce8858940e6fa99ece33f610838b \
|
||||||
|
--hash=sha256:d68b6cef7827e8641e8ef16f4494edda8b36104d79773a334beaa1e3521430f6 \
|
||||||
|
--hash=sha256:d9b29c1f0ae438d5ee9acb31cadee00a58c46cc9c0b2f9038c6b0b3470877a8c \
|
||||||
|
--hash=sha256:d9b97165e8aed9272a6bb17c01e3cc5871a594a446ebedc996e2397a1c1ea8ef \
|
||||||
|
--hash=sha256:da68248800ad6320861f129cd9c1bf96ca849a2771a59e0344e88681905916f5 \
|
||||||
|
--hash=sha256:da902562c3e9c550df360bfa53c035b2f241fed6d9aef119048073680ace4a18 \
|
||||||
|
--hash=sha256:dbd5c7a25a7cb98f5ca55d258b103a2054f859a46ae11aaf23134f9cc0d356ad \
|
||||||
|
--hash=sha256:dd4f05f54a52fb558f1ba9f528228066954fee3ebe629fc1660d874d040ae5a3 \
|
||||||
|
--hash=sha256:e11e82b744887154b182fd3e7e8512418446501191994dbf9c9fc1f32cc8efd5 \
|
||||||
|
--hash=sha256:f73b96c41e3b2adedc34a7356e64c8eb96e03a3782b535e043a986276ce12a49 \
|
||||||
|
--hash=sha256:f93fd8e5c8c0a4aa1f424d6173f14a892044054871c771f8566e4008eaa359d2 \
|
||||||
|
--hash=sha256:fc33c5141b55ed366cfaad382df24fe7dcbc686de5be719b207bb248e3053dc5 \
|
||||||
|
--hash=sha256:fc7de24befaeae77ba923797c7c87834c73648a05a4bde34b3b7e5588973a453
|
||||||
|
# via
|
||||||
|
# brotlicffi
|
||||||
|
# cryptography
|
||||||
|
# curl-cffi
|
||||||
|
charset-normalizer==3.4.6 \
|
||||||
|
--hash=sha256:06a7e86163334edfc5d20fe104db92fcd666e5a5df0977cb5680a506fe26cc8e \
|
||||||
|
--hash=sha256:0c173ce3a681f309f31b87125fecec7a5d1347261ea11ebbb856fa6006b23c8c \
|
||||||
|
--hash=sha256:0e28d62a8fc7a1fa411c43bd65e346f3bce9716dc51b897fbe930c5987b402d5 \
|
||||||
|
--hash=sha256:0e901eb1049fdb80f5bd11ed5ea1e498ec423102f7a9b9e4645d5b8204ff2815 \
|
||||||
|
--hash=sha256:11afb56037cbc4b1555a34dd69151e8e069bee82e613a73bef6e714ce733585f \
|
||||||
|
--hash=sha256:150b8ce8e830eb7ccb029ec9ca36022f756986aaaa7956aad6d9ec90089338c0 \
|
||||||
|
--hash=sha256:172985e4ff804a7ad08eebec0a1640ece87ba5041d565fff23c8f99c1f389484 \
|
||||||
|
--hash=sha256:197c1a244a274bb016dd8b79204850144ef77fe81c5b797dc389327adb552407 \
|
||||||
|
--hash=sha256:1ae6b62897110aa7c79ea2f5dd38d1abca6db663687c0b1ad9aed6f6bae3d9d6 \
|
||||||
|
--hash=sha256:22c6f0c2fbc31e76c3b8a86fba1a56eda6166e238c29cdd3d14befdb4a4e4815 \
|
||||||
|
--hash=sha256:231d4da14bcd9301310faf492051bee27df11f2bc7549bc0bb41fef11b82daa2 \
|
||||||
|
--hash=sha256:259695e2ccc253feb2a016303543d691825e920917e31f894ca1a687982b1de4 \
|
||||||
|
--hash=sha256:2a24157fa36980478dd1770b585c0f30d19e18f4fb0c47c13aa568f871718579 \
|
||||||
|
--hash=sha256:2b1a63e8224e401cafe7739f77efd3f9e7f5f2026bda4aead8e59afab537784f \
|
||||||
|
--hash=sha256:2e1d8ca8611099001949d1cdfaefc510cf0f212484fe7c565f735b68c78c3c95 \
|
||||||
|
--hash=sha256:2ef7fedc7a6ecbe99969cd09632516738a97eeb8bd7258bf8a0f23114c057dab \
|
||||||
|
--hash=sha256:30f445ae60aad5e1f8bdbb3108e39f6fbc09f4ea16c815c66578878325f8f15a \
|
||||||
|
--hash=sha256:34315ff4fc374b285ad7f4a0bf7dcbfe769e1b104230d40f49f700d4ab6bbd84 \
|
||||||
|
--hash=sha256:3778fd7d7cd04ae8f54651f4a7a0bd6e39a0cf20f801720a4c21d80e9b7ad6b0 \
|
||||||
|
--hash=sha256:39f5068d35621da2881271e5c3205125cc456f54e9030d3f723288c873a71bf9 \
|
||||||
|
--hash=sha256:404a1e552cf5b675a87f0651f8b79f5f1e6fd100ee88dc612f89aa16abd4486f \
|
||||||
|
--hash=sha256:419a9d91bd238052642a51938af8ac05da5b3343becde08d5cdeab9046df9ee1 \
|
||||||
|
--hash=sha256:423fb7e748a08f854a08a222b983f4df1912b1daedce51a72bd24fe8f26a1843 \
|
||||||
|
--hash=sha256:4482481cb0572180b6fd976a4d5c72a30263e98564da68b86ec91f0fe35e8565 \
|
||||||
|
--hash=sha256:47955475ac79cc504ef2704b192364e51d0d473ad452caedd0002605f780101c \
|
||||||
|
--hash=sha256:4be9f4830ba8741527693848403e2c457c16e499100963ec711b1c6f2049b7c7 \
|
||||||
|
--hash=sha256:51fb3c322c81d20567019778cb5a4a6f2dc1c200b886bc0d636238e364848c89 \
|
||||||
|
--hash=sha256:5273b9f0b5835ff0350c0828faea623c68bfa65b792720c453e22b25cc72930f \
|
||||||
|
--hash=sha256:530d548084c4a9f7a16ed4a294d459b4f229db50df689bfe92027452452943a0 \
|
||||||
|
--hash=sha256:530e8cebeea0d76bdcf93357aa5e41336f48c3dc709ac52da2bb167c5b8271d9 \
|
||||||
|
--hash=sha256:572d7c822caf521f0525ba1bce1a622a0b85cf47ffbdae6c9c19e3b5ac3c4389 \
|
||||||
|
--hash=sha256:58c948d0d086229efc484fe2f30c2d382c86720f55cd9bc33591774348ad44e0 \
|
||||||
|
--hash=sha256:5d11595abf8dd942a77883a39d81433739b287b6aa71620f15164f8096221b30 \
|
||||||
|
--hash=sha256:5f8ddd609f9e1af8c7bd6e2aca279c931aefecd148a14402d4e368f3171769fd \
|
||||||
|
--hash=sha256:5feb91325bbceade6afab43eb3b508c63ee53579fe896c77137ded51c6b6958e \
|
||||||
|
--hash=sha256:60c74963d8350241a79cb8feea80e54d518f72c26db618862a8f53e5023deaf9 \
|
||||||
|
--hash=sha256:613f19aa6e082cf96e17e3ffd89383343d0d589abda756b7764cf78361fd41dc \
|
||||||
|
--hash=sha256:695f5c2823691a25f17bc5d5ffe79fa90972cc34b002ac6c843bb8a1720e950d \
|
||||||
|
--hash=sha256:6cceb5473417d28edd20c6c984ab6fee6c6267d38d906823ebfe20b03d607dc2 \
|
||||||
|
--hash=sha256:74119174722c4349af9708993118581686f343adc1c8c9c007d59be90d077f3f \
|
||||||
|
--hash=sha256:74a2e659c7ecbc73562e2a15e05039f1e22c75b7c7618b4b574a3ea9118d1557 \
|
||||||
|
--hash=sha256:7504e9b7dc05f99a9bbb4525c67a2c155073b44d720470a148b34166a69c054e \
|
||||||
|
--hash=sha256:79090741d842f564b1b2827c0b82d846405b744d31e84f18d7a7b41c20e473ff \
|
||||||
|
--hash=sha256:7a6967aaf043bceabab5412ed6bd6bd26603dae84d5cb75bf8d9a74a4959d398 \
|
||||||
|
--hash=sha256:7bda6eebafd42133efdca535b04ccb338ab29467b3f7bf79569883676fc628db \
|
||||||
|
--hash=sha256:7edbed096e4a4798710ed6bc75dcaa2a21b68b6c356553ac4823c3658d53743a \
|
||||||
|
--hash=sha256:7f9019c9cb613f084481bd6a100b12e1547cf2efe362d873c2e31e4035a6fa43 \
|
||||||
|
--hash=sha256:80d0a5615143c0b3225e5e3ef22c8d5d51f3f72ce0ea6fb84c943546c7b25b6c \
|
||||||
|
--hash=sha256:82060f995ab5003a2d6e0f4ad29065b7672b6593c8c63559beefe5b443242c3e \
|
||||||
|
--hash=sha256:836ab36280f21fc1a03c99cd05c6b7af70d2697e374c7af0b61ed271401a72a2 \
|
||||||
|
--hash=sha256:87725cfb1a4f1f8c2fc9890ae2f42094120f4b44db9360be5d99a4c6b0e03a9e \
|
||||||
|
--hash=sha256:899d28f422116b08be5118ef350c292b36fc15ec2daeb9ea987c89281c7bb5c4 \
|
||||||
|
--hash=sha256:8bea55c4eef25b0b19a0337dc4e3f9a15b00d569c77211fa8cde38684f234fb7 \
|
||||||
|
--hash=sha256:8e5a94886bedca0f9b78fecd6afb6629142fd2605aa70a125d49f4edc6037ee6 \
|
||||||
|
--hash=sha256:90ca27cd8da8118b18a52d5f547859cc1f8354a00cd1e8e5120df3e30d6279e5 \
|
||||||
|
--hash=sha256:92734d4d8d187a354a556626c221cd1a892a4e0802ccb2af432a1d85ec012194 \
|
||||||
|
--hash=sha256:947cf925bc916d90adba35a64c82aace04fa39b46b52d4630ece166655905a69 \
|
||||||
|
--hash=sha256:95b52c68d64c1878818687a473a10547b3292e82b6f6fe483808fb1468e2f52f \
|
||||||
|
--hash=sha256:97d0235baafca5f2b09cf332cc275f021e694e8362c6bb9c96fc9a0eb74fc316 \
|
||||||
|
--hash=sha256:9ca4c0b502ab399ef89248a2c84c54954f77a070f28e546a85e91da627d1301e \
|
||||||
|
--hash=sha256:9cc4fc6c196d6a8b76629a70ddfcd4635a6898756e2d9cac5565cf0654605d73 \
|
||||||
|
--hash=sha256:9cc6e6d9e571d2f863fa77700701dae73ed5f78881efc8b3f9a4398772ff53e8 \
|
||||||
|
--hash=sha256:a056d1ad2633548ca18ffa2f85c202cfb48b68615129143915b8dc72a806a923 \
|
||||||
|
--hash=sha256:a26611d9987b230566f24a0a125f17fe0de6a6aff9f25c9f564aaa2721a5fb88 \
|
||||||
|
--hash=sha256:a4474d924a47185a06411e0064b803c68be044be2d60e50e8bddcc2649957c1f \
|
||||||
|
--hash=sha256:a4ea868bc28109052790eb2b52a9ab33f3aa7adc02f96673526ff47419490e21 \
|
||||||
|
--hash=sha256:a9e68c9d88823b274cf1e72f28cb5dc89c990edf430b0bfd3e2fb0785bfeabf4 \
|
||||||
|
--hash=sha256:aa9cccf4a44b9b62d8ba8b4dd06c649ba683e4bf04eea606d2e94cfc2d6ff4d6 \
|
||||||
|
--hash=sha256:ac2393c73378fea4e52aa56285a3d64be50f1a12395afef9cce47772f60334c2 \
|
||||||
|
--hash=sha256:ad8faf8df23f0378c6d527d8b0b15ea4a2e23c89376877c598c4870d1b2c7866 \
|
||||||
|
--hash=sha256:b35b200d6a71b9839a46b9b7fff66b6638bb52fc9658aa58796b0326595d3021 \
|
||||||
|
--hash=sha256:b3694e3f87f8ac7ce279d4355645b3c878d24d1424581b46282f24b92f5a4ae2 \
|
||||||
|
--hash=sha256:b4ff1d35e8c5bd078be89349b6f3a845128e685e751b6ea1169cf2160b344c4d \
|
||||||
|
--hash=sha256:bbc8c8650c6e51041ad1be191742b8b421d05bbd3410f43fa2a00c8db87678e8 \
|
||||||
|
--hash=sha256:bc72863f4d9aba2e8fd9085e63548a324ba706d2ea2c83b260da08a59b9482de \
|
||||||
|
--hash=sha256:c2274ca724536f173122f36c98ce188fd24ce3dad886ec2b7af859518ce008a4 \
|
||||||
|
--hash=sha256:c8ae56368f8cc97c7e40a7ee18e1cedaf8e780cd8bc5ed5ac8b81f238614facb \
|
||||||
|
--hash=sha256:c907cdc8109f6c619e6254212e794d6548373cc40e1ec75e6e3823d9135d29cc \
|
||||||
|
--hash=sha256:ca0276464d148c72defa8bb4390cce01b4a0e425f3b50d1435aa6d7a18107602 \
|
||||||
|
--hash=sha256:cd5e2801c89992ed8c0a3f0293ae83c159a60d9a5d685005383ef4caca77f2c4 \
|
||||||
|
--hash=sha256:d60377dce4511655582e300dc1e5a5f24ba0cb229005a1d5c8d0cb72bb758ab8 \
|
||||||
|
--hash=sha256:d73beaac5e90173ac3deb9928a74763a6d230f494e4bfb422c217a0ad8e629bf \
|
||||||
|
--hash=sha256:d7de2637729c67d67cf87614b566626057e95c303bc0a55ffe391f5205e7003d \
|
||||||
|
--hash=sha256:dad6e0f2e481fffdcf776d10ebee25e0ef89f16d691f1e5dee4b586375fdc64b \
|
||||||
|
--hash=sha256:dda86aba335c902b6149a02a55b38e96287157e609200811837678214ba2b1db \
|
||||||
|
--hash=sha256:e1f6e2f00a6b8edb562826e4632e26d063ac10307e80f7461f7de3ad8ef3f077 \
|
||||||
|
--hash=sha256:e25369dc110d58ddf29b949377a93e0716d72a24f62bad72b2b39f155949c1fd \
|
||||||
|
--hash=sha256:e3c701e954abf6fc03a49f7c579cc80c2c6cc52525340ca3186c41d3f33482ef \
|
||||||
|
--hash=sha256:e5bcc1a1ae744e0bb59641171ae53743760130600da8db48cbb6e4918e186e4e \
|
||||||
|
--hash=sha256:e68c14b04827dd76dcbd1aeea9e604e3e4b78322d8faf2f8132c7138efa340a8 \
|
||||||
|
--hash=sha256:e985a16ff513596f217cee86c21371b8cd011c0f6f056d0920aa2d926c544058 \
|
||||||
|
--hash=sha256:ef5960d965e67165d75b7c7ffc60a83ec5abfc5c11b764ec13ea54fbef8b4421 \
|
||||||
|
--hash=sha256:f0cdaecd4c953bfae0b6bb64910aaaca5a424ad9c72d85cb88417bb9814f7550 \
|
||||||
|
--hash=sha256:f1ce721c8a7dfec21fcbdfe04e8f68174183cf4e8188e0645e92aa23985c57ff \
|
||||||
|
--hash=sha256:f5ea69428fa1b49573eef0cc44a1d43bebd45ad0c611eb7d7eac760c7ae771bc \
|
||||||
|
--hash=sha256:f6e4333fb15c83f7d1482a76d45a0818897b3d33f00efd215528ff7c51b8e35d \
|
||||||
|
--hash=sha256:f820f24b09e3e779fe84c3c456cb4108a7aa639b0d1f02c28046e11bfcd088ed \
|
||||||
|
--hash=sha256:fcce033e4021347d80ed9c66dcf1e7b1546319834b74445f561d2e2221de5659
|
||||||
|
# via requests
|
||||||
|
cryptography==46.0.6 \
|
||||||
|
--hash=sha256:02fad249cb0e090b574e30b276a3da6a149e04ee2f049725b1f69e7b8351ec70 \
|
||||||
|
--hash=sha256:063b67749f338ca9c5a0b7fe438a52c25f9526b851e24e6c9310e7195aad3b4d \
|
||||||
|
--hash=sha256:12cae594e9473bca1a7aceb90536060643128bb274fcea0fc459ab90f7d1ae7a \
|
||||||
|
--hash=sha256:12f0fa16cc247b13c43d56d7b35287ff1569b5b1f4c5e87e92cc4fcc00cd10c0 \
|
||||||
|
--hash=sha256:22259338084d6ae497a19bae5d4c66b7ca1387d3264d1c2c0e72d9e9b6a77b97 \
|
||||||
|
--hash=sha256:26031f1e5ca62fcb9d1fcb34b2b60b390d1aacaa15dc8b895a9ed00968b97b30 \
|
||||||
|
--hash=sha256:27550628a518c5c6c903d84f637fbecf287f6cb9ced3804838a1295dc1fd0759 \
|
||||||
|
--hash=sha256:2b417edbe8877cda9022dde3a008e2deb50be9c407eef034aeeb3a8b11d9db3c \
|
||||||
|
--hash=sha256:2ea0f37e9a9cf0df2952893ad145fd9627d326a59daec9b0802480fa3bcd2ead \
|
||||||
|
--hash=sha256:2ef9e69886cbb137c2aef9772c2e7138dc581fad4fcbcf13cc181eb5a3ab6275 \
|
||||||
|
--hash=sha256:341359d6c9e68834e204ceaf25936dffeafea3829ab80e9503860dcc4f4dac58 \
|
||||||
|
--hash=sha256:380343e0653b1c9d7e1f55b52aaa2dbb2fdf2730088d48c43ca1c7c0abb7cc2f \
|
||||||
|
--hash=sha256:3c21d92ed15e9cfc6eb64c1f5a0326db22ca9c2566ca46d845119b45b4400361 \
|
||||||
|
--hash=sha256:3dfa6567f2e9e4c5dceb8ccb5a708158a2a871052fa75c8b78cb0977063f1507 \
|
||||||
|
--hash=sha256:456b3215172aeefb9284550b162801d62f5f264a081049a3e94307fe20792cfa \
|
||||||
|
--hash=sha256:4668298aef7cddeaf5c6ecc244c2302a2b8e40f384255505c22875eebb47888b \
|
||||||
|
--hash=sha256:50575a76e2951fe7dbd1f56d181f8c5ceeeb075e9ff88e7ad997d2f42af06e7b \
|
||||||
|
--hash=sha256:639301950939d844a9e1c4464d7e07f902fe9a7f6b215bb0d4f28584729935d8 \
|
||||||
|
--hash=sha256:64235194bad039a10bb6d2d930ab3323baaec67e2ce36215fd0952fad0930ca8 \
|
||||||
|
--hash=sha256:6617f67b1606dfd9fe4dbfa354a9508d4a6d37afe30306fe6c101b7ce3274b72 \
|
||||||
|
--hash=sha256:67177e8a9f421aa2d3a170c3e56eca4e0128883cf52a071a7cbf53297f18b175 \
|
||||||
|
--hash=sha256:6728c49e3b2c180ef26f8e9f0a883a2c585638db64cf265b49c9ba10652d430e \
|
||||||
|
--hash=sha256:6739d56300662c468fddb0e5e291f9b4d084bead381667b9e654c7dd81705124 \
|
||||||
|
--hash=sha256:69cf0056d6947edc6e6760e5f17afe4bea06b56a9ac8a06de9d2bd6b532d4f3a \
|
||||||
|
--hash=sha256:760997a4b950ff00d418398ad73fbc91aa2894b5c1db7ccb45b4f68b42a63b3c \
|
||||||
|
--hash=sha256:79e865c642cfc5c0b3eb12af83c35c5aeff4fa5c672dc28c43721c2c9fdd2f0f \
|
||||||
|
--hash=sha256:7e6142674f2a9291463e5e150090b95a8519b2fb6e6aaec8917dd8d094ce750d \
|
||||||
|
--hash=sha256:7f417f034f91dcec1cb6c5c35b07cdbb2ef262557f701b4ecd803ee8cefed4f4 \
|
||||||
|
--hash=sha256:7f6690b6c55e9c5332c0b59b9c8a3fb232ebf059094c17f9019a51e9827df91c \
|
||||||
|
--hash=sha256:8927ccfbe967c7df312ade694f987e7e9e22b2425976ddbf28271d7e58845290 \
|
||||||
|
--hash=sha256:8ce35b77aaf02f3b59c90b2c8a05c73bac12cea5b4e8f3fbece1f5fddea5f0ca \
|
||||||
|
--hash=sha256:8e7304c4f4e9490e11efe56af6713983460ee0780f16c63f219984dab3af9d2d \
|
||||||
|
--hash=sha256:90e5f0a7b3be5f40c3a0a0eafb32c681d8d2c181fc2a1bdabe9b3f611d9f6b1a \
|
||||||
|
--hash=sha256:97c8115b27e19e592a05c45d0dd89c57f81f841cc9880e353e0d3bf25b2139ed \
|
||||||
|
--hash=sha256:9a693028b9cbe51b5a1136232ee8f2bc242e4e19d456ded3fa7c86e43c713b4a \
|
||||||
|
--hash=sha256:9a9c42a2723999a710445bc0d974e345c32adfd8d2fac6d8a251fa829ad31cfb \
|
||||||
|
--hash=sha256:a3e84d5ec9ba01f8fd03802b2147ba77f0c8f2617b2aff254cedd551844209c8 \
|
||||||
|
--hash=sha256:aad75154a7ac9039936d50cf431719a2f8d4ed3d3c277ac03f3339ded1a5e707 \
|
||||||
|
--hash=sha256:b12c6b1e1651e42ab5de8b1e00dc3b6354fdfd778e7fa60541ddacc27cd21410 \
|
||||||
|
--hash=sha256:b928a3ca837c77a10e81a814a693f2295200adb3352395fad024559b7be7a736 \
|
||||||
|
--hash=sha256:bcb87663e1f7b075e48c3be3ecb5f0b46c8fc50b50a97cf264e7f60242dca3f2 \
|
||||||
|
--hash=sha256:c797e2517cb7880f8297e2c0f43bb910e91381339336f75d2c1c2cbf811b70b4 \
|
||||||
|
--hash=sha256:c89eb37fae9216985d8734c1afd172ba4927f5a05cfd9bf0e4863c6d5465b013 \
|
||||||
|
--hash=sha256:cdcd3edcbc5d55757e5f5f3d330dd00007ae463a7e7aa5bf132d1f22a4b62b19 \
|
||||||
|
--hash=sha256:d24c13369e856b94892a89ddf70b332e0b70ad4a5c43cf3e9cb71d6d7ffa1f7b \
|
||||||
|
--hash=sha256:d4e4aadb7fc1f88687f47ca20bb7227981b03afaae69287029da08096853b738 \
|
||||||
|
--hash=sha256:d9528b535a6c4f8ff37847144b8986a9a143585f0540fbcb1a98115b543aa463 \
|
||||||
|
--hash=sha256:ed3775295fb91f70b4027aeba878d79b3e55c0b3e97eaa4de71f8f23a9f2eb77 \
|
||||||
|
--hash=sha256:ed418c37d095aeddf5336898a132fba01091f0ac5844e3e8018506f014b6d2c4
|
||||||
|
# via secretstorage
|
||||||
|
curl-cffi==0.15.0 ; implementation_name == 'cpython' \
|
||||||
|
--hash=sha256:08c799b89740b9bc49c09fbc3d5907f13ac1f845ca52620507ef9466d4639dd5 \
|
||||||
|
--hash=sha256:0b6c0543b993996670e9e4b78e305a2d60809d5681903ffb5568e21a387434d3 \
|
||||||
|
--hash=sha256:1977e1e12cfb5c11352cbb74acef1bed24eb7d226dab61ca57c168c21acd4d61 \
|
||||||
|
--hash=sha256:2b6c847d86283b07ae69bb72c82eb8a59242277142aa35b89850f89e792a02fc \
|
||||||
|
--hash=sha256:408d6f14e346841cd889c2e0962832bb235ba3b6749ebf609f347f747da5e60f \
|
||||||
|
--hash=sha256:41f80170ba844009273b2660da1964ec31e99e5719d16b3422ada87177e32e13 \
|
||||||
|
--hash=sha256:4682dc38d4336e0eb0b185374db90a760efde63cbea994b4e63f3521d44c4c92 \
|
||||||
|
--hash=sha256:582e570aa2586b96ed47cf4a17586b9a3c462cbe43f780487c3dc245c6ef1527 \
|
||||||
|
--hash=sha256:5a0c1896a0d5a5ac1eb89cd24b008d2b718dd1df6fd2f75451b59ca66e49e572 \
|
||||||
|
--hash=sha256:7b7a92767a888ee90147e18964b396d8435ff42737030d6fb00824ffd6094805 \
|
||||||
|
--hash=sha256:7e63539d0d839d0a8c5eacf86229bc68c57803547f35e0db7ee0986328b478c3 \
|
||||||
|
--hash=sha256:829cc357061ecb99cc2d406301f609a039e05665322f5c025ec67c38b0dc49ce \
|
||||||
|
--hash=sha256:838e48212447d9c81364b04707a5c861daf08f8320f9ecb3406a8919d1d5c3b3 \
|
||||||
|
--hash=sha256:967ad7355bd8e9586f8c2d02eaa99953747549e7ea4a9b25cd53353e6b67fe6d \
|
||||||
|
--hash=sha256:9e5e69eee735f659287e2c84444319d68a1fa68dd37abf228943a4074864283a \
|
||||||
|
--hash=sha256:a25620d9bf989c9c029a7d1642999c4c265abb0bad811deb2f77b0b5b2b12e5b \
|
||||||
|
--hash=sha256:a6d57f8389273a3a1f94370473c74897467bcc36af0a17336989780c507fa43d \
|
||||||
|
--hash=sha256:aa1323950224db24f4c510d010b3affa02196ca853fb424191fa917a513d3f4b \
|
||||||
|
--hash=sha256:b624c7ce087bfda967a013ed0a64702a525444e5b6e97d23534d567ccc6525aa \
|
||||||
|
--hash=sha256:bda66404010e9ed743b1b83c20c86f24fe21a9a6873e17479d6e67e29d8ded28 \
|
||||||
|
--hash=sha256:ea0c67652bf6893d34ee0f82c944f37e488f6147e9421bef1771cc6545b02ded
|
||||||
|
# via yt-dlp
|
||||||
|
idna==3.11 \
|
||||||
|
--hash=sha256:771a87f49d9defaf64091e6e6fe9c18d4833f140bd19464795bc32d966ca37ea \
|
||||||
|
--hash=sha256:795dafcc9c04ed0c1fb032c2aa73654d8e8c5023a7df64a53f39190ada629902
|
||||||
|
# via requests
|
||||||
|
jeepney==0.9.0 \
|
||||||
|
--hash=sha256:97e5714520c16fc0a45695e5365a2e11b81ea79bba796e26f9f1d178cb182683 \
|
||||||
|
--hash=sha256:cf0e9e845622b81e4a28df94c40345400256ec608d0e55bb8a3feaa9163f5732
|
||||||
|
# via secretstorage
|
||||||
|
macholib==1.16.4 ; sys_platform == 'darwin' \
|
||||||
|
--hash=sha256:da1a3fa8266e30f0ce7e97c6a54eefaae8edd1e5f86f3eb8b95457cae90265ea \
|
||||||
|
--hash=sha256:f408c93ab2e995cd2c46e34fe328b130404be143469e41bc366c807448979362
|
||||||
|
# via pyinstaller
|
||||||
|
markdown-it-py==4.0.0 ; implementation_name == 'cpython' \
|
||||||
|
--hash=sha256:87327c59b172c5011896038353a81343b6754500a08cd7a4973bb48c6d578147 \
|
||||||
|
--hash=sha256:cb0a2b4aa34f932c007117b194e945bd74e0ec24133ceb5bac59009cda1cb9f3
|
||||||
|
# via rich
|
||||||
|
mdurl==0.1.2 ; implementation_name == 'cpython' \
|
||||||
|
--hash=sha256:84008a41e51615a49fc9966191ff91509e3c40b939176e643fd50a5c2196b8f8 \
|
||||||
|
--hash=sha256:bb413d29f5eea38f31dd4754dd7377d4465116fb207585f97bf925588687c1ba
|
||||||
|
# via markdown-it-py
|
||||||
|
mutagen==1.47.0 \
|
||||||
|
--hash=sha256:719fadef0a978c31b4cf3c956261b3c58b6948b32023078a2117b1de09f0fc99 \
|
||||||
|
--hash=sha256:edd96f50c5907a9539d8e5bba7245f62c9f520aef333d13392a79a4f70aca719
|
||||||
|
# via yt-dlp
|
||||||
|
packaging==26.0 \
|
||||||
|
--hash=sha256:00243ae351a257117b6a241061796684b084ed1c516a08c48a3f7e147a9d80b4 \
|
||||||
|
--hash=sha256:b36f1fef9334a5588b4166f8bcd26a14e521f2b55e6b9de3aaa80d3ff7a37529
|
||||||
|
# via
|
||||||
|
# pyinstaller
|
||||||
|
# pyinstaller-hooks-contrib
|
||||||
|
pefile==2024.8.26 ; sys_platform == 'win32' \
|
||||||
|
--hash=sha256:3ff6c5d8b43e8c37bb6e6dd5085658d658a7a0bdcd20b6a07b1fcfc1c4e9d632 \
|
||||||
|
--hash=sha256:76f8b485dcd3b1bb8166f1128d395fa3d87af26360c2358fb75b80019b957c6f
|
||||||
|
# via pyinstaller
|
||||||
|
pycparser==3.0 ; implementation_name != 'PyPy' \
|
||||||
|
--hash=sha256:600f49d217304a5902ac3c37e1281c9fe94e4d0489de643a9504c5cdfdfc6b29 \
|
||||||
|
--hash=sha256:b727414169a36b7d524c1c3e31839a521725078d7b2ff038656844266160a992
|
||||||
|
# via cffi
|
||||||
|
pycryptodomex==3.23.0 \
|
||||||
|
--hash=sha256:02d87b80778c171445d67e23d1caef279bf4b25c3597050ccd2e13970b57fd51 \
|
||||||
|
--hash=sha256:06698f957fe1ab229a99ba2defeeae1c09af185baa909a31a5d1f9d42b1aaed6 \
|
||||||
|
--hash=sha256:14c37aaece158d0ace436f76a7bb19093db3b4deade9797abfc39ec6cd6cc2fe \
|
||||||
|
--hash=sha256:189afbc87f0b9f158386bf051f720e20fa6145975f1e76369303d0f31d1a8d7c \
|
||||||
|
--hash=sha256:43c446e2ba8df8889e0e16f02211c25b4934898384c1ec1ec04d7889c0333587 \
|
||||||
|
--hash=sha256:4f2596e643d4365e14d0879dc5aafe6355616c61c2176009270f3048f6d9a61f \
|
||||||
|
--hash=sha256:52e5ca58c3a0b0bd5e100a9fbc8015059b05cffc6c66ce9d98b4b45e023443b9 \
|
||||||
|
--hash=sha256:55ccbe27f049743a4caf4f4221b166560d3438d0b1e5ab929e07ae1702a4d6fd \
|
||||||
|
--hash=sha256:58b851b9effd0d072d4ca2e4542bf2a4abcf13c82a29fd2c93ce27ee2a2e9462 \
|
||||||
|
--hash=sha256:6b8962204c47464d5c1c4038abeadd4514a133b28748bcd9fa5b6d62e3cec6fa \
|
||||||
|
--hash=sha256:6bbcb1dd0f646484939e142462d9e532482bc74475cecf9c4903d4e1cd21f003 \
|
||||||
|
--hash=sha256:71909758f010c82bc99b0abf4ea12012c98962fbf0583c2164f8b84533c2e4da \
|
||||||
|
--hash=sha256:7b37e08e3871efe2187bc1fd9320cc81d87caf19816c648f24443483005ff886 \
|
||||||
|
--hash=sha256:8a4fcd42ccb04c31268d1efeecfccfd1249612b4de6374205376b8f280321744 \
|
||||||
|
--hash=sha256:91979028227543010d7b2ba2471cf1d1e398b3f183cb105ac584df0c36dac28d \
|
||||||
|
--hash=sha256:a33986a0066860f7fcf7c7bd2bc804fa90e434183645595ae7b33d01f3c91ed8 \
|
||||||
|
--hash=sha256:a9d446e844f08299236780f2efa9898c818fe7e02f17263866b8550c7d5fb328 \
|
||||||
|
--hash=sha256:b2c2537863eccef2d41061e82a881dcabb04944c5c06c5aa7110b577cc487545 \
|
||||||
|
--hash=sha256:bc65bdd9fc8de7a35a74cab1c898cab391a4add33a8fe740bda00f5976ca4708 \
|
||||||
|
--hash=sha256:bdc69d0d3d989a1029df0eed67cc5e8e5d968f3724f4519bd03e0ec68df7543c \
|
||||||
|
--hash=sha256:c25e30a20e1b426e1f0fa00131c516f16e474204eee1139d1603e132acffc314 \
|
||||||
|
--hash=sha256:c7947ab8d589e3178da3d7cdeabe14f841b391e17046954f2fbcd941705762b5 \
|
||||||
|
--hash=sha256:c885da45e70139464f082018ac527fdaad26f1657a99ee13eecdce0f0ca24ab4 \
|
||||||
|
--hash=sha256:da4fa650cef02db88c2b98acc5434461e027dce0ae8c22dd5a69013eaf510006 \
|
||||||
|
--hash=sha256:ebfff755c360d674306e5891c564a274a47953562b42fb74a5c25b8fc1fb1cb5 \
|
||||||
|
--hash=sha256:eca54f4bb349d45afc17e3011ed4264ef1cc9e266699874cdd1349c504e64798 \
|
||||||
|
--hash=sha256:f489c4765093fb60e2edafdf223397bc716491b2b69fe74367b70d6999257a5c \
|
||||||
|
--hash=sha256:fdfac7cda115bca3a5abb2f9e43bc2fb66c2b65ab074913643803ca7083a79ea
|
||||||
|
# via yt-dlp
|
||||||
|
pygments==2.19.2 ; implementation_name == 'cpython' \
|
||||||
|
--hash=sha256:636cb2477cec7f8952536970bc533bc43743542f70392ae026374600add5b887 \
|
||||||
|
--hash=sha256:86540386c03d588bb81d44bc3928634ff26449851e99741617ecb9037ee5ec0b
|
||||||
|
# via rich
|
||||||
|
pyinstaller==6.19.0 \
|
||||||
|
--hash=sha256:1ec54ef967996ca61dacba676227e2b23219878ccce5ee9d6f3aada7b8ed8abf \
|
||||||
|
--hash=sha256:3c5c251054fe4cfaa04c34a363dcfbf811545438cb7198304cd444756bc2edd2 \
|
||||||
|
--hash=sha256:4190e76b74f0c4b5c5f11ac360928cd2e36ec8e3194d437bf6b8648c7bc0c134 \
|
||||||
|
--hash=sha256:481a909c8e60c8692fc60fcb1344d984b44b943f8bc9682f2fcdae305ad297e6 \
|
||||||
|
--hash=sha256:4ab2bb52e58448e14ddf9450601bdedd66800465043501c1d8f1cab87b60b122 \
|
||||||
|
--hash=sha256:8bd68abd812d8a6ba33b9f1810e91fee0f325969733721b78151f0065319ca11 \
|
||||||
|
--hash=sha256:a0fc5f6b3c55aa54353f0c74ffa59b1115433c1850c6f655d62b461a2ed6cbbe \
|
||||||
|
--hash=sha256:b5bb6536c6560330d364d91522250f254b107cf69129d9cbcd0e6727c570be33 \
|
||||||
|
--hash=sha256:c2d5a539b0bfe6159d5522c8c70e1c0e487f22c2badae0f97d45246223b798ea \
|
||||||
|
--hash=sha256:da6d5c6391ccefe73554b9fa29b86001c8e378e0f20c2a4004f836ba537eff63 \
|
||||||
|
--hash=sha256:e649ba6bd1b0b89b210ad92adb5fbdc8a42dd2c5ca4f72ef3a0bfec83a424b83 \
|
||||||
|
--hash=sha256:ec73aeb8bd9b7f2f1240d328a4542e90b3c6e6fbc106014778431c616592a865
|
||||||
|
pyinstaller-hooks-contrib==2026.3 \
|
||||||
|
--hash=sha256:5ecd1068ad262afecadf07556279d2be52ca93a88b049fae17f1a2eb2969254a \
|
||||||
|
--hash=sha256:800d3a198a49a6cd0de2d7fb795005fdca7a0222ed9cb47c0691abd1c27b9310
|
||||||
|
# via pyinstaller
|
||||||
|
pywin32-ctypes==0.2.3 ; sys_platform == 'win32' \
|
||||||
|
--hash=sha256:8a1513379d709975552d202d942d9837758905c8d01eb82b8bcc30918929e7b8 \
|
||||||
|
--hash=sha256:d162dc04946d704503b2edc4d55f3dba5c1d539ead017afa00142c38b9885755
|
||||||
|
# via pyinstaller
|
||||||
|
requests==2.33.0 \
|
||||||
|
--hash=sha256:3324635456fa185245e24865e810cecec7b4caf933d7eb133dcde67d48cee69b \
|
||||||
|
--hash=sha256:c7ebc5e8b0f21837386ad0e1c8fe8b829fa5f544d8df3b2253bff14ef29d7652
|
||||||
|
# via yt-dlp
|
||||||
|
rich==14.3.3 ; implementation_name == 'cpython' \
|
||||||
|
--hash=sha256:793431c1f8619afa7d3b52b2cdec859562b950ea0d4b6b505397612db8d5362d \
|
||||||
|
--hash=sha256:b8daa0b9e4eef54dd8cf7c86c03713f53241884e814f4e2f5fb342fe520f639b
|
||||||
|
# via curl-cffi
|
||||||
|
secretstorage==3.5.0 \
|
||||||
|
--hash=sha256:0ce65888c0725fcb2c5bc0fdb8e5438eece02c523557ea40ce0703c266248137 \
|
||||||
|
--hash=sha256:f04b8e4689cbce351744d5537bf6b1329c6fc68f91fa666f60a380edddcd11be
|
||||||
|
# via yt-dlp
|
||||||
|
setuptools==82.0.1 \
|
||||||
|
--hash=sha256:7d872682c5d01cfde07da7bccc7b65469d3dca203318515ada1de5eda35efbf9 \
|
||||||
|
--hash=sha256:a59e362652f08dcd477c78bb6e7bd9d80a7995bc73ce773050228a348ce2e5bb
|
||||||
|
# via
|
||||||
|
# pyinstaller
|
||||||
|
# pyinstaller-hooks-contrib
|
||||||
|
typing-extensions==4.15.0 ; python_full_version < '3.11' \
|
||||||
|
--hash=sha256:0cea48d173cc12fa28ecabc3b837ea3cf6f38c6d1136f85cbaaf598984861466 \
|
||||||
|
--hash=sha256:f0fa19c6845758ab08074a0cfa8b7aecb71c999ca73d62883bc25cc018c4e548
|
||||||
|
# via cryptography
|
||||||
|
urllib3==2.6.3 \
|
||||||
|
--hash=sha256:1b62b6884944a57dbe321509ab94fd4d3b307075e0c2eae991ac71ee15ad38ed \
|
||||||
|
--hash=sha256:bf272323e553dfb2e87d9bfd225ca7b0f467b919d7bbd355436d3fd37cb0acd4
|
||||||
|
# via
|
||||||
|
# requests
|
||||||
|
# yt-dlp
|
||||||
|
websockets==16.0 \
|
||||||
|
--hash=sha256:0298d07ee155e2e9fda5be8a9042200dd2e3bb0b8a38482156576f863a9d457c \
|
||||||
|
--hash=sha256:04cdd5d2d1dacbad0a7bf36ccbcd3ccd5a30ee188f2560b7a62a30d14107b31a \
|
||||||
|
--hash=sha256:08d7af67b64d29823fed316505a89b86705f2b7981c07848fb5e3ea3020c1abe \
|
||||||
|
--hash=sha256:152284a83a00c59b759697b7f9e9cddf4e3c7861dd0d964b472b70f78f89e80e \
|
||||||
|
--hash=sha256:1637db62fad1dc833276dded54215f2c7fa46912301a24bd94d45d46a011ceec \
|
||||||
|
--hash=sha256:19c4dc84098e523fd63711e563077d39e90ec6702aff4b5d9e344a60cb3c0cb1 \
|
||||||
|
--hash=sha256:1c1b30e4f497b0b354057f3467f56244c603a79c0d1dafce1d16c283c25f6e64 \
|
||||||
|
--hash=sha256:2b9f1e0d69bc60a4a87349d50c09a037a2607918746f07de04df9e43252c77a3 \
|
||||||
|
--hash=sha256:31a52addea25187bde0797a97d6fc3d2f92b6f72a9370792d65a6e84615ac8a8 \
|
||||||
|
--hash=sha256:32da954ffa2814258030e5a57bc73a3635463238e797c7375dc8091327434206 \
|
||||||
|
--hash=sha256:335c23addf3d5e6a8633f9f8eda77efad001671e80b95c491dd0924587ece0b3 \
|
||||||
|
--hash=sha256:3425ac5cf448801335d6fdc7ae1eb22072055417a96cc6b31b3861f455fbc156 \
|
||||||
|
--hash=sha256:349f83cd6c9a415428ee1005cadb5c2c56f4389bc06a9af16103c3bc3dcc8b7d \
|
||||||
|
--hash=sha256:37b31c1623c6605e4c00d466c9d633f9b812ea430c11c8a278774a1fde1acfa9 \
|
||||||
|
--hash=sha256:417b28978cdccab24f46400586d128366313e8a96312e4b9362a4af504f3bbad \
|
||||||
|
--hash=sha256:485c49116d0af10ac698623c513c1cc01c9446c058a4e61e3bf6c19dff7335a2 \
|
||||||
|
--hash=sha256:4a1aba3340a8dca8db6eb5a7986157f52eb9e436b74813764241981ca4888f03 \
|
||||||
|
--hash=sha256:50f23cdd8343b984957e4077839841146f67a3d31ab0d00e6b824e74c5b2f6e8 \
|
||||||
|
--hash=sha256:52a0fec0e6c8d9a784c2c78276a48a2bdf099e4ccc2a4cad53b27718dbfd0230 \
|
||||||
|
--hash=sha256:52ac480f44d32970d66763115edea932f1c5b1312de36df06d6b219f6741eed8 \
|
||||||
|
--hash=sha256:5569417dc80977fc8c2d43a86f78e0a5a22fee17565d78621b6bb264a115d4ea \
|
||||||
|
--hash=sha256:569d01a4e7fba956c5ae4fc988f0d4e187900f5497ce46339c996dbf24f17641 \
|
||||||
|
--hash=sha256:583b7c42688636f930688d712885cf1531326ee05effd982028212ccc13e5957 \
|
||||||
|
--hash=sha256:5a4b4cc550cb665dd8a47f868c8d04c8230f857363ad3c9caf7a0c3bf8c61ca6 \
|
||||||
|
--hash=sha256:5f451484aeb5cafee1ccf789b1b66f535409d038c56966d6101740c1614b86c6 \
|
||||||
|
--hash=sha256:5f6261a5e56e8d5c42a4497b364ea24d94d9563e8fbd44e78ac40879c60179b5 \
|
||||||
|
--hash=sha256:6e5a82b677f8f6f59e8dfc34ec06ca6b5b48bc4fcda346acd093694cc2c24d8f \
|
||||||
|
--hash=sha256:71c989cbf3254fbd5e84d3bff31e4da39c43f884e64f2551d14bb3c186230f00 \
|
||||||
|
--hash=sha256:781caf5e8eee67f663126490c2f96f40906594cb86b408a703630f95550a8c3e \
|
||||||
|
--hash=sha256:7be95cfb0a4dae143eaed2bcba8ac23f4892d8971311f1b06f3c6b78952ee70b \
|
||||||
|
--hash=sha256:7d837379b647c0c4c2355c2499723f82f1635fd2c26510e1f587d89bc2199e72 \
|
||||||
|
--hash=sha256:86890e837d61574c92a97496d590968b23c2ef0aeb8a9bc9421d174cd378ae39 \
|
||||||
|
--hash=sha256:878b336ac47938b474c8f982ac2f7266a540adc3fa4ad74ae96fea9823a02cc9 \
|
||||||
|
--hash=sha256:8b6e209ffee39ff1b6d0fa7bfef6de950c60dfb91b8fcead17da4ee539121a79 \
|
||||||
|
--hash=sha256:8cc451a50f2aee53042ac52d2d053d08bf89bcb31ae799cb4487587661c038a0 \
|
||||||
|
--hash=sha256:8d7f0659570eefb578dacde98e24fb60af35350193e4f56e11190787bee77dac \
|
||||||
|
--hash=sha256:8e1dab317b6e77424356e11e99a432b7cb2f3ec8c5ab4dabbcee6add48f72b35 \
|
||||||
|
--hash=sha256:8ff32bb86522a9e5e31439a58addbb0166f0204d64066fb955265c4e214160f0 \
|
||||||
|
--hash=sha256:95724e638f0f9c350bb1c2b0a7ad0e83d9cc0c9259f3ea94e40d7b02a2179ae5 \
|
||||||
|
--hash=sha256:9b5aca38b67492ef518a8ab76851862488a478602229112c4b0d58d63a7a4d5c \
|
||||||
|
--hash=sha256:a069d734c4a043182729edd3e9f247c3b2a4035415a9172fd0f1b71658a320a8 \
|
||||||
|
--hash=sha256:a0b31e0b424cc6b5a04b8838bbaec1688834b2383256688cf47eb97412531da1 \
|
||||||
|
--hash=sha256:a35539cacc3febb22b8f4d4a99cc79b104226a756aa7400adc722e83b0d03244 \
|
||||||
|
--hash=sha256:a5e18a238a2b2249c9a9235466b90e96ae4795672598a58772dd806edc7ac6d3 \
|
||||||
|
--hash=sha256:a653aea902e0324b52f1613332ddf50b00c06fdaf7e92624fbf8c77c78fa5767 \
|
||||||
|
--hash=sha256:abf050a199613f64c886ea10f38b47770a65154dc37181bfaff70c160f45315a \
|
||||||
|
--hash=sha256:af80d74d4edfa3cb9ed973a0a5ba2b2a549371f8a741e0800cb07becdd20f23d \
|
||||||
|
--hash=sha256:b14dc141ed6d2dde437cddb216004bcac6a1df0935d79656387bd41632ba0bbd \
|
||||||
|
--hash=sha256:b784ca5de850f4ce93ec85d3269d24d4c82f22b7212023c974c401d4980ebc5e \
|
||||||
|
--hash=sha256:bc59589ab64b0022385f429b94697348a6a234e8ce22544e3681b2e9331b5944 \
|
||||||
|
--hash=sha256:c0204dc62a89dc9d50d682412c10b3542d748260d743500a85c13cd1ee4bde82 \
|
||||||
|
--hash=sha256:c0ee0e63f23914732c6d7e0cce24915c48f3f1512ec1d079ed01fc629dab269d \
|
||||||
|
--hash=sha256:caab51a72c51973ca21fa8a18bd8165e1a0183f1ac7066a182ff27107b71e1a4 \
|
||||||
|
--hash=sha256:d6297ce39ce5c2e6feb13c1a996a2ded3b6832155fcfc920265c76f24c7cceb5 \
|
||||||
|
--hash=sha256:daa3b6ff70a9241cf6c7fc9e949d41232d9d7d26fd3522b1ad2b4d62487e9904 \
|
||||||
|
--hash=sha256:df57afc692e517a85e65b72e165356ed1df12386ecb879ad5693be08fac65dde \
|
||||||
|
--hash=sha256:e0334872c0a37b606418ac52f6ab9cfd17317ac26365f7f65e203e2d0d0d359f \
|
||||||
|
--hash=sha256:e6578ed5b6981005df1860a56e3617f14a6c307e6a71b4fff8c48fdc50f3ed2c \
|
||||||
|
--hash=sha256:eaded469f5e5b7294e2bdca0ab06becb6756ea86894a47806456089298813c89 \
|
||||||
|
--hash=sha256:f4a32d1bd841d4bcbffdcb3d2ce50c09c3909fbead375ab28d0181af89fd04da \
|
||||||
|
--hash=sha256:fd3cb4adb94a2a6e2b7c0d8d05cb94e6f1c81a0cf9dc2694fb65c7e8d94c42e4
|
||||||
|
# via yt-dlp
|
||||||
|
yt-dlp-ejs==0.8.0 \
|
||||||
|
--hash=sha256:79300e5fca7f937a1eeede11f0456862c1b41107ce1d726871e0207424f4bdb4 \
|
||||||
|
--hash=sha256:d5fa1639f63b5c4af8d932495f60689d5370f1a095782c944f7f62a303eb104e
|
||||||
|
# via yt-dlp
|
||||||
524
bundle/requirements/requirements-linux-x86_64.txt
Normal file
524
bundle/requirements/requirements-linux-x86_64.txt
Normal file
@ -0,0 +1,524 @@
|
|||||||
|
# This file was autogenerated by uv via the following command:
|
||||||
|
# uv export --no-python-downloads --no-progress --color=never --format=requirements.txt --frozen --refresh --no-emit-project --no-default-groups --extra=default --extra=curl-cffi --extra=secretstorage --group=pyinstaller --output-file=bundle/requirements/requirements-linux-x86_64.txt
|
||||||
|
altgraph==0.17.5 \
|
||||||
|
--hash=sha256:c87b395dd12fabde9c99573a9749d67da8d29ef9de0125c7f536699b4a9bc9e7 \
|
||||||
|
--hash=sha256:f3a22400bce1b0c701683820ac4f3b159cd301acab067c51c653e06961600597
|
||||||
|
# via
|
||||||
|
# macholib
|
||||||
|
# pyinstaller
|
||||||
|
brotli==1.2.0 ; implementation_name == 'cpython' and sys_platform != 'ios' \
|
||||||
|
--hash=sha256:022426c9e99fd65d9475dce5c195526f04bb8be8907607e27e747893f6ee3e24 \
|
||||||
|
--hash=sha256:072e7624b1fc4d601036ab3f4f27942ef772887e876beff0301d261210bca97f \
|
||||||
|
--hash=sha256:0bbd5b5ccd157ae7913750476d48099aaf507a79841c0d04a9db4415b14842de \
|
||||||
|
--hash=sha256:0cf8c3b8ba93d496b2fae778039e2f5ecc7cff99df84df337ca31d8f2252896c \
|
||||||
|
--hash=sha256:15b33fe93cedc4caaff8a0bd1eb7e3dab1c61bb22a0bf5bdfdfd97cd7da79744 \
|
||||||
|
--hash=sha256:1b1d6a4efedd53671c793be6dd760fcf2107da3a52331ad9ea429edf0902f27a \
|
||||||
|
--hash=sha256:1b557b29782a643420e08d75aea889462a4a8796e9a6cf5621ab05a3f7da8ef2 \
|
||||||
|
--hash=sha256:260d3692396e1895c5034f204f0db022c056f9e2ac841593a4cf9426e2a3faca \
|
||||||
|
--hash=sha256:26e8d3ecb0ee458a9804f47f21b74845cc823fd1bb19f02272be70774f56e2a6 \
|
||||||
|
--hash=sha256:2a7f1d03727130fc875448b65b127a9ec5d06d19d0148e7554384229706f9d1b \
|
||||||
|
--hash=sha256:2e1ad3fda65ae0d93fec742a128d72e145c9c7a99ee2fcd667785d99eb25a7fe \
|
||||||
|
--hash=sha256:3219bd9e69868e57183316ee19c84e03e8f8b5a1d1f2667e1aa8c2f91cb061ac \
|
||||||
|
--hash=sha256:350c8348f0e76fff0a0fd6c26755d2653863279d086d3aa2c290a6a7251135dd \
|
||||||
|
--hash=sha256:35d382625778834a7f3061b15423919aa03e4f5da34ac8e02c074e4b75ab4f84 \
|
||||||
|
--hash=sha256:3b90b767916ac44e93a8e28ce6adf8d551e43affb512f2377c732d486ac6514e \
|
||||||
|
--hash=sha256:3e1b35d56856f3ed326b140d3c6d9db91740f22e14b06e840fe4bb1923439a18 \
|
||||||
|
--hash=sha256:3f3c908bcc404c90c77d5a073e55271a0a498f4e0756e48127c35d91cf155947 \
|
||||||
|
--hash=sha256:40d918bce2b427a0c4ba189df7a006ac0c7277c180aee4617d99e9ccaaf59e6a \
|
||||||
|
--hash=sha256:4ecdb3b6dc36e6d6e14d3a1bdc6c1057c8cbf80db04031d566eb6080ce283a48 \
|
||||||
|
--hash=sha256:54a50a9dad16b32136b2241ddea9e4df159b41247b2ce6aac0b3276a66a8f1e5 \
|
||||||
|
--hash=sha256:67a91c5187e1eec76a61625c77a6c8c785650f5b576ca732bd33ef58b0dff49c \
|
||||||
|
--hash=sha256:6be67c19e0b0c56365c6a76e393b932fb0e78b3b56b711d180dd7013cb1fd984 \
|
||||||
|
--hash=sha256:6c12dad5cd04530323e723787ff762bac749a7b256a5bece32b2243dd5c27b21 \
|
||||||
|
--hash=sha256:7547369c4392b47d30a3467fe8c3330b4f2e0f7730e45e3103d7d636678a808b \
|
||||||
|
--hash=sha256:7a47ce5c2288702e09dc22a44d0ee6152f2c7eda97b3c8482d826a1f3cfc7da7 \
|
||||||
|
--hash=sha256:7a61c06b334bd99bc5ae84f1eeb36bfe01400264b3c352f968c6e30a10f9d08b \
|
||||||
|
--hash=sha256:81da1b229b1889f25adadc929aeb9dbc4e922bd18561b65b08dd9343cfccca84 \
|
||||||
|
--hash=sha256:832c115a020e463c2f67664560449a7bea26b0c1fdd690352addad6d0a08714d \
|
||||||
|
--hash=sha256:844a8ceb8483fefafc412f85c14f2aae2fb69567bf2a0de53cdb88b73e7c43ae \
|
||||||
|
--hash=sha256:898be2be399c221d2671d29eed26b6b2713a02c2119168ed914e7d00ceadb56f \
|
||||||
|
--hash=sha256:9322b9f8656782414b37e6af884146869d46ab85158201d82bab9abbcb971dc7 \
|
||||||
|
--hash=sha256:963a08f3bebd8b75ac57661045402da15991468a621f014be54e50f53a58d19e \
|
||||||
|
--hash=sha256:9c79f57faa25d97900bfb119480806d783fba83cd09ee0b33c17623935b05fa3 \
|
||||||
|
--hash=sha256:9e5825ba2c9998375530504578fd4d5d1059d09621a02065d1b6bfc41a8e05ab \
|
||||||
|
--hash=sha256:a1778532b978d2536e79c05dac2d8cd857f6c55cd0c95ace5b03740824e0e2f1 \
|
||||||
|
--hash=sha256:aa47441fa3026543513139cb8926a92a8e305ee9c71a6209ef7a97d91640ea03 \
|
||||||
|
--hash=sha256:acec55bb7c90f1dfc476126f9711a8e81c9af7fb617409a9ee2953115343f08d \
|
||||||
|
--hash=sha256:adedc4a67e15327dfdd04884873c6d5a01d3e3b6f61406f99b1ed4865a2f6d28 \
|
||||||
|
--hash=sha256:af43b8711a8264bb4e7d6d9a6d004c3a2019c04c01127a868709ec29962b6036 \
|
||||||
|
--hash=sha256:b232029d100d393ae3c603c8ffd7e3fe6f798c5e28ddca5feabb8e8fdb732997 \
|
||||||
|
--hash=sha256:b35c13ce241abdd44cb8ca70683f20c0c079728a36a996297adb5334adfc1c44 \
|
||||||
|
--hash=sha256:b63daa43d82f0cdabf98dee215b375b4058cce72871fd07934f179885aad16e8 \
|
||||||
|
--hash=sha256:c8565e3cdc1808b1a34714b553b262c5de5fbda202285782173ec137fd13709f \
|
||||||
|
--hash=sha256:cf9cba6f5b78a2071ec6fb1e7bd39acf35071d90a81231d67e92d637776a6a63 \
|
||||||
|
--hash=sha256:d2d085ded05278d1c7f65560aae97b3160aeb2ea2c0b3e26204856beccb60888 \
|
||||||
|
--hash=sha256:e310f77e41941c13340a95976fe66a8a95b01e783d430eeaf7a2f87e0a57dd0a \
|
||||||
|
--hash=sha256:e7c0af964e0b4e3412a0ebf341ea26ec767fa0b4cf81abb5e897c9338b5ad6a3 \
|
||||||
|
--hash=sha256:e99befa0b48f3cd293dafeacdd0d191804d105d279e0b387a32054c1180f3161 \
|
||||||
|
--hash=sha256:ef87b8ab2704da227e83a246356a2b179ef826f550f794b2c52cddb4efbd0196 \
|
||||||
|
--hash=sha256:fc1530af5c3c275b8524f2e24841cbe2599d74462455e9bae5109e9ff42e9361 \
|
||||||
|
--hash=sha256:ff09cd8c5eec3b9d02d2408db41be150d8891c5566addce57513bf546e3d6c6d
|
||||||
|
# via yt-dlp
|
||||||
|
brotlicffi==1.2.0.1 ; implementation_name != 'cpython' \
|
||||||
|
--hash=sha256:2c85e65913cf2b79c57a3fdd05b98d9731d9255dc0cb696b09376cc091b9cddd \
|
||||||
|
--hash=sha256:37cb587d32bf7168e2218c455e22e409ad1f3157c6c71945879a311f3e6b6abf \
|
||||||
|
--hash=sha256:3c9544f83cb715d95d7eab3af4adbbef8b2093ad6382288a83b3a25feb1a57ec \
|
||||||
|
--hash=sha256:535f2d05d0273408abc13fc0eebb467afac17b0ad85090c8913690d40207dac5 \
|
||||||
|
--hash=sha256:625f8115d32ae9c0740d01ea51518437c3fbaa3e78d41cb18459f6f7ac326000 \
|
||||||
|
--hash=sha256:6f3314a3476f59e5443f9f72a6dff16edc0c3463c9b318feaef04ae3e4683f5a \
|
||||||
|
--hash=sha256:82ea52e2b5d3145b6c406ebd3efb0d55db718b7ad996bd70c62cec0439de1187 \
|
||||||
|
--hash=sha256:91ba5f0ccc040f6ff8f7efaf839f797723d03ed46acb8ae9408f99ffd2572cf4 \
|
||||||
|
--hash=sha256:9d6ba65dd528892b4d9960beba2ae011a753620bcfc66cf6fa3cee18d7b0baa4 \
|
||||||
|
--hash=sha256:be9a670c6811af30a4bd42d7116dc5895d3b41beaa8ed8a89050447a0181f5ce \
|
||||||
|
--hash=sha256:c20d5c596278307ad06414a6d95a892377ea274a5c6b790c2548c009385d621c \
|
||||||
|
--hash=sha256:ce17eb798ca59ecec67a9bb3fd7a4304e120d1cd02953ce522d959b9a84d58ac \
|
||||||
|
--hash=sha256:da2e82a08e7778b8bc539d27ca03cdd684113e81394bfaaad8d0dfc6a17ddede \
|
||||||
|
--hash=sha256:e015af99584c6db1490a69a210c765953e473e63adc2d891ac3062a737c9e851 \
|
||||||
|
--hash=sha256:f2a5575653b0672638ba039b82fda56854934d7a6a24d4b8b5033f73ab43cbc1
|
||||||
|
# via yt-dlp
|
||||||
|
certifi==2026.2.25 \
|
||||||
|
--hash=sha256:027692e4402ad994f1c42e52a4997a9763c646b73e4096e4d5d6db8af1d6f0fa \
|
||||||
|
--hash=sha256:e887ab5cee78ea814d3472169153c2d12cd43b14bd03329a39a9c6e2e80bfba7
|
||||||
|
# via
|
||||||
|
# curl-cffi
|
||||||
|
# requests
|
||||||
|
# yt-dlp
|
||||||
|
cffi==2.0.0 \
|
||||||
|
--hash=sha256:00bdf7acc5f795150faa6957054fbbca2439db2f775ce831222b66f192f03beb \
|
||||||
|
--hash=sha256:07b271772c100085dd28b74fa0cd81c8fb1a3ba18b21e03d7c27f3436a10606b \
|
||||||
|
--hash=sha256:087067fa8953339c723661eda6b54bc98c5625757ea62e95eb4898ad5e776e9f \
|
||||||
|
--hash=sha256:0a1527a803f0a659de1af2e1fd700213caba79377e27e4693648c2923da066f9 \
|
||||||
|
--hash=sha256:0cf2d91ecc3fcc0625c2c530fe004f82c110405f101548512cce44322fa8ac44 \
|
||||||
|
--hash=sha256:12873ca6cb9b0f0d3a0da705d6086fe911591737a59f28b7936bdfed27c0d47c \
|
||||||
|
--hash=sha256:19f705ada2530c1167abacb171925dd886168931e0a7b78f5bffcae5c6b5be75 \
|
||||||
|
--hash=sha256:1e3a615586f05fc4065a8b22b8152f0c1b00cdbc60596d187c2a74f9e3036e4e \
|
||||||
|
--hash=sha256:1f72fb8906754ac8a2cc3f9f5aaa298070652a0ffae577e0ea9bd480dc3c931a \
|
||||||
|
--hash=sha256:1fc9ea04857caf665289b7a75923f2c6ed559b8298a1b8c49e59f7dd95c8481e \
|
||||||
|
--hash=sha256:203a48d1fb583fc7d78a4c6655692963b860a417c0528492a6bc21f1aaefab25 \
|
||||||
|
--hash=sha256:21d1152871b019407d8ac3985f6775c079416c282e431a4da6afe7aefd2bccbe \
|
||||||
|
--hash=sha256:24b6f81f1983e6df8db3adc38562c83f7d4a0c36162885ec7f7b77c7dcbec97b \
|
||||||
|
--hash=sha256:256f80b80ca3853f90c21b23ee78cd008713787b1b1e93eae9f3d6a7134abd91 \
|
||||||
|
--hash=sha256:28a3a209b96630bca57cce802da70c266eb08c6e97e5afd61a75611ee6c64592 \
|
||||||
|
--hash=sha256:2c8f814d84194c9ea681642fd164267891702542f028a15fc97d4674b6206187 \
|
||||||
|
--hash=sha256:2de9a304e27f7596cd03d16f1b7c72219bd944e99cc52b84d0145aefb07cbd3c \
|
||||||
|
--hash=sha256:38100abb9d1b1435bc4cc340bb4489635dc2f0da7456590877030c9b3d40b0c1 \
|
||||||
|
--hash=sha256:3925dd22fa2b7699ed2617149842d2e6adde22b262fcbfada50e3d195e4b3a94 \
|
||||||
|
--hash=sha256:3e17ed538242334bf70832644a32a7aae3d83b57567f9fd60a26257e992b79ba \
|
||||||
|
--hash=sha256:3e837e369566884707ddaf85fc1744b47575005c0a229de3327f8f9a20f4efeb \
|
||||||
|
--hash=sha256:44d1b5909021139fe36001ae048dbdde8214afa20200eda0f64c068cac5d5529 \
|
||||||
|
--hash=sha256:45d5e886156860dc35862657e1494b9bae8dfa63bf56796f2fb56e1679fc0bca \
|
||||||
|
--hash=sha256:4671d9dd5ec934cb9a73e7ee9676f9362aba54f7f34910956b84d727b0d73fb6 \
|
||||||
|
--hash=sha256:53f77cbe57044e88bbd5ed26ac1d0514d2acf0591dd6bb02a3ae37f76811b80c \
|
||||||
|
--hash=sha256:5eda85d6d1879e692d546a078b44251cdd08dd1cfb98dfb77b670c97cee49ea0 \
|
||||||
|
--hash=sha256:5fed36fccc0612a53f1d4d9a816b50a36702c28a2aa880cb8a122b3466638743 \
|
||||||
|
--hash=sha256:66f011380d0e49ed280c789fbd08ff0d40968ee7b665575489afa95c98196ab5 \
|
||||||
|
--hash=sha256:6824f87845e3396029f3820c206e459ccc91760e8fa24422f8b0c3d1731cbec5 \
|
||||||
|
--hash=sha256:6c6c373cfc5c83a975506110d17457138c8c63016b563cc9ed6e056a82f13ce4 \
|
||||||
|
--hash=sha256:6d02d6655b0e54f54c4ef0b94eb6be0607b70853c45ce98bd278dc7de718be5d \
|
||||||
|
--hash=sha256:6d50360be4546678fc1b79ffe7a66265e28667840010348dd69a314145807a1b \
|
||||||
|
--hash=sha256:730cacb21e1bdff3ce90babf007d0a0917cc3e6492f336c2f0134101e0944f93 \
|
||||||
|
--hash=sha256:737fe7d37e1a1bffe70bd5754ea763a62a066dc5913ca57e957824b72a85e205 \
|
||||||
|
--hash=sha256:74a03b9698e198d47562765773b4a8309919089150a0bb17d829ad7b44b60d27 \
|
||||||
|
--hash=sha256:7553fb2090d71822f02c629afe6042c299edf91ba1bf94951165613553984512 \
|
||||||
|
--hash=sha256:7a66c7204d8869299919db4d5069a82f1561581af12b11b3c9f48c584eb8743d \
|
||||||
|
--hash=sha256:7cc09976e8b56f8cebd752f7113ad07752461f48a58cbba644139015ac24954c \
|
||||||
|
--hash=sha256:81afed14892743bbe14dacb9e36d9e0e504cd204e0b165062c488942b9718037 \
|
||||||
|
--hash=sha256:8941aaadaf67246224cee8c3803777eed332a19d909b47e29c9842ef1e79ac26 \
|
||||||
|
--hash=sha256:8ea985900c5c95ce9db1745f7933eeef5d314f0565b27625d9a10ec9881e1bfb \
|
||||||
|
--hash=sha256:8eca2a813c1cb7ad4fb74d368c2ffbbb4789d377ee5bb8df98373c2cc0dee76c \
|
||||||
|
--hash=sha256:92b68146a71df78564e4ef48af17551a5ddd142e5190cdf2c5624d0c3ff5b2e8 \
|
||||||
|
--hash=sha256:9332088d75dc3241c702d852d4671613136d90fa6881da7d770a483fd05248b4 \
|
||||||
|
--hash=sha256:94698a9c5f91f9d138526b48fe26a199609544591f859c870d477351dc7b2414 \
|
||||||
|
--hash=sha256:9a67fc9e8eb39039280526379fb3a70023d77caec1852002b4da7e8b270c4dd9 \
|
||||||
|
--hash=sha256:9de40a7b0323d889cf8d23d1ef214f565ab154443c42737dfe52ff82cf857664 \
|
||||||
|
--hash=sha256:a05d0c237b3349096d3981b727493e22147f934b20f6f125a3eba8f994bec4a9 \
|
||||||
|
--hash=sha256:afb8db5439b81cf9c9d0c80404b60c3cc9c3add93e114dcae767f1477cb53775 \
|
||||||
|
--hash=sha256:b18a3ed7d5b3bd8d9ef7a8cb226502c6bf8308df1525e1cc676c3680e7176739 \
|
||||||
|
--hash=sha256:b1e74d11748e7e98e2f426ab176d4ed720a64412b6a15054378afdb71e0f37dc \
|
||||||
|
--hash=sha256:b21e08af67b8a103c71a250401c78d5e0893beff75e28c53c98f4de42f774062 \
|
||||||
|
--hash=sha256:b4c854ef3adc177950a8dfc81a86f5115d2abd545751a304c5bcf2c2c7283cfe \
|
||||||
|
--hash=sha256:baf5215e0ab74c16e2dd324e8ec067ef59e41125d3eade2b863d294fd5035c92 \
|
||||||
|
--hash=sha256:c649e3a33450ec82378822b3dad03cc228b8f5963c0c12fc3b1e0ab940f768a5 \
|
||||||
|
--hash=sha256:c654de545946e0db659b3400168c9ad31b5d29593291482c43e3564effbcee13 \
|
||||||
|
--hash=sha256:c6638687455baf640e37344fe26d37c404db8b80d037c3d29f58fe8d1c3b194d \
|
||||||
|
--hash=sha256:c8d3b5532fc71b7a77c09192b4a5a200ea992702734a2e9279a37f2478236f26 \
|
||||||
|
--hash=sha256:cf364028c016c03078a23b503f02058f1814320a56ad535686f90565636a9495 \
|
||||||
|
--hash=sha256:d48a880098c96020b02d5a1f7d9251308510ce8858940e6fa99ece33f610838b \
|
||||||
|
--hash=sha256:d68b6cef7827e8641e8ef16f4494edda8b36104d79773a334beaa1e3521430f6 \
|
||||||
|
--hash=sha256:d9b29c1f0ae438d5ee9acb31cadee00a58c46cc9c0b2f9038c6b0b3470877a8c \
|
||||||
|
--hash=sha256:d9b97165e8aed9272a6bb17c01e3cc5871a594a446ebedc996e2397a1c1ea8ef \
|
||||||
|
--hash=sha256:da68248800ad6320861f129cd9c1bf96ca849a2771a59e0344e88681905916f5 \
|
||||||
|
--hash=sha256:da902562c3e9c550df360bfa53c035b2f241fed6d9aef119048073680ace4a18 \
|
||||||
|
--hash=sha256:dbd5c7a25a7cb98f5ca55d258b103a2054f859a46ae11aaf23134f9cc0d356ad \
|
||||||
|
--hash=sha256:dd4f05f54a52fb558f1ba9f528228066954fee3ebe629fc1660d874d040ae5a3 \
|
||||||
|
--hash=sha256:e11e82b744887154b182fd3e7e8512418446501191994dbf9c9fc1f32cc8efd5 \
|
||||||
|
--hash=sha256:f73b96c41e3b2adedc34a7356e64c8eb96e03a3782b535e043a986276ce12a49 \
|
||||||
|
--hash=sha256:f93fd8e5c8c0a4aa1f424d6173f14a892044054871c771f8566e4008eaa359d2 \
|
||||||
|
--hash=sha256:fc33c5141b55ed366cfaad382df24fe7dcbc686de5be719b207bb248e3053dc5 \
|
||||||
|
--hash=sha256:fc7de24befaeae77ba923797c7c87834c73648a05a4bde34b3b7e5588973a453
|
||||||
|
# via
|
||||||
|
# brotlicffi
|
||||||
|
# cryptography
|
||||||
|
# curl-cffi
|
||||||
|
charset-normalizer==3.4.6 \
|
||||||
|
--hash=sha256:06a7e86163334edfc5d20fe104db92fcd666e5a5df0977cb5680a506fe26cc8e \
|
||||||
|
--hash=sha256:0c173ce3a681f309f31b87125fecec7a5d1347261ea11ebbb856fa6006b23c8c \
|
||||||
|
--hash=sha256:0e28d62a8fc7a1fa411c43bd65e346f3bce9716dc51b897fbe930c5987b402d5 \
|
||||||
|
--hash=sha256:0e901eb1049fdb80f5bd11ed5ea1e498ec423102f7a9b9e4645d5b8204ff2815 \
|
||||||
|
--hash=sha256:11afb56037cbc4b1555a34dd69151e8e069bee82e613a73bef6e714ce733585f \
|
||||||
|
--hash=sha256:150b8ce8e830eb7ccb029ec9ca36022f756986aaaa7956aad6d9ec90089338c0 \
|
||||||
|
--hash=sha256:172985e4ff804a7ad08eebec0a1640ece87ba5041d565fff23c8f99c1f389484 \
|
||||||
|
--hash=sha256:197c1a244a274bb016dd8b79204850144ef77fe81c5b797dc389327adb552407 \
|
||||||
|
--hash=sha256:1ae6b62897110aa7c79ea2f5dd38d1abca6db663687c0b1ad9aed6f6bae3d9d6 \
|
||||||
|
--hash=sha256:22c6f0c2fbc31e76c3b8a86fba1a56eda6166e238c29cdd3d14befdb4a4e4815 \
|
||||||
|
--hash=sha256:231d4da14bcd9301310faf492051bee27df11f2bc7549bc0bb41fef11b82daa2 \
|
||||||
|
--hash=sha256:259695e2ccc253feb2a016303543d691825e920917e31f894ca1a687982b1de4 \
|
||||||
|
--hash=sha256:2a24157fa36980478dd1770b585c0f30d19e18f4fb0c47c13aa568f871718579 \
|
||||||
|
--hash=sha256:2b1a63e8224e401cafe7739f77efd3f9e7f5f2026bda4aead8e59afab537784f \
|
||||||
|
--hash=sha256:2e1d8ca8611099001949d1cdfaefc510cf0f212484fe7c565f735b68c78c3c95 \
|
||||||
|
--hash=sha256:2ef7fedc7a6ecbe99969cd09632516738a97eeb8bd7258bf8a0f23114c057dab \
|
||||||
|
--hash=sha256:30f445ae60aad5e1f8bdbb3108e39f6fbc09f4ea16c815c66578878325f8f15a \
|
||||||
|
--hash=sha256:34315ff4fc374b285ad7f4a0bf7dcbfe769e1b104230d40f49f700d4ab6bbd84 \
|
||||||
|
--hash=sha256:3778fd7d7cd04ae8f54651f4a7a0bd6e39a0cf20f801720a4c21d80e9b7ad6b0 \
|
||||||
|
--hash=sha256:39f5068d35621da2881271e5c3205125cc456f54e9030d3f723288c873a71bf9 \
|
||||||
|
--hash=sha256:404a1e552cf5b675a87f0651f8b79f5f1e6fd100ee88dc612f89aa16abd4486f \
|
||||||
|
--hash=sha256:419a9d91bd238052642a51938af8ac05da5b3343becde08d5cdeab9046df9ee1 \
|
||||||
|
--hash=sha256:423fb7e748a08f854a08a222b983f4df1912b1daedce51a72bd24fe8f26a1843 \
|
||||||
|
--hash=sha256:4482481cb0572180b6fd976a4d5c72a30263e98564da68b86ec91f0fe35e8565 \
|
||||||
|
--hash=sha256:47955475ac79cc504ef2704b192364e51d0d473ad452caedd0002605f780101c \
|
||||||
|
--hash=sha256:4be9f4830ba8741527693848403e2c457c16e499100963ec711b1c6f2049b7c7 \
|
||||||
|
--hash=sha256:51fb3c322c81d20567019778cb5a4a6f2dc1c200b886bc0d636238e364848c89 \
|
||||||
|
--hash=sha256:5273b9f0b5835ff0350c0828faea623c68bfa65b792720c453e22b25cc72930f \
|
||||||
|
--hash=sha256:530d548084c4a9f7a16ed4a294d459b4f229db50df689bfe92027452452943a0 \
|
||||||
|
--hash=sha256:530e8cebeea0d76bdcf93357aa5e41336f48c3dc709ac52da2bb167c5b8271d9 \
|
||||||
|
--hash=sha256:572d7c822caf521f0525ba1bce1a622a0b85cf47ffbdae6c9c19e3b5ac3c4389 \
|
||||||
|
--hash=sha256:58c948d0d086229efc484fe2f30c2d382c86720f55cd9bc33591774348ad44e0 \
|
||||||
|
--hash=sha256:5d11595abf8dd942a77883a39d81433739b287b6aa71620f15164f8096221b30 \
|
||||||
|
--hash=sha256:5f8ddd609f9e1af8c7bd6e2aca279c931aefecd148a14402d4e368f3171769fd \
|
||||||
|
--hash=sha256:5feb91325bbceade6afab43eb3b508c63ee53579fe896c77137ded51c6b6958e \
|
||||||
|
--hash=sha256:60c74963d8350241a79cb8feea80e54d518f72c26db618862a8f53e5023deaf9 \
|
||||||
|
--hash=sha256:613f19aa6e082cf96e17e3ffd89383343d0d589abda756b7764cf78361fd41dc \
|
||||||
|
--hash=sha256:695f5c2823691a25f17bc5d5ffe79fa90972cc34b002ac6c843bb8a1720e950d \
|
||||||
|
--hash=sha256:6cceb5473417d28edd20c6c984ab6fee6c6267d38d906823ebfe20b03d607dc2 \
|
||||||
|
--hash=sha256:74119174722c4349af9708993118581686f343adc1c8c9c007d59be90d077f3f \
|
||||||
|
--hash=sha256:74a2e659c7ecbc73562e2a15e05039f1e22c75b7c7618b4b574a3ea9118d1557 \
|
||||||
|
--hash=sha256:7504e9b7dc05f99a9bbb4525c67a2c155073b44d720470a148b34166a69c054e \
|
||||||
|
--hash=sha256:79090741d842f564b1b2827c0b82d846405b744d31e84f18d7a7b41c20e473ff \
|
||||||
|
--hash=sha256:7a6967aaf043bceabab5412ed6bd6bd26603dae84d5cb75bf8d9a74a4959d398 \
|
||||||
|
--hash=sha256:7bda6eebafd42133efdca535b04ccb338ab29467b3f7bf79569883676fc628db \
|
||||||
|
--hash=sha256:7edbed096e4a4798710ed6bc75dcaa2a21b68b6c356553ac4823c3658d53743a \
|
||||||
|
--hash=sha256:7f9019c9cb613f084481bd6a100b12e1547cf2efe362d873c2e31e4035a6fa43 \
|
||||||
|
--hash=sha256:80d0a5615143c0b3225e5e3ef22c8d5d51f3f72ce0ea6fb84c943546c7b25b6c \
|
||||||
|
--hash=sha256:82060f995ab5003a2d6e0f4ad29065b7672b6593c8c63559beefe5b443242c3e \
|
||||||
|
--hash=sha256:836ab36280f21fc1a03c99cd05c6b7af70d2697e374c7af0b61ed271401a72a2 \
|
||||||
|
--hash=sha256:87725cfb1a4f1f8c2fc9890ae2f42094120f4b44db9360be5d99a4c6b0e03a9e \
|
||||||
|
--hash=sha256:899d28f422116b08be5118ef350c292b36fc15ec2daeb9ea987c89281c7bb5c4 \
|
||||||
|
--hash=sha256:8bea55c4eef25b0b19a0337dc4e3f9a15b00d569c77211fa8cde38684f234fb7 \
|
||||||
|
--hash=sha256:8e5a94886bedca0f9b78fecd6afb6629142fd2605aa70a125d49f4edc6037ee6 \
|
||||||
|
--hash=sha256:90ca27cd8da8118b18a52d5f547859cc1f8354a00cd1e8e5120df3e30d6279e5 \
|
||||||
|
--hash=sha256:92734d4d8d187a354a556626c221cd1a892a4e0802ccb2af432a1d85ec012194 \
|
||||||
|
--hash=sha256:947cf925bc916d90adba35a64c82aace04fa39b46b52d4630ece166655905a69 \
|
||||||
|
--hash=sha256:95b52c68d64c1878818687a473a10547b3292e82b6f6fe483808fb1468e2f52f \
|
||||||
|
--hash=sha256:97d0235baafca5f2b09cf332cc275f021e694e8362c6bb9c96fc9a0eb74fc316 \
|
||||||
|
--hash=sha256:9ca4c0b502ab399ef89248a2c84c54954f77a070f28e546a85e91da627d1301e \
|
||||||
|
--hash=sha256:9cc4fc6c196d6a8b76629a70ddfcd4635a6898756e2d9cac5565cf0654605d73 \
|
||||||
|
--hash=sha256:9cc6e6d9e571d2f863fa77700701dae73ed5f78881efc8b3f9a4398772ff53e8 \
|
||||||
|
--hash=sha256:a056d1ad2633548ca18ffa2f85c202cfb48b68615129143915b8dc72a806a923 \
|
||||||
|
--hash=sha256:a26611d9987b230566f24a0a125f17fe0de6a6aff9f25c9f564aaa2721a5fb88 \
|
||||||
|
--hash=sha256:a4474d924a47185a06411e0064b803c68be044be2d60e50e8bddcc2649957c1f \
|
||||||
|
--hash=sha256:a4ea868bc28109052790eb2b52a9ab33f3aa7adc02f96673526ff47419490e21 \
|
||||||
|
--hash=sha256:a9e68c9d88823b274cf1e72f28cb5dc89c990edf430b0bfd3e2fb0785bfeabf4 \
|
||||||
|
--hash=sha256:aa9cccf4a44b9b62d8ba8b4dd06c649ba683e4bf04eea606d2e94cfc2d6ff4d6 \
|
||||||
|
--hash=sha256:ac2393c73378fea4e52aa56285a3d64be50f1a12395afef9cce47772f60334c2 \
|
||||||
|
--hash=sha256:ad8faf8df23f0378c6d527d8b0b15ea4a2e23c89376877c598c4870d1b2c7866 \
|
||||||
|
--hash=sha256:b35b200d6a71b9839a46b9b7fff66b6638bb52fc9658aa58796b0326595d3021 \
|
||||||
|
--hash=sha256:b3694e3f87f8ac7ce279d4355645b3c878d24d1424581b46282f24b92f5a4ae2 \
|
||||||
|
--hash=sha256:b4ff1d35e8c5bd078be89349b6f3a845128e685e751b6ea1169cf2160b344c4d \
|
||||||
|
--hash=sha256:bbc8c8650c6e51041ad1be191742b8b421d05bbd3410f43fa2a00c8db87678e8 \
|
||||||
|
--hash=sha256:bc72863f4d9aba2e8fd9085e63548a324ba706d2ea2c83b260da08a59b9482de \
|
||||||
|
--hash=sha256:c2274ca724536f173122f36c98ce188fd24ce3dad886ec2b7af859518ce008a4 \
|
||||||
|
--hash=sha256:c8ae56368f8cc97c7e40a7ee18e1cedaf8e780cd8bc5ed5ac8b81f238614facb \
|
||||||
|
--hash=sha256:c907cdc8109f6c619e6254212e794d6548373cc40e1ec75e6e3823d9135d29cc \
|
||||||
|
--hash=sha256:ca0276464d148c72defa8bb4390cce01b4a0e425f3b50d1435aa6d7a18107602 \
|
||||||
|
--hash=sha256:cd5e2801c89992ed8c0a3f0293ae83c159a60d9a5d685005383ef4caca77f2c4 \
|
||||||
|
--hash=sha256:d60377dce4511655582e300dc1e5a5f24ba0cb229005a1d5c8d0cb72bb758ab8 \
|
||||||
|
--hash=sha256:d73beaac5e90173ac3deb9928a74763a6d230f494e4bfb422c217a0ad8e629bf \
|
||||||
|
--hash=sha256:d7de2637729c67d67cf87614b566626057e95c303bc0a55ffe391f5205e7003d \
|
||||||
|
--hash=sha256:dad6e0f2e481fffdcf776d10ebee25e0ef89f16d691f1e5dee4b586375fdc64b \
|
||||||
|
--hash=sha256:dda86aba335c902b6149a02a55b38e96287157e609200811837678214ba2b1db \
|
||||||
|
--hash=sha256:e1f6e2f00a6b8edb562826e4632e26d063ac10307e80f7461f7de3ad8ef3f077 \
|
||||||
|
--hash=sha256:e25369dc110d58ddf29b949377a93e0716d72a24f62bad72b2b39f155949c1fd \
|
||||||
|
--hash=sha256:e3c701e954abf6fc03a49f7c579cc80c2c6cc52525340ca3186c41d3f33482ef \
|
||||||
|
--hash=sha256:e5bcc1a1ae744e0bb59641171ae53743760130600da8db48cbb6e4918e186e4e \
|
||||||
|
--hash=sha256:e68c14b04827dd76dcbd1aeea9e604e3e4b78322d8faf2f8132c7138efa340a8 \
|
||||||
|
--hash=sha256:e985a16ff513596f217cee86c21371b8cd011c0f6f056d0920aa2d926c544058 \
|
||||||
|
--hash=sha256:ef5960d965e67165d75b7c7ffc60a83ec5abfc5c11b764ec13ea54fbef8b4421 \
|
||||||
|
--hash=sha256:f0cdaecd4c953bfae0b6bb64910aaaca5a424ad9c72d85cb88417bb9814f7550 \
|
||||||
|
--hash=sha256:f1ce721c8a7dfec21fcbdfe04e8f68174183cf4e8188e0645e92aa23985c57ff \
|
||||||
|
--hash=sha256:f5ea69428fa1b49573eef0cc44a1d43bebd45ad0c611eb7d7eac760c7ae771bc \
|
||||||
|
--hash=sha256:f6e4333fb15c83f7d1482a76d45a0818897b3d33f00efd215528ff7c51b8e35d \
|
||||||
|
--hash=sha256:f820f24b09e3e779fe84c3c456cb4108a7aa639b0d1f02c28046e11bfcd088ed \
|
||||||
|
--hash=sha256:fcce033e4021347d80ed9c66dcf1e7b1546319834b74445f561d2e2221de5659
|
||||||
|
# via requests
|
||||||
|
cryptography==46.0.6 \
|
||||||
|
--hash=sha256:02fad249cb0e090b574e30b276a3da6a149e04ee2f049725b1f69e7b8351ec70 \
|
||||||
|
--hash=sha256:063b67749f338ca9c5a0b7fe438a52c25f9526b851e24e6c9310e7195aad3b4d \
|
||||||
|
--hash=sha256:12cae594e9473bca1a7aceb90536060643128bb274fcea0fc459ab90f7d1ae7a \
|
||||||
|
--hash=sha256:12f0fa16cc247b13c43d56d7b35287ff1569b5b1f4c5e87e92cc4fcc00cd10c0 \
|
||||||
|
--hash=sha256:22259338084d6ae497a19bae5d4c66b7ca1387d3264d1c2c0e72d9e9b6a77b97 \
|
||||||
|
--hash=sha256:26031f1e5ca62fcb9d1fcb34b2b60b390d1aacaa15dc8b895a9ed00968b97b30 \
|
||||||
|
--hash=sha256:27550628a518c5c6c903d84f637fbecf287f6cb9ced3804838a1295dc1fd0759 \
|
||||||
|
--hash=sha256:2b417edbe8877cda9022dde3a008e2deb50be9c407eef034aeeb3a8b11d9db3c \
|
||||||
|
--hash=sha256:2ea0f37e9a9cf0df2952893ad145fd9627d326a59daec9b0802480fa3bcd2ead \
|
||||||
|
--hash=sha256:2ef9e69886cbb137c2aef9772c2e7138dc581fad4fcbcf13cc181eb5a3ab6275 \
|
||||||
|
--hash=sha256:341359d6c9e68834e204ceaf25936dffeafea3829ab80e9503860dcc4f4dac58 \
|
||||||
|
--hash=sha256:380343e0653b1c9d7e1f55b52aaa2dbb2fdf2730088d48c43ca1c7c0abb7cc2f \
|
||||||
|
--hash=sha256:3c21d92ed15e9cfc6eb64c1f5a0326db22ca9c2566ca46d845119b45b4400361 \
|
||||||
|
--hash=sha256:3dfa6567f2e9e4c5dceb8ccb5a708158a2a871052fa75c8b78cb0977063f1507 \
|
||||||
|
--hash=sha256:456b3215172aeefb9284550b162801d62f5f264a081049a3e94307fe20792cfa \
|
||||||
|
--hash=sha256:4668298aef7cddeaf5c6ecc244c2302a2b8e40f384255505c22875eebb47888b \
|
||||||
|
--hash=sha256:50575a76e2951fe7dbd1f56d181f8c5ceeeb075e9ff88e7ad997d2f42af06e7b \
|
||||||
|
--hash=sha256:639301950939d844a9e1c4464d7e07f902fe9a7f6b215bb0d4f28584729935d8 \
|
||||||
|
--hash=sha256:64235194bad039a10bb6d2d930ab3323baaec67e2ce36215fd0952fad0930ca8 \
|
||||||
|
--hash=sha256:6617f67b1606dfd9fe4dbfa354a9508d4a6d37afe30306fe6c101b7ce3274b72 \
|
||||||
|
--hash=sha256:67177e8a9f421aa2d3a170c3e56eca4e0128883cf52a071a7cbf53297f18b175 \
|
||||||
|
--hash=sha256:6728c49e3b2c180ef26f8e9f0a883a2c585638db64cf265b49c9ba10652d430e \
|
||||||
|
--hash=sha256:6739d56300662c468fddb0e5e291f9b4d084bead381667b9e654c7dd81705124 \
|
||||||
|
--hash=sha256:69cf0056d6947edc6e6760e5f17afe4bea06b56a9ac8a06de9d2bd6b532d4f3a \
|
||||||
|
--hash=sha256:760997a4b950ff00d418398ad73fbc91aa2894b5c1db7ccb45b4f68b42a63b3c \
|
||||||
|
--hash=sha256:79e865c642cfc5c0b3eb12af83c35c5aeff4fa5c672dc28c43721c2c9fdd2f0f \
|
||||||
|
--hash=sha256:7e6142674f2a9291463e5e150090b95a8519b2fb6e6aaec8917dd8d094ce750d \
|
||||||
|
--hash=sha256:7f417f034f91dcec1cb6c5c35b07cdbb2ef262557f701b4ecd803ee8cefed4f4 \
|
||||||
|
--hash=sha256:7f6690b6c55e9c5332c0b59b9c8a3fb232ebf059094c17f9019a51e9827df91c \
|
||||||
|
--hash=sha256:8927ccfbe967c7df312ade694f987e7e9e22b2425976ddbf28271d7e58845290 \
|
||||||
|
--hash=sha256:8ce35b77aaf02f3b59c90b2c8a05c73bac12cea5b4e8f3fbece1f5fddea5f0ca \
|
||||||
|
--hash=sha256:8e7304c4f4e9490e11efe56af6713983460ee0780f16c63f219984dab3af9d2d \
|
||||||
|
--hash=sha256:90e5f0a7b3be5f40c3a0a0eafb32c681d8d2c181fc2a1bdabe9b3f611d9f6b1a \
|
||||||
|
--hash=sha256:97c8115b27e19e592a05c45d0dd89c57f81f841cc9880e353e0d3bf25b2139ed \
|
||||||
|
--hash=sha256:9a693028b9cbe51b5a1136232ee8f2bc242e4e19d456ded3fa7c86e43c713b4a \
|
||||||
|
--hash=sha256:9a9c42a2723999a710445bc0d974e345c32adfd8d2fac6d8a251fa829ad31cfb \
|
||||||
|
--hash=sha256:a3e84d5ec9ba01f8fd03802b2147ba77f0c8f2617b2aff254cedd551844209c8 \
|
||||||
|
--hash=sha256:aad75154a7ac9039936d50cf431719a2f8d4ed3d3c277ac03f3339ded1a5e707 \
|
||||||
|
--hash=sha256:b12c6b1e1651e42ab5de8b1e00dc3b6354fdfd778e7fa60541ddacc27cd21410 \
|
||||||
|
--hash=sha256:b928a3ca837c77a10e81a814a693f2295200adb3352395fad024559b7be7a736 \
|
||||||
|
--hash=sha256:bcb87663e1f7b075e48c3be3ecb5f0b46c8fc50b50a97cf264e7f60242dca3f2 \
|
||||||
|
--hash=sha256:c797e2517cb7880f8297e2c0f43bb910e91381339336f75d2c1c2cbf811b70b4 \
|
||||||
|
--hash=sha256:c89eb37fae9216985d8734c1afd172ba4927f5a05cfd9bf0e4863c6d5465b013 \
|
||||||
|
--hash=sha256:cdcd3edcbc5d55757e5f5f3d330dd00007ae463a7e7aa5bf132d1f22a4b62b19 \
|
||||||
|
--hash=sha256:d24c13369e856b94892a89ddf70b332e0b70ad4a5c43cf3e9cb71d6d7ffa1f7b \
|
||||||
|
--hash=sha256:d4e4aadb7fc1f88687f47ca20bb7227981b03afaae69287029da08096853b738 \
|
||||||
|
--hash=sha256:d9528b535a6c4f8ff37847144b8986a9a143585f0540fbcb1a98115b543aa463 \
|
||||||
|
--hash=sha256:ed3775295fb91f70b4027aeba878d79b3e55c0b3e97eaa4de71f8f23a9f2eb77 \
|
||||||
|
--hash=sha256:ed418c37d095aeddf5336898a132fba01091f0ac5844e3e8018506f014b6d2c4
|
||||||
|
# via secretstorage
|
||||||
|
curl-cffi==0.15.0 ; implementation_name == 'cpython' \
|
||||||
|
--hash=sha256:08c799b89740b9bc49c09fbc3d5907f13ac1f845ca52620507ef9466d4639dd5 \
|
||||||
|
--hash=sha256:0b6c0543b993996670e9e4b78e305a2d60809d5681903ffb5568e21a387434d3 \
|
||||||
|
--hash=sha256:1977e1e12cfb5c11352cbb74acef1bed24eb7d226dab61ca57c168c21acd4d61 \
|
||||||
|
--hash=sha256:2b6c847d86283b07ae69bb72c82eb8a59242277142aa35b89850f89e792a02fc \
|
||||||
|
--hash=sha256:408d6f14e346841cd889c2e0962832bb235ba3b6749ebf609f347f747da5e60f \
|
||||||
|
--hash=sha256:41f80170ba844009273b2660da1964ec31e99e5719d16b3422ada87177e32e13 \
|
||||||
|
--hash=sha256:4682dc38d4336e0eb0b185374db90a760efde63cbea994b4e63f3521d44c4c92 \
|
||||||
|
--hash=sha256:582e570aa2586b96ed47cf4a17586b9a3c462cbe43f780487c3dc245c6ef1527 \
|
||||||
|
--hash=sha256:5a0c1896a0d5a5ac1eb89cd24b008d2b718dd1df6fd2f75451b59ca66e49e572 \
|
||||||
|
--hash=sha256:7b7a92767a888ee90147e18964b396d8435ff42737030d6fb00824ffd6094805 \
|
||||||
|
--hash=sha256:7e63539d0d839d0a8c5eacf86229bc68c57803547f35e0db7ee0986328b478c3 \
|
||||||
|
--hash=sha256:829cc357061ecb99cc2d406301f609a039e05665322f5c025ec67c38b0dc49ce \
|
||||||
|
--hash=sha256:838e48212447d9c81364b04707a5c861daf08f8320f9ecb3406a8919d1d5c3b3 \
|
||||||
|
--hash=sha256:967ad7355bd8e9586f8c2d02eaa99953747549e7ea4a9b25cd53353e6b67fe6d \
|
||||||
|
--hash=sha256:9e5e69eee735f659287e2c84444319d68a1fa68dd37abf228943a4074864283a \
|
||||||
|
--hash=sha256:a25620d9bf989c9c029a7d1642999c4c265abb0bad811deb2f77b0b5b2b12e5b \
|
||||||
|
--hash=sha256:a6d57f8389273a3a1f94370473c74897467bcc36af0a17336989780c507fa43d \
|
||||||
|
--hash=sha256:aa1323950224db24f4c510d010b3affa02196ca853fb424191fa917a513d3f4b \
|
||||||
|
--hash=sha256:b624c7ce087bfda967a013ed0a64702a525444e5b6e97d23534d567ccc6525aa \
|
||||||
|
--hash=sha256:bda66404010e9ed743b1b83c20c86f24fe21a9a6873e17479d6e67e29d8ded28 \
|
||||||
|
--hash=sha256:ea0c67652bf6893d34ee0f82c944f37e488f6147e9421bef1771cc6545b02ded
|
||||||
|
# via yt-dlp
|
||||||
|
idna==3.11 \
|
||||||
|
--hash=sha256:771a87f49d9defaf64091e6e6fe9c18d4833f140bd19464795bc32d966ca37ea \
|
||||||
|
--hash=sha256:795dafcc9c04ed0c1fb032c2aa73654d8e8c5023a7df64a53f39190ada629902
|
||||||
|
# via requests
|
||||||
|
jeepney==0.9.0 \
|
||||||
|
--hash=sha256:97e5714520c16fc0a45695e5365a2e11b81ea79bba796e26f9f1d178cb182683 \
|
||||||
|
--hash=sha256:cf0e9e845622b81e4a28df94c40345400256ec608d0e55bb8a3feaa9163f5732
|
||||||
|
# via secretstorage
|
||||||
|
macholib==1.16.4 ; sys_platform == 'darwin' \
|
||||||
|
--hash=sha256:da1a3fa8266e30f0ce7e97c6a54eefaae8edd1e5f86f3eb8b95457cae90265ea \
|
||||||
|
--hash=sha256:f408c93ab2e995cd2c46e34fe328b130404be143469e41bc366c807448979362
|
||||||
|
# via pyinstaller
|
||||||
|
markdown-it-py==4.0.0 ; implementation_name == 'cpython' \
|
||||||
|
--hash=sha256:87327c59b172c5011896038353a81343b6754500a08cd7a4973bb48c6d578147 \
|
||||||
|
--hash=sha256:cb0a2b4aa34f932c007117b194e945bd74e0ec24133ceb5bac59009cda1cb9f3
|
||||||
|
# via rich
|
||||||
|
mdurl==0.1.2 ; implementation_name == 'cpython' \
|
||||||
|
--hash=sha256:84008a41e51615a49fc9966191ff91509e3c40b939176e643fd50a5c2196b8f8 \
|
||||||
|
--hash=sha256:bb413d29f5eea38f31dd4754dd7377d4465116fb207585f97bf925588687c1ba
|
||||||
|
# via markdown-it-py
|
||||||
|
mutagen==1.47.0 \
|
||||||
|
--hash=sha256:719fadef0a978c31b4cf3c956261b3c58b6948b32023078a2117b1de09f0fc99 \
|
||||||
|
--hash=sha256:edd96f50c5907a9539d8e5bba7245f62c9f520aef333d13392a79a4f70aca719
|
||||||
|
# via yt-dlp
|
||||||
|
packaging==26.0 \
|
||||||
|
--hash=sha256:00243ae351a257117b6a241061796684b084ed1c516a08c48a3f7e147a9d80b4 \
|
||||||
|
--hash=sha256:b36f1fef9334a5588b4166f8bcd26a14e521f2b55e6b9de3aaa80d3ff7a37529
|
||||||
|
# via
|
||||||
|
# pyinstaller
|
||||||
|
# pyinstaller-hooks-contrib
|
||||||
|
pefile==2024.8.26 ; sys_platform == 'win32' \
|
||||||
|
--hash=sha256:3ff6c5d8b43e8c37bb6e6dd5085658d658a7a0bdcd20b6a07b1fcfc1c4e9d632 \
|
||||||
|
--hash=sha256:76f8b485dcd3b1bb8166f1128d395fa3d87af26360c2358fb75b80019b957c6f
|
||||||
|
# via pyinstaller
|
||||||
|
pycparser==3.0 ; implementation_name != 'PyPy' \
|
||||||
|
--hash=sha256:600f49d217304a5902ac3c37e1281c9fe94e4d0489de643a9504c5cdfdfc6b29 \
|
||||||
|
--hash=sha256:b727414169a36b7d524c1c3e31839a521725078d7b2ff038656844266160a992
|
||||||
|
# via cffi
|
||||||
|
pycryptodomex==3.23.0 \
|
||||||
|
--hash=sha256:02d87b80778c171445d67e23d1caef279bf4b25c3597050ccd2e13970b57fd51 \
|
||||||
|
--hash=sha256:06698f957fe1ab229a99ba2defeeae1c09af185baa909a31a5d1f9d42b1aaed6 \
|
||||||
|
--hash=sha256:14c37aaece158d0ace436f76a7bb19093db3b4deade9797abfc39ec6cd6cc2fe \
|
||||||
|
--hash=sha256:189afbc87f0b9f158386bf051f720e20fa6145975f1e76369303d0f31d1a8d7c \
|
||||||
|
--hash=sha256:43c446e2ba8df8889e0e16f02211c25b4934898384c1ec1ec04d7889c0333587 \
|
||||||
|
--hash=sha256:4f2596e643d4365e14d0879dc5aafe6355616c61c2176009270f3048f6d9a61f \
|
||||||
|
--hash=sha256:52e5ca58c3a0b0bd5e100a9fbc8015059b05cffc6c66ce9d98b4b45e023443b9 \
|
||||||
|
--hash=sha256:55ccbe27f049743a4caf4f4221b166560d3438d0b1e5ab929e07ae1702a4d6fd \
|
||||||
|
--hash=sha256:58b851b9effd0d072d4ca2e4542bf2a4abcf13c82a29fd2c93ce27ee2a2e9462 \
|
||||||
|
--hash=sha256:6b8962204c47464d5c1c4038abeadd4514a133b28748bcd9fa5b6d62e3cec6fa \
|
||||||
|
--hash=sha256:6bbcb1dd0f646484939e142462d9e532482bc74475cecf9c4903d4e1cd21f003 \
|
||||||
|
--hash=sha256:71909758f010c82bc99b0abf4ea12012c98962fbf0583c2164f8b84533c2e4da \
|
||||||
|
--hash=sha256:7b37e08e3871efe2187bc1fd9320cc81d87caf19816c648f24443483005ff886 \
|
||||||
|
--hash=sha256:8a4fcd42ccb04c31268d1efeecfccfd1249612b4de6374205376b8f280321744 \
|
||||||
|
--hash=sha256:91979028227543010d7b2ba2471cf1d1e398b3f183cb105ac584df0c36dac28d \
|
||||||
|
--hash=sha256:a33986a0066860f7fcf7c7bd2bc804fa90e434183645595ae7b33d01f3c91ed8 \
|
||||||
|
--hash=sha256:a9d446e844f08299236780f2efa9898c818fe7e02f17263866b8550c7d5fb328 \
|
||||||
|
--hash=sha256:b2c2537863eccef2d41061e82a881dcabb04944c5c06c5aa7110b577cc487545 \
|
||||||
|
--hash=sha256:bc65bdd9fc8de7a35a74cab1c898cab391a4add33a8fe740bda00f5976ca4708 \
|
||||||
|
--hash=sha256:bdc69d0d3d989a1029df0eed67cc5e8e5d968f3724f4519bd03e0ec68df7543c \
|
||||||
|
--hash=sha256:c25e30a20e1b426e1f0fa00131c516f16e474204eee1139d1603e132acffc314 \
|
||||||
|
--hash=sha256:c7947ab8d589e3178da3d7cdeabe14f841b391e17046954f2fbcd941705762b5 \
|
||||||
|
--hash=sha256:c885da45e70139464f082018ac527fdaad26f1657a99ee13eecdce0f0ca24ab4 \
|
||||||
|
--hash=sha256:da4fa650cef02db88c2b98acc5434461e027dce0ae8c22dd5a69013eaf510006 \
|
||||||
|
--hash=sha256:ebfff755c360d674306e5891c564a274a47953562b42fb74a5c25b8fc1fb1cb5 \
|
||||||
|
--hash=sha256:eca54f4bb349d45afc17e3011ed4264ef1cc9e266699874cdd1349c504e64798 \
|
||||||
|
--hash=sha256:f489c4765093fb60e2edafdf223397bc716491b2b69fe74367b70d6999257a5c \
|
||||||
|
--hash=sha256:fdfac7cda115bca3a5abb2f9e43bc2fb66c2b65ab074913643803ca7083a79ea
|
||||||
|
# via yt-dlp
|
||||||
|
pygments==2.19.2 ; implementation_name == 'cpython' \
|
||||||
|
--hash=sha256:636cb2477cec7f8952536970bc533bc43743542f70392ae026374600add5b887 \
|
||||||
|
--hash=sha256:86540386c03d588bb81d44bc3928634ff26449851e99741617ecb9037ee5ec0b
|
||||||
|
# via rich
|
||||||
|
pyinstaller==6.19.0 \
|
||||||
|
--hash=sha256:1ec54ef967996ca61dacba676227e2b23219878ccce5ee9d6f3aada7b8ed8abf \
|
||||||
|
--hash=sha256:3c5c251054fe4cfaa04c34a363dcfbf811545438cb7198304cd444756bc2edd2 \
|
||||||
|
--hash=sha256:4190e76b74f0c4b5c5f11ac360928cd2e36ec8e3194d437bf6b8648c7bc0c134 \
|
||||||
|
--hash=sha256:481a909c8e60c8692fc60fcb1344d984b44b943f8bc9682f2fcdae305ad297e6 \
|
||||||
|
--hash=sha256:4ab2bb52e58448e14ddf9450601bdedd66800465043501c1d8f1cab87b60b122 \
|
||||||
|
--hash=sha256:8bd68abd812d8a6ba33b9f1810e91fee0f325969733721b78151f0065319ca11 \
|
||||||
|
--hash=sha256:a0fc5f6b3c55aa54353f0c74ffa59b1115433c1850c6f655d62b461a2ed6cbbe \
|
||||||
|
--hash=sha256:b5bb6536c6560330d364d91522250f254b107cf69129d9cbcd0e6727c570be33 \
|
||||||
|
--hash=sha256:c2d5a539b0bfe6159d5522c8c70e1c0e487f22c2badae0f97d45246223b798ea \
|
||||||
|
--hash=sha256:da6d5c6391ccefe73554b9fa29b86001c8e378e0f20c2a4004f836ba537eff63 \
|
||||||
|
--hash=sha256:e649ba6bd1b0b89b210ad92adb5fbdc8a42dd2c5ca4f72ef3a0bfec83a424b83 \
|
||||||
|
--hash=sha256:ec73aeb8bd9b7f2f1240d328a4542e90b3c6e6fbc106014778431c616592a865
|
||||||
|
pyinstaller-hooks-contrib==2026.3 \
|
||||||
|
--hash=sha256:5ecd1068ad262afecadf07556279d2be52ca93a88b049fae17f1a2eb2969254a \
|
||||||
|
--hash=sha256:800d3a198a49a6cd0de2d7fb795005fdca7a0222ed9cb47c0691abd1c27b9310
|
||||||
|
# via pyinstaller
|
||||||
|
pywin32-ctypes==0.2.3 ; sys_platform == 'win32' \
|
||||||
|
--hash=sha256:8a1513379d709975552d202d942d9837758905c8d01eb82b8bcc30918929e7b8 \
|
||||||
|
--hash=sha256:d162dc04946d704503b2edc4d55f3dba5c1d539ead017afa00142c38b9885755
|
||||||
|
# via pyinstaller
|
||||||
|
requests==2.33.0 \
|
||||||
|
--hash=sha256:3324635456fa185245e24865e810cecec7b4caf933d7eb133dcde67d48cee69b \
|
||||||
|
--hash=sha256:c7ebc5e8b0f21837386ad0e1c8fe8b829fa5f544d8df3b2253bff14ef29d7652
|
||||||
|
# via yt-dlp
|
||||||
|
rich==14.3.3 ; implementation_name == 'cpython' \
|
||||||
|
--hash=sha256:793431c1f8619afa7d3b52b2cdec859562b950ea0d4b6b505397612db8d5362d \
|
||||||
|
--hash=sha256:b8daa0b9e4eef54dd8cf7c86c03713f53241884e814f4e2f5fb342fe520f639b
|
||||||
|
# via curl-cffi
|
||||||
|
secretstorage==3.5.0 \
|
||||||
|
--hash=sha256:0ce65888c0725fcb2c5bc0fdb8e5438eece02c523557ea40ce0703c266248137 \
|
||||||
|
--hash=sha256:f04b8e4689cbce351744d5537bf6b1329c6fc68f91fa666f60a380edddcd11be
|
||||||
|
# via yt-dlp
|
||||||
|
setuptools==82.0.1 \
|
||||||
|
--hash=sha256:7d872682c5d01cfde07da7bccc7b65469d3dca203318515ada1de5eda35efbf9 \
|
||||||
|
--hash=sha256:a59e362652f08dcd477c78bb6e7bd9d80a7995bc73ce773050228a348ce2e5bb
|
||||||
|
# via
|
||||||
|
# pyinstaller
|
||||||
|
# pyinstaller-hooks-contrib
|
||||||
|
typing-extensions==4.15.0 ; python_full_version < '3.11' \
|
||||||
|
--hash=sha256:0cea48d173cc12fa28ecabc3b837ea3cf6f38c6d1136f85cbaaf598984861466 \
|
||||||
|
--hash=sha256:f0fa19c6845758ab08074a0cfa8b7aecb71c999ca73d62883bc25cc018c4e548
|
||||||
|
# via cryptography
|
||||||
|
urllib3==2.6.3 \
|
||||||
|
--hash=sha256:1b62b6884944a57dbe321509ab94fd4d3b307075e0c2eae991ac71ee15ad38ed \
|
||||||
|
--hash=sha256:bf272323e553dfb2e87d9bfd225ca7b0f467b919d7bbd355436d3fd37cb0acd4
|
||||||
|
# via
|
||||||
|
# requests
|
||||||
|
# yt-dlp
|
||||||
|
websockets==16.0 \
|
||||||
|
--hash=sha256:0298d07ee155e2e9fda5be8a9042200dd2e3bb0b8a38482156576f863a9d457c \
|
||||||
|
--hash=sha256:04cdd5d2d1dacbad0a7bf36ccbcd3ccd5a30ee188f2560b7a62a30d14107b31a \
|
||||||
|
--hash=sha256:08d7af67b64d29823fed316505a89b86705f2b7981c07848fb5e3ea3020c1abe \
|
||||||
|
--hash=sha256:152284a83a00c59b759697b7f9e9cddf4e3c7861dd0d964b472b70f78f89e80e \
|
||||||
|
--hash=sha256:1637db62fad1dc833276dded54215f2c7fa46912301a24bd94d45d46a011ceec \
|
||||||
|
--hash=sha256:19c4dc84098e523fd63711e563077d39e90ec6702aff4b5d9e344a60cb3c0cb1 \
|
||||||
|
--hash=sha256:1c1b30e4f497b0b354057f3467f56244c603a79c0d1dafce1d16c283c25f6e64 \
|
||||||
|
--hash=sha256:2b9f1e0d69bc60a4a87349d50c09a037a2607918746f07de04df9e43252c77a3 \
|
||||||
|
--hash=sha256:31a52addea25187bde0797a97d6fc3d2f92b6f72a9370792d65a6e84615ac8a8 \
|
||||||
|
--hash=sha256:32da954ffa2814258030e5a57bc73a3635463238e797c7375dc8091327434206 \
|
||||||
|
--hash=sha256:335c23addf3d5e6a8633f9f8eda77efad001671e80b95c491dd0924587ece0b3 \
|
||||||
|
--hash=sha256:3425ac5cf448801335d6fdc7ae1eb22072055417a96cc6b31b3861f455fbc156 \
|
||||||
|
--hash=sha256:349f83cd6c9a415428ee1005cadb5c2c56f4389bc06a9af16103c3bc3dcc8b7d \
|
||||||
|
--hash=sha256:37b31c1623c6605e4c00d466c9d633f9b812ea430c11c8a278774a1fde1acfa9 \
|
||||||
|
--hash=sha256:417b28978cdccab24f46400586d128366313e8a96312e4b9362a4af504f3bbad \
|
||||||
|
--hash=sha256:485c49116d0af10ac698623c513c1cc01c9446c058a4e61e3bf6c19dff7335a2 \
|
||||||
|
--hash=sha256:4a1aba3340a8dca8db6eb5a7986157f52eb9e436b74813764241981ca4888f03 \
|
||||||
|
--hash=sha256:50f23cdd8343b984957e4077839841146f67a3d31ab0d00e6b824e74c5b2f6e8 \
|
||||||
|
--hash=sha256:52a0fec0e6c8d9a784c2c78276a48a2bdf099e4ccc2a4cad53b27718dbfd0230 \
|
||||||
|
--hash=sha256:52ac480f44d32970d66763115edea932f1c5b1312de36df06d6b219f6741eed8 \
|
||||||
|
--hash=sha256:5569417dc80977fc8c2d43a86f78e0a5a22fee17565d78621b6bb264a115d4ea \
|
||||||
|
--hash=sha256:569d01a4e7fba956c5ae4fc988f0d4e187900f5497ce46339c996dbf24f17641 \
|
||||||
|
--hash=sha256:583b7c42688636f930688d712885cf1531326ee05effd982028212ccc13e5957 \
|
||||||
|
--hash=sha256:5a4b4cc550cb665dd8a47f868c8d04c8230f857363ad3c9caf7a0c3bf8c61ca6 \
|
||||||
|
--hash=sha256:5f451484aeb5cafee1ccf789b1b66f535409d038c56966d6101740c1614b86c6 \
|
||||||
|
--hash=sha256:5f6261a5e56e8d5c42a4497b364ea24d94d9563e8fbd44e78ac40879c60179b5 \
|
||||||
|
--hash=sha256:6e5a82b677f8f6f59e8dfc34ec06ca6b5b48bc4fcda346acd093694cc2c24d8f \
|
||||||
|
--hash=sha256:71c989cbf3254fbd5e84d3bff31e4da39c43f884e64f2551d14bb3c186230f00 \
|
||||||
|
--hash=sha256:781caf5e8eee67f663126490c2f96f40906594cb86b408a703630f95550a8c3e \
|
||||||
|
--hash=sha256:7be95cfb0a4dae143eaed2bcba8ac23f4892d8971311f1b06f3c6b78952ee70b \
|
||||||
|
--hash=sha256:7d837379b647c0c4c2355c2499723f82f1635fd2c26510e1f587d89bc2199e72 \
|
||||||
|
--hash=sha256:86890e837d61574c92a97496d590968b23c2ef0aeb8a9bc9421d174cd378ae39 \
|
||||||
|
--hash=sha256:878b336ac47938b474c8f982ac2f7266a540adc3fa4ad74ae96fea9823a02cc9 \
|
||||||
|
--hash=sha256:8b6e209ffee39ff1b6d0fa7bfef6de950c60dfb91b8fcead17da4ee539121a79 \
|
||||||
|
--hash=sha256:8cc451a50f2aee53042ac52d2d053d08bf89bcb31ae799cb4487587661c038a0 \
|
||||||
|
--hash=sha256:8d7f0659570eefb578dacde98e24fb60af35350193e4f56e11190787bee77dac \
|
||||||
|
--hash=sha256:8e1dab317b6e77424356e11e99a432b7cb2f3ec8c5ab4dabbcee6add48f72b35 \
|
||||||
|
--hash=sha256:8ff32bb86522a9e5e31439a58addbb0166f0204d64066fb955265c4e214160f0 \
|
||||||
|
--hash=sha256:95724e638f0f9c350bb1c2b0a7ad0e83d9cc0c9259f3ea94e40d7b02a2179ae5 \
|
||||||
|
--hash=sha256:9b5aca38b67492ef518a8ab76851862488a478602229112c4b0d58d63a7a4d5c \
|
||||||
|
--hash=sha256:a069d734c4a043182729edd3e9f247c3b2a4035415a9172fd0f1b71658a320a8 \
|
||||||
|
--hash=sha256:a0b31e0b424cc6b5a04b8838bbaec1688834b2383256688cf47eb97412531da1 \
|
||||||
|
--hash=sha256:a35539cacc3febb22b8f4d4a99cc79b104226a756aa7400adc722e83b0d03244 \
|
||||||
|
--hash=sha256:a5e18a238a2b2249c9a9235466b90e96ae4795672598a58772dd806edc7ac6d3 \
|
||||||
|
--hash=sha256:a653aea902e0324b52f1613332ddf50b00c06fdaf7e92624fbf8c77c78fa5767 \
|
||||||
|
--hash=sha256:abf050a199613f64c886ea10f38b47770a65154dc37181bfaff70c160f45315a \
|
||||||
|
--hash=sha256:af80d74d4edfa3cb9ed973a0a5ba2b2a549371f8a741e0800cb07becdd20f23d \
|
||||||
|
--hash=sha256:b14dc141ed6d2dde437cddb216004bcac6a1df0935d79656387bd41632ba0bbd \
|
||||||
|
--hash=sha256:b784ca5de850f4ce93ec85d3269d24d4c82f22b7212023c974c401d4980ebc5e \
|
||||||
|
--hash=sha256:bc59589ab64b0022385f429b94697348a6a234e8ce22544e3681b2e9331b5944 \
|
||||||
|
--hash=sha256:c0204dc62a89dc9d50d682412c10b3542d748260d743500a85c13cd1ee4bde82 \
|
||||||
|
--hash=sha256:c0ee0e63f23914732c6d7e0cce24915c48f3f1512ec1d079ed01fc629dab269d \
|
||||||
|
--hash=sha256:caab51a72c51973ca21fa8a18bd8165e1a0183f1ac7066a182ff27107b71e1a4 \
|
||||||
|
--hash=sha256:d6297ce39ce5c2e6feb13c1a996a2ded3b6832155fcfc920265c76f24c7cceb5 \
|
||||||
|
--hash=sha256:daa3b6ff70a9241cf6c7fc9e949d41232d9d7d26fd3522b1ad2b4d62487e9904 \
|
||||||
|
--hash=sha256:df57afc692e517a85e65b72e165356ed1df12386ecb879ad5693be08fac65dde \
|
||||||
|
--hash=sha256:e0334872c0a37b606418ac52f6ab9cfd17317ac26365f7f65e203e2d0d0d359f \
|
||||||
|
--hash=sha256:e6578ed5b6981005df1860a56e3617f14a6c307e6a71b4fff8c48fdc50f3ed2c \
|
||||||
|
--hash=sha256:eaded469f5e5b7294e2bdca0ab06becb6756ea86894a47806456089298813c89 \
|
||||||
|
--hash=sha256:f4a32d1bd841d4bcbffdcb3d2ce50c09c3909fbead375ab28d0181af89fd04da \
|
||||||
|
--hash=sha256:fd3cb4adb94a2a6e2b7c0d8d05cb94e6f1c81a0cf9dc2694fb65c7e8d94c42e4
|
||||||
|
# via yt-dlp
|
||||||
|
yt-dlp-ejs==0.8.0 \
|
||||||
|
--hash=sha256:79300e5fca7f937a1eeede11f0456862c1b41107ce1d726871e0207424f4bdb4 \
|
||||||
|
--hash=sha256:d5fa1639f63b5c4af8d932495f60689d5370f1a095782c944f7f62a303eb104e
|
||||||
|
# via yt-dlp
|
||||||
99
bundle/requirements/requirements-macos-curl_cffi.txt
Normal file
99
bundle/requirements/requirements-macos-curl_cffi.txt
Normal file
@ -0,0 +1,99 @@
|
|||||||
|
# This file was autogenerated by uv via the following command:
|
||||||
|
# uv export --no-python-downloads --no-progress --color=never --format=requirements.txt --frozen --refresh --no-emit-project --no-default-groups --extra=curl-cffi --prune=rich --no-emit-package=certifi --no-emit-package=pycparser --output-file=bundle/requirements/requirements-macos-curl_cffi.txt
|
||||||
|
cffi==2.0.0 ; implementation_name == 'cpython' \
|
||||||
|
--hash=sha256:00bdf7acc5f795150faa6957054fbbca2439db2f775ce831222b66f192f03beb \
|
||||||
|
--hash=sha256:07b271772c100085dd28b74fa0cd81c8fb1a3ba18b21e03d7c27f3436a10606b \
|
||||||
|
--hash=sha256:087067fa8953339c723661eda6b54bc98c5625757ea62e95eb4898ad5e776e9f \
|
||||||
|
--hash=sha256:0a1527a803f0a659de1af2e1fd700213caba79377e27e4693648c2923da066f9 \
|
||||||
|
--hash=sha256:0cf2d91ecc3fcc0625c2c530fe004f82c110405f101548512cce44322fa8ac44 \
|
||||||
|
--hash=sha256:12873ca6cb9b0f0d3a0da705d6086fe911591737a59f28b7936bdfed27c0d47c \
|
||||||
|
--hash=sha256:19f705ada2530c1167abacb171925dd886168931e0a7b78f5bffcae5c6b5be75 \
|
||||||
|
--hash=sha256:1e3a615586f05fc4065a8b22b8152f0c1b00cdbc60596d187c2a74f9e3036e4e \
|
||||||
|
--hash=sha256:1f72fb8906754ac8a2cc3f9f5aaa298070652a0ffae577e0ea9bd480dc3c931a \
|
||||||
|
--hash=sha256:1fc9ea04857caf665289b7a75923f2c6ed559b8298a1b8c49e59f7dd95c8481e \
|
||||||
|
--hash=sha256:203a48d1fb583fc7d78a4c6655692963b860a417c0528492a6bc21f1aaefab25 \
|
||||||
|
--hash=sha256:21d1152871b019407d8ac3985f6775c079416c282e431a4da6afe7aefd2bccbe \
|
||||||
|
--hash=sha256:24b6f81f1983e6df8db3adc38562c83f7d4a0c36162885ec7f7b77c7dcbec97b \
|
||||||
|
--hash=sha256:256f80b80ca3853f90c21b23ee78cd008713787b1b1e93eae9f3d6a7134abd91 \
|
||||||
|
--hash=sha256:28a3a209b96630bca57cce802da70c266eb08c6e97e5afd61a75611ee6c64592 \
|
||||||
|
--hash=sha256:2c8f814d84194c9ea681642fd164267891702542f028a15fc97d4674b6206187 \
|
||||||
|
--hash=sha256:2de9a304e27f7596cd03d16f1b7c72219bd944e99cc52b84d0145aefb07cbd3c \
|
||||||
|
--hash=sha256:38100abb9d1b1435bc4cc340bb4489635dc2f0da7456590877030c9b3d40b0c1 \
|
||||||
|
--hash=sha256:3925dd22fa2b7699ed2617149842d2e6adde22b262fcbfada50e3d195e4b3a94 \
|
||||||
|
--hash=sha256:3e17ed538242334bf70832644a32a7aae3d83b57567f9fd60a26257e992b79ba \
|
||||||
|
--hash=sha256:3e837e369566884707ddaf85fc1744b47575005c0a229de3327f8f9a20f4efeb \
|
||||||
|
--hash=sha256:44d1b5909021139fe36001ae048dbdde8214afa20200eda0f64c068cac5d5529 \
|
||||||
|
--hash=sha256:45d5e886156860dc35862657e1494b9bae8dfa63bf56796f2fb56e1679fc0bca \
|
||||||
|
--hash=sha256:4671d9dd5ec934cb9a73e7ee9676f9362aba54f7f34910956b84d727b0d73fb6 \
|
||||||
|
--hash=sha256:53f77cbe57044e88bbd5ed26ac1d0514d2acf0591dd6bb02a3ae37f76811b80c \
|
||||||
|
--hash=sha256:5eda85d6d1879e692d546a078b44251cdd08dd1cfb98dfb77b670c97cee49ea0 \
|
||||||
|
--hash=sha256:5fed36fccc0612a53f1d4d9a816b50a36702c28a2aa880cb8a122b3466638743 \
|
||||||
|
--hash=sha256:66f011380d0e49ed280c789fbd08ff0d40968ee7b665575489afa95c98196ab5 \
|
||||||
|
--hash=sha256:6824f87845e3396029f3820c206e459ccc91760e8fa24422f8b0c3d1731cbec5 \
|
||||||
|
--hash=sha256:6c6c373cfc5c83a975506110d17457138c8c63016b563cc9ed6e056a82f13ce4 \
|
||||||
|
--hash=sha256:6d02d6655b0e54f54c4ef0b94eb6be0607b70853c45ce98bd278dc7de718be5d \
|
||||||
|
--hash=sha256:6d50360be4546678fc1b79ffe7a66265e28667840010348dd69a314145807a1b \
|
||||||
|
--hash=sha256:730cacb21e1bdff3ce90babf007d0a0917cc3e6492f336c2f0134101e0944f93 \
|
||||||
|
--hash=sha256:737fe7d37e1a1bffe70bd5754ea763a62a066dc5913ca57e957824b72a85e205 \
|
||||||
|
--hash=sha256:74a03b9698e198d47562765773b4a8309919089150a0bb17d829ad7b44b60d27 \
|
||||||
|
--hash=sha256:7553fb2090d71822f02c629afe6042c299edf91ba1bf94951165613553984512 \
|
||||||
|
--hash=sha256:7a66c7204d8869299919db4d5069a82f1561581af12b11b3c9f48c584eb8743d \
|
||||||
|
--hash=sha256:7cc09976e8b56f8cebd752f7113ad07752461f48a58cbba644139015ac24954c \
|
||||||
|
--hash=sha256:81afed14892743bbe14dacb9e36d9e0e504cd204e0b165062c488942b9718037 \
|
||||||
|
--hash=sha256:8941aaadaf67246224cee8c3803777eed332a19d909b47e29c9842ef1e79ac26 \
|
||||||
|
--hash=sha256:8ea985900c5c95ce9db1745f7933eeef5d314f0565b27625d9a10ec9881e1bfb \
|
||||||
|
--hash=sha256:8eca2a813c1cb7ad4fb74d368c2ffbbb4789d377ee5bb8df98373c2cc0dee76c \
|
||||||
|
--hash=sha256:92b68146a71df78564e4ef48af17551a5ddd142e5190cdf2c5624d0c3ff5b2e8 \
|
||||||
|
--hash=sha256:9332088d75dc3241c702d852d4671613136d90fa6881da7d770a483fd05248b4 \
|
||||||
|
--hash=sha256:94698a9c5f91f9d138526b48fe26a199609544591f859c870d477351dc7b2414 \
|
||||||
|
--hash=sha256:9a67fc9e8eb39039280526379fb3a70023d77caec1852002b4da7e8b270c4dd9 \
|
||||||
|
--hash=sha256:9de40a7b0323d889cf8d23d1ef214f565ab154443c42737dfe52ff82cf857664 \
|
||||||
|
--hash=sha256:a05d0c237b3349096d3981b727493e22147f934b20f6f125a3eba8f994bec4a9 \
|
||||||
|
--hash=sha256:afb8db5439b81cf9c9d0c80404b60c3cc9c3add93e114dcae767f1477cb53775 \
|
||||||
|
--hash=sha256:b18a3ed7d5b3bd8d9ef7a8cb226502c6bf8308df1525e1cc676c3680e7176739 \
|
||||||
|
--hash=sha256:b1e74d11748e7e98e2f426ab176d4ed720a64412b6a15054378afdb71e0f37dc \
|
||||||
|
--hash=sha256:b21e08af67b8a103c71a250401c78d5e0893beff75e28c53c98f4de42f774062 \
|
||||||
|
--hash=sha256:b4c854ef3adc177950a8dfc81a86f5115d2abd545751a304c5bcf2c2c7283cfe \
|
||||||
|
--hash=sha256:baf5215e0ab74c16e2dd324e8ec067ef59e41125d3eade2b863d294fd5035c92 \
|
||||||
|
--hash=sha256:c649e3a33450ec82378822b3dad03cc228b8f5963c0c12fc3b1e0ab940f768a5 \
|
||||||
|
--hash=sha256:c654de545946e0db659b3400168c9ad31b5d29593291482c43e3564effbcee13 \
|
||||||
|
--hash=sha256:c6638687455baf640e37344fe26d37c404db8b80d037c3d29f58fe8d1c3b194d \
|
||||||
|
--hash=sha256:c8d3b5532fc71b7a77c09192b4a5a200ea992702734a2e9279a37f2478236f26 \
|
||||||
|
--hash=sha256:cf364028c016c03078a23b503f02058f1814320a56ad535686f90565636a9495 \
|
||||||
|
--hash=sha256:d48a880098c96020b02d5a1f7d9251308510ce8858940e6fa99ece33f610838b \
|
||||||
|
--hash=sha256:d68b6cef7827e8641e8ef16f4494edda8b36104d79773a334beaa1e3521430f6 \
|
||||||
|
--hash=sha256:d9b29c1f0ae438d5ee9acb31cadee00a58c46cc9c0b2f9038c6b0b3470877a8c \
|
||||||
|
--hash=sha256:d9b97165e8aed9272a6bb17c01e3cc5871a594a446ebedc996e2397a1c1ea8ef \
|
||||||
|
--hash=sha256:da68248800ad6320861f129cd9c1bf96ca849a2771a59e0344e88681905916f5 \
|
||||||
|
--hash=sha256:da902562c3e9c550df360bfa53c035b2f241fed6d9aef119048073680ace4a18 \
|
||||||
|
--hash=sha256:dbd5c7a25a7cb98f5ca55d258b103a2054f859a46ae11aaf23134f9cc0d356ad \
|
||||||
|
--hash=sha256:dd4f05f54a52fb558f1ba9f528228066954fee3ebe629fc1660d874d040ae5a3 \
|
||||||
|
--hash=sha256:e11e82b744887154b182fd3e7e8512418446501191994dbf9c9fc1f32cc8efd5 \
|
||||||
|
--hash=sha256:f73b96c41e3b2adedc34a7356e64c8eb96e03a3782b535e043a986276ce12a49 \
|
||||||
|
--hash=sha256:f93fd8e5c8c0a4aa1f424d6173f14a892044054871c771f8566e4008eaa359d2 \
|
||||||
|
--hash=sha256:fc33c5141b55ed366cfaad382df24fe7dcbc686de5be719b207bb248e3053dc5 \
|
||||||
|
--hash=sha256:fc7de24befaeae77ba923797c7c87834c73648a05a4bde34b3b7e5588973a453
|
||||||
|
# via curl-cffi
|
||||||
|
curl-cffi==0.15.0 ; implementation_name == 'cpython' \
|
||||||
|
--hash=sha256:08c799b89740b9bc49c09fbc3d5907f13ac1f845ca52620507ef9466d4639dd5 \
|
||||||
|
--hash=sha256:0b6c0543b993996670e9e4b78e305a2d60809d5681903ffb5568e21a387434d3 \
|
||||||
|
--hash=sha256:1977e1e12cfb5c11352cbb74acef1bed24eb7d226dab61ca57c168c21acd4d61 \
|
||||||
|
--hash=sha256:2b6c847d86283b07ae69bb72c82eb8a59242277142aa35b89850f89e792a02fc \
|
||||||
|
--hash=sha256:408d6f14e346841cd889c2e0962832bb235ba3b6749ebf609f347f747da5e60f \
|
||||||
|
--hash=sha256:41f80170ba844009273b2660da1964ec31e99e5719d16b3422ada87177e32e13 \
|
||||||
|
--hash=sha256:4682dc38d4336e0eb0b185374db90a760efde63cbea994b4e63f3521d44c4c92 \
|
||||||
|
--hash=sha256:582e570aa2586b96ed47cf4a17586b9a3c462cbe43f780487c3dc245c6ef1527 \
|
||||||
|
--hash=sha256:5a0c1896a0d5a5ac1eb89cd24b008d2b718dd1df6fd2f75451b59ca66e49e572 \
|
||||||
|
--hash=sha256:7b7a92767a888ee90147e18964b396d8435ff42737030d6fb00824ffd6094805 \
|
||||||
|
--hash=sha256:7e63539d0d839d0a8c5eacf86229bc68c57803547f35e0db7ee0986328b478c3 \
|
||||||
|
--hash=sha256:829cc357061ecb99cc2d406301f609a039e05665322f5c025ec67c38b0dc49ce \
|
||||||
|
--hash=sha256:838e48212447d9c81364b04707a5c861daf08f8320f9ecb3406a8919d1d5c3b3 \
|
||||||
|
--hash=sha256:967ad7355bd8e9586f8c2d02eaa99953747549e7ea4a9b25cd53353e6b67fe6d \
|
||||||
|
--hash=sha256:9e5e69eee735f659287e2c84444319d68a1fa68dd37abf228943a4074864283a \
|
||||||
|
--hash=sha256:a25620d9bf989c9c029a7d1642999c4c265abb0bad811deb2f77b0b5b2b12e5b \
|
||||||
|
--hash=sha256:a6d57f8389273a3a1f94370473c74897467bcc36af0a17336989780c507fa43d \
|
||||||
|
--hash=sha256:aa1323950224db24f4c510d010b3affa02196ca853fb424191fa917a513d3f4b \
|
||||||
|
--hash=sha256:b624c7ce087bfda967a013ed0a64702a525444e5b6e97d23534d567ccc6525aa \
|
||||||
|
--hash=sha256:bda66404010e9ed743b1b83c20c86f24fe21a9a6873e17479d6e67e29d8ded28 \
|
||||||
|
--hash=sha256:ea0c67652bf6893d34ee0f82c944f37e488f6147e9421bef1771cc6545b02ded
|
||||||
|
# via yt-dlp
|
||||||
371
bundle/requirements/requirements-macos.txt
Normal file
371
bundle/requirements/requirements-macos.txt
Normal file
@ -0,0 +1,371 @@
|
|||||||
|
# This file was autogenerated by uv via the following command:
|
||||||
|
# uv export --no-python-downloads --no-progress --color=never --format=requirements.txt --frozen --refresh --no-emit-project --no-default-groups --extra=default --extra=curl-cffi --group=delocate --group=pyinstaller --no-emit-package=curl-cffi --no-emit-package=cffi --output-file=bundle/requirements/requirements-macos.txt
|
||||||
|
altgraph==0.17.5 \
|
||||||
|
--hash=sha256:c87b395dd12fabde9c99573a9749d67da8d29ef9de0125c7f536699b4a9bc9e7 \
|
||||||
|
--hash=sha256:f3a22400bce1b0c701683820ac4f3b159cd301acab067c51c653e06961600597
|
||||||
|
# via
|
||||||
|
# macholib
|
||||||
|
# pyinstaller
|
||||||
|
brotli==1.2.0 ; implementation_name == 'cpython' and sys_platform != 'ios' \
|
||||||
|
--hash=sha256:022426c9e99fd65d9475dce5c195526f04bb8be8907607e27e747893f6ee3e24 \
|
||||||
|
--hash=sha256:072e7624b1fc4d601036ab3f4f27942ef772887e876beff0301d261210bca97f \
|
||||||
|
--hash=sha256:0bbd5b5ccd157ae7913750476d48099aaf507a79841c0d04a9db4415b14842de \
|
||||||
|
--hash=sha256:0cf8c3b8ba93d496b2fae778039e2f5ecc7cff99df84df337ca31d8f2252896c \
|
||||||
|
--hash=sha256:15b33fe93cedc4caaff8a0bd1eb7e3dab1c61bb22a0bf5bdfdfd97cd7da79744 \
|
||||||
|
--hash=sha256:1b1d6a4efedd53671c793be6dd760fcf2107da3a52331ad9ea429edf0902f27a \
|
||||||
|
--hash=sha256:1b557b29782a643420e08d75aea889462a4a8796e9a6cf5621ab05a3f7da8ef2 \
|
||||||
|
--hash=sha256:260d3692396e1895c5034f204f0db022c056f9e2ac841593a4cf9426e2a3faca \
|
||||||
|
--hash=sha256:26e8d3ecb0ee458a9804f47f21b74845cc823fd1bb19f02272be70774f56e2a6 \
|
||||||
|
--hash=sha256:2a7f1d03727130fc875448b65b127a9ec5d06d19d0148e7554384229706f9d1b \
|
||||||
|
--hash=sha256:2e1ad3fda65ae0d93fec742a128d72e145c9c7a99ee2fcd667785d99eb25a7fe \
|
||||||
|
--hash=sha256:3219bd9e69868e57183316ee19c84e03e8f8b5a1d1f2667e1aa8c2f91cb061ac \
|
||||||
|
--hash=sha256:350c8348f0e76fff0a0fd6c26755d2653863279d086d3aa2c290a6a7251135dd \
|
||||||
|
--hash=sha256:35d382625778834a7f3061b15423919aa03e4f5da34ac8e02c074e4b75ab4f84 \
|
||||||
|
--hash=sha256:3b90b767916ac44e93a8e28ce6adf8d551e43affb512f2377c732d486ac6514e \
|
||||||
|
--hash=sha256:3e1b35d56856f3ed326b140d3c6d9db91740f22e14b06e840fe4bb1923439a18 \
|
||||||
|
--hash=sha256:3f3c908bcc404c90c77d5a073e55271a0a498f4e0756e48127c35d91cf155947 \
|
||||||
|
--hash=sha256:40d918bce2b427a0c4ba189df7a006ac0c7277c180aee4617d99e9ccaaf59e6a \
|
||||||
|
--hash=sha256:4ecdb3b6dc36e6d6e14d3a1bdc6c1057c8cbf80db04031d566eb6080ce283a48 \
|
||||||
|
--hash=sha256:54a50a9dad16b32136b2241ddea9e4df159b41247b2ce6aac0b3276a66a8f1e5 \
|
||||||
|
--hash=sha256:67a91c5187e1eec76a61625c77a6c8c785650f5b576ca732bd33ef58b0dff49c \
|
||||||
|
--hash=sha256:6be67c19e0b0c56365c6a76e393b932fb0e78b3b56b711d180dd7013cb1fd984 \
|
||||||
|
--hash=sha256:6c12dad5cd04530323e723787ff762bac749a7b256a5bece32b2243dd5c27b21 \
|
||||||
|
--hash=sha256:7547369c4392b47d30a3467fe8c3330b4f2e0f7730e45e3103d7d636678a808b \
|
||||||
|
--hash=sha256:7a47ce5c2288702e09dc22a44d0ee6152f2c7eda97b3c8482d826a1f3cfc7da7 \
|
||||||
|
--hash=sha256:7a61c06b334bd99bc5ae84f1eeb36bfe01400264b3c352f968c6e30a10f9d08b \
|
||||||
|
--hash=sha256:81da1b229b1889f25adadc929aeb9dbc4e922bd18561b65b08dd9343cfccca84 \
|
||||||
|
--hash=sha256:832c115a020e463c2f67664560449a7bea26b0c1fdd690352addad6d0a08714d \
|
||||||
|
--hash=sha256:844a8ceb8483fefafc412f85c14f2aae2fb69567bf2a0de53cdb88b73e7c43ae \
|
||||||
|
--hash=sha256:898be2be399c221d2671d29eed26b6b2713a02c2119168ed914e7d00ceadb56f \
|
||||||
|
--hash=sha256:9322b9f8656782414b37e6af884146869d46ab85158201d82bab9abbcb971dc7 \
|
||||||
|
--hash=sha256:963a08f3bebd8b75ac57661045402da15991468a621f014be54e50f53a58d19e \
|
||||||
|
--hash=sha256:9c79f57faa25d97900bfb119480806d783fba83cd09ee0b33c17623935b05fa3 \
|
||||||
|
--hash=sha256:9e5825ba2c9998375530504578fd4d5d1059d09621a02065d1b6bfc41a8e05ab \
|
||||||
|
--hash=sha256:a1778532b978d2536e79c05dac2d8cd857f6c55cd0c95ace5b03740824e0e2f1 \
|
||||||
|
--hash=sha256:aa47441fa3026543513139cb8926a92a8e305ee9c71a6209ef7a97d91640ea03 \
|
||||||
|
--hash=sha256:acec55bb7c90f1dfc476126f9711a8e81c9af7fb617409a9ee2953115343f08d \
|
||||||
|
--hash=sha256:adedc4a67e15327dfdd04884873c6d5a01d3e3b6f61406f99b1ed4865a2f6d28 \
|
||||||
|
--hash=sha256:af43b8711a8264bb4e7d6d9a6d004c3a2019c04c01127a868709ec29962b6036 \
|
||||||
|
--hash=sha256:b232029d100d393ae3c603c8ffd7e3fe6f798c5e28ddca5feabb8e8fdb732997 \
|
||||||
|
--hash=sha256:b35c13ce241abdd44cb8ca70683f20c0c079728a36a996297adb5334adfc1c44 \
|
||||||
|
--hash=sha256:b63daa43d82f0cdabf98dee215b375b4058cce72871fd07934f179885aad16e8 \
|
||||||
|
--hash=sha256:c8565e3cdc1808b1a34714b553b262c5de5fbda202285782173ec137fd13709f \
|
||||||
|
--hash=sha256:cf9cba6f5b78a2071ec6fb1e7bd39acf35071d90a81231d67e92d637776a6a63 \
|
||||||
|
--hash=sha256:d2d085ded05278d1c7f65560aae97b3160aeb2ea2c0b3e26204856beccb60888 \
|
||||||
|
--hash=sha256:e310f77e41941c13340a95976fe66a8a95b01e783d430eeaf7a2f87e0a57dd0a \
|
||||||
|
--hash=sha256:e7c0af964e0b4e3412a0ebf341ea26ec767fa0b4cf81abb5e897c9338b5ad6a3 \
|
||||||
|
--hash=sha256:e99befa0b48f3cd293dafeacdd0d191804d105d279e0b387a32054c1180f3161 \
|
||||||
|
--hash=sha256:ef87b8ab2704da227e83a246356a2b179ef826f550f794b2c52cddb4efbd0196 \
|
||||||
|
--hash=sha256:fc1530af5c3c275b8524f2e24841cbe2599d74462455e9bae5109e9ff42e9361 \
|
||||||
|
--hash=sha256:ff09cd8c5eec3b9d02d2408db41be150d8891c5566addce57513bf546e3d6c6d
|
||||||
|
# via yt-dlp
|
||||||
|
brotlicffi==1.2.0.1 ; implementation_name != 'cpython' \
|
||||||
|
--hash=sha256:2c85e65913cf2b79c57a3fdd05b98d9731d9255dc0cb696b09376cc091b9cddd \
|
||||||
|
--hash=sha256:37cb587d32bf7168e2218c455e22e409ad1f3157c6c71945879a311f3e6b6abf \
|
||||||
|
--hash=sha256:3c9544f83cb715d95d7eab3af4adbbef8b2093ad6382288a83b3a25feb1a57ec \
|
||||||
|
--hash=sha256:535f2d05d0273408abc13fc0eebb467afac17b0ad85090c8913690d40207dac5 \
|
||||||
|
--hash=sha256:625f8115d32ae9c0740d01ea51518437c3fbaa3e78d41cb18459f6f7ac326000 \
|
||||||
|
--hash=sha256:6f3314a3476f59e5443f9f72a6dff16edc0c3463c9b318feaef04ae3e4683f5a \
|
||||||
|
--hash=sha256:82ea52e2b5d3145b6c406ebd3efb0d55db718b7ad996bd70c62cec0439de1187 \
|
||||||
|
--hash=sha256:91ba5f0ccc040f6ff8f7efaf839f797723d03ed46acb8ae9408f99ffd2572cf4 \
|
||||||
|
--hash=sha256:9d6ba65dd528892b4d9960beba2ae011a753620bcfc66cf6fa3cee18d7b0baa4 \
|
||||||
|
--hash=sha256:be9a670c6811af30a4bd42d7116dc5895d3b41beaa8ed8a89050447a0181f5ce \
|
||||||
|
--hash=sha256:c20d5c596278307ad06414a6d95a892377ea274a5c6b790c2548c009385d621c \
|
||||||
|
--hash=sha256:ce17eb798ca59ecec67a9bb3fd7a4304e120d1cd02953ce522d959b9a84d58ac \
|
||||||
|
--hash=sha256:da2e82a08e7778b8bc539d27ca03cdd684113e81394bfaaad8d0dfc6a17ddede \
|
||||||
|
--hash=sha256:e015af99584c6db1490a69a210c765953e473e63adc2d891ac3062a737c9e851 \
|
||||||
|
--hash=sha256:f2a5575653b0672638ba039b82fda56854934d7a6a24d4b8b5033f73ab43cbc1
|
||||||
|
# via yt-dlp
|
||||||
|
certifi==2026.2.25 \
|
||||||
|
--hash=sha256:027692e4402ad994f1c42e52a4997a9763c646b73e4096e4d5d6db8af1d6f0fa \
|
||||||
|
--hash=sha256:e887ab5cee78ea814d3472169153c2d12cd43b14bd03329a39a9c6e2e80bfba7
|
||||||
|
# via
|
||||||
|
# curl-cffi
|
||||||
|
# requests
|
||||||
|
# yt-dlp
|
||||||
|
charset-normalizer==3.4.6 \
|
||||||
|
--hash=sha256:06a7e86163334edfc5d20fe104db92fcd666e5a5df0977cb5680a506fe26cc8e \
|
||||||
|
--hash=sha256:0c173ce3a681f309f31b87125fecec7a5d1347261ea11ebbb856fa6006b23c8c \
|
||||||
|
--hash=sha256:0e28d62a8fc7a1fa411c43bd65e346f3bce9716dc51b897fbe930c5987b402d5 \
|
||||||
|
--hash=sha256:0e901eb1049fdb80f5bd11ed5ea1e498ec423102f7a9b9e4645d5b8204ff2815 \
|
||||||
|
--hash=sha256:11afb56037cbc4b1555a34dd69151e8e069bee82e613a73bef6e714ce733585f \
|
||||||
|
--hash=sha256:150b8ce8e830eb7ccb029ec9ca36022f756986aaaa7956aad6d9ec90089338c0 \
|
||||||
|
--hash=sha256:172985e4ff804a7ad08eebec0a1640ece87ba5041d565fff23c8f99c1f389484 \
|
||||||
|
--hash=sha256:197c1a244a274bb016dd8b79204850144ef77fe81c5b797dc389327adb552407 \
|
||||||
|
--hash=sha256:1ae6b62897110aa7c79ea2f5dd38d1abca6db663687c0b1ad9aed6f6bae3d9d6 \
|
||||||
|
--hash=sha256:22c6f0c2fbc31e76c3b8a86fba1a56eda6166e238c29cdd3d14befdb4a4e4815 \
|
||||||
|
--hash=sha256:231d4da14bcd9301310faf492051bee27df11f2bc7549bc0bb41fef11b82daa2 \
|
||||||
|
--hash=sha256:259695e2ccc253feb2a016303543d691825e920917e31f894ca1a687982b1de4 \
|
||||||
|
--hash=sha256:2a24157fa36980478dd1770b585c0f30d19e18f4fb0c47c13aa568f871718579 \
|
||||||
|
--hash=sha256:2b1a63e8224e401cafe7739f77efd3f9e7f5f2026bda4aead8e59afab537784f \
|
||||||
|
--hash=sha256:2e1d8ca8611099001949d1cdfaefc510cf0f212484fe7c565f735b68c78c3c95 \
|
||||||
|
--hash=sha256:2ef7fedc7a6ecbe99969cd09632516738a97eeb8bd7258bf8a0f23114c057dab \
|
||||||
|
--hash=sha256:30f445ae60aad5e1f8bdbb3108e39f6fbc09f4ea16c815c66578878325f8f15a \
|
||||||
|
--hash=sha256:34315ff4fc374b285ad7f4a0bf7dcbfe769e1b104230d40f49f700d4ab6bbd84 \
|
||||||
|
--hash=sha256:3778fd7d7cd04ae8f54651f4a7a0bd6e39a0cf20f801720a4c21d80e9b7ad6b0 \
|
||||||
|
--hash=sha256:39f5068d35621da2881271e5c3205125cc456f54e9030d3f723288c873a71bf9 \
|
||||||
|
--hash=sha256:404a1e552cf5b675a87f0651f8b79f5f1e6fd100ee88dc612f89aa16abd4486f \
|
||||||
|
--hash=sha256:419a9d91bd238052642a51938af8ac05da5b3343becde08d5cdeab9046df9ee1 \
|
||||||
|
--hash=sha256:423fb7e748a08f854a08a222b983f4df1912b1daedce51a72bd24fe8f26a1843 \
|
||||||
|
--hash=sha256:4482481cb0572180b6fd976a4d5c72a30263e98564da68b86ec91f0fe35e8565 \
|
||||||
|
--hash=sha256:47955475ac79cc504ef2704b192364e51d0d473ad452caedd0002605f780101c \
|
||||||
|
--hash=sha256:4be9f4830ba8741527693848403e2c457c16e499100963ec711b1c6f2049b7c7 \
|
||||||
|
--hash=sha256:51fb3c322c81d20567019778cb5a4a6f2dc1c200b886bc0d636238e364848c89 \
|
||||||
|
--hash=sha256:5273b9f0b5835ff0350c0828faea623c68bfa65b792720c453e22b25cc72930f \
|
||||||
|
--hash=sha256:530d548084c4a9f7a16ed4a294d459b4f229db50df689bfe92027452452943a0 \
|
||||||
|
--hash=sha256:530e8cebeea0d76bdcf93357aa5e41336f48c3dc709ac52da2bb167c5b8271d9 \
|
||||||
|
--hash=sha256:572d7c822caf521f0525ba1bce1a622a0b85cf47ffbdae6c9c19e3b5ac3c4389 \
|
||||||
|
--hash=sha256:58c948d0d086229efc484fe2f30c2d382c86720f55cd9bc33591774348ad44e0 \
|
||||||
|
--hash=sha256:5d11595abf8dd942a77883a39d81433739b287b6aa71620f15164f8096221b30 \
|
||||||
|
--hash=sha256:5f8ddd609f9e1af8c7bd6e2aca279c931aefecd148a14402d4e368f3171769fd \
|
||||||
|
--hash=sha256:5feb91325bbceade6afab43eb3b508c63ee53579fe896c77137ded51c6b6958e \
|
||||||
|
--hash=sha256:60c74963d8350241a79cb8feea80e54d518f72c26db618862a8f53e5023deaf9 \
|
||||||
|
--hash=sha256:613f19aa6e082cf96e17e3ffd89383343d0d589abda756b7764cf78361fd41dc \
|
||||||
|
--hash=sha256:695f5c2823691a25f17bc5d5ffe79fa90972cc34b002ac6c843bb8a1720e950d \
|
||||||
|
--hash=sha256:6cceb5473417d28edd20c6c984ab6fee6c6267d38d906823ebfe20b03d607dc2 \
|
||||||
|
--hash=sha256:74119174722c4349af9708993118581686f343adc1c8c9c007d59be90d077f3f \
|
||||||
|
--hash=sha256:74a2e659c7ecbc73562e2a15e05039f1e22c75b7c7618b4b574a3ea9118d1557 \
|
||||||
|
--hash=sha256:7504e9b7dc05f99a9bbb4525c67a2c155073b44d720470a148b34166a69c054e \
|
||||||
|
--hash=sha256:79090741d842f564b1b2827c0b82d846405b744d31e84f18d7a7b41c20e473ff \
|
||||||
|
--hash=sha256:7a6967aaf043bceabab5412ed6bd6bd26603dae84d5cb75bf8d9a74a4959d398 \
|
||||||
|
--hash=sha256:7bda6eebafd42133efdca535b04ccb338ab29467b3f7bf79569883676fc628db \
|
||||||
|
--hash=sha256:7edbed096e4a4798710ed6bc75dcaa2a21b68b6c356553ac4823c3658d53743a \
|
||||||
|
--hash=sha256:7f9019c9cb613f084481bd6a100b12e1547cf2efe362d873c2e31e4035a6fa43 \
|
||||||
|
--hash=sha256:80d0a5615143c0b3225e5e3ef22c8d5d51f3f72ce0ea6fb84c943546c7b25b6c \
|
||||||
|
--hash=sha256:82060f995ab5003a2d6e0f4ad29065b7672b6593c8c63559beefe5b443242c3e \
|
||||||
|
--hash=sha256:836ab36280f21fc1a03c99cd05c6b7af70d2697e374c7af0b61ed271401a72a2 \
|
||||||
|
--hash=sha256:87725cfb1a4f1f8c2fc9890ae2f42094120f4b44db9360be5d99a4c6b0e03a9e \
|
||||||
|
--hash=sha256:899d28f422116b08be5118ef350c292b36fc15ec2daeb9ea987c89281c7bb5c4 \
|
||||||
|
--hash=sha256:8bea55c4eef25b0b19a0337dc4e3f9a15b00d569c77211fa8cde38684f234fb7 \
|
||||||
|
--hash=sha256:8e5a94886bedca0f9b78fecd6afb6629142fd2605aa70a125d49f4edc6037ee6 \
|
||||||
|
--hash=sha256:90ca27cd8da8118b18a52d5f547859cc1f8354a00cd1e8e5120df3e30d6279e5 \
|
||||||
|
--hash=sha256:92734d4d8d187a354a556626c221cd1a892a4e0802ccb2af432a1d85ec012194 \
|
||||||
|
--hash=sha256:947cf925bc916d90adba35a64c82aace04fa39b46b52d4630ece166655905a69 \
|
||||||
|
--hash=sha256:95b52c68d64c1878818687a473a10547b3292e82b6f6fe483808fb1468e2f52f \
|
||||||
|
--hash=sha256:97d0235baafca5f2b09cf332cc275f021e694e8362c6bb9c96fc9a0eb74fc316 \
|
||||||
|
--hash=sha256:9ca4c0b502ab399ef89248a2c84c54954f77a070f28e546a85e91da627d1301e \
|
||||||
|
--hash=sha256:9cc4fc6c196d6a8b76629a70ddfcd4635a6898756e2d9cac5565cf0654605d73 \
|
||||||
|
--hash=sha256:9cc6e6d9e571d2f863fa77700701dae73ed5f78881efc8b3f9a4398772ff53e8 \
|
||||||
|
--hash=sha256:a056d1ad2633548ca18ffa2f85c202cfb48b68615129143915b8dc72a806a923 \
|
||||||
|
--hash=sha256:a26611d9987b230566f24a0a125f17fe0de6a6aff9f25c9f564aaa2721a5fb88 \
|
||||||
|
--hash=sha256:a4474d924a47185a06411e0064b803c68be044be2d60e50e8bddcc2649957c1f \
|
||||||
|
--hash=sha256:a4ea868bc28109052790eb2b52a9ab33f3aa7adc02f96673526ff47419490e21 \
|
||||||
|
--hash=sha256:a9e68c9d88823b274cf1e72f28cb5dc89c990edf430b0bfd3e2fb0785bfeabf4 \
|
||||||
|
--hash=sha256:aa9cccf4a44b9b62d8ba8b4dd06c649ba683e4bf04eea606d2e94cfc2d6ff4d6 \
|
||||||
|
--hash=sha256:ac2393c73378fea4e52aa56285a3d64be50f1a12395afef9cce47772f60334c2 \
|
||||||
|
--hash=sha256:ad8faf8df23f0378c6d527d8b0b15ea4a2e23c89376877c598c4870d1b2c7866 \
|
||||||
|
--hash=sha256:b35b200d6a71b9839a46b9b7fff66b6638bb52fc9658aa58796b0326595d3021 \
|
||||||
|
--hash=sha256:b3694e3f87f8ac7ce279d4355645b3c878d24d1424581b46282f24b92f5a4ae2 \
|
||||||
|
--hash=sha256:b4ff1d35e8c5bd078be89349b6f3a845128e685e751b6ea1169cf2160b344c4d \
|
||||||
|
--hash=sha256:bbc8c8650c6e51041ad1be191742b8b421d05bbd3410f43fa2a00c8db87678e8 \
|
||||||
|
--hash=sha256:bc72863f4d9aba2e8fd9085e63548a324ba706d2ea2c83b260da08a59b9482de \
|
||||||
|
--hash=sha256:c2274ca724536f173122f36c98ce188fd24ce3dad886ec2b7af859518ce008a4 \
|
||||||
|
--hash=sha256:c8ae56368f8cc97c7e40a7ee18e1cedaf8e780cd8bc5ed5ac8b81f238614facb \
|
||||||
|
--hash=sha256:c907cdc8109f6c619e6254212e794d6548373cc40e1ec75e6e3823d9135d29cc \
|
||||||
|
--hash=sha256:ca0276464d148c72defa8bb4390cce01b4a0e425f3b50d1435aa6d7a18107602 \
|
||||||
|
--hash=sha256:cd5e2801c89992ed8c0a3f0293ae83c159a60d9a5d685005383ef4caca77f2c4 \
|
||||||
|
--hash=sha256:d60377dce4511655582e300dc1e5a5f24ba0cb229005a1d5c8d0cb72bb758ab8 \
|
||||||
|
--hash=sha256:d73beaac5e90173ac3deb9928a74763a6d230f494e4bfb422c217a0ad8e629bf \
|
||||||
|
--hash=sha256:d7de2637729c67d67cf87614b566626057e95c303bc0a55ffe391f5205e7003d \
|
||||||
|
--hash=sha256:dad6e0f2e481fffdcf776d10ebee25e0ef89f16d691f1e5dee4b586375fdc64b \
|
||||||
|
--hash=sha256:dda86aba335c902b6149a02a55b38e96287157e609200811837678214ba2b1db \
|
||||||
|
--hash=sha256:e1f6e2f00a6b8edb562826e4632e26d063ac10307e80f7461f7de3ad8ef3f077 \
|
||||||
|
--hash=sha256:e25369dc110d58ddf29b949377a93e0716d72a24f62bad72b2b39f155949c1fd \
|
||||||
|
--hash=sha256:e3c701e954abf6fc03a49f7c579cc80c2c6cc52525340ca3186c41d3f33482ef \
|
||||||
|
--hash=sha256:e5bcc1a1ae744e0bb59641171ae53743760130600da8db48cbb6e4918e186e4e \
|
||||||
|
--hash=sha256:e68c14b04827dd76dcbd1aeea9e604e3e4b78322d8faf2f8132c7138efa340a8 \
|
||||||
|
--hash=sha256:e985a16ff513596f217cee86c21371b8cd011c0f6f056d0920aa2d926c544058 \
|
||||||
|
--hash=sha256:ef5960d965e67165d75b7c7ffc60a83ec5abfc5c11b764ec13ea54fbef8b4421 \
|
||||||
|
--hash=sha256:f0cdaecd4c953bfae0b6bb64910aaaca5a424ad9c72d85cb88417bb9814f7550 \
|
||||||
|
--hash=sha256:f1ce721c8a7dfec21fcbdfe04e8f68174183cf4e8188e0645e92aa23985c57ff \
|
||||||
|
--hash=sha256:f5ea69428fa1b49573eef0cc44a1d43bebd45ad0c611eb7d7eac760c7ae771bc \
|
||||||
|
--hash=sha256:f6e4333fb15c83f7d1482a76d45a0818897b3d33f00efd215528ff7c51b8e35d \
|
||||||
|
--hash=sha256:f820f24b09e3e779fe84c3c456cb4108a7aa639b0d1f02c28046e11bfcd088ed \
|
||||||
|
--hash=sha256:fcce033e4021347d80ed9c66dcf1e7b1546319834b74445f561d2e2221de5659
|
||||||
|
# via requests
|
||||||
|
delocate==0.13.0 ; sys_platform == 'darwin' \
|
||||||
|
--hash=sha256:11f7596f88984c33f76b27fe2eea7637d1ce369a9e0b6737bbc706b6426e862c \
|
||||||
|
--hash=sha256:a93e67a9f56ee01a3f7096a042231d4ac37fecac873cd5ea34ea2b4f43a8fa13
|
||||||
|
idna==3.11 \
|
||||||
|
--hash=sha256:771a87f49d9defaf64091e6e6fe9c18d4833f140bd19464795bc32d966ca37ea \
|
||||||
|
--hash=sha256:795dafcc9c04ed0c1fb032c2aa73654d8e8c5023a7df64a53f39190ada629902
|
||||||
|
# via requests
|
||||||
|
macholib==1.16.4 ; sys_platform == 'darwin' \
|
||||||
|
--hash=sha256:da1a3fa8266e30f0ce7e97c6a54eefaae8edd1e5f86f3eb8b95457cae90265ea \
|
||||||
|
--hash=sha256:f408c93ab2e995cd2c46e34fe328b130404be143469e41bc366c807448979362
|
||||||
|
# via
|
||||||
|
# delocate
|
||||||
|
# pyinstaller
|
||||||
|
markdown-it-py==4.0.0 ; implementation_name == 'cpython' \
|
||||||
|
--hash=sha256:87327c59b172c5011896038353a81343b6754500a08cd7a4973bb48c6d578147 \
|
||||||
|
--hash=sha256:cb0a2b4aa34f932c007117b194e945bd74e0ec24133ceb5bac59009cda1cb9f3
|
||||||
|
# via rich
|
||||||
|
mdurl==0.1.2 ; implementation_name == 'cpython' \
|
||||||
|
--hash=sha256:84008a41e51615a49fc9966191ff91509e3c40b939176e643fd50a5c2196b8f8 \
|
||||||
|
--hash=sha256:bb413d29f5eea38f31dd4754dd7377d4465116fb207585f97bf925588687c1ba
|
||||||
|
# via markdown-it-py
|
||||||
|
mutagen==1.47.0 \
|
||||||
|
--hash=sha256:719fadef0a978c31b4cf3c956261b3c58b6948b32023078a2117b1de09f0fc99 \
|
||||||
|
--hash=sha256:edd96f50c5907a9539d8e5bba7245f62c9f520aef333d13392a79a4f70aca719
|
||||||
|
# via yt-dlp
|
||||||
|
packaging==26.0 \
|
||||||
|
--hash=sha256:00243ae351a257117b6a241061796684b084ed1c516a08c48a3f7e147a9d80b4 \
|
||||||
|
--hash=sha256:b36f1fef9334a5588b4166f8bcd26a14e521f2b55e6b9de3aaa80d3ff7a37529
|
||||||
|
# via
|
||||||
|
# delocate
|
||||||
|
# pyinstaller
|
||||||
|
# pyinstaller-hooks-contrib
|
||||||
|
pefile==2024.8.26 ; sys_platform == 'win32' \
|
||||||
|
--hash=sha256:3ff6c5d8b43e8c37bb6e6dd5085658d658a7a0bdcd20b6a07b1fcfc1c4e9d632 \
|
||||||
|
--hash=sha256:76f8b485dcd3b1bb8166f1128d395fa3d87af26360c2358fb75b80019b957c6f
|
||||||
|
# via pyinstaller
|
||||||
|
pycparser==3.0 ; implementation_name != 'PyPy' \
|
||||||
|
--hash=sha256:600f49d217304a5902ac3c37e1281c9fe94e4d0489de643a9504c5cdfdfc6b29 \
|
||||||
|
--hash=sha256:b727414169a36b7d524c1c3e31839a521725078d7b2ff038656844266160a992
|
||||||
|
# via cffi
|
||||||
|
pycryptodomex==3.23.0 \
|
||||||
|
--hash=sha256:02d87b80778c171445d67e23d1caef279bf4b25c3597050ccd2e13970b57fd51 \
|
||||||
|
--hash=sha256:06698f957fe1ab229a99ba2defeeae1c09af185baa909a31a5d1f9d42b1aaed6 \
|
||||||
|
--hash=sha256:14c37aaece158d0ace436f76a7bb19093db3b4deade9797abfc39ec6cd6cc2fe \
|
||||||
|
--hash=sha256:189afbc87f0b9f158386bf051f720e20fa6145975f1e76369303d0f31d1a8d7c \
|
||||||
|
--hash=sha256:43c446e2ba8df8889e0e16f02211c25b4934898384c1ec1ec04d7889c0333587 \
|
||||||
|
--hash=sha256:4f2596e643d4365e14d0879dc5aafe6355616c61c2176009270f3048f6d9a61f \
|
||||||
|
--hash=sha256:52e5ca58c3a0b0bd5e100a9fbc8015059b05cffc6c66ce9d98b4b45e023443b9 \
|
||||||
|
--hash=sha256:55ccbe27f049743a4caf4f4221b166560d3438d0b1e5ab929e07ae1702a4d6fd \
|
||||||
|
--hash=sha256:58b851b9effd0d072d4ca2e4542bf2a4abcf13c82a29fd2c93ce27ee2a2e9462 \
|
||||||
|
--hash=sha256:6b8962204c47464d5c1c4038abeadd4514a133b28748bcd9fa5b6d62e3cec6fa \
|
||||||
|
--hash=sha256:6bbcb1dd0f646484939e142462d9e532482bc74475cecf9c4903d4e1cd21f003 \
|
||||||
|
--hash=sha256:71909758f010c82bc99b0abf4ea12012c98962fbf0583c2164f8b84533c2e4da \
|
||||||
|
--hash=sha256:7b37e08e3871efe2187bc1fd9320cc81d87caf19816c648f24443483005ff886 \
|
||||||
|
--hash=sha256:8a4fcd42ccb04c31268d1efeecfccfd1249612b4de6374205376b8f280321744 \
|
||||||
|
--hash=sha256:91979028227543010d7b2ba2471cf1d1e398b3f183cb105ac584df0c36dac28d \
|
||||||
|
--hash=sha256:a33986a0066860f7fcf7c7bd2bc804fa90e434183645595ae7b33d01f3c91ed8 \
|
||||||
|
--hash=sha256:a9d446e844f08299236780f2efa9898c818fe7e02f17263866b8550c7d5fb328 \
|
||||||
|
--hash=sha256:b2c2537863eccef2d41061e82a881dcabb04944c5c06c5aa7110b577cc487545 \
|
||||||
|
--hash=sha256:bc65bdd9fc8de7a35a74cab1c898cab391a4add33a8fe740bda00f5976ca4708 \
|
||||||
|
--hash=sha256:bdc69d0d3d989a1029df0eed67cc5e8e5d968f3724f4519bd03e0ec68df7543c \
|
||||||
|
--hash=sha256:c25e30a20e1b426e1f0fa00131c516f16e474204eee1139d1603e132acffc314 \
|
||||||
|
--hash=sha256:c7947ab8d589e3178da3d7cdeabe14f841b391e17046954f2fbcd941705762b5 \
|
||||||
|
--hash=sha256:c885da45e70139464f082018ac527fdaad26f1657a99ee13eecdce0f0ca24ab4 \
|
||||||
|
--hash=sha256:da4fa650cef02db88c2b98acc5434461e027dce0ae8c22dd5a69013eaf510006 \
|
||||||
|
--hash=sha256:ebfff755c360d674306e5891c564a274a47953562b42fb74a5c25b8fc1fb1cb5 \
|
||||||
|
--hash=sha256:eca54f4bb349d45afc17e3011ed4264ef1cc9e266699874cdd1349c504e64798 \
|
||||||
|
--hash=sha256:f489c4765093fb60e2edafdf223397bc716491b2b69fe74367b70d6999257a5c \
|
||||||
|
--hash=sha256:fdfac7cda115bca3a5abb2f9e43bc2fb66c2b65ab074913643803ca7083a79ea
|
||||||
|
# via yt-dlp
|
||||||
|
pygments==2.19.2 ; implementation_name == 'cpython' \
|
||||||
|
--hash=sha256:636cb2477cec7f8952536970bc533bc43743542f70392ae026374600add5b887 \
|
||||||
|
--hash=sha256:86540386c03d588bb81d44bc3928634ff26449851e99741617ecb9037ee5ec0b
|
||||||
|
# via rich
|
||||||
|
pyinstaller==6.19.0 \
|
||||||
|
--hash=sha256:1ec54ef967996ca61dacba676227e2b23219878ccce5ee9d6f3aada7b8ed8abf \
|
||||||
|
--hash=sha256:3c5c251054fe4cfaa04c34a363dcfbf811545438cb7198304cd444756bc2edd2 \
|
||||||
|
--hash=sha256:4190e76b74f0c4b5c5f11ac360928cd2e36ec8e3194d437bf6b8648c7bc0c134 \
|
||||||
|
--hash=sha256:481a909c8e60c8692fc60fcb1344d984b44b943f8bc9682f2fcdae305ad297e6 \
|
||||||
|
--hash=sha256:4ab2bb52e58448e14ddf9450601bdedd66800465043501c1d8f1cab87b60b122 \
|
||||||
|
--hash=sha256:8bd68abd812d8a6ba33b9f1810e91fee0f325969733721b78151f0065319ca11 \
|
||||||
|
--hash=sha256:a0fc5f6b3c55aa54353f0c74ffa59b1115433c1850c6f655d62b461a2ed6cbbe \
|
||||||
|
--hash=sha256:b5bb6536c6560330d364d91522250f254b107cf69129d9cbcd0e6727c570be33 \
|
||||||
|
--hash=sha256:c2d5a539b0bfe6159d5522c8c70e1c0e487f22c2badae0f97d45246223b798ea \
|
||||||
|
--hash=sha256:da6d5c6391ccefe73554b9fa29b86001c8e378e0f20c2a4004f836ba537eff63 \
|
||||||
|
--hash=sha256:e649ba6bd1b0b89b210ad92adb5fbdc8a42dd2c5ca4f72ef3a0bfec83a424b83 \
|
||||||
|
--hash=sha256:ec73aeb8bd9b7f2f1240d328a4542e90b3c6e6fbc106014778431c616592a865
|
||||||
|
pyinstaller-hooks-contrib==2026.3 \
|
||||||
|
--hash=sha256:5ecd1068ad262afecadf07556279d2be52ca93a88b049fae17f1a2eb2969254a \
|
||||||
|
--hash=sha256:800d3a198a49a6cd0de2d7fb795005fdca7a0222ed9cb47c0691abd1c27b9310
|
||||||
|
# via pyinstaller
|
||||||
|
pywin32-ctypes==0.2.3 ; sys_platform == 'win32' \
|
||||||
|
--hash=sha256:8a1513379d709975552d202d942d9837758905c8d01eb82b8bcc30918929e7b8 \
|
||||||
|
--hash=sha256:d162dc04946d704503b2edc4d55f3dba5c1d539ead017afa00142c38b9885755
|
||||||
|
# via pyinstaller
|
||||||
|
requests==2.33.0 \
|
||||||
|
--hash=sha256:3324635456fa185245e24865e810cecec7b4caf933d7eb133dcde67d48cee69b \
|
||||||
|
--hash=sha256:c7ebc5e8b0f21837386ad0e1c8fe8b829fa5f544d8df3b2253bff14ef29d7652
|
||||||
|
# via yt-dlp
|
||||||
|
rich==14.3.3 ; implementation_name == 'cpython' \
|
||||||
|
--hash=sha256:793431c1f8619afa7d3b52b2cdec859562b950ea0d4b6b505397612db8d5362d \
|
||||||
|
--hash=sha256:b8daa0b9e4eef54dd8cf7c86c03713f53241884e814f4e2f5fb342fe520f639b
|
||||||
|
# via curl-cffi
|
||||||
|
setuptools==82.0.1 \
|
||||||
|
--hash=sha256:7d872682c5d01cfde07da7bccc7b65469d3dca203318515ada1de5eda35efbf9 \
|
||||||
|
--hash=sha256:a59e362652f08dcd477c78bb6e7bd9d80a7995bc73ce773050228a348ce2e5bb
|
||||||
|
# via
|
||||||
|
# pyinstaller
|
||||||
|
# pyinstaller-hooks-contrib
|
||||||
|
typing-extensions==4.15.0 ; sys_platform == 'darwin' \
|
||||||
|
--hash=sha256:0cea48d173cc12fa28ecabc3b837ea3cf6f38c6d1136f85cbaaf598984861466 \
|
||||||
|
--hash=sha256:f0fa19c6845758ab08074a0cfa8b7aecb71c999ca73d62883bc25cc018c4e548
|
||||||
|
# via delocate
|
||||||
|
urllib3==2.6.3 \
|
||||||
|
--hash=sha256:1b62b6884944a57dbe321509ab94fd4d3b307075e0c2eae991ac71ee15ad38ed \
|
||||||
|
--hash=sha256:bf272323e553dfb2e87d9bfd225ca7b0f467b919d7bbd355436d3fd37cb0acd4
|
||||||
|
# via
|
||||||
|
# requests
|
||||||
|
# yt-dlp
|
||||||
|
websockets==16.0 \
|
||||||
|
--hash=sha256:0298d07ee155e2e9fda5be8a9042200dd2e3bb0b8a38482156576f863a9d457c \
|
||||||
|
--hash=sha256:04cdd5d2d1dacbad0a7bf36ccbcd3ccd5a30ee188f2560b7a62a30d14107b31a \
|
||||||
|
--hash=sha256:08d7af67b64d29823fed316505a89b86705f2b7981c07848fb5e3ea3020c1abe \
|
||||||
|
--hash=sha256:152284a83a00c59b759697b7f9e9cddf4e3c7861dd0d964b472b70f78f89e80e \
|
||||||
|
--hash=sha256:1637db62fad1dc833276dded54215f2c7fa46912301a24bd94d45d46a011ceec \
|
||||||
|
--hash=sha256:19c4dc84098e523fd63711e563077d39e90ec6702aff4b5d9e344a60cb3c0cb1 \
|
||||||
|
--hash=sha256:1c1b30e4f497b0b354057f3467f56244c603a79c0d1dafce1d16c283c25f6e64 \
|
||||||
|
--hash=sha256:2b9f1e0d69bc60a4a87349d50c09a037a2607918746f07de04df9e43252c77a3 \
|
||||||
|
--hash=sha256:31a52addea25187bde0797a97d6fc3d2f92b6f72a9370792d65a6e84615ac8a8 \
|
||||||
|
--hash=sha256:32da954ffa2814258030e5a57bc73a3635463238e797c7375dc8091327434206 \
|
||||||
|
--hash=sha256:335c23addf3d5e6a8633f9f8eda77efad001671e80b95c491dd0924587ece0b3 \
|
||||||
|
--hash=sha256:3425ac5cf448801335d6fdc7ae1eb22072055417a96cc6b31b3861f455fbc156 \
|
||||||
|
--hash=sha256:349f83cd6c9a415428ee1005cadb5c2c56f4389bc06a9af16103c3bc3dcc8b7d \
|
||||||
|
--hash=sha256:37b31c1623c6605e4c00d466c9d633f9b812ea430c11c8a278774a1fde1acfa9 \
|
||||||
|
--hash=sha256:417b28978cdccab24f46400586d128366313e8a96312e4b9362a4af504f3bbad \
|
||||||
|
--hash=sha256:485c49116d0af10ac698623c513c1cc01c9446c058a4e61e3bf6c19dff7335a2 \
|
||||||
|
--hash=sha256:4a1aba3340a8dca8db6eb5a7986157f52eb9e436b74813764241981ca4888f03 \
|
||||||
|
--hash=sha256:50f23cdd8343b984957e4077839841146f67a3d31ab0d00e6b824e74c5b2f6e8 \
|
||||||
|
--hash=sha256:52a0fec0e6c8d9a784c2c78276a48a2bdf099e4ccc2a4cad53b27718dbfd0230 \
|
||||||
|
--hash=sha256:52ac480f44d32970d66763115edea932f1c5b1312de36df06d6b219f6741eed8 \
|
||||||
|
--hash=sha256:5569417dc80977fc8c2d43a86f78e0a5a22fee17565d78621b6bb264a115d4ea \
|
||||||
|
--hash=sha256:569d01a4e7fba956c5ae4fc988f0d4e187900f5497ce46339c996dbf24f17641 \
|
||||||
|
--hash=sha256:583b7c42688636f930688d712885cf1531326ee05effd982028212ccc13e5957 \
|
||||||
|
--hash=sha256:5a4b4cc550cb665dd8a47f868c8d04c8230f857363ad3c9caf7a0c3bf8c61ca6 \
|
||||||
|
--hash=sha256:5f451484aeb5cafee1ccf789b1b66f535409d038c56966d6101740c1614b86c6 \
|
||||||
|
--hash=sha256:5f6261a5e56e8d5c42a4497b364ea24d94d9563e8fbd44e78ac40879c60179b5 \
|
||||||
|
--hash=sha256:6e5a82b677f8f6f59e8dfc34ec06ca6b5b48bc4fcda346acd093694cc2c24d8f \
|
||||||
|
--hash=sha256:71c989cbf3254fbd5e84d3bff31e4da39c43f884e64f2551d14bb3c186230f00 \
|
||||||
|
--hash=sha256:781caf5e8eee67f663126490c2f96f40906594cb86b408a703630f95550a8c3e \
|
||||||
|
--hash=sha256:7be95cfb0a4dae143eaed2bcba8ac23f4892d8971311f1b06f3c6b78952ee70b \
|
||||||
|
--hash=sha256:7d837379b647c0c4c2355c2499723f82f1635fd2c26510e1f587d89bc2199e72 \
|
||||||
|
--hash=sha256:86890e837d61574c92a97496d590968b23c2ef0aeb8a9bc9421d174cd378ae39 \
|
||||||
|
--hash=sha256:878b336ac47938b474c8f982ac2f7266a540adc3fa4ad74ae96fea9823a02cc9 \
|
||||||
|
--hash=sha256:8b6e209ffee39ff1b6d0fa7bfef6de950c60dfb91b8fcead17da4ee539121a79 \
|
||||||
|
--hash=sha256:8cc451a50f2aee53042ac52d2d053d08bf89bcb31ae799cb4487587661c038a0 \
|
||||||
|
--hash=sha256:8d7f0659570eefb578dacde98e24fb60af35350193e4f56e11190787bee77dac \
|
||||||
|
--hash=sha256:8e1dab317b6e77424356e11e99a432b7cb2f3ec8c5ab4dabbcee6add48f72b35 \
|
||||||
|
--hash=sha256:8ff32bb86522a9e5e31439a58addbb0166f0204d64066fb955265c4e214160f0 \
|
||||||
|
--hash=sha256:95724e638f0f9c350bb1c2b0a7ad0e83d9cc0c9259f3ea94e40d7b02a2179ae5 \
|
||||||
|
--hash=sha256:9b5aca38b67492ef518a8ab76851862488a478602229112c4b0d58d63a7a4d5c \
|
||||||
|
--hash=sha256:a069d734c4a043182729edd3e9f247c3b2a4035415a9172fd0f1b71658a320a8 \
|
||||||
|
--hash=sha256:a0b31e0b424cc6b5a04b8838bbaec1688834b2383256688cf47eb97412531da1 \
|
||||||
|
--hash=sha256:a35539cacc3febb22b8f4d4a99cc79b104226a756aa7400adc722e83b0d03244 \
|
||||||
|
--hash=sha256:a5e18a238a2b2249c9a9235466b90e96ae4795672598a58772dd806edc7ac6d3 \
|
||||||
|
--hash=sha256:a653aea902e0324b52f1613332ddf50b00c06fdaf7e92624fbf8c77c78fa5767 \
|
||||||
|
--hash=sha256:abf050a199613f64c886ea10f38b47770a65154dc37181bfaff70c160f45315a \
|
||||||
|
--hash=sha256:af80d74d4edfa3cb9ed973a0a5ba2b2a549371f8a741e0800cb07becdd20f23d \
|
||||||
|
--hash=sha256:b14dc141ed6d2dde437cddb216004bcac6a1df0935d79656387bd41632ba0bbd \
|
||||||
|
--hash=sha256:b784ca5de850f4ce93ec85d3269d24d4c82f22b7212023c974c401d4980ebc5e \
|
||||||
|
--hash=sha256:bc59589ab64b0022385f429b94697348a6a234e8ce22544e3681b2e9331b5944 \
|
||||||
|
--hash=sha256:c0204dc62a89dc9d50d682412c10b3542d748260d743500a85c13cd1ee4bde82 \
|
||||||
|
--hash=sha256:c0ee0e63f23914732c6d7e0cce24915c48f3f1512ec1d079ed01fc629dab269d \
|
||||||
|
--hash=sha256:caab51a72c51973ca21fa8a18bd8165e1a0183f1ac7066a182ff27107b71e1a4 \
|
||||||
|
--hash=sha256:d6297ce39ce5c2e6feb13c1a996a2ded3b6832155fcfc920265c76f24c7cceb5 \
|
||||||
|
--hash=sha256:daa3b6ff70a9241cf6c7fc9e949d41232d9d7d26fd3522b1ad2b4d62487e9904 \
|
||||||
|
--hash=sha256:df57afc692e517a85e65b72e165356ed1df12386ecb879ad5693be08fac65dde \
|
||||||
|
--hash=sha256:e0334872c0a37b606418ac52f6ab9cfd17317ac26365f7f65e203e2d0d0d359f \
|
||||||
|
--hash=sha256:e6578ed5b6981005df1860a56e3617f14a6c307e6a71b4fff8c48fdc50f3ed2c \
|
||||||
|
--hash=sha256:eaded469f5e5b7294e2bdca0ab06becb6756ea86894a47806456089298813c89 \
|
||||||
|
--hash=sha256:f4a32d1bd841d4bcbffdcb3d2ce50c09c3909fbead375ab28d0181af89fd04da \
|
||||||
|
--hash=sha256:fd3cb4adb94a2a6e2b7c0d8d05cb94e6f1c81a0cf9dc2694fb65c7e8d94c42e4
|
||||||
|
# via yt-dlp
|
||||||
|
yt-dlp-ejs==0.8.0 \
|
||||||
|
--hash=sha256:79300e5fca7f937a1eeede11f0456862c1b41107ce1d726871e0207424f4bdb4 \
|
||||||
|
--hash=sha256:d5fa1639f63b5c4af8d932495f60689d5370f1a095782c944f7f62a303eb104e
|
||||||
|
# via yt-dlp
|
||||||
524
bundle/requirements/requirements-musllinux-aarch64.txt
Normal file
524
bundle/requirements/requirements-musllinux-aarch64.txt
Normal file
@ -0,0 +1,524 @@
|
|||||||
|
# This file was autogenerated by uv via the following command:
|
||||||
|
# uv export --no-python-downloads --no-progress --color=never --format=requirements.txt --frozen --refresh --no-emit-project --no-default-groups --extra=default --extra=curl-cffi --extra=secretstorage --group=pyinstaller --output-file=bundle/requirements/requirements-musllinux-aarch64.txt
|
||||||
|
altgraph==0.17.5 \
|
||||||
|
--hash=sha256:c87b395dd12fabde9c99573a9749d67da8d29ef9de0125c7f536699b4a9bc9e7 \
|
||||||
|
--hash=sha256:f3a22400bce1b0c701683820ac4f3b159cd301acab067c51c653e06961600597
|
||||||
|
# via
|
||||||
|
# macholib
|
||||||
|
# pyinstaller
|
||||||
|
brotli==1.2.0 ; implementation_name == 'cpython' and sys_platform != 'ios' \
|
||||||
|
--hash=sha256:022426c9e99fd65d9475dce5c195526f04bb8be8907607e27e747893f6ee3e24 \
|
||||||
|
--hash=sha256:072e7624b1fc4d601036ab3f4f27942ef772887e876beff0301d261210bca97f \
|
||||||
|
--hash=sha256:0bbd5b5ccd157ae7913750476d48099aaf507a79841c0d04a9db4415b14842de \
|
||||||
|
--hash=sha256:0cf8c3b8ba93d496b2fae778039e2f5ecc7cff99df84df337ca31d8f2252896c \
|
||||||
|
--hash=sha256:15b33fe93cedc4caaff8a0bd1eb7e3dab1c61bb22a0bf5bdfdfd97cd7da79744 \
|
||||||
|
--hash=sha256:1b1d6a4efedd53671c793be6dd760fcf2107da3a52331ad9ea429edf0902f27a \
|
||||||
|
--hash=sha256:1b557b29782a643420e08d75aea889462a4a8796e9a6cf5621ab05a3f7da8ef2 \
|
||||||
|
--hash=sha256:260d3692396e1895c5034f204f0db022c056f9e2ac841593a4cf9426e2a3faca \
|
||||||
|
--hash=sha256:26e8d3ecb0ee458a9804f47f21b74845cc823fd1bb19f02272be70774f56e2a6 \
|
||||||
|
--hash=sha256:2a7f1d03727130fc875448b65b127a9ec5d06d19d0148e7554384229706f9d1b \
|
||||||
|
--hash=sha256:2e1ad3fda65ae0d93fec742a128d72e145c9c7a99ee2fcd667785d99eb25a7fe \
|
||||||
|
--hash=sha256:3219bd9e69868e57183316ee19c84e03e8f8b5a1d1f2667e1aa8c2f91cb061ac \
|
||||||
|
--hash=sha256:350c8348f0e76fff0a0fd6c26755d2653863279d086d3aa2c290a6a7251135dd \
|
||||||
|
--hash=sha256:35d382625778834a7f3061b15423919aa03e4f5da34ac8e02c074e4b75ab4f84 \
|
||||||
|
--hash=sha256:3b90b767916ac44e93a8e28ce6adf8d551e43affb512f2377c732d486ac6514e \
|
||||||
|
--hash=sha256:3e1b35d56856f3ed326b140d3c6d9db91740f22e14b06e840fe4bb1923439a18 \
|
||||||
|
--hash=sha256:3f3c908bcc404c90c77d5a073e55271a0a498f4e0756e48127c35d91cf155947 \
|
||||||
|
--hash=sha256:40d918bce2b427a0c4ba189df7a006ac0c7277c180aee4617d99e9ccaaf59e6a \
|
||||||
|
--hash=sha256:4ecdb3b6dc36e6d6e14d3a1bdc6c1057c8cbf80db04031d566eb6080ce283a48 \
|
||||||
|
--hash=sha256:54a50a9dad16b32136b2241ddea9e4df159b41247b2ce6aac0b3276a66a8f1e5 \
|
||||||
|
--hash=sha256:67a91c5187e1eec76a61625c77a6c8c785650f5b576ca732bd33ef58b0dff49c \
|
||||||
|
--hash=sha256:6be67c19e0b0c56365c6a76e393b932fb0e78b3b56b711d180dd7013cb1fd984 \
|
||||||
|
--hash=sha256:6c12dad5cd04530323e723787ff762bac749a7b256a5bece32b2243dd5c27b21 \
|
||||||
|
--hash=sha256:7547369c4392b47d30a3467fe8c3330b4f2e0f7730e45e3103d7d636678a808b \
|
||||||
|
--hash=sha256:7a47ce5c2288702e09dc22a44d0ee6152f2c7eda97b3c8482d826a1f3cfc7da7 \
|
||||||
|
--hash=sha256:7a61c06b334bd99bc5ae84f1eeb36bfe01400264b3c352f968c6e30a10f9d08b \
|
||||||
|
--hash=sha256:81da1b229b1889f25adadc929aeb9dbc4e922bd18561b65b08dd9343cfccca84 \
|
||||||
|
--hash=sha256:832c115a020e463c2f67664560449a7bea26b0c1fdd690352addad6d0a08714d \
|
||||||
|
--hash=sha256:844a8ceb8483fefafc412f85c14f2aae2fb69567bf2a0de53cdb88b73e7c43ae \
|
||||||
|
--hash=sha256:898be2be399c221d2671d29eed26b6b2713a02c2119168ed914e7d00ceadb56f \
|
||||||
|
--hash=sha256:9322b9f8656782414b37e6af884146869d46ab85158201d82bab9abbcb971dc7 \
|
||||||
|
--hash=sha256:963a08f3bebd8b75ac57661045402da15991468a621f014be54e50f53a58d19e \
|
||||||
|
--hash=sha256:9c79f57faa25d97900bfb119480806d783fba83cd09ee0b33c17623935b05fa3 \
|
||||||
|
--hash=sha256:9e5825ba2c9998375530504578fd4d5d1059d09621a02065d1b6bfc41a8e05ab \
|
||||||
|
--hash=sha256:a1778532b978d2536e79c05dac2d8cd857f6c55cd0c95ace5b03740824e0e2f1 \
|
||||||
|
--hash=sha256:aa47441fa3026543513139cb8926a92a8e305ee9c71a6209ef7a97d91640ea03 \
|
||||||
|
--hash=sha256:acec55bb7c90f1dfc476126f9711a8e81c9af7fb617409a9ee2953115343f08d \
|
||||||
|
--hash=sha256:adedc4a67e15327dfdd04884873c6d5a01d3e3b6f61406f99b1ed4865a2f6d28 \
|
||||||
|
--hash=sha256:af43b8711a8264bb4e7d6d9a6d004c3a2019c04c01127a868709ec29962b6036 \
|
||||||
|
--hash=sha256:b232029d100d393ae3c603c8ffd7e3fe6f798c5e28ddca5feabb8e8fdb732997 \
|
||||||
|
--hash=sha256:b35c13ce241abdd44cb8ca70683f20c0c079728a36a996297adb5334adfc1c44 \
|
||||||
|
--hash=sha256:b63daa43d82f0cdabf98dee215b375b4058cce72871fd07934f179885aad16e8 \
|
||||||
|
--hash=sha256:c8565e3cdc1808b1a34714b553b262c5de5fbda202285782173ec137fd13709f \
|
||||||
|
--hash=sha256:cf9cba6f5b78a2071ec6fb1e7bd39acf35071d90a81231d67e92d637776a6a63 \
|
||||||
|
--hash=sha256:d2d085ded05278d1c7f65560aae97b3160aeb2ea2c0b3e26204856beccb60888 \
|
||||||
|
--hash=sha256:e310f77e41941c13340a95976fe66a8a95b01e783d430eeaf7a2f87e0a57dd0a \
|
||||||
|
--hash=sha256:e7c0af964e0b4e3412a0ebf341ea26ec767fa0b4cf81abb5e897c9338b5ad6a3 \
|
||||||
|
--hash=sha256:e99befa0b48f3cd293dafeacdd0d191804d105d279e0b387a32054c1180f3161 \
|
||||||
|
--hash=sha256:ef87b8ab2704da227e83a246356a2b179ef826f550f794b2c52cddb4efbd0196 \
|
||||||
|
--hash=sha256:fc1530af5c3c275b8524f2e24841cbe2599d74462455e9bae5109e9ff42e9361 \
|
||||||
|
--hash=sha256:ff09cd8c5eec3b9d02d2408db41be150d8891c5566addce57513bf546e3d6c6d
|
||||||
|
# via yt-dlp
|
||||||
|
brotlicffi==1.2.0.1 ; implementation_name != 'cpython' \
|
||||||
|
--hash=sha256:2c85e65913cf2b79c57a3fdd05b98d9731d9255dc0cb696b09376cc091b9cddd \
|
||||||
|
--hash=sha256:37cb587d32bf7168e2218c455e22e409ad1f3157c6c71945879a311f3e6b6abf \
|
||||||
|
--hash=sha256:3c9544f83cb715d95d7eab3af4adbbef8b2093ad6382288a83b3a25feb1a57ec \
|
||||||
|
--hash=sha256:535f2d05d0273408abc13fc0eebb467afac17b0ad85090c8913690d40207dac5 \
|
||||||
|
--hash=sha256:625f8115d32ae9c0740d01ea51518437c3fbaa3e78d41cb18459f6f7ac326000 \
|
||||||
|
--hash=sha256:6f3314a3476f59e5443f9f72a6dff16edc0c3463c9b318feaef04ae3e4683f5a \
|
||||||
|
--hash=sha256:82ea52e2b5d3145b6c406ebd3efb0d55db718b7ad996bd70c62cec0439de1187 \
|
||||||
|
--hash=sha256:91ba5f0ccc040f6ff8f7efaf839f797723d03ed46acb8ae9408f99ffd2572cf4 \
|
||||||
|
--hash=sha256:9d6ba65dd528892b4d9960beba2ae011a753620bcfc66cf6fa3cee18d7b0baa4 \
|
||||||
|
--hash=sha256:be9a670c6811af30a4bd42d7116dc5895d3b41beaa8ed8a89050447a0181f5ce \
|
||||||
|
--hash=sha256:c20d5c596278307ad06414a6d95a892377ea274a5c6b790c2548c009385d621c \
|
||||||
|
--hash=sha256:ce17eb798ca59ecec67a9bb3fd7a4304e120d1cd02953ce522d959b9a84d58ac \
|
||||||
|
--hash=sha256:da2e82a08e7778b8bc539d27ca03cdd684113e81394bfaaad8d0dfc6a17ddede \
|
||||||
|
--hash=sha256:e015af99584c6db1490a69a210c765953e473e63adc2d891ac3062a737c9e851 \
|
||||||
|
--hash=sha256:f2a5575653b0672638ba039b82fda56854934d7a6a24d4b8b5033f73ab43cbc1
|
||||||
|
# via yt-dlp
|
||||||
|
certifi==2026.2.25 \
|
||||||
|
--hash=sha256:027692e4402ad994f1c42e52a4997a9763c646b73e4096e4d5d6db8af1d6f0fa \
|
||||||
|
--hash=sha256:e887ab5cee78ea814d3472169153c2d12cd43b14bd03329a39a9c6e2e80bfba7
|
||||||
|
# via
|
||||||
|
# curl-cffi
|
||||||
|
# requests
|
||||||
|
# yt-dlp
|
||||||
|
cffi==2.0.0 \
|
||||||
|
--hash=sha256:00bdf7acc5f795150faa6957054fbbca2439db2f775ce831222b66f192f03beb \
|
||||||
|
--hash=sha256:07b271772c100085dd28b74fa0cd81c8fb1a3ba18b21e03d7c27f3436a10606b \
|
||||||
|
--hash=sha256:087067fa8953339c723661eda6b54bc98c5625757ea62e95eb4898ad5e776e9f \
|
||||||
|
--hash=sha256:0a1527a803f0a659de1af2e1fd700213caba79377e27e4693648c2923da066f9 \
|
||||||
|
--hash=sha256:0cf2d91ecc3fcc0625c2c530fe004f82c110405f101548512cce44322fa8ac44 \
|
||||||
|
--hash=sha256:12873ca6cb9b0f0d3a0da705d6086fe911591737a59f28b7936bdfed27c0d47c \
|
||||||
|
--hash=sha256:19f705ada2530c1167abacb171925dd886168931e0a7b78f5bffcae5c6b5be75 \
|
||||||
|
--hash=sha256:1e3a615586f05fc4065a8b22b8152f0c1b00cdbc60596d187c2a74f9e3036e4e \
|
||||||
|
--hash=sha256:1f72fb8906754ac8a2cc3f9f5aaa298070652a0ffae577e0ea9bd480dc3c931a \
|
||||||
|
--hash=sha256:1fc9ea04857caf665289b7a75923f2c6ed559b8298a1b8c49e59f7dd95c8481e \
|
||||||
|
--hash=sha256:203a48d1fb583fc7d78a4c6655692963b860a417c0528492a6bc21f1aaefab25 \
|
||||||
|
--hash=sha256:21d1152871b019407d8ac3985f6775c079416c282e431a4da6afe7aefd2bccbe \
|
||||||
|
--hash=sha256:24b6f81f1983e6df8db3adc38562c83f7d4a0c36162885ec7f7b77c7dcbec97b \
|
||||||
|
--hash=sha256:256f80b80ca3853f90c21b23ee78cd008713787b1b1e93eae9f3d6a7134abd91 \
|
||||||
|
--hash=sha256:28a3a209b96630bca57cce802da70c266eb08c6e97e5afd61a75611ee6c64592 \
|
||||||
|
--hash=sha256:2c8f814d84194c9ea681642fd164267891702542f028a15fc97d4674b6206187 \
|
||||||
|
--hash=sha256:2de9a304e27f7596cd03d16f1b7c72219bd944e99cc52b84d0145aefb07cbd3c \
|
||||||
|
--hash=sha256:38100abb9d1b1435bc4cc340bb4489635dc2f0da7456590877030c9b3d40b0c1 \
|
||||||
|
--hash=sha256:3925dd22fa2b7699ed2617149842d2e6adde22b262fcbfada50e3d195e4b3a94 \
|
||||||
|
--hash=sha256:3e17ed538242334bf70832644a32a7aae3d83b57567f9fd60a26257e992b79ba \
|
||||||
|
--hash=sha256:3e837e369566884707ddaf85fc1744b47575005c0a229de3327f8f9a20f4efeb \
|
||||||
|
--hash=sha256:44d1b5909021139fe36001ae048dbdde8214afa20200eda0f64c068cac5d5529 \
|
||||||
|
--hash=sha256:45d5e886156860dc35862657e1494b9bae8dfa63bf56796f2fb56e1679fc0bca \
|
||||||
|
--hash=sha256:4671d9dd5ec934cb9a73e7ee9676f9362aba54f7f34910956b84d727b0d73fb6 \
|
||||||
|
--hash=sha256:53f77cbe57044e88bbd5ed26ac1d0514d2acf0591dd6bb02a3ae37f76811b80c \
|
||||||
|
--hash=sha256:5eda85d6d1879e692d546a078b44251cdd08dd1cfb98dfb77b670c97cee49ea0 \
|
||||||
|
--hash=sha256:5fed36fccc0612a53f1d4d9a816b50a36702c28a2aa880cb8a122b3466638743 \
|
||||||
|
--hash=sha256:66f011380d0e49ed280c789fbd08ff0d40968ee7b665575489afa95c98196ab5 \
|
||||||
|
--hash=sha256:6824f87845e3396029f3820c206e459ccc91760e8fa24422f8b0c3d1731cbec5 \
|
||||||
|
--hash=sha256:6c6c373cfc5c83a975506110d17457138c8c63016b563cc9ed6e056a82f13ce4 \
|
||||||
|
--hash=sha256:6d02d6655b0e54f54c4ef0b94eb6be0607b70853c45ce98bd278dc7de718be5d \
|
||||||
|
--hash=sha256:6d50360be4546678fc1b79ffe7a66265e28667840010348dd69a314145807a1b \
|
||||||
|
--hash=sha256:730cacb21e1bdff3ce90babf007d0a0917cc3e6492f336c2f0134101e0944f93 \
|
||||||
|
--hash=sha256:737fe7d37e1a1bffe70bd5754ea763a62a066dc5913ca57e957824b72a85e205 \
|
||||||
|
--hash=sha256:74a03b9698e198d47562765773b4a8309919089150a0bb17d829ad7b44b60d27 \
|
||||||
|
--hash=sha256:7553fb2090d71822f02c629afe6042c299edf91ba1bf94951165613553984512 \
|
||||||
|
--hash=sha256:7a66c7204d8869299919db4d5069a82f1561581af12b11b3c9f48c584eb8743d \
|
||||||
|
--hash=sha256:7cc09976e8b56f8cebd752f7113ad07752461f48a58cbba644139015ac24954c \
|
||||||
|
--hash=sha256:81afed14892743bbe14dacb9e36d9e0e504cd204e0b165062c488942b9718037 \
|
||||||
|
--hash=sha256:8941aaadaf67246224cee8c3803777eed332a19d909b47e29c9842ef1e79ac26 \
|
||||||
|
--hash=sha256:8ea985900c5c95ce9db1745f7933eeef5d314f0565b27625d9a10ec9881e1bfb \
|
||||||
|
--hash=sha256:8eca2a813c1cb7ad4fb74d368c2ffbbb4789d377ee5bb8df98373c2cc0dee76c \
|
||||||
|
--hash=sha256:92b68146a71df78564e4ef48af17551a5ddd142e5190cdf2c5624d0c3ff5b2e8 \
|
||||||
|
--hash=sha256:9332088d75dc3241c702d852d4671613136d90fa6881da7d770a483fd05248b4 \
|
||||||
|
--hash=sha256:94698a9c5f91f9d138526b48fe26a199609544591f859c870d477351dc7b2414 \
|
||||||
|
--hash=sha256:9a67fc9e8eb39039280526379fb3a70023d77caec1852002b4da7e8b270c4dd9 \
|
||||||
|
--hash=sha256:9de40a7b0323d889cf8d23d1ef214f565ab154443c42737dfe52ff82cf857664 \
|
||||||
|
--hash=sha256:a05d0c237b3349096d3981b727493e22147f934b20f6f125a3eba8f994bec4a9 \
|
||||||
|
--hash=sha256:afb8db5439b81cf9c9d0c80404b60c3cc9c3add93e114dcae767f1477cb53775 \
|
||||||
|
--hash=sha256:b18a3ed7d5b3bd8d9ef7a8cb226502c6bf8308df1525e1cc676c3680e7176739 \
|
||||||
|
--hash=sha256:b1e74d11748e7e98e2f426ab176d4ed720a64412b6a15054378afdb71e0f37dc \
|
||||||
|
--hash=sha256:b21e08af67b8a103c71a250401c78d5e0893beff75e28c53c98f4de42f774062 \
|
||||||
|
--hash=sha256:b4c854ef3adc177950a8dfc81a86f5115d2abd545751a304c5bcf2c2c7283cfe \
|
||||||
|
--hash=sha256:baf5215e0ab74c16e2dd324e8ec067ef59e41125d3eade2b863d294fd5035c92 \
|
||||||
|
--hash=sha256:c649e3a33450ec82378822b3dad03cc228b8f5963c0c12fc3b1e0ab940f768a5 \
|
||||||
|
--hash=sha256:c654de545946e0db659b3400168c9ad31b5d29593291482c43e3564effbcee13 \
|
||||||
|
--hash=sha256:c6638687455baf640e37344fe26d37c404db8b80d037c3d29f58fe8d1c3b194d \
|
||||||
|
--hash=sha256:c8d3b5532fc71b7a77c09192b4a5a200ea992702734a2e9279a37f2478236f26 \
|
||||||
|
--hash=sha256:cf364028c016c03078a23b503f02058f1814320a56ad535686f90565636a9495 \
|
||||||
|
--hash=sha256:d48a880098c96020b02d5a1f7d9251308510ce8858940e6fa99ece33f610838b \
|
||||||
|
--hash=sha256:d68b6cef7827e8641e8ef16f4494edda8b36104d79773a334beaa1e3521430f6 \
|
||||||
|
--hash=sha256:d9b29c1f0ae438d5ee9acb31cadee00a58c46cc9c0b2f9038c6b0b3470877a8c \
|
||||||
|
--hash=sha256:d9b97165e8aed9272a6bb17c01e3cc5871a594a446ebedc996e2397a1c1ea8ef \
|
||||||
|
--hash=sha256:da68248800ad6320861f129cd9c1bf96ca849a2771a59e0344e88681905916f5 \
|
||||||
|
--hash=sha256:da902562c3e9c550df360bfa53c035b2f241fed6d9aef119048073680ace4a18 \
|
||||||
|
--hash=sha256:dbd5c7a25a7cb98f5ca55d258b103a2054f859a46ae11aaf23134f9cc0d356ad \
|
||||||
|
--hash=sha256:dd4f05f54a52fb558f1ba9f528228066954fee3ebe629fc1660d874d040ae5a3 \
|
||||||
|
--hash=sha256:e11e82b744887154b182fd3e7e8512418446501191994dbf9c9fc1f32cc8efd5 \
|
||||||
|
--hash=sha256:f73b96c41e3b2adedc34a7356e64c8eb96e03a3782b535e043a986276ce12a49 \
|
||||||
|
--hash=sha256:f93fd8e5c8c0a4aa1f424d6173f14a892044054871c771f8566e4008eaa359d2 \
|
||||||
|
--hash=sha256:fc33c5141b55ed366cfaad382df24fe7dcbc686de5be719b207bb248e3053dc5 \
|
||||||
|
--hash=sha256:fc7de24befaeae77ba923797c7c87834c73648a05a4bde34b3b7e5588973a453
|
||||||
|
# via
|
||||||
|
# brotlicffi
|
||||||
|
# cryptography
|
||||||
|
# curl-cffi
|
||||||
|
charset-normalizer==3.4.6 \
|
||||||
|
--hash=sha256:06a7e86163334edfc5d20fe104db92fcd666e5a5df0977cb5680a506fe26cc8e \
|
||||||
|
--hash=sha256:0c173ce3a681f309f31b87125fecec7a5d1347261ea11ebbb856fa6006b23c8c \
|
||||||
|
--hash=sha256:0e28d62a8fc7a1fa411c43bd65e346f3bce9716dc51b897fbe930c5987b402d5 \
|
||||||
|
--hash=sha256:0e901eb1049fdb80f5bd11ed5ea1e498ec423102f7a9b9e4645d5b8204ff2815 \
|
||||||
|
--hash=sha256:11afb56037cbc4b1555a34dd69151e8e069bee82e613a73bef6e714ce733585f \
|
||||||
|
--hash=sha256:150b8ce8e830eb7ccb029ec9ca36022f756986aaaa7956aad6d9ec90089338c0 \
|
||||||
|
--hash=sha256:172985e4ff804a7ad08eebec0a1640ece87ba5041d565fff23c8f99c1f389484 \
|
||||||
|
--hash=sha256:197c1a244a274bb016dd8b79204850144ef77fe81c5b797dc389327adb552407 \
|
||||||
|
--hash=sha256:1ae6b62897110aa7c79ea2f5dd38d1abca6db663687c0b1ad9aed6f6bae3d9d6 \
|
||||||
|
--hash=sha256:22c6f0c2fbc31e76c3b8a86fba1a56eda6166e238c29cdd3d14befdb4a4e4815 \
|
||||||
|
--hash=sha256:231d4da14bcd9301310faf492051bee27df11f2bc7549bc0bb41fef11b82daa2 \
|
||||||
|
--hash=sha256:259695e2ccc253feb2a016303543d691825e920917e31f894ca1a687982b1de4 \
|
||||||
|
--hash=sha256:2a24157fa36980478dd1770b585c0f30d19e18f4fb0c47c13aa568f871718579 \
|
||||||
|
--hash=sha256:2b1a63e8224e401cafe7739f77efd3f9e7f5f2026bda4aead8e59afab537784f \
|
||||||
|
--hash=sha256:2e1d8ca8611099001949d1cdfaefc510cf0f212484fe7c565f735b68c78c3c95 \
|
||||||
|
--hash=sha256:2ef7fedc7a6ecbe99969cd09632516738a97eeb8bd7258bf8a0f23114c057dab \
|
||||||
|
--hash=sha256:30f445ae60aad5e1f8bdbb3108e39f6fbc09f4ea16c815c66578878325f8f15a \
|
||||||
|
--hash=sha256:34315ff4fc374b285ad7f4a0bf7dcbfe769e1b104230d40f49f700d4ab6bbd84 \
|
||||||
|
--hash=sha256:3778fd7d7cd04ae8f54651f4a7a0bd6e39a0cf20f801720a4c21d80e9b7ad6b0 \
|
||||||
|
--hash=sha256:39f5068d35621da2881271e5c3205125cc456f54e9030d3f723288c873a71bf9 \
|
||||||
|
--hash=sha256:404a1e552cf5b675a87f0651f8b79f5f1e6fd100ee88dc612f89aa16abd4486f \
|
||||||
|
--hash=sha256:419a9d91bd238052642a51938af8ac05da5b3343becde08d5cdeab9046df9ee1 \
|
||||||
|
--hash=sha256:423fb7e748a08f854a08a222b983f4df1912b1daedce51a72bd24fe8f26a1843 \
|
||||||
|
--hash=sha256:4482481cb0572180b6fd976a4d5c72a30263e98564da68b86ec91f0fe35e8565 \
|
||||||
|
--hash=sha256:47955475ac79cc504ef2704b192364e51d0d473ad452caedd0002605f780101c \
|
||||||
|
--hash=sha256:4be9f4830ba8741527693848403e2c457c16e499100963ec711b1c6f2049b7c7 \
|
||||||
|
--hash=sha256:51fb3c322c81d20567019778cb5a4a6f2dc1c200b886bc0d636238e364848c89 \
|
||||||
|
--hash=sha256:5273b9f0b5835ff0350c0828faea623c68bfa65b792720c453e22b25cc72930f \
|
||||||
|
--hash=sha256:530d548084c4a9f7a16ed4a294d459b4f229db50df689bfe92027452452943a0 \
|
||||||
|
--hash=sha256:530e8cebeea0d76bdcf93357aa5e41336f48c3dc709ac52da2bb167c5b8271d9 \
|
||||||
|
--hash=sha256:572d7c822caf521f0525ba1bce1a622a0b85cf47ffbdae6c9c19e3b5ac3c4389 \
|
||||||
|
--hash=sha256:58c948d0d086229efc484fe2f30c2d382c86720f55cd9bc33591774348ad44e0 \
|
||||||
|
--hash=sha256:5d11595abf8dd942a77883a39d81433739b287b6aa71620f15164f8096221b30 \
|
||||||
|
--hash=sha256:5f8ddd609f9e1af8c7bd6e2aca279c931aefecd148a14402d4e368f3171769fd \
|
||||||
|
--hash=sha256:5feb91325bbceade6afab43eb3b508c63ee53579fe896c77137ded51c6b6958e \
|
||||||
|
--hash=sha256:60c74963d8350241a79cb8feea80e54d518f72c26db618862a8f53e5023deaf9 \
|
||||||
|
--hash=sha256:613f19aa6e082cf96e17e3ffd89383343d0d589abda756b7764cf78361fd41dc \
|
||||||
|
--hash=sha256:695f5c2823691a25f17bc5d5ffe79fa90972cc34b002ac6c843bb8a1720e950d \
|
||||||
|
--hash=sha256:6cceb5473417d28edd20c6c984ab6fee6c6267d38d906823ebfe20b03d607dc2 \
|
||||||
|
--hash=sha256:74119174722c4349af9708993118581686f343adc1c8c9c007d59be90d077f3f \
|
||||||
|
--hash=sha256:74a2e659c7ecbc73562e2a15e05039f1e22c75b7c7618b4b574a3ea9118d1557 \
|
||||||
|
--hash=sha256:7504e9b7dc05f99a9bbb4525c67a2c155073b44d720470a148b34166a69c054e \
|
||||||
|
--hash=sha256:79090741d842f564b1b2827c0b82d846405b744d31e84f18d7a7b41c20e473ff \
|
||||||
|
--hash=sha256:7a6967aaf043bceabab5412ed6bd6bd26603dae84d5cb75bf8d9a74a4959d398 \
|
||||||
|
--hash=sha256:7bda6eebafd42133efdca535b04ccb338ab29467b3f7bf79569883676fc628db \
|
||||||
|
--hash=sha256:7edbed096e4a4798710ed6bc75dcaa2a21b68b6c356553ac4823c3658d53743a \
|
||||||
|
--hash=sha256:7f9019c9cb613f084481bd6a100b12e1547cf2efe362d873c2e31e4035a6fa43 \
|
||||||
|
--hash=sha256:80d0a5615143c0b3225e5e3ef22c8d5d51f3f72ce0ea6fb84c943546c7b25b6c \
|
||||||
|
--hash=sha256:82060f995ab5003a2d6e0f4ad29065b7672b6593c8c63559beefe5b443242c3e \
|
||||||
|
--hash=sha256:836ab36280f21fc1a03c99cd05c6b7af70d2697e374c7af0b61ed271401a72a2 \
|
||||||
|
--hash=sha256:87725cfb1a4f1f8c2fc9890ae2f42094120f4b44db9360be5d99a4c6b0e03a9e \
|
||||||
|
--hash=sha256:899d28f422116b08be5118ef350c292b36fc15ec2daeb9ea987c89281c7bb5c4 \
|
||||||
|
--hash=sha256:8bea55c4eef25b0b19a0337dc4e3f9a15b00d569c77211fa8cde38684f234fb7 \
|
||||||
|
--hash=sha256:8e5a94886bedca0f9b78fecd6afb6629142fd2605aa70a125d49f4edc6037ee6 \
|
||||||
|
--hash=sha256:90ca27cd8da8118b18a52d5f547859cc1f8354a00cd1e8e5120df3e30d6279e5 \
|
||||||
|
--hash=sha256:92734d4d8d187a354a556626c221cd1a892a4e0802ccb2af432a1d85ec012194 \
|
||||||
|
--hash=sha256:947cf925bc916d90adba35a64c82aace04fa39b46b52d4630ece166655905a69 \
|
||||||
|
--hash=sha256:95b52c68d64c1878818687a473a10547b3292e82b6f6fe483808fb1468e2f52f \
|
||||||
|
--hash=sha256:97d0235baafca5f2b09cf332cc275f021e694e8362c6bb9c96fc9a0eb74fc316 \
|
||||||
|
--hash=sha256:9ca4c0b502ab399ef89248a2c84c54954f77a070f28e546a85e91da627d1301e \
|
||||||
|
--hash=sha256:9cc4fc6c196d6a8b76629a70ddfcd4635a6898756e2d9cac5565cf0654605d73 \
|
||||||
|
--hash=sha256:9cc6e6d9e571d2f863fa77700701dae73ed5f78881efc8b3f9a4398772ff53e8 \
|
||||||
|
--hash=sha256:a056d1ad2633548ca18ffa2f85c202cfb48b68615129143915b8dc72a806a923 \
|
||||||
|
--hash=sha256:a26611d9987b230566f24a0a125f17fe0de6a6aff9f25c9f564aaa2721a5fb88 \
|
||||||
|
--hash=sha256:a4474d924a47185a06411e0064b803c68be044be2d60e50e8bddcc2649957c1f \
|
||||||
|
--hash=sha256:a4ea868bc28109052790eb2b52a9ab33f3aa7adc02f96673526ff47419490e21 \
|
||||||
|
--hash=sha256:a9e68c9d88823b274cf1e72f28cb5dc89c990edf430b0bfd3e2fb0785bfeabf4 \
|
||||||
|
--hash=sha256:aa9cccf4a44b9b62d8ba8b4dd06c649ba683e4bf04eea606d2e94cfc2d6ff4d6 \
|
||||||
|
--hash=sha256:ac2393c73378fea4e52aa56285a3d64be50f1a12395afef9cce47772f60334c2 \
|
||||||
|
--hash=sha256:ad8faf8df23f0378c6d527d8b0b15ea4a2e23c89376877c598c4870d1b2c7866 \
|
||||||
|
--hash=sha256:b35b200d6a71b9839a46b9b7fff66b6638bb52fc9658aa58796b0326595d3021 \
|
||||||
|
--hash=sha256:b3694e3f87f8ac7ce279d4355645b3c878d24d1424581b46282f24b92f5a4ae2 \
|
||||||
|
--hash=sha256:b4ff1d35e8c5bd078be89349b6f3a845128e685e751b6ea1169cf2160b344c4d \
|
||||||
|
--hash=sha256:bbc8c8650c6e51041ad1be191742b8b421d05bbd3410f43fa2a00c8db87678e8 \
|
||||||
|
--hash=sha256:bc72863f4d9aba2e8fd9085e63548a324ba706d2ea2c83b260da08a59b9482de \
|
||||||
|
--hash=sha256:c2274ca724536f173122f36c98ce188fd24ce3dad886ec2b7af859518ce008a4 \
|
||||||
|
--hash=sha256:c8ae56368f8cc97c7e40a7ee18e1cedaf8e780cd8bc5ed5ac8b81f238614facb \
|
||||||
|
--hash=sha256:c907cdc8109f6c619e6254212e794d6548373cc40e1ec75e6e3823d9135d29cc \
|
||||||
|
--hash=sha256:ca0276464d148c72defa8bb4390cce01b4a0e425f3b50d1435aa6d7a18107602 \
|
||||||
|
--hash=sha256:cd5e2801c89992ed8c0a3f0293ae83c159a60d9a5d685005383ef4caca77f2c4 \
|
||||||
|
--hash=sha256:d60377dce4511655582e300dc1e5a5f24ba0cb229005a1d5c8d0cb72bb758ab8 \
|
||||||
|
--hash=sha256:d73beaac5e90173ac3deb9928a74763a6d230f494e4bfb422c217a0ad8e629bf \
|
||||||
|
--hash=sha256:d7de2637729c67d67cf87614b566626057e95c303bc0a55ffe391f5205e7003d \
|
||||||
|
--hash=sha256:dad6e0f2e481fffdcf776d10ebee25e0ef89f16d691f1e5dee4b586375fdc64b \
|
||||||
|
--hash=sha256:dda86aba335c902b6149a02a55b38e96287157e609200811837678214ba2b1db \
|
||||||
|
--hash=sha256:e1f6e2f00a6b8edb562826e4632e26d063ac10307e80f7461f7de3ad8ef3f077 \
|
||||||
|
--hash=sha256:e25369dc110d58ddf29b949377a93e0716d72a24f62bad72b2b39f155949c1fd \
|
||||||
|
--hash=sha256:e3c701e954abf6fc03a49f7c579cc80c2c6cc52525340ca3186c41d3f33482ef \
|
||||||
|
--hash=sha256:e5bcc1a1ae744e0bb59641171ae53743760130600da8db48cbb6e4918e186e4e \
|
||||||
|
--hash=sha256:e68c14b04827dd76dcbd1aeea9e604e3e4b78322d8faf2f8132c7138efa340a8 \
|
||||||
|
--hash=sha256:e985a16ff513596f217cee86c21371b8cd011c0f6f056d0920aa2d926c544058 \
|
||||||
|
--hash=sha256:ef5960d965e67165d75b7c7ffc60a83ec5abfc5c11b764ec13ea54fbef8b4421 \
|
||||||
|
--hash=sha256:f0cdaecd4c953bfae0b6bb64910aaaca5a424ad9c72d85cb88417bb9814f7550 \
|
||||||
|
--hash=sha256:f1ce721c8a7dfec21fcbdfe04e8f68174183cf4e8188e0645e92aa23985c57ff \
|
||||||
|
--hash=sha256:f5ea69428fa1b49573eef0cc44a1d43bebd45ad0c611eb7d7eac760c7ae771bc \
|
||||||
|
--hash=sha256:f6e4333fb15c83f7d1482a76d45a0818897b3d33f00efd215528ff7c51b8e35d \
|
||||||
|
--hash=sha256:f820f24b09e3e779fe84c3c456cb4108a7aa639b0d1f02c28046e11bfcd088ed \
|
||||||
|
--hash=sha256:fcce033e4021347d80ed9c66dcf1e7b1546319834b74445f561d2e2221de5659
|
||||||
|
# via requests
|
||||||
|
cryptography==46.0.6 \
|
||||||
|
--hash=sha256:02fad249cb0e090b574e30b276a3da6a149e04ee2f049725b1f69e7b8351ec70 \
|
||||||
|
--hash=sha256:063b67749f338ca9c5a0b7fe438a52c25f9526b851e24e6c9310e7195aad3b4d \
|
||||||
|
--hash=sha256:12cae594e9473bca1a7aceb90536060643128bb274fcea0fc459ab90f7d1ae7a \
|
||||||
|
--hash=sha256:12f0fa16cc247b13c43d56d7b35287ff1569b5b1f4c5e87e92cc4fcc00cd10c0 \
|
||||||
|
--hash=sha256:22259338084d6ae497a19bae5d4c66b7ca1387d3264d1c2c0e72d9e9b6a77b97 \
|
||||||
|
--hash=sha256:26031f1e5ca62fcb9d1fcb34b2b60b390d1aacaa15dc8b895a9ed00968b97b30 \
|
||||||
|
--hash=sha256:27550628a518c5c6c903d84f637fbecf287f6cb9ced3804838a1295dc1fd0759 \
|
||||||
|
--hash=sha256:2b417edbe8877cda9022dde3a008e2deb50be9c407eef034aeeb3a8b11d9db3c \
|
||||||
|
--hash=sha256:2ea0f37e9a9cf0df2952893ad145fd9627d326a59daec9b0802480fa3bcd2ead \
|
||||||
|
--hash=sha256:2ef9e69886cbb137c2aef9772c2e7138dc581fad4fcbcf13cc181eb5a3ab6275 \
|
||||||
|
--hash=sha256:341359d6c9e68834e204ceaf25936dffeafea3829ab80e9503860dcc4f4dac58 \
|
||||||
|
--hash=sha256:380343e0653b1c9d7e1f55b52aaa2dbb2fdf2730088d48c43ca1c7c0abb7cc2f \
|
||||||
|
--hash=sha256:3c21d92ed15e9cfc6eb64c1f5a0326db22ca9c2566ca46d845119b45b4400361 \
|
||||||
|
--hash=sha256:3dfa6567f2e9e4c5dceb8ccb5a708158a2a871052fa75c8b78cb0977063f1507 \
|
||||||
|
--hash=sha256:456b3215172aeefb9284550b162801d62f5f264a081049a3e94307fe20792cfa \
|
||||||
|
--hash=sha256:4668298aef7cddeaf5c6ecc244c2302a2b8e40f384255505c22875eebb47888b \
|
||||||
|
--hash=sha256:50575a76e2951fe7dbd1f56d181f8c5ceeeb075e9ff88e7ad997d2f42af06e7b \
|
||||||
|
--hash=sha256:639301950939d844a9e1c4464d7e07f902fe9a7f6b215bb0d4f28584729935d8 \
|
||||||
|
--hash=sha256:64235194bad039a10bb6d2d930ab3323baaec67e2ce36215fd0952fad0930ca8 \
|
||||||
|
--hash=sha256:6617f67b1606dfd9fe4dbfa354a9508d4a6d37afe30306fe6c101b7ce3274b72 \
|
||||||
|
--hash=sha256:67177e8a9f421aa2d3a170c3e56eca4e0128883cf52a071a7cbf53297f18b175 \
|
||||||
|
--hash=sha256:6728c49e3b2c180ef26f8e9f0a883a2c585638db64cf265b49c9ba10652d430e \
|
||||||
|
--hash=sha256:6739d56300662c468fddb0e5e291f9b4d084bead381667b9e654c7dd81705124 \
|
||||||
|
--hash=sha256:69cf0056d6947edc6e6760e5f17afe4bea06b56a9ac8a06de9d2bd6b532d4f3a \
|
||||||
|
--hash=sha256:760997a4b950ff00d418398ad73fbc91aa2894b5c1db7ccb45b4f68b42a63b3c \
|
||||||
|
--hash=sha256:79e865c642cfc5c0b3eb12af83c35c5aeff4fa5c672dc28c43721c2c9fdd2f0f \
|
||||||
|
--hash=sha256:7e6142674f2a9291463e5e150090b95a8519b2fb6e6aaec8917dd8d094ce750d \
|
||||||
|
--hash=sha256:7f417f034f91dcec1cb6c5c35b07cdbb2ef262557f701b4ecd803ee8cefed4f4 \
|
||||||
|
--hash=sha256:7f6690b6c55e9c5332c0b59b9c8a3fb232ebf059094c17f9019a51e9827df91c \
|
||||||
|
--hash=sha256:8927ccfbe967c7df312ade694f987e7e9e22b2425976ddbf28271d7e58845290 \
|
||||||
|
--hash=sha256:8ce35b77aaf02f3b59c90b2c8a05c73bac12cea5b4e8f3fbece1f5fddea5f0ca \
|
||||||
|
--hash=sha256:8e7304c4f4e9490e11efe56af6713983460ee0780f16c63f219984dab3af9d2d \
|
||||||
|
--hash=sha256:90e5f0a7b3be5f40c3a0a0eafb32c681d8d2c181fc2a1bdabe9b3f611d9f6b1a \
|
||||||
|
--hash=sha256:97c8115b27e19e592a05c45d0dd89c57f81f841cc9880e353e0d3bf25b2139ed \
|
||||||
|
--hash=sha256:9a693028b9cbe51b5a1136232ee8f2bc242e4e19d456ded3fa7c86e43c713b4a \
|
||||||
|
--hash=sha256:9a9c42a2723999a710445bc0d974e345c32adfd8d2fac6d8a251fa829ad31cfb \
|
||||||
|
--hash=sha256:a3e84d5ec9ba01f8fd03802b2147ba77f0c8f2617b2aff254cedd551844209c8 \
|
||||||
|
--hash=sha256:aad75154a7ac9039936d50cf431719a2f8d4ed3d3c277ac03f3339ded1a5e707 \
|
||||||
|
--hash=sha256:b12c6b1e1651e42ab5de8b1e00dc3b6354fdfd778e7fa60541ddacc27cd21410 \
|
||||||
|
--hash=sha256:b928a3ca837c77a10e81a814a693f2295200adb3352395fad024559b7be7a736 \
|
||||||
|
--hash=sha256:bcb87663e1f7b075e48c3be3ecb5f0b46c8fc50b50a97cf264e7f60242dca3f2 \
|
||||||
|
--hash=sha256:c797e2517cb7880f8297e2c0f43bb910e91381339336f75d2c1c2cbf811b70b4 \
|
||||||
|
--hash=sha256:c89eb37fae9216985d8734c1afd172ba4927f5a05cfd9bf0e4863c6d5465b013 \
|
||||||
|
--hash=sha256:cdcd3edcbc5d55757e5f5f3d330dd00007ae463a7e7aa5bf132d1f22a4b62b19 \
|
||||||
|
--hash=sha256:d24c13369e856b94892a89ddf70b332e0b70ad4a5c43cf3e9cb71d6d7ffa1f7b \
|
||||||
|
--hash=sha256:d4e4aadb7fc1f88687f47ca20bb7227981b03afaae69287029da08096853b738 \
|
||||||
|
--hash=sha256:d9528b535a6c4f8ff37847144b8986a9a143585f0540fbcb1a98115b543aa463 \
|
||||||
|
--hash=sha256:ed3775295fb91f70b4027aeba878d79b3e55c0b3e97eaa4de71f8f23a9f2eb77 \
|
||||||
|
--hash=sha256:ed418c37d095aeddf5336898a132fba01091f0ac5844e3e8018506f014b6d2c4
|
||||||
|
# via secretstorage
|
||||||
|
curl-cffi==0.15.0 ; implementation_name == 'cpython' \
|
||||||
|
--hash=sha256:08c799b89740b9bc49c09fbc3d5907f13ac1f845ca52620507ef9466d4639dd5 \
|
||||||
|
--hash=sha256:0b6c0543b993996670e9e4b78e305a2d60809d5681903ffb5568e21a387434d3 \
|
||||||
|
--hash=sha256:1977e1e12cfb5c11352cbb74acef1bed24eb7d226dab61ca57c168c21acd4d61 \
|
||||||
|
--hash=sha256:2b6c847d86283b07ae69bb72c82eb8a59242277142aa35b89850f89e792a02fc \
|
||||||
|
--hash=sha256:408d6f14e346841cd889c2e0962832bb235ba3b6749ebf609f347f747da5e60f \
|
||||||
|
--hash=sha256:41f80170ba844009273b2660da1964ec31e99e5719d16b3422ada87177e32e13 \
|
||||||
|
--hash=sha256:4682dc38d4336e0eb0b185374db90a760efde63cbea994b4e63f3521d44c4c92 \
|
||||||
|
--hash=sha256:582e570aa2586b96ed47cf4a17586b9a3c462cbe43f780487c3dc245c6ef1527 \
|
||||||
|
--hash=sha256:5a0c1896a0d5a5ac1eb89cd24b008d2b718dd1df6fd2f75451b59ca66e49e572 \
|
||||||
|
--hash=sha256:7b7a92767a888ee90147e18964b396d8435ff42737030d6fb00824ffd6094805 \
|
||||||
|
--hash=sha256:7e63539d0d839d0a8c5eacf86229bc68c57803547f35e0db7ee0986328b478c3 \
|
||||||
|
--hash=sha256:829cc357061ecb99cc2d406301f609a039e05665322f5c025ec67c38b0dc49ce \
|
||||||
|
--hash=sha256:838e48212447d9c81364b04707a5c861daf08f8320f9ecb3406a8919d1d5c3b3 \
|
||||||
|
--hash=sha256:967ad7355bd8e9586f8c2d02eaa99953747549e7ea4a9b25cd53353e6b67fe6d \
|
||||||
|
--hash=sha256:9e5e69eee735f659287e2c84444319d68a1fa68dd37abf228943a4074864283a \
|
||||||
|
--hash=sha256:a25620d9bf989c9c029a7d1642999c4c265abb0bad811deb2f77b0b5b2b12e5b \
|
||||||
|
--hash=sha256:a6d57f8389273a3a1f94370473c74897467bcc36af0a17336989780c507fa43d \
|
||||||
|
--hash=sha256:aa1323950224db24f4c510d010b3affa02196ca853fb424191fa917a513d3f4b \
|
||||||
|
--hash=sha256:b624c7ce087bfda967a013ed0a64702a525444e5b6e97d23534d567ccc6525aa \
|
||||||
|
--hash=sha256:bda66404010e9ed743b1b83c20c86f24fe21a9a6873e17479d6e67e29d8ded28 \
|
||||||
|
--hash=sha256:ea0c67652bf6893d34ee0f82c944f37e488f6147e9421bef1771cc6545b02ded
|
||||||
|
# via yt-dlp
|
||||||
|
idna==3.11 \
|
||||||
|
--hash=sha256:771a87f49d9defaf64091e6e6fe9c18d4833f140bd19464795bc32d966ca37ea \
|
||||||
|
--hash=sha256:795dafcc9c04ed0c1fb032c2aa73654d8e8c5023a7df64a53f39190ada629902
|
||||||
|
# via requests
|
||||||
|
jeepney==0.9.0 \
|
||||||
|
--hash=sha256:97e5714520c16fc0a45695e5365a2e11b81ea79bba796e26f9f1d178cb182683 \
|
||||||
|
--hash=sha256:cf0e9e845622b81e4a28df94c40345400256ec608d0e55bb8a3feaa9163f5732
|
||||||
|
# via secretstorage
|
||||||
|
macholib==1.16.4 ; sys_platform == 'darwin' \
|
||||||
|
--hash=sha256:da1a3fa8266e30f0ce7e97c6a54eefaae8edd1e5f86f3eb8b95457cae90265ea \
|
||||||
|
--hash=sha256:f408c93ab2e995cd2c46e34fe328b130404be143469e41bc366c807448979362
|
||||||
|
# via pyinstaller
|
||||||
|
markdown-it-py==4.0.0 ; implementation_name == 'cpython' \
|
||||||
|
--hash=sha256:87327c59b172c5011896038353a81343b6754500a08cd7a4973bb48c6d578147 \
|
||||||
|
--hash=sha256:cb0a2b4aa34f932c007117b194e945bd74e0ec24133ceb5bac59009cda1cb9f3
|
||||||
|
# via rich
|
||||||
|
mdurl==0.1.2 ; implementation_name == 'cpython' \
|
||||||
|
--hash=sha256:84008a41e51615a49fc9966191ff91509e3c40b939176e643fd50a5c2196b8f8 \
|
||||||
|
--hash=sha256:bb413d29f5eea38f31dd4754dd7377d4465116fb207585f97bf925588687c1ba
|
||||||
|
# via markdown-it-py
|
||||||
|
mutagen==1.47.0 \
|
||||||
|
--hash=sha256:719fadef0a978c31b4cf3c956261b3c58b6948b32023078a2117b1de09f0fc99 \
|
||||||
|
--hash=sha256:edd96f50c5907a9539d8e5bba7245f62c9f520aef333d13392a79a4f70aca719
|
||||||
|
# via yt-dlp
|
||||||
|
packaging==26.0 \
|
||||||
|
--hash=sha256:00243ae351a257117b6a241061796684b084ed1c516a08c48a3f7e147a9d80b4 \
|
||||||
|
--hash=sha256:b36f1fef9334a5588b4166f8bcd26a14e521f2b55e6b9de3aaa80d3ff7a37529
|
||||||
|
# via
|
||||||
|
# pyinstaller
|
||||||
|
# pyinstaller-hooks-contrib
|
||||||
|
pefile==2024.8.26 ; sys_platform == 'win32' \
|
||||||
|
--hash=sha256:3ff6c5d8b43e8c37bb6e6dd5085658d658a7a0bdcd20b6a07b1fcfc1c4e9d632 \
|
||||||
|
--hash=sha256:76f8b485dcd3b1bb8166f1128d395fa3d87af26360c2358fb75b80019b957c6f
|
||||||
|
# via pyinstaller
|
||||||
|
pycparser==3.0 ; implementation_name != 'PyPy' \
|
||||||
|
--hash=sha256:600f49d217304a5902ac3c37e1281c9fe94e4d0489de643a9504c5cdfdfc6b29 \
|
||||||
|
--hash=sha256:b727414169a36b7d524c1c3e31839a521725078d7b2ff038656844266160a992
|
||||||
|
# via cffi
|
||||||
|
pycryptodomex==3.23.0 \
|
||||||
|
--hash=sha256:02d87b80778c171445d67e23d1caef279bf4b25c3597050ccd2e13970b57fd51 \
|
||||||
|
--hash=sha256:06698f957fe1ab229a99ba2defeeae1c09af185baa909a31a5d1f9d42b1aaed6 \
|
||||||
|
--hash=sha256:14c37aaece158d0ace436f76a7bb19093db3b4deade9797abfc39ec6cd6cc2fe \
|
||||||
|
--hash=sha256:189afbc87f0b9f158386bf051f720e20fa6145975f1e76369303d0f31d1a8d7c \
|
||||||
|
--hash=sha256:43c446e2ba8df8889e0e16f02211c25b4934898384c1ec1ec04d7889c0333587 \
|
||||||
|
--hash=sha256:4f2596e643d4365e14d0879dc5aafe6355616c61c2176009270f3048f6d9a61f \
|
||||||
|
--hash=sha256:52e5ca58c3a0b0bd5e100a9fbc8015059b05cffc6c66ce9d98b4b45e023443b9 \
|
||||||
|
--hash=sha256:55ccbe27f049743a4caf4f4221b166560d3438d0b1e5ab929e07ae1702a4d6fd \
|
||||||
|
--hash=sha256:58b851b9effd0d072d4ca2e4542bf2a4abcf13c82a29fd2c93ce27ee2a2e9462 \
|
||||||
|
--hash=sha256:6b8962204c47464d5c1c4038abeadd4514a133b28748bcd9fa5b6d62e3cec6fa \
|
||||||
|
--hash=sha256:6bbcb1dd0f646484939e142462d9e532482bc74475cecf9c4903d4e1cd21f003 \
|
||||||
|
--hash=sha256:71909758f010c82bc99b0abf4ea12012c98962fbf0583c2164f8b84533c2e4da \
|
||||||
|
--hash=sha256:7b37e08e3871efe2187bc1fd9320cc81d87caf19816c648f24443483005ff886 \
|
||||||
|
--hash=sha256:8a4fcd42ccb04c31268d1efeecfccfd1249612b4de6374205376b8f280321744 \
|
||||||
|
--hash=sha256:91979028227543010d7b2ba2471cf1d1e398b3f183cb105ac584df0c36dac28d \
|
||||||
|
--hash=sha256:a33986a0066860f7fcf7c7bd2bc804fa90e434183645595ae7b33d01f3c91ed8 \
|
||||||
|
--hash=sha256:a9d446e844f08299236780f2efa9898c818fe7e02f17263866b8550c7d5fb328 \
|
||||||
|
--hash=sha256:b2c2537863eccef2d41061e82a881dcabb04944c5c06c5aa7110b577cc487545 \
|
||||||
|
--hash=sha256:bc65bdd9fc8de7a35a74cab1c898cab391a4add33a8fe740bda00f5976ca4708 \
|
||||||
|
--hash=sha256:bdc69d0d3d989a1029df0eed67cc5e8e5d968f3724f4519bd03e0ec68df7543c \
|
||||||
|
--hash=sha256:c25e30a20e1b426e1f0fa00131c516f16e474204eee1139d1603e132acffc314 \
|
||||||
|
--hash=sha256:c7947ab8d589e3178da3d7cdeabe14f841b391e17046954f2fbcd941705762b5 \
|
||||||
|
--hash=sha256:c885da45e70139464f082018ac527fdaad26f1657a99ee13eecdce0f0ca24ab4 \
|
||||||
|
--hash=sha256:da4fa650cef02db88c2b98acc5434461e027dce0ae8c22dd5a69013eaf510006 \
|
||||||
|
--hash=sha256:ebfff755c360d674306e5891c564a274a47953562b42fb74a5c25b8fc1fb1cb5 \
|
||||||
|
--hash=sha256:eca54f4bb349d45afc17e3011ed4264ef1cc9e266699874cdd1349c504e64798 \
|
||||||
|
--hash=sha256:f489c4765093fb60e2edafdf223397bc716491b2b69fe74367b70d6999257a5c \
|
||||||
|
--hash=sha256:fdfac7cda115bca3a5abb2f9e43bc2fb66c2b65ab074913643803ca7083a79ea
|
||||||
|
# via yt-dlp
|
||||||
|
pygments==2.19.2 ; implementation_name == 'cpython' \
|
||||||
|
--hash=sha256:636cb2477cec7f8952536970bc533bc43743542f70392ae026374600add5b887 \
|
||||||
|
--hash=sha256:86540386c03d588bb81d44bc3928634ff26449851e99741617ecb9037ee5ec0b
|
||||||
|
# via rich
|
||||||
|
pyinstaller==6.19.0 \
|
||||||
|
--hash=sha256:1ec54ef967996ca61dacba676227e2b23219878ccce5ee9d6f3aada7b8ed8abf \
|
||||||
|
--hash=sha256:3c5c251054fe4cfaa04c34a363dcfbf811545438cb7198304cd444756bc2edd2 \
|
||||||
|
--hash=sha256:4190e76b74f0c4b5c5f11ac360928cd2e36ec8e3194d437bf6b8648c7bc0c134 \
|
||||||
|
--hash=sha256:481a909c8e60c8692fc60fcb1344d984b44b943f8bc9682f2fcdae305ad297e6 \
|
||||||
|
--hash=sha256:4ab2bb52e58448e14ddf9450601bdedd66800465043501c1d8f1cab87b60b122 \
|
||||||
|
--hash=sha256:8bd68abd812d8a6ba33b9f1810e91fee0f325969733721b78151f0065319ca11 \
|
||||||
|
--hash=sha256:a0fc5f6b3c55aa54353f0c74ffa59b1115433c1850c6f655d62b461a2ed6cbbe \
|
||||||
|
--hash=sha256:b5bb6536c6560330d364d91522250f254b107cf69129d9cbcd0e6727c570be33 \
|
||||||
|
--hash=sha256:c2d5a539b0bfe6159d5522c8c70e1c0e487f22c2badae0f97d45246223b798ea \
|
||||||
|
--hash=sha256:da6d5c6391ccefe73554b9fa29b86001c8e378e0f20c2a4004f836ba537eff63 \
|
||||||
|
--hash=sha256:e649ba6bd1b0b89b210ad92adb5fbdc8a42dd2c5ca4f72ef3a0bfec83a424b83 \
|
||||||
|
--hash=sha256:ec73aeb8bd9b7f2f1240d328a4542e90b3c6e6fbc106014778431c616592a865
|
||||||
|
pyinstaller-hooks-contrib==2026.3 \
|
||||||
|
--hash=sha256:5ecd1068ad262afecadf07556279d2be52ca93a88b049fae17f1a2eb2969254a \
|
||||||
|
--hash=sha256:800d3a198a49a6cd0de2d7fb795005fdca7a0222ed9cb47c0691abd1c27b9310
|
||||||
|
# via pyinstaller
|
||||||
|
pywin32-ctypes==0.2.3 ; sys_platform == 'win32' \
|
||||||
|
--hash=sha256:8a1513379d709975552d202d942d9837758905c8d01eb82b8bcc30918929e7b8 \
|
||||||
|
--hash=sha256:d162dc04946d704503b2edc4d55f3dba5c1d539ead017afa00142c38b9885755
|
||||||
|
# via pyinstaller
|
||||||
|
requests==2.33.0 \
|
||||||
|
--hash=sha256:3324635456fa185245e24865e810cecec7b4caf933d7eb133dcde67d48cee69b \
|
||||||
|
--hash=sha256:c7ebc5e8b0f21837386ad0e1c8fe8b829fa5f544d8df3b2253bff14ef29d7652
|
||||||
|
# via yt-dlp
|
||||||
|
rich==14.3.3 ; implementation_name == 'cpython' \
|
||||||
|
--hash=sha256:793431c1f8619afa7d3b52b2cdec859562b950ea0d4b6b505397612db8d5362d \
|
||||||
|
--hash=sha256:b8daa0b9e4eef54dd8cf7c86c03713f53241884e814f4e2f5fb342fe520f639b
|
||||||
|
# via curl-cffi
|
||||||
|
secretstorage==3.5.0 \
|
||||||
|
--hash=sha256:0ce65888c0725fcb2c5bc0fdb8e5438eece02c523557ea40ce0703c266248137 \
|
||||||
|
--hash=sha256:f04b8e4689cbce351744d5537bf6b1329c6fc68f91fa666f60a380edddcd11be
|
||||||
|
# via yt-dlp
|
||||||
|
setuptools==82.0.1 \
|
||||||
|
--hash=sha256:7d872682c5d01cfde07da7bccc7b65469d3dca203318515ada1de5eda35efbf9 \
|
||||||
|
--hash=sha256:a59e362652f08dcd477c78bb6e7bd9d80a7995bc73ce773050228a348ce2e5bb
|
||||||
|
# via
|
||||||
|
# pyinstaller
|
||||||
|
# pyinstaller-hooks-contrib
|
||||||
|
typing-extensions==4.15.0 ; python_full_version < '3.11' \
|
||||||
|
--hash=sha256:0cea48d173cc12fa28ecabc3b837ea3cf6f38c6d1136f85cbaaf598984861466 \
|
||||||
|
--hash=sha256:f0fa19c6845758ab08074a0cfa8b7aecb71c999ca73d62883bc25cc018c4e548
|
||||||
|
# via cryptography
|
||||||
|
urllib3==2.6.3 \
|
||||||
|
--hash=sha256:1b62b6884944a57dbe321509ab94fd4d3b307075e0c2eae991ac71ee15ad38ed \
|
||||||
|
--hash=sha256:bf272323e553dfb2e87d9bfd225ca7b0f467b919d7bbd355436d3fd37cb0acd4
|
||||||
|
# via
|
||||||
|
# requests
|
||||||
|
# yt-dlp
|
||||||
|
websockets==16.0 \
|
||||||
|
--hash=sha256:0298d07ee155e2e9fda5be8a9042200dd2e3bb0b8a38482156576f863a9d457c \
|
||||||
|
--hash=sha256:04cdd5d2d1dacbad0a7bf36ccbcd3ccd5a30ee188f2560b7a62a30d14107b31a \
|
||||||
|
--hash=sha256:08d7af67b64d29823fed316505a89b86705f2b7981c07848fb5e3ea3020c1abe \
|
||||||
|
--hash=sha256:152284a83a00c59b759697b7f9e9cddf4e3c7861dd0d964b472b70f78f89e80e \
|
||||||
|
--hash=sha256:1637db62fad1dc833276dded54215f2c7fa46912301a24bd94d45d46a011ceec \
|
||||||
|
--hash=sha256:19c4dc84098e523fd63711e563077d39e90ec6702aff4b5d9e344a60cb3c0cb1 \
|
||||||
|
--hash=sha256:1c1b30e4f497b0b354057f3467f56244c603a79c0d1dafce1d16c283c25f6e64 \
|
||||||
|
--hash=sha256:2b9f1e0d69bc60a4a87349d50c09a037a2607918746f07de04df9e43252c77a3 \
|
||||||
|
--hash=sha256:31a52addea25187bde0797a97d6fc3d2f92b6f72a9370792d65a6e84615ac8a8 \
|
||||||
|
--hash=sha256:32da954ffa2814258030e5a57bc73a3635463238e797c7375dc8091327434206 \
|
||||||
|
--hash=sha256:335c23addf3d5e6a8633f9f8eda77efad001671e80b95c491dd0924587ece0b3 \
|
||||||
|
--hash=sha256:3425ac5cf448801335d6fdc7ae1eb22072055417a96cc6b31b3861f455fbc156 \
|
||||||
|
--hash=sha256:349f83cd6c9a415428ee1005cadb5c2c56f4389bc06a9af16103c3bc3dcc8b7d \
|
||||||
|
--hash=sha256:37b31c1623c6605e4c00d466c9d633f9b812ea430c11c8a278774a1fde1acfa9 \
|
||||||
|
--hash=sha256:417b28978cdccab24f46400586d128366313e8a96312e4b9362a4af504f3bbad \
|
||||||
|
--hash=sha256:485c49116d0af10ac698623c513c1cc01c9446c058a4e61e3bf6c19dff7335a2 \
|
||||||
|
--hash=sha256:4a1aba3340a8dca8db6eb5a7986157f52eb9e436b74813764241981ca4888f03 \
|
||||||
|
--hash=sha256:50f23cdd8343b984957e4077839841146f67a3d31ab0d00e6b824e74c5b2f6e8 \
|
||||||
|
--hash=sha256:52a0fec0e6c8d9a784c2c78276a48a2bdf099e4ccc2a4cad53b27718dbfd0230 \
|
||||||
|
--hash=sha256:52ac480f44d32970d66763115edea932f1c5b1312de36df06d6b219f6741eed8 \
|
||||||
|
--hash=sha256:5569417dc80977fc8c2d43a86f78e0a5a22fee17565d78621b6bb264a115d4ea \
|
||||||
|
--hash=sha256:569d01a4e7fba956c5ae4fc988f0d4e187900f5497ce46339c996dbf24f17641 \
|
||||||
|
--hash=sha256:583b7c42688636f930688d712885cf1531326ee05effd982028212ccc13e5957 \
|
||||||
|
--hash=sha256:5a4b4cc550cb665dd8a47f868c8d04c8230f857363ad3c9caf7a0c3bf8c61ca6 \
|
||||||
|
--hash=sha256:5f451484aeb5cafee1ccf789b1b66f535409d038c56966d6101740c1614b86c6 \
|
||||||
|
--hash=sha256:5f6261a5e56e8d5c42a4497b364ea24d94d9563e8fbd44e78ac40879c60179b5 \
|
||||||
|
--hash=sha256:6e5a82b677f8f6f59e8dfc34ec06ca6b5b48bc4fcda346acd093694cc2c24d8f \
|
||||||
|
--hash=sha256:71c989cbf3254fbd5e84d3bff31e4da39c43f884e64f2551d14bb3c186230f00 \
|
||||||
|
--hash=sha256:781caf5e8eee67f663126490c2f96f40906594cb86b408a703630f95550a8c3e \
|
||||||
|
--hash=sha256:7be95cfb0a4dae143eaed2bcba8ac23f4892d8971311f1b06f3c6b78952ee70b \
|
||||||
|
--hash=sha256:7d837379b647c0c4c2355c2499723f82f1635fd2c26510e1f587d89bc2199e72 \
|
||||||
|
--hash=sha256:86890e837d61574c92a97496d590968b23c2ef0aeb8a9bc9421d174cd378ae39 \
|
||||||
|
--hash=sha256:878b336ac47938b474c8f982ac2f7266a540adc3fa4ad74ae96fea9823a02cc9 \
|
||||||
|
--hash=sha256:8b6e209ffee39ff1b6d0fa7bfef6de950c60dfb91b8fcead17da4ee539121a79 \
|
||||||
|
--hash=sha256:8cc451a50f2aee53042ac52d2d053d08bf89bcb31ae799cb4487587661c038a0 \
|
||||||
|
--hash=sha256:8d7f0659570eefb578dacde98e24fb60af35350193e4f56e11190787bee77dac \
|
||||||
|
--hash=sha256:8e1dab317b6e77424356e11e99a432b7cb2f3ec8c5ab4dabbcee6add48f72b35 \
|
||||||
|
--hash=sha256:8ff32bb86522a9e5e31439a58addbb0166f0204d64066fb955265c4e214160f0 \
|
||||||
|
--hash=sha256:95724e638f0f9c350bb1c2b0a7ad0e83d9cc0c9259f3ea94e40d7b02a2179ae5 \
|
||||||
|
--hash=sha256:9b5aca38b67492ef518a8ab76851862488a478602229112c4b0d58d63a7a4d5c \
|
||||||
|
--hash=sha256:a069d734c4a043182729edd3e9f247c3b2a4035415a9172fd0f1b71658a320a8 \
|
||||||
|
--hash=sha256:a0b31e0b424cc6b5a04b8838bbaec1688834b2383256688cf47eb97412531da1 \
|
||||||
|
--hash=sha256:a35539cacc3febb22b8f4d4a99cc79b104226a756aa7400adc722e83b0d03244 \
|
||||||
|
--hash=sha256:a5e18a238a2b2249c9a9235466b90e96ae4795672598a58772dd806edc7ac6d3 \
|
||||||
|
--hash=sha256:a653aea902e0324b52f1613332ddf50b00c06fdaf7e92624fbf8c77c78fa5767 \
|
||||||
|
--hash=sha256:abf050a199613f64c886ea10f38b47770a65154dc37181bfaff70c160f45315a \
|
||||||
|
--hash=sha256:af80d74d4edfa3cb9ed973a0a5ba2b2a549371f8a741e0800cb07becdd20f23d \
|
||||||
|
--hash=sha256:b14dc141ed6d2dde437cddb216004bcac6a1df0935d79656387bd41632ba0bbd \
|
||||||
|
--hash=sha256:b784ca5de850f4ce93ec85d3269d24d4c82f22b7212023c974c401d4980ebc5e \
|
||||||
|
--hash=sha256:bc59589ab64b0022385f429b94697348a6a234e8ce22544e3681b2e9331b5944 \
|
||||||
|
--hash=sha256:c0204dc62a89dc9d50d682412c10b3542d748260d743500a85c13cd1ee4bde82 \
|
||||||
|
--hash=sha256:c0ee0e63f23914732c6d7e0cce24915c48f3f1512ec1d079ed01fc629dab269d \
|
||||||
|
--hash=sha256:caab51a72c51973ca21fa8a18bd8165e1a0183f1ac7066a182ff27107b71e1a4 \
|
||||||
|
--hash=sha256:d6297ce39ce5c2e6feb13c1a996a2ded3b6832155fcfc920265c76f24c7cceb5 \
|
||||||
|
--hash=sha256:daa3b6ff70a9241cf6c7fc9e949d41232d9d7d26fd3522b1ad2b4d62487e9904 \
|
||||||
|
--hash=sha256:df57afc692e517a85e65b72e165356ed1df12386ecb879ad5693be08fac65dde \
|
||||||
|
--hash=sha256:e0334872c0a37b606418ac52f6ab9cfd17317ac26365f7f65e203e2d0d0d359f \
|
||||||
|
--hash=sha256:e6578ed5b6981005df1860a56e3617f14a6c307e6a71b4fff8c48fdc50f3ed2c \
|
||||||
|
--hash=sha256:eaded469f5e5b7294e2bdca0ab06becb6756ea86894a47806456089298813c89 \
|
||||||
|
--hash=sha256:f4a32d1bd841d4bcbffdcb3d2ce50c09c3909fbead375ab28d0181af89fd04da \
|
||||||
|
--hash=sha256:fd3cb4adb94a2a6e2b7c0d8d05cb94e6f1c81a0cf9dc2694fb65c7e8d94c42e4
|
||||||
|
# via yt-dlp
|
||||||
|
yt-dlp-ejs==0.8.0 \
|
||||||
|
--hash=sha256:79300e5fca7f937a1eeede11f0456862c1b41107ce1d726871e0207424f4bdb4 \
|
||||||
|
--hash=sha256:d5fa1639f63b5c4af8d932495f60689d5370f1a095782c944f7f62a303eb104e
|
||||||
|
# via yt-dlp
|
||||||
524
bundle/requirements/requirements-musllinux-x86_64.txt
Normal file
524
bundle/requirements/requirements-musllinux-x86_64.txt
Normal file
@ -0,0 +1,524 @@
|
|||||||
|
# This file was autogenerated by uv via the following command:
|
||||||
|
# uv export --no-python-downloads --no-progress --color=never --format=requirements.txt --frozen --refresh --no-emit-project --no-default-groups --extra=default --extra=curl-cffi --extra=secretstorage --group=pyinstaller --output-file=bundle/requirements/requirements-musllinux-x86_64.txt
|
||||||
|
altgraph==0.17.5 \
|
||||||
|
--hash=sha256:c87b395dd12fabde9c99573a9749d67da8d29ef9de0125c7f536699b4a9bc9e7 \
|
||||||
|
--hash=sha256:f3a22400bce1b0c701683820ac4f3b159cd301acab067c51c653e06961600597
|
||||||
|
# via
|
||||||
|
# macholib
|
||||||
|
# pyinstaller
|
||||||
|
brotli==1.2.0 ; implementation_name == 'cpython' and sys_platform != 'ios' \
|
||||||
|
--hash=sha256:022426c9e99fd65d9475dce5c195526f04bb8be8907607e27e747893f6ee3e24 \
|
||||||
|
--hash=sha256:072e7624b1fc4d601036ab3f4f27942ef772887e876beff0301d261210bca97f \
|
||||||
|
--hash=sha256:0bbd5b5ccd157ae7913750476d48099aaf507a79841c0d04a9db4415b14842de \
|
||||||
|
--hash=sha256:0cf8c3b8ba93d496b2fae778039e2f5ecc7cff99df84df337ca31d8f2252896c \
|
||||||
|
--hash=sha256:15b33fe93cedc4caaff8a0bd1eb7e3dab1c61bb22a0bf5bdfdfd97cd7da79744 \
|
||||||
|
--hash=sha256:1b1d6a4efedd53671c793be6dd760fcf2107da3a52331ad9ea429edf0902f27a \
|
||||||
|
--hash=sha256:1b557b29782a643420e08d75aea889462a4a8796e9a6cf5621ab05a3f7da8ef2 \
|
||||||
|
--hash=sha256:260d3692396e1895c5034f204f0db022c056f9e2ac841593a4cf9426e2a3faca \
|
||||||
|
--hash=sha256:26e8d3ecb0ee458a9804f47f21b74845cc823fd1bb19f02272be70774f56e2a6 \
|
||||||
|
--hash=sha256:2a7f1d03727130fc875448b65b127a9ec5d06d19d0148e7554384229706f9d1b \
|
||||||
|
--hash=sha256:2e1ad3fda65ae0d93fec742a128d72e145c9c7a99ee2fcd667785d99eb25a7fe \
|
||||||
|
--hash=sha256:3219bd9e69868e57183316ee19c84e03e8f8b5a1d1f2667e1aa8c2f91cb061ac \
|
||||||
|
--hash=sha256:350c8348f0e76fff0a0fd6c26755d2653863279d086d3aa2c290a6a7251135dd \
|
||||||
|
--hash=sha256:35d382625778834a7f3061b15423919aa03e4f5da34ac8e02c074e4b75ab4f84 \
|
||||||
|
--hash=sha256:3b90b767916ac44e93a8e28ce6adf8d551e43affb512f2377c732d486ac6514e \
|
||||||
|
--hash=sha256:3e1b35d56856f3ed326b140d3c6d9db91740f22e14b06e840fe4bb1923439a18 \
|
||||||
|
--hash=sha256:3f3c908bcc404c90c77d5a073e55271a0a498f4e0756e48127c35d91cf155947 \
|
||||||
|
--hash=sha256:40d918bce2b427a0c4ba189df7a006ac0c7277c180aee4617d99e9ccaaf59e6a \
|
||||||
|
--hash=sha256:4ecdb3b6dc36e6d6e14d3a1bdc6c1057c8cbf80db04031d566eb6080ce283a48 \
|
||||||
|
--hash=sha256:54a50a9dad16b32136b2241ddea9e4df159b41247b2ce6aac0b3276a66a8f1e5 \
|
||||||
|
--hash=sha256:67a91c5187e1eec76a61625c77a6c8c785650f5b576ca732bd33ef58b0dff49c \
|
||||||
|
--hash=sha256:6be67c19e0b0c56365c6a76e393b932fb0e78b3b56b711d180dd7013cb1fd984 \
|
||||||
|
--hash=sha256:6c12dad5cd04530323e723787ff762bac749a7b256a5bece32b2243dd5c27b21 \
|
||||||
|
--hash=sha256:7547369c4392b47d30a3467fe8c3330b4f2e0f7730e45e3103d7d636678a808b \
|
||||||
|
--hash=sha256:7a47ce5c2288702e09dc22a44d0ee6152f2c7eda97b3c8482d826a1f3cfc7da7 \
|
||||||
|
--hash=sha256:7a61c06b334bd99bc5ae84f1eeb36bfe01400264b3c352f968c6e30a10f9d08b \
|
||||||
|
--hash=sha256:81da1b229b1889f25adadc929aeb9dbc4e922bd18561b65b08dd9343cfccca84 \
|
||||||
|
--hash=sha256:832c115a020e463c2f67664560449a7bea26b0c1fdd690352addad6d0a08714d \
|
||||||
|
--hash=sha256:844a8ceb8483fefafc412f85c14f2aae2fb69567bf2a0de53cdb88b73e7c43ae \
|
||||||
|
--hash=sha256:898be2be399c221d2671d29eed26b6b2713a02c2119168ed914e7d00ceadb56f \
|
||||||
|
--hash=sha256:9322b9f8656782414b37e6af884146869d46ab85158201d82bab9abbcb971dc7 \
|
||||||
|
--hash=sha256:963a08f3bebd8b75ac57661045402da15991468a621f014be54e50f53a58d19e \
|
||||||
|
--hash=sha256:9c79f57faa25d97900bfb119480806d783fba83cd09ee0b33c17623935b05fa3 \
|
||||||
|
--hash=sha256:9e5825ba2c9998375530504578fd4d5d1059d09621a02065d1b6bfc41a8e05ab \
|
||||||
|
--hash=sha256:a1778532b978d2536e79c05dac2d8cd857f6c55cd0c95ace5b03740824e0e2f1 \
|
||||||
|
--hash=sha256:aa47441fa3026543513139cb8926a92a8e305ee9c71a6209ef7a97d91640ea03 \
|
||||||
|
--hash=sha256:acec55bb7c90f1dfc476126f9711a8e81c9af7fb617409a9ee2953115343f08d \
|
||||||
|
--hash=sha256:adedc4a67e15327dfdd04884873c6d5a01d3e3b6f61406f99b1ed4865a2f6d28 \
|
||||||
|
--hash=sha256:af43b8711a8264bb4e7d6d9a6d004c3a2019c04c01127a868709ec29962b6036 \
|
||||||
|
--hash=sha256:b232029d100d393ae3c603c8ffd7e3fe6f798c5e28ddca5feabb8e8fdb732997 \
|
||||||
|
--hash=sha256:b35c13ce241abdd44cb8ca70683f20c0c079728a36a996297adb5334adfc1c44 \
|
||||||
|
--hash=sha256:b63daa43d82f0cdabf98dee215b375b4058cce72871fd07934f179885aad16e8 \
|
||||||
|
--hash=sha256:c8565e3cdc1808b1a34714b553b262c5de5fbda202285782173ec137fd13709f \
|
||||||
|
--hash=sha256:cf9cba6f5b78a2071ec6fb1e7bd39acf35071d90a81231d67e92d637776a6a63 \
|
||||||
|
--hash=sha256:d2d085ded05278d1c7f65560aae97b3160aeb2ea2c0b3e26204856beccb60888 \
|
||||||
|
--hash=sha256:e310f77e41941c13340a95976fe66a8a95b01e783d430eeaf7a2f87e0a57dd0a \
|
||||||
|
--hash=sha256:e7c0af964e0b4e3412a0ebf341ea26ec767fa0b4cf81abb5e897c9338b5ad6a3 \
|
||||||
|
--hash=sha256:e99befa0b48f3cd293dafeacdd0d191804d105d279e0b387a32054c1180f3161 \
|
||||||
|
--hash=sha256:ef87b8ab2704da227e83a246356a2b179ef826f550f794b2c52cddb4efbd0196 \
|
||||||
|
--hash=sha256:fc1530af5c3c275b8524f2e24841cbe2599d74462455e9bae5109e9ff42e9361 \
|
||||||
|
--hash=sha256:ff09cd8c5eec3b9d02d2408db41be150d8891c5566addce57513bf546e3d6c6d
|
||||||
|
# via yt-dlp
|
||||||
|
brotlicffi==1.2.0.1 ; implementation_name != 'cpython' \
|
||||||
|
--hash=sha256:2c85e65913cf2b79c57a3fdd05b98d9731d9255dc0cb696b09376cc091b9cddd \
|
||||||
|
--hash=sha256:37cb587d32bf7168e2218c455e22e409ad1f3157c6c71945879a311f3e6b6abf \
|
||||||
|
--hash=sha256:3c9544f83cb715d95d7eab3af4adbbef8b2093ad6382288a83b3a25feb1a57ec \
|
||||||
|
--hash=sha256:535f2d05d0273408abc13fc0eebb467afac17b0ad85090c8913690d40207dac5 \
|
||||||
|
--hash=sha256:625f8115d32ae9c0740d01ea51518437c3fbaa3e78d41cb18459f6f7ac326000 \
|
||||||
|
--hash=sha256:6f3314a3476f59e5443f9f72a6dff16edc0c3463c9b318feaef04ae3e4683f5a \
|
||||||
|
--hash=sha256:82ea52e2b5d3145b6c406ebd3efb0d55db718b7ad996bd70c62cec0439de1187 \
|
||||||
|
--hash=sha256:91ba5f0ccc040f6ff8f7efaf839f797723d03ed46acb8ae9408f99ffd2572cf4 \
|
||||||
|
--hash=sha256:9d6ba65dd528892b4d9960beba2ae011a753620bcfc66cf6fa3cee18d7b0baa4 \
|
||||||
|
--hash=sha256:be9a670c6811af30a4bd42d7116dc5895d3b41beaa8ed8a89050447a0181f5ce \
|
||||||
|
--hash=sha256:c20d5c596278307ad06414a6d95a892377ea274a5c6b790c2548c009385d621c \
|
||||||
|
--hash=sha256:ce17eb798ca59ecec67a9bb3fd7a4304e120d1cd02953ce522d959b9a84d58ac \
|
||||||
|
--hash=sha256:da2e82a08e7778b8bc539d27ca03cdd684113e81394bfaaad8d0dfc6a17ddede \
|
||||||
|
--hash=sha256:e015af99584c6db1490a69a210c765953e473e63adc2d891ac3062a737c9e851 \
|
||||||
|
--hash=sha256:f2a5575653b0672638ba039b82fda56854934d7a6a24d4b8b5033f73ab43cbc1
|
||||||
|
# via yt-dlp
|
||||||
|
certifi==2026.2.25 \
|
||||||
|
--hash=sha256:027692e4402ad994f1c42e52a4997a9763c646b73e4096e4d5d6db8af1d6f0fa \
|
||||||
|
--hash=sha256:e887ab5cee78ea814d3472169153c2d12cd43b14bd03329a39a9c6e2e80bfba7
|
||||||
|
# via
|
||||||
|
# curl-cffi
|
||||||
|
# requests
|
||||||
|
# yt-dlp
|
||||||
|
cffi==2.0.0 \
|
||||||
|
--hash=sha256:00bdf7acc5f795150faa6957054fbbca2439db2f775ce831222b66f192f03beb \
|
||||||
|
--hash=sha256:07b271772c100085dd28b74fa0cd81c8fb1a3ba18b21e03d7c27f3436a10606b \
|
||||||
|
--hash=sha256:087067fa8953339c723661eda6b54bc98c5625757ea62e95eb4898ad5e776e9f \
|
||||||
|
--hash=sha256:0a1527a803f0a659de1af2e1fd700213caba79377e27e4693648c2923da066f9 \
|
||||||
|
--hash=sha256:0cf2d91ecc3fcc0625c2c530fe004f82c110405f101548512cce44322fa8ac44 \
|
||||||
|
--hash=sha256:12873ca6cb9b0f0d3a0da705d6086fe911591737a59f28b7936bdfed27c0d47c \
|
||||||
|
--hash=sha256:19f705ada2530c1167abacb171925dd886168931e0a7b78f5bffcae5c6b5be75 \
|
||||||
|
--hash=sha256:1e3a615586f05fc4065a8b22b8152f0c1b00cdbc60596d187c2a74f9e3036e4e \
|
||||||
|
--hash=sha256:1f72fb8906754ac8a2cc3f9f5aaa298070652a0ffae577e0ea9bd480dc3c931a \
|
||||||
|
--hash=sha256:1fc9ea04857caf665289b7a75923f2c6ed559b8298a1b8c49e59f7dd95c8481e \
|
||||||
|
--hash=sha256:203a48d1fb583fc7d78a4c6655692963b860a417c0528492a6bc21f1aaefab25 \
|
||||||
|
--hash=sha256:21d1152871b019407d8ac3985f6775c079416c282e431a4da6afe7aefd2bccbe \
|
||||||
|
--hash=sha256:24b6f81f1983e6df8db3adc38562c83f7d4a0c36162885ec7f7b77c7dcbec97b \
|
||||||
|
--hash=sha256:256f80b80ca3853f90c21b23ee78cd008713787b1b1e93eae9f3d6a7134abd91 \
|
||||||
|
--hash=sha256:28a3a209b96630bca57cce802da70c266eb08c6e97e5afd61a75611ee6c64592 \
|
||||||
|
--hash=sha256:2c8f814d84194c9ea681642fd164267891702542f028a15fc97d4674b6206187 \
|
||||||
|
--hash=sha256:2de9a304e27f7596cd03d16f1b7c72219bd944e99cc52b84d0145aefb07cbd3c \
|
||||||
|
--hash=sha256:38100abb9d1b1435bc4cc340bb4489635dc2f0da7456590877030c9b3d40b0c1 \
|
||||||
|
--hash=sha256:3925dd22fa2b7699ed2617149842d2e6adde22b262fcbfada50e3d195e4b3a94 \
|
||||||
|
--hash=sha256:3e17ed538242334bf70832644a32a7aae3d83b57567f9fd60a26257e992b79ba \
|
||||||
|
--hash=sha256:3e837e369566884707ddaf85fc1744b47575005c0a229de3327f8f9a20f4efeb \
|
||||||
|
--hash=sha256:44d1b5909021139fe36001ae048dbdde8214afa20200eda0f64c068cac5d5529 \
|
||||||
|
--hash=sha256:45d5e886156860dc35862657e1494b9bae8dfa63bf56796f2fb56e1679fc0bca \
|
||||||
|
--hash=sha256:4671d9dd5ec934cb9a73e7ee9676f9362aba54f7f34910956b84d727b0d73fb6 \
|
||||||
|
--hash=sha256:53f77cbe57044e88bbd5ed26ac1d0514d2acf0591dd6bb02a3ae37f76811b80c \
|
||||||
|
--hash=sha256:5eda85d6d1879e692d546a078b44251cdd08dd1cfb98dfb77b670c97cee49ea0 \
|
||||||
|
--hash=sha256:5fed36fccc0612a53f1d4d9a816b50a36702c28a2aa880cb8a122b3466638743 \
|
||||||
|
--hash=sha256:66f011380d0e49ed280c789fbd08ff0d40968ee7b665575489afa95c98196ab5 \
|
||||||
|
--hash=sha256:6824f87845e3396029f3820c206e459ccc91760e8fa24422f8b0c3d1731cbec5 \
|
||||||
|
--hash=sha256:6c6c373cfc5c83a975506110d17457138c8c63016b563cc9ed6e056a82f13ce4 \
|
||||||
|
--hash=sha256:6d02d6655b0e54f54c4ef0b94eb6be0607b70853c45ce98bd278dc7de718be5d \
|
||||||
|
--hash=sha256:6d50360be4546678fc1b79ffe7a66265e28667840010348dd69a314145807a1b \
|
||||||
|
--hash=sha256:730cacb21e1bdff3ce90babf007d0a0917cc3e6492f336c2f0134101e0944f93 \
|
||||||
|
--hash=sha256:737fe7d37e1a1bffe70bd5754ea763a62a066dc5913ca57e957824b72a85e205 \
|
||||||
|
--hash=sha256:74a03b9698e198d47562765773b4a8309919089150a0bb17d829ad7b44b60d27 \
|
||||||
|
--hash=sha256:7553fb2090d71822f02c629afe6042c299edf91ba1bf94951165613553984512 \
|
||||||
|
--hash=sha256:7a66c7204d8869299919db4d5069a82f1561581af12b11b3c9f48c584eb8743d \
|
||||||
|
--hash=sha256:7cc09976e8b56f8cebd752f7113ad07752461f48a58cbba644139015ac24954c \
|
||||||
|
--hash=sha256:81afed14892743bbe14dacb9e36d9e0e504cd204e0b165062c488942b9718037 \
|
||||||
|
--hash=sha256:8941aaadaf67246224cee8c3803777eed332a19d909b47e29c9842ef1e79ac26 \
|
||||||
|
--hash=sha256:8ea985900c5c95ce9db1745f7933eeef5d314f0565b27625d9a10ec9881e1bfb \
|
||||||
|
--hash=sha256:8eca2a813c1cb7ad4fb74d368c2ffbbb4789d377ee5bb8df98373c2cc0dee76c \
|
||||||
|
--hash=sha256:92b68146a71df78564e4ef48af17551a5ddd142e5190cdf2c5624d0c3ff5b2e8 \
|
||||||
|
--hash=sha256:9332088d75dc3241c702d852d4671613136d90fa6881da7d770a483fd05248b4 \
|
||||||
|
--hash=sha256:94698a9c5f91f9d138526b48fe26a199609544591f859c870d477351dc7b2414 \
|
||||||
|
--hash=sha256:9a67fc9e8eb39039280526379fb3a70023d77caec1852002b4da7e8b270c4dd9 \
|
||||||
|
--hash=sha256:9de40a7b0323d889cf8d23d1ef214f565ab154443c42737dfe52ff82cf857664 \
|
||||||
|
--hash=sha256:a05d0c237b3349096d3981b727493e22147f934b20f6f125a3eba8f994bec4a9 \
|
||||||
|
--hash=sha256:afb8db5439b81cf9c9d0c80404b60c3cc9c3add93e114dcae767f1477cb53775 \
|
||||||
|
--hash=sha256:b18a3ed7d5b3bd8d9ef7a8cb226502c6bf8308df1525e1cc676c3680e7176739 \
|
||||||
|
--hash=sha256:b1e74d11748e7e98e2f426ab176d4ed720a64412b6a15054378afdb71e0f37dc \
|
||||||
|
--hash=sha256:b21e08af67b8a103c71a250401c78d5e0893beff75e28c53c98f4de42f774062 \
|
||||||
|
--hash=sha256:b4c854ef3adc177950a8dfc81a86f5115d2abd545751a304c5bcf2c2c7283cfe \
|
||||||
|
--hash=sha256:baf5215e0ab74c16e2dd324e8ec067ef59e41125d3eade2b863d294fd5035c92 \
|
||||||
|
--hash=sha256:c649e3a33450ec82378822b3dad03cc228b8f5963c0c12fc3b1e0ab940f768a5 \
|
||||||
|
--hash=sha256:c654de545946e0db659b3400168c9ad31b5d29593291482c43e3564effbcee13 \
|
||||||
|
--hash=sha256:c6638687455baf640e37344fe26d37c404db8b80d037c3d29f58fe8d1c3b194d \
|
||||||
|
--hash=sha256:c8d3b5532fc71b7a77c09192b4a5a200ea992702734a2e9279a37f2478236f26 \
|
||||||
|
--hash=sha256:cf364028c016c03078a23b503f02058f1814320a56ad535686f90565636a9495 \
|
||||||
|
--hash=sha256:d48a880098c96020b02d5a1f7d9251308510ce8858940e6fa99ece33f610838b \
|
||||||
|
--hash=sha256:d68b6cef7827e8641e8ef16f4494edda8b36104d79773a334beaa1e3521430f6 \
|
||||||
|
--hash=sha256:d9b29c1f0ae438d5ee9acb31cadee00a58c46cc9c0b2f9038c6b0b3470877a8c \
|
||||||
|
--hash=sha256:d9b97165e8aed9272a6bb17c01e3cc5871a594a446ebedc996e2397a1c1ea8ef \
|
||||||
|
--hash=sha256:da68248800ad6320861f129cd9c1bf96ca849a2771a59e0344e88681905916f5 \
|
||||||
|
--hash=sha256:da902562c3e9c550df360bfa53c035b2f241fed6d9aef119048073680ace4a18 \
|
||||||
|
--hash=sha256:dbd5c7a25a7cb98f5ca55d258b103a2054f859a46ae11aaf23134f9cc0d356ad \
|
||||||
|
--hash=sha256:dd4f05f54a52fb558f1ba9f528228066954fee3ebe629fc1660d874d040ae5a3 \
|
||||||
|
--hash=sha256:e11e82b744887154b182fd3e7e8512418446501191994dbf9c9fc1f32cc8efd5 \
|
||||||
|
--hash=sha256:f73b96c41e3b2adedc34a7356e64c8eb96e03a3782b535e043a986276ce12a49 \
|
||||||
|
--hash=sha256:f93fd8e5c8c0a4aa1f424d6173f14a892044054871c771f8566e4008eaa359d2 \
|
||||||
|
--hash=sha256:fc33c5141b55ed366cfaad382df24fe7dcbc686de5be719b207bb248e3053dc5 \
|
||||||
|
--hash=sha256:fc7de24befaeae77ba923797c7c87834c73648a05a4bde34b3b7e5588973a453
|
||||||
|
# via
|
||||||
|
# brotlicffi
|
||||||
|
# cryptography
|
||||||
|
# curl-cffi
|
||||||
|
charset-normalizer==3.4.6 \
|
||||||
|
--hash=sha256:06a7e86163334edfc5d20fe104db92fcd666e5a5df0977cb5680a506fe26cc8e \
|
||||||
|
--hash=sha256:0c173ce3a681f309f31b87125fecec7a5d1347261ea11ebbb856fa6006b23c8c \
|
||||||
|
--hash=sha256:0e28d62a8fc7a1fa411c43bd65e346f3bce9716dc51b897fbe930c5987b402d5 \
|
||||||
|
--hash=sha256:0e901eb1049fdb80f5bd11ed5ea1e498ec423102f7a9b9e4645d5b8204ff2815 \
|
||||||
|
--hash=sha256:11afb56037cbc4b1555a34dd69151e8e069bee82e613a73bef6e714ce733585f \
|
||||||
|
--hash=sha256:150b8ce8e830eb7ccb029ec9ca36022f756986aaaa7956aad6d9ec90089338c0 \
|
||||||
|
--hash=sha256:172985e4ff804a7ad08eebec0a1640ece87ba5041d565fff23c8f99c1f389484 \
|
||||||
|
--hash=sha256:197c1a244a274bb016dd8b79204850144ef77fe81c5b797dc389327adb552407 \
|
||||||
|
--hash=sha256:1ae6b62897110aa7c79ea2f5dd38d1abca6db663687c0b1ad9aed6f6bae3d9d6 \
|
||||||
|
--hash=sha256:22c6f0c2fbc31e76c3b8a86fba1a56eda6166e238c29cdd3d14befdb4a4e4815 \
|
||||||
|
--hash=sha256:231d4da14bcd9301310faf492051bee27df11f2bc7549bc0bb41fef11b82daa2 \
|
||||||
|
--hash=sha256:259695e2ccc253feb2a016303543d691825e920917e31f894ca1a687982b1de4 \
|
||||||
|
--hash=sha256:2a24157fa36980478dd1770b585c0f30d19e18f4fb0c47c13aa568f871718579 \
|
||||||
|
--hash=sha256:2b1a63e8224e401cafe7739f77efd3f9e7f5f2026bda4aead8e59afab537784f \
|
||||||
|
--hash=sha256:2e1d8ca8611099001949d1cdfaefc510cf0f212484fe7c565f735b68c78c3c95 \
|
||||||
|
--hash=sha256:2ef7fedc7a6ecbe99969cd09632516738a97eeb8bd7258bf8a0f23114c057dab \
|
||||||
|
--hash=sha256:30f445ae60aad5e1f8bdbb3108e39f6fbc09f4ea16c815c66578878325f8f15a \
|
||||||
|
--hash=sha256:34315ff4fc374b285ad7f4a0bf7dcbfe769e1b104230d40f49f700d4ab6bbd84 \
|
||||||
|
--hash=sha256:3778fd7d7cd04ae8f54651f4a7a0bd6e39a0cf20f801720a4c21d80e9b7ad6b0 \
|
||||||
|
--hash=sha256:39f5068d35621da2881271e5c3205125cc456f54e9030d3f723288c873a71bf9 \
|
||||||
|
--hash=sha256:404a1e552cf5b675a87f0651f8b79f5f1e6fd100ee88dc612f89aa16abd4486f \
|
||||||
|
--hash=sha256:419a9d91bd238052642a51938af8ac05da5b3343becde08d5cdeab9046df9ee1 \
|
||||||
|
--hash=sha256:423fb7e748a08f854a08a222b983f4df1912b1daedce51a72bd24fe8f26a1843 \
|
||||||
|
--hash=sha256:4482481cb0572180b6fd976a4d5c72a30263e98564da68b86ec91f0fe35e8565 \
|
||||||
|
--hash=sha256:47955475ac79cc504ef2704b192364e51d0d473ad452caedd0002605f780101c \
|
||||||
|
--hash=sha256:4be9f4830ba8741527693848403e2c457c16e499100963ec711b1c6f2049b7c7 \
|
||||||
|
--hash=sha256:51fb3c322c81d20567019778cb5a4a6f2dc1c200b886bc0d636238e364848c89 \
|
||||||
|
--hash=sha256:5273b9f0b5835ff0350c0828faea623c68bfa65b792720c453e22b25cc72930f \
|
||||||
|
--hash=sha256:530d548084c4a9f7a16ed4a294d459b4f229db50df689bfe92027452452943a0 \
|
||||||
|
--hash=sha256:530e8cebeea0d76bdcf93357aa5e41336f48c3dc709ac52da2bb167c5b8271d9 \
|
||||||
|
--hash=sha256:572d7c822caf521f0525ba1bce1a622a0b85cf47ffbdae6c9c19e3b5ac3c4389 \
|
||||||
|
--hash=sha256:58c948d0d086229efc484fe2f30c2d382c86720f55cd9bc33591774348ad44e0 \
|
||||||
|
--hash=sha256:5d11595abf8dd942a77883a39d81433739b287b6aa71620f15164f8096221b30 \
|
||||||
|
--hash=sha256:5f8ddd609f9e1af8c7bd6e2aca279c931aefecd148a14402d4e368f3171769fd \
|
||||||
|
--hash=sha256:5feb91325bbceade6afab43eb3b508c63ee53579fe896c77137ded51c6b6958e \
|
||||||
|
--hash=sha256:60c74963d8350241a79cb8feea80e54d518f72c26db618862a8f53e5023deaf9 \
|
||||||
|
--hash=sha256:613f19aa6e082cf96e17e3ffd89383343d0d589abda756b7764cf78361fd41dc \
|
||||||
|
--hash=sha256:695f5c2823691a25f17bc5d5ffe79fa90972cc34b002ac6c843bb8a1720e950d \
|
||||||
|
--hash=sha256:6cceb5473417d28edd20c6c984ab6fee6c6267d38d906823ebfe20b03d607dc2 \
|
||||||
|
--hash=sha256:74119174722c4349af9708993118581686f343adc1c8c9c007d59be90d077f3f \
|
||||||
|
--hash=sha256:74a2e659c7ecbc73562e2a15e05039f1e22c75b7c7618b4b574a3ea9118d1557 \
|
||||||
|
--hash=sha256:7504e9b7dc05f99a9bbb4525c67a2c155073b44d720470a148b34166a69c054e \
|
||||||
|
--hash=sha256:79090741d842f564b1b2827c0b82d846405b744d31e84f18d7a7b41c20e473ff \
|
||||||
|
--hash=sha256:7a6967aaf043bceabab5412ed6bd6bd26603dae84d5cb75bf8d9a74a4959d398 \
|
||||||
|
--hash=sha256:7bda6eebafd42133efdca535b04ccb338ab29467b3f7bf79569883676fc628db \
|
||||||
|
--hash=sha256:7edbed096e4a4798710ed6bc75dcaa2a21b68b6c356553ac4823c3658d53743a \
|
||||||
|
--hash=sha256:7f9019c9cb613f084481bd6a100b12e1547cf2efe362d873c2e31e4035a6fa43 \
|
||||||
|
--hash=sha256:80d0a5615143c0b3225e5e3ef22c8d5d51f3f72ce0ea6fb84c943546c7b25b6c \
|
||||||
|
--hash=sha256:82060f995ab5003a2d6e0f4ad29065b7672b6593c8c63559beefe5b443242c3e \
|
||||||
|
--hash=sha256:836ab36280f21fc1a03c99cd05c6b7af70d2697e374c7af0b61ed271401a72a2 \
|
||||||
|
--hash=sha256:87725cfb1a4f1f8c2fc9890ae2f42094120f4b44db9360be5d99a4c6b0e03a9e \
|
||||||
|
--hash=sha256:899d28f422116b08be5118ef350c292b36fc15ec2daeb9ea987c89281c7bb5c4 \
|
||||||
|
--hash=sha256:8bea55c4eef25b0b19a0337dc4e3f9a15b00d569c77211fa8cde38684f234fb7 \
|
||||||
|
--hash=sha256:8e5a94886bedca0f9b78fecd6afb6629142fd2605aa70a125d49f4edc6037ee6 \
|
||||||
|
--hash=sha256:90ca27cd8da8118b18a52d5f547859cc1f8354a00cd1e8e5120df3e30d6279e5 \
|
||||||
|
--hash=sha256:92734d4d8d187a354a556626c221cd1a892a4e0802ccb2af432a1d85ec012194 \
|
||||||
|
--hash=sha256:947cf925bc916d90adba35a64c82aace04fa39b46b52d4630ece166655905a69 \
|
||||||
|
--hash=sha256:95b52c68d64c1878818687a473a10547b3292e82b6f6fe483808fb1468e2f52f \
|
||||||
|
--hash=sha256:97d0235baafca5f2b09cf332cc275f021e694e8362c6bb9c96fc9a0eb74fc316 \
|
||||||
|
--hash=sha256:9ca4c0b502ab399ef89248a2c84c54954f77a070f28e546a85e91da627d1301e \
|
||||||
|
--hash=sha256:9cc4fc6c196d6a8b76629a70ddfcd4635a6898756e2d9cac5565cf0654605d73 \
|
||||||
|
--hash=sha256:9cc6e6d9e571d2f863fa77700701dae73ed5f78881efc8b3f9a4398772ff53e8 \
|
||||||
|
--hash=sha256:a056d1ad2633548ca18ffa2f85c202cfb48b68615129143915b8dc72a806a923 \
|
||||||
|
--hash=sha256:a26611d9987b230566f24a0a125f17fe0de6a6aff9f25c9f564aaa2721a5fb88 \
|
||||||
|
--hash=sha256:a4474d924a47185a06411e0064b803c68be044be2d60e50e8bddcc2649957c1f \
|
||||||
|
--hash=sha256:a4ea868bc28109052790eb2b52a9ab33f3aa7adc02f96673526ff47419490e21 \
|
||||||
|
--hash=sha256:a9e68c9d88823b274cf1e72f28cb5dc89c990edf430b0bfd3e2fb0785bfeabf4 \
|
||||||
|
--hash=sha256:aa9cccf4a44b9b62d8ba8b4dd06c649ba683e4bf04eea606d2e94cfc2d6ff4d6 \
|
||||||
|
--hash=sha256:ac2393c73378fea4e52aa56285a3d64be50f1a12395afef9cce47772f60334c2 \
|
||||||
|
--hash=sha256:ad8faf8df23f0378c6d527d8b0b15ea4a2e23c89376877c598c4870d1b2c7866 \
|
||||||
|
--hash=sha256:b35b200d6a71b9839a46b9b7fff66b6638bb52fc9658aa58796b0326595d3021 \
|
||||||
|
--hash=sha256:b3694e3f87f8ac7ce279d4355645b3c878d24d1424581b46282f24b92f5a4ae2 \
|
||||||
|
--hash=sha256:b4ff1d35e8c5bd078be89349b6f3a845128e685e751b6ea1169cf2160b344c4d \
|
||||||
|
--hash=sha256:bbc8c8650c6e51041ad1be191742b8b421d05bbd3410f43fa2a00c8db87678e8 \
|
||||||
|
--hash=sha256:bc72863f4d9aba2e8fd9085e63548a324ba706d2ea2c83b260da08a59b9482de \
|
||||||
|
--hash=sha256:c2274ca724536f173122f36c98ce188fd24ce3dad886ec2b7af859518ce008a4 \
|
||||||
|
--hash=sha256:c8ae56368f8cc97c7e40a7ee18e1cedaf8e780cd8bc5ed5ac8b81f238614facb \
|
||||||
|
--hash=sha256:c907cdc8109f6c619e6254212e794d6548373cc40e1ec75e6e3823d9135d29cc \
|
||||||
|
--hash=sha256:ca0276464d148c72defa8bb4390cce01b4a0e425f3b50d1435aa6d7a18107602 \
|
||||||
|
--hash=sha256:cd5e2801c89992ed8c0a3f0293ae83c159a60d9a5d685005383ef4caca77f2c4 \
|
||||||
|
--hash=sha256:d60377dce4511655582e300dc1e5a5f24ba0cb229005a1d5c8d0cb72bb758ab8 \
|
||||||
|
--hash=sha256:d73beaac5e90173ac3deb9928a74763a6d230f494e4bfb422c217a0ad8e629bf \
|
||||||
|
--hash=sha256:d7de2637729c67d67cf87614b566626057e95c303bc0a55ffe391f5205e7003d \
|
||||||
|
--hash=sha256:dad6e0f2e481fffdcf776d10ebee25e0ef89f16d691f1e5dee4b586375fdc64b \
|
||||||
|
--hash=sha256:dda86aba335c902b6149a02a55b38e96287157e609200811837678214ba2b1db \
|
||||||
|
--hash=sha256:e1f6e2f00a6b8edb562826e4632e26d063ac10307e80f7461f7de3ad8ef3f077 \
|
||||||
|
--hash=sha256:e25369dc110d58ddf29b949377a93e0716d72a24f62bad72b2b39f155949c1fd \
|
||||||
|
--hash=sha256:e3c701e954abf6fc03a49f7c579cc80c2c6cc52525340ca3186c41d3f33482ef \
|
||||||
|
--hash=sha256:e5bcc1a1ae744e0bb59641171ae53743760130600da8db48cbb6e4918e186e4e \
|
||||||
|
--hash=sha256:e68c14b04827dd76dcbd1aeea9e604e3e4b78322d8faf2f8132c7138efa340a8 \
|
||||||
|
--hash=sha256:e985a16ff513596f217cee86c21371b8cd011c0f6f056d0920aa2d926c544058 \
|
||||||
|
--hash=sha256:ef5960d965e67165d75b7c7ffc60a83ec5abfc5c11b764ec13ea54fbef8b4421 \
|
||||||
|
--hash=sha256:f0cdaecd4c953bfae0b6bb64910aaaca5a424ad9c72d85cb88417bb9814f7550 \
|
||||||
|
--hash=sha256:f1ce721c8a7dfec21fcbdfe04e8f68174183cf4e8188e0645e92aa23985c57ff \
|
||||||
|
--hash=sha256:f5ea69428fa1b49573eef0cc44a1d43bebd45ad0c611eb7d7eac760c7ae771bc \
|
||||||
|
--hash=sha256:f6e4333fb15c83f7d1482a76d45a0818897b3d33f00efd215528ff7c51b8e35d \
|
||||||
|
--hash=sha256:f820f24b09e3e779fe84c3c456cb4108a7aa639b0d1f02c28046e11bfcd088ed \
|
||||||
|
--hash=sha256:fcce033e4021347d80ed9c66dcf1e7b1546319834b74445f561d2e2221de5659
|
||||||
|
# via requests
|
||||||
|
cryptography==46.0.6 \
|
||||||
|
--hash=sha256:02fad249cb0e090b574e30b276a3da6a149e04ee2f049725b1f69e7b8351ec70 \
|
||||||
|
--hash=sha256:063b67749f338ca9c5a0b7fe438a52c25f9526b851e24e6c9310e7195aad3b4d \
|
||||||
|
--hash=sha256:12cae594e9473bca1a7aceb90536060643128bb274fcea0fc459ab90f7d1ae7a \
|
||||||
|
--hash=sha256:12f0fa16cc247b13c43d56d7b35287ff1569b5b1f4c5e87e92cc4fcc00cd10c0 \
|
||||||
|
--hash=sha256:22259338084d6ae497a19bae5d4c66b7ca1387d3264d1c2c0e72d9e9b6a77b97 \
|
||||||
|
--hash=sha256:26031f1e5ca62fcb9d1fcb34b2b60b390d1aacaa15dc8b895a9ed00968b97b30 \
|
||||||
|
--hash=sha256:27550628a518c5c6c903d84f637fbecf287f6cb9ced3804838a1295dc1fd0759 \
|
||||||
|
--hash=sha256:2b417edbe8877cda9022dde3a008e2deb50be9c407eef034aeeb3a8b11d9db3c \
|
||||||
|
--hash=sha256:2ea0f37e9a9cf0df2952893ad145fd9627d326a59daec9b0802480fa3bcd2ead \
|
||||||
|
--hash=sha256:2ef9e69886cbb137c2aef9772c2e7138dc581fad4fcbcf13cc181eb5a3ab6275 \
|
||||||
|
--hash=sha256:341359d6c9e68834e204ceaf25936dffeafea3829ab80e9503860dcc4f4dac58 \
|
||||||
|
--hash=sha256:380343e0653b1c9d7e1f55b52aaa2dbb2fdf2730088d48c43ca1c7c0abb7cc2f \
|
||||||
|
--hash=sha256:3c21d92ed15e9cfc6eb64c1f5a0326db22ca9c2566ca46d845119b45b4400361 \
|
||||||
|
--hash=sha256:3dfa6567f2e9e4c5dceb8ccb5a708158a2a871052fa75c8b78cb0977063f1507 \
|
||||||
|
--hash=sha256:456b3215172aeefb9284550b162801d62f5f264a081049a3e94307fe20792cfa \
|
||||||
|
--hash=sha256:4668298aef7cddeaf5c6ecc244c2302a2b8e40f384255505c22875eebb47888b \
|
||||||
|
--hash=sha256:50575a76e2951fe7dbd1f56d181f8c5ceeeb075e9ff88e7ad997d2f42af06e7b \
|
||||||
|
--hash=sha256:639301950939d844a9e1c4464d7e07f902fe9a7f6b215bb0d4f28584729935d8 \
|
||||||
|
--hash=sha256:64235194bad039a10bb6d2d930ab3323baaec67e2ce36215fd0952fad0930ca8 \
|
||||||
|
--hash=sha256:6617f67b1606dfd9fe4dbfa354a9508d4a6d37afe30306fe6c101b7ce3274b72 \
|
||||||
|
--hash=sha256:67177e8a9f421aa2d3a170c3e56eca4e0128883cf52a071a7cbf53297f18b175 \
|
||||||
|
--hash=sha256:6728c49e3b2c180ef26f8e9f0a883a2c585638db64cf265b49c9ba10652d430e \
|
||||||
|
--hash=sha256:6739d56300662c468fddb0e5e291f9b4d084bead381667b9e654c7dd81705124 \
|
||||||
|
--hash=sha256:69cf0056d6947edc6e6760e5f17afe4bea06b56a9ac8a06de9d2bd6b532d4f3a \
|
||||||
|
--hash=sha256:760997a4b950ff00d418398ad73fbc91aa2894b5c1db7ccb45b4f68b42a63b3c \
|
||||||
|
--hash=sha256:79e865c642cfc5c0b3eb12af83c35c5aeff4fa5c672dc28c43721c2c9fdd2f0f \
|
||||||
|
--hash=sha256:7e6142674f2a9291463e5e150090b95a8519b2fb6e6aaec8917dd8d094ce750d \
|
||||||
|
--hash=sha256:7f417f034f91dcec1cb6c5c35b07cdbb2ef262557f701b4ecd803ee8cefed4f4 \
|
||||||
|
--hash=sha256:7f6690b6c55e9c5332c0b59b9c8a3fb232ebf059094c17f9019a51e9827df91c \
|
||||||
|
--hash=sha256:8927ccfbe967c7df312ade694f987e7e9e22b2425976ddbf28271d7e58845290 \
|
||||||
|
--hash=sha256:8ce35b77aaf02f3b59c90b2c8a05c73bac12cea5b4e8f3fbece1f5fddea5f0ca \
|
||||||
|
--hash=sha256:8e7304c4f4e9490e11efe56af6713983460ee0780f16c63f219984dab3af9d2d \
|
||||||
|
--hash=sha256:90e5f0a7b3be5f40c3a0a0eafb32c681d8d2c181fc2a1bdabe9b3f611d9f6b1a \
|
||||||
|
--hash=sha256:97c8115b27e19e592a05c45d0dd89c57f81f841cc9880e353e0d3bf25b2139ed \
|
||||||
|
--hash=sha256:9a693028b9cbe51b5a1136232ee8f2bc242e4e19d456ded3fa7c86e43c713b4a \
|
||||||
|
--hash=sha256:9a9c42a2723999a710445bc0d974e345c32adfd8d2fac6d8a251fa829ad31cfb \
|
||||||
|
--hash=sha256:a3e84d5ec9ba01f8fd03802b2147ba77f0c8f2617b2aff254cedd551844209c8 \
|
||||||
|
--hash=sha256:aad75154a7ac9039936d50cf431719a2f8d4ed3d3c277ac03f3339ded1a5e707 \
|
||||||
|
--hash=sha256:b12c6b1e1651e42ab5de8b1e00dc3b6354fdfd778e7fa60541ddacc27cd21410 \
|
||||||
|
--hash=sha256:b928a3ca837c77a10e81a814a693f2295200adb3352395fad024559b7be7a736 \
|
||||||
|
--hash=sha256:bcb87663e1f7b075e48c3be3ecb5f0b46c8fc50b50a97cf264e7f60242dca3f2 \
|
||||||
|
--hash=sha256:c797e2517cb7880f8297e2c0f43bb910e91381339336f75d2c1c2cbf811b70b4 \
|
||||||
|
--hash=sha256:c89eb37fae9216985d8734c1afd172ba4927f5a05cfd9bf0e4863c6d5465b013 \
|
||||||
|
--hash=sha256:cdcd3edcbc5d55757e5f5f3d330dd00007ae463a7e7aa5bf132d1f22a4b62b19 \
|
||||||
|
--hash=sha256:d24c13369e856b94892a89ddf70b332e0b70ad4a5c43cf3e9cb71d6d7ffa1f7b \
|
||||||
|
--hash=sha256:d4e4aadb7fc1f88687f47ca20bb7227981b03afaae69287029da08096853b738 \
|
||||||
|
--hash=sha256:d9528b535a6c4f8ff37847144b8986a9a143585f0540fbcb1a98115b543aa463 \
|
||||||
|
--hash=sha256:ed3775295fb91f70b4027aeba878d79b3e55c0b3e97eaa4de71f8f23a9f2eb77 \
|
||||||
|
--hash=sha256:ed418c37d095aeddf5336898a132fba01091f0ac5844e3e8018506f014b6d2c4
|
||||||
|
# via secretstorage
|
||||||
|
curl-cffi==0.15.0 ; implementation_name == 'cpython' \
|
||||||
|
--hash=sha256:08c799b89740b9bc49c09fbc3d5907f13ac1f845ca52620507ef9466d4639dd5 \
|
||||||
|
--hash=sha256:0b6c0543b993996670e9e4b78e305a2d60809d5681903ffb5568e21a387434d3 \
|
||||||
|
--hash=sha256:1977e1e12cfb5c11352cbb74acef1bed24eb7d226dab61ca57c168c21acd4d61 \
|
||||||
|
--hash=sha256:2b6c847d86283b07ae69bb72c82eb8a59242277142aa35b89850f89e792a02fc \
|
||||||
|
--hash=sha256:408d6f14e346841cd889c2e0962832bb235ba3b6749ebf609f347f747da5e60f \
|
||||||
|
--hash=sha256:41f80170ba844009273b2660da1964ec31e99e5719d16b3422ada87177e32e13 \
|
||||||
|
--hash=sha256:4682dc38d4336e0eb0b185374db90a760efde63cbea994b4e63f3521d44c4c92 \
|
||||||
|
--hash=sha256:582e570aa2586b96ed47cf4a17586b9a3c462cbe43f780487c3dc245c6ef1527 \
|
||||||
|
--hash=sha256:5a0c1896a0d5a5ac1eb89cd24b008d2b718dd1df6fd2f75451b59ca66e49e572 \
|
||||||
|
--hash=sha256:7b7a92767a888ee90147e18964b396d8435ff42737030d6fb00824ffd6094805 \
|
||||||
|
--hash=sha256:7e63539d0d839d0a8c5eacf86229bc68c57803547f35e0db7ee0986328b478c3 \
|
||||||
|
--hash=sha256:829cc357061ecb99cc2d406301f609a039e05665322f5c025ec67c38b0dc49ce \
|
||||||
|
--hash=sha256:838e48212447d9c81364b04707a5c861daf08f8320f9ecb3406a8919d1d5c3b3 \
|
||||||
|
--hash=sha256:967ad7355bd8e9586f8c2d02eaa99953747549e7ea4a9b25cd53353e6b67fe6d \
|
||||||
|
--hash=sha256:9e5e69eee735f659287e2c84444319d68a1fa68dd37abf228943a4074864283a \
|
||||||
|
--hash=sha256:a25620d9bf989c9c029a7d1642999c4c265abb0bad811deb2f77b0b5b2b12e5b \
|
||||||
|
--hash=sha256:a6d57f8389273a3a1f94370473c74897467bcc36af0a17336989780c507fa43d \
|
||||||
|
--hash=sha256:aa1323950224db24f4c510d010b3affa02196ca853fb424191fa917a513d3f4b \
|
||||||
|
--hash=sha256:b624c7ce087bfda967a013ed0a64702a525444e5b6e97d23534d567ccc6525aa \
|
||||||
|
--hash=sha256:bda66404010e9ed743b1b83c20c86f24fe21a9a6873e17479d6e67e29d8ded28 \
|
||||||
|
--hash=sha256:ea0c67652bf6893d34ee0f82c944f37e488f6147e9421bef1771cc6545b02ded
|
||||||
|
# via yt-dlp
|
||||||
|
idna==3.11 \
|
||||||
|
--hash=sha256:771a87f49d9defaf64091e6e6fe9c18d4833f140bd19464795bc32d966ca37ea \
|
||||||
|
--hash=sha256:795dafcc9c04ed0c1fb032c2aa73654d8e8c5023a7df64a53f39190ada629902
|
||||||
|
# via requests
|
||||||
|
jeepney==0.9.0 \
|
||||||
|
--hash=sha256:97e5714520c16fc0a45695e5365a2e11b81ea79bba796e26f9f1d178cb182683 \
|
||||||
|
--hash=sha256:cf0e9e845622b81e4a28df94c40345400256ec608d0e55bb8a3feaa9163f5732
|
||||||
|
# via secretstorage
|
||||||
|
macholib==1.16.4 ; sys_platform == 'darwin' \
|
||||||
|
--hash=sha256:da1a3fa8266e30f0ce7e97c6a54eefaae8edd1e5f86f3eb8b95457cae90265ea \
|
||||||
|
--hash=sha256:f408c93ab2e995cd2c46e34fe328b130404be143469e41bc366c807448979362
|
||||||
|
# via pyinstaller
|
||||||
|
markdown-it-py==4.0.0 ; implementation_name == 'cpython' \
|
||||||
|
--hash=sha256:87327c59b172c5011896038353a81343b6754500a08cd7a4973bb48c6d578147 \
|
||||||
|
--hash=sha256:cb0a2b4aa34f932c007117b194e945bd74e0ec24133ceb5bac59009cda1cb9f3
|
||||||
|
# via rich
|
||||||
|
mdurl==0.1.2 ; implementation_name == 'cpython' \
|
||||||
|
--hash=sha256:84008a41e51615a49fc9966191ff91509e3c40b939176e643fd50a5c2196b8f8 \
|
||||||
|
--hash=sha256:bb413d29f5eea38f31dd4754dd7377d4465116fb207585f97bf925588687c1ba
|
||||||
|
# via markdown-it-py
|
||||||
|
mutagen==1.47.0 \
|
||||||
|
--hash=sha256:719fadef0a978c31b4cf3c956261b3c58b6948b32023078a2117b1de09f0fc99 \
|
||||||
|
--hash=sha256:edd96f50c5907a9539d8e5bba7245f62c9f520aef333d13392a79a4f70aca719
|
||||||
|
# via yt-dlp
|
||||||
|
packaging==26.0 \
|
||||||
|
--hash=sha256:00243ae351a257117b6a241061796684b084ed1c516a08c48a3f7e147a9d80b4 \
|
||||||
|
--hash=sha256:b36f1fef9334a5588b4166f8bcd26a14e521f2b55e6b9de3aaa80d3ff7a37529
|
||||||
|
# via
|
||||||
|
# pyinstaller
|
||||||
|
# pyinstaller-hooks-contrib
|
||||||
|
pefile==2024.8.26 ; sys_platform == 'win32' \
|
||||||
|
--hash=sha256:3ff6c5d8b43e8c37bb6e6dd5085658d658a7a0bdcd20b6a07b1fcfc1c4e9d632 \
|
||||||
|
--hash=sha256:76f8b485dcd3b1bb8166f1128d395fa3d87af26360c2358fb75b80019b957c6f
|
||||||
|
# via pyinstaller
|
||||||
|
pycparser==3.0 ; implementation_name != 'PyPy' \
|
||||||
|
--hash=sha256:600f49d217304a5902ac3c37e1281c9fe94e4d0489de643a9504c5cdfdfc6b29 \
|
||||||
|
--hash=sha256:b727414169a36b7d524c1c3e31839a521725078d7b2ff038656844266160a992
|
||||||
|
# via cffi
|
||||||
|
pycryptodomex==3.23.0 \
|
||||||
|
--hash=sha256:02d87b80778c171445d67e23d1caef279bf4b25c3597050ccd2e13970b57fd51 \
|
||||||
|
--hash=sha256:06698f957fe1ab229a99ba2defeeae1c09af185baa909a31a5d1f9d42b1aaed6 \
|
||||||
|
--hash=sha256:14c37aaece158d0ace436f76a7bb19093db3b4deade9797abfc39ec6cd6cc2fe \
|
||||||
|
--hash=sha256:189afbc87f0b9f158386bf051f720e20fa6145975f1e76369303d0f31d1a8d7c \
|
||||||
|
--hash=sha256:43c446e2ba8df8889e0e16f02211c25b4934898384c1ec1ec04d7889c0333587 \
|
||||||
|
--hash=sha256:4f2596e643d4365e14d0879dc5aafe6355616c61c2176009270f3048f6d9a61f \
|
||||||
|
--hash=sha256:52e5ca58c3a0b0bd5e100a9fbc8015059b05cffc6c66ce9d98b4b45e023443b9 \
|
||||||
|
--hash=sha256:55ccbe27f049743a4caf4f4221b166560d3438d0b1e5ab929e07ae1702a4d6fd \
|
||||||
|
--hash=sha256:58b851b9effd0d072d4ca2e4542bf2a4abcf13c82a29fd2c93ce27ee2a2e9462 \
|
||||||
|
--hash=sha256:6b8962204c47464d5c1c4038abeadd4514a133b28748bcd9fa5b6d62e3cec6fa \
|
||||||
|
--hash=sha256:6bbcb1dd0f646484939e142462d9e532482bc74475cecf9c4903d4e1cd21f003 \
|
||||||
|
--hash=sha256:71909758f010c82bc99b0abf4ea12012c98962fbf0583c2164f8b84533c2e4da \
|
||||||
|
--hash=sha256:7b37e08e3871efe2187bc1fd9320cc81d87caf19816c648f24443483005ff886 \
|
||||||
|
--hash=sha256:8a4fcd42ccb04c31268d1efeecfccfd1249612b4de6374205376b8f280321744 \
|
||||||
|
--hash=sha256:91979028227543010d7b2ba2471cf1d1e398b3f183cb105ac584df0c36dac28d \
|
||||||
|
--hash=sha256:a33986a0066860f7fcf7c7bd2bc804fa90e434183645595ae7b33d01f3c91ed8 \
|
||||||
|
--hash=sha256:a9d446e844f08299236780f2efa9898c818fe7e02f17263866b8550c7d5fb328 \
|
||||||
|
--hash=sha256:b2c2537863eccef2d41061e82a881dcabb04944c5c06c5aa7110b577cc487545 \
|
||||||
|
--hash=sha256:bc65bdd9fc8de7a35a74cab1c898cab391a4add33a8fe740bda00f5976ca4708 \
|
||||||
|
--hash=sha256:bdc69d0d3d989a1029df0eed67cc5e8e5d968f3724f4519bd03e0ec68df7543c \
|
||||||
|
--hash=sha256:c25e30a20e1b426e1f0fa00131c516f16e474204eee1139d1603e132acffc314 \
|
||||||
|
--hash=sha256:c7947ab8d589e3178da3d7cdeabe14f841b391e17046954f2fbcd941705762b5 \
|
||||||
|
--hash=sha256:c885da45e70139464f082018ac527fdaad26f1657a99ee13eecdce0f0ca24ab4 \
|
||||||
|
--hash=sha256:da4fa650cef02db88c2b98acc5434461e027dce0ae8c22dd5a69013eaf510006 \
|
||||||
|
--hash=sha256:ebfff755c360d674306e5891c564a274a47953562b42fb74a5c25b8fc1fb1cb5 \
|
||||||
|
--hash=sha256:eca54f4bb349d45afc17e3011ed4264ef1cc9e266699874cdd1349c504e64798 \
|
||||||
|
--hash=sha256:f489c4765093fb60e2edafdf223397bc716491b2b69fe74367b70d6999257a5c \
|
||||||
|
--hash=sha256:fdfac7cda115bca3a5abb2f9e43bc2fb66c2b65ab074913643803ca7083a79ea
|
||||||
|
# via yt-dlp
|
||||||
|
pygments==2.19.2 ; implementation_name == 'cpython' \
|
||||||
|
--hash=sha256:636cb2477cec7f8952536970bc533bc43743542f70392ae026374600add5b887 \
|
||||||
|
--hash=sha256:86540386c03d588bb81d44bc3928634ff26449851e99741617ecb9037ee5ec0b
|
||||||
|
# via rich
|
||||||
|
pyinstaller==6.19.0 \
|
||||||
|
--hash=sha256:1ec54ef967996ca61dacba676227e2b23219878ccce5ee9d6f3aada7b8ed8abf \
|
||||||
|
--hash=sha256:3c5c251054fe4cfaa04c34a363dcfbf811545438cb7198304cd444756bc2edd2 \
|
||||||
|
--hash=sha256:4190e76b74f0c4b5c5f11ac360928cd2e36ec8e3194d437bf6b8648c7bc0c134 \
|
||||||
|
--hash=sha256:481a909c8e60c8692fc60fcb1344d984b44b943f8bc9682f2fcdae305ad297e6 \
|
||||||
|
--hash=sha256:4ab2bb52e58448e14ddf9450601bdedd66800465043501c1d8f1cab87b60b122 \
|
||||||
|
--hash=sha256:8bd68abd812d8a6ba33b9f1810e91fee0f325969733721b78151f0065319ca11 \
|
||||||
|
--hash=sha256:a0fc5f6b3c55aa54353f0c74ffa59b1115433c1850c6f655d62b461a2ed6cbbe \
|
||||||
|
--hash=sha256:b5bb6536c6560330d364d91522250f254b107cf69129d9cbcd0e6727c570be33 \
|
||||||
|
--hash=sha256:c2d5a539b0bfe6159d5522c8c70e1c0e487f22c2badae0f97d45246223b798ea \
|
||||||
|
--hash=sha256:da6d5c6391ccefe73554b9fa29b86001c8e378e0f20c2a4004f836ba537eff63 \
|
||||||
|
--hash=sha256:e649ba6bd1b0b89b210ad92adb5fbdc8a42dd2c5ca4f72ef3a0bfec83a424b83 \
|
||||||
|
--hash=sha256:ec73aeb8bd9b7f2f1240d328a4542e90b3c6e6fbc106014778431c616592a865
|
||||||
|
pyinstaller-hooks-contrib==2026.3 \
|
||||||
|
--hash=sha256:5ecd1068ad262afecadf07556279d2be52ca93a88b049fae17f1a2eb2969254a \
|
||||||
|
--hash=sha256:800d3a198a49a6cd0de2d7fb795005fdca7a0222ed9cb47c0691abd1c27b9310
|
||||||
|
# via pyinstaller
|
||||||
|
pywin32-ctypes==0.2.3 ; sys_platform == 'win32' \
|
||||||
|
--hash=sha256:8a1513379d709975552d202d942d9837758905c8d01eb82b8bcc30918929e7b8 \
|
||||||
|
--hash=sha256:d162dc04946d704503b2edc4d55f3dba5c1d539ead017afa00142c38b9885755
|
||||||
|
# via pyinstaller
|
||||||
|
requests==2.33.0 \
|
||||||
|
--hash=sha256:3324635456fa185245e24865e810cecec7b4caf933d7eb133dcde67d48cee69b \
|
||||||
|
--hash=sha256:c7ebc5e8b0f21837386ad0e1c8fe8b829fa5f544d8df3b2253bff14ef29d7652
|
||||||
|
# via yt-dlp
|
||||||
|
rich==14.3.3 ; implementation_name == 'cpython' \
|
||||||
|
--hash=sha256:793431c1f8619afa7d3b52b2cdec859562b950ea0d4b6b505397612db8d5362d \
|
||||||
|
--hash=sha256:b8daa0b9e4eef54dd8cf7c86c03713f53241884e814f4e2f5fb342fe520f639b
|
||||||
|
# via curl-cffi
|
||||||
|
secretstorage==3.5.0 \
|
||||||
|
--hash=sha256:0ce65888c0725fcb2c5bc0fdb8e5438eece02c523557ea40ce0703c266248137 \
|
||||||
|
--hash=sha256:f04b8e4689cbce351744d5537bf6b1329c6fc68f91fa666f60a380edddcd11be
|
||||||
|
# via yt-dlp
|
||||||
|
setuptools==82.0.1 \
|
||||||
|
--hash=sha256:7d872682c5d01cfde07da7bccc7b65469d3dca203318515ada1de5eda35efbf9 \
|
||||||
|
--hash=sha256:a59e362652f08dcd477c78bb6e7bd9d80a7995bc73ce773050228a348ce2e5bb
|
||||||
|
# via
|
||||||
|
# pyinstaller
|
||||||
|
# pyinstaller-hooks-contrib
|
||||||
|
typing-extensions==4.15.0 ; python_full_version < '3.11' \
|
||||||
|
--hash=sha256:0cea48d173cc12fa28ecabc3b837ea3cf6f38c6d1136f85cbaaf598984861466 \
|
||||||
|
--hash=sha256:f0fa19c6845758ab08074a0cfa8b7aecb71c999ca73d62883bc25cc018c4e548
|
||||||
|
# via cryptography
|
||||||
|
urllib3==2.6.3 \
|
||||||
|
--hash=sha256:1b62b6884944a57dbe321509ab94fd4d3b307075e0c2eae991ac71ee15ad38ed \
|
||||||
|
--hash=sha256:bf272323e553dfb2e87d9bfd225ca7b0f467b919d7bbd355436d3fd37cb0acd4
|
||||||
|
# via
|
||||||
|
# requests
|
||||||
|
# yt-dlp
|
||||||
|
websockets==16.0 \
|
||||||
|
--hash=sha256:0298d07ee155e2e9fda5be8a9042200dd2e3bb0b8a38482156576f863a9d457c \
|
||||||
|
--hash=sha256:04cdd5d2d1dacbad0a7bf36ccbcd3ccd5a30ee188f2560b7a62a30d14107b31a \
|
||||||
|
--hash=sha256:08d7af67b64d29823fed316505a89b86705f2b7981c07848fb5e3ea3020c1abe \
|
||||||
|
--hash=sha256:152284a83a00c59b759697b7f9e9cddf4e3c7861dd0d964b472b70f78f89e80e \
|
||||||
|
--hash=sha256:1637db62fad1dc833276dded54215f2c7fa46912301a24bd94d45d46a011ceec \
|
||||||
|
--hash=sha256:19c4dc84098e523fd63711e563077d39e90ec6702aff4b5d9e344a60cb3c0cb1 \
|
||||||
|
--hash=sha256:1c1b30e4f497b0b354057f3467f56244c603a79c0d1dafce1d16c283c25f6e64 \
|
||||||
|
--hash=sha256:2b9f1e0d69bc60a4a87349d50c09a037a2607918746f07de04df9e43252c77a3 \
|
||||||
|
--hash=sha256:31a52addea25187bde0797a97d6fc3d2f92b6f72a9370792d65a6e84615ac8a8 \
|
||||||
|
--hash=sha256:32da954ffa2814258030e5a57bc73a3635463238e797c7375dc8091327434206 \
|
||||||
|
--hash=sha256:335c23addf3d5e6a8633f9f8eda77efad001671e80b95c491dd0924587ece0b3 \
|
||||||
|
--hash=sha256:3425ac5cf448801335d6fdc7ae1eb22072055417a96cc6b31b3861f455fbc156 \
|
||||||
|
--hash=sha256:349f83cd6c9a415428ee1005cadb5c2c56f4389bc06a9af16103c3bc3dcc8b7d \
|
||||||
|
--hash=sha256:37b31c1623c6605e4c00d466c9d633f9b812ea430c11c8a278774a1fde1acfa9 \
|
||||||
|
--hash=sha256:417b28978cdccab24f46400586d128366313e8a96312e4b9362a4af504f3bbad \
|
||||||
|
--hash=sha256:485c49116d0af10ac698623c513c1cc01c9446c058a4e61e3bf6c19dff7335a2 \
|
||||||
|
--hash=sha256:4a1aba3340a8dca8db6eb5a7986157f52eb9e436b74813764241981ca4888f03 \
|
||||||
|
--hash=sha256:50f23cdd8343b984957e4077839841146f67a3d31ab0d00e6b824e74c5b2f6e8 \
|
||||||
|
--hash=sha256:52a0fec0e6c8d9a784c2c78276a48a2bdf099e4ccc2a4cad53b27718dbfd0230 \
|
||||||
|
--hash=sha256:52ac480f44d32970d66763115edea932f1c5b1312de36df06d6b219f6741eed8 \
|
||||||
|
--hash=sha256:5569417dc80977fc8c2d43a86f78e0a5a22fee17565d78621b6bb264a115d4ea \
|
||||||
|
--hash=sha256:569d01a4e7fba956c5ae4fc988f0d4e187900f5497ce46339c996dbf24f17641 \
|
||||||
|
--hash=sha256:583b7c42688636f930688d712885cf1531326ee05effd982028212ccc13e5957 \
|
||||||
|
--hash=sha256:5a4b4cc550cb665dd8a47f868c8d04c8230f857363ad3c9caf7a0c3bf8c61ca6 \
|
||||||
|
--hash=sha256:5f451484aeb5cafee1ccf789b1b66f535409d038c56966d6101740c1614b86c6 \
|
||||||
|
--hash=sha256:5f6261a5e56e8d5c42a4497b364ea24d94d9563e8fbd44e78ac40879c60179b5 \
|
||||||
|
--hash=sha256:6e5a82b677f8f6f59e8dfc34ec06ca6b5b48bc4fcda346acd093694cc2c24d8f \
|
||||||
|
--hash=sha256:71c989cbf3254fbd5e84d3bff31e4da39c43f884e64f2551d14bb3c186230f00 \
|
||||||
|
--hash=sha256:781caf5e8eee67f663126490c2f96f40906594cb86b408a703630f95550a8c3e \
|
||||||
|
--hash=sha256:7be95cfb0a4dae143eaed2bcba8ac23f4892d8971311f1b06f3c6b78952ee70b \
|
||||||
|
--hash=sha256:7d837379b647c0c4c2355c2499723f82f1635fd2c26510e1f587d89bc2199e72 \
|
||||||
|
--hash=sha256:86890e837d61574c92a97496d590968b23c2ef0aeb8a9bc9421d174cd378ae39 \
|
||||||
|
--hash=sha256:878b336ac47938b474c8f982ac2f7266a540adc3fa4ad74ae96fea9823a02cc9 \
|
||||||
|
--hash=sha256:8b6e209ffee39ff1b6d0fa7bfef6de950c60dfb91b8fcead17da4ee539121a79 \
|
||||||
|
--hash=sha256:8cc451a50f2aee53042ac52d2d053d08bf89bcb31ae799cb4487587661c038a0 \
|
||||||
|
--hash=sha256:8d7f0659570eefb578dacde98e24fb60af35350193e4f56e11190787bee77dac \
|
||||||
|
--hash=sha256:8e1dab317b6e77424356e11e99a432b7cb2f3ec8c5ab4dabbcee6add48f72b35 \
|
||||||
|
--hash=sha256:8ff32bb86522a9e5e31439a58addbb0166f0204d64066fb955265c4e214160f0 \
|
||||||
|
--hash=sha256:95724e638f0f9c350bb1c2b0a7ad0e83d9cc0c9259f3ea94e40d7b02a2179ae5 \
|
||||||
|
--hash=sha256:9b5aca38b67492ef518a8ab76851862488a478602229112c4b0d58d63a7a4d5c \
|
||||||
|
--hash=sha256:a069d734c4a043182729edd3e9f247c3b2a4035415a9172fd0f1b71658a320a8 \
|
||||||
|
--hash=sha256:a0b31e0b424cc6b5a04b8838bbaec1688834b2383256688cf47eb97412531da1 \
|
||||||
|
--hash=sha256:a35539cacc3febb22b8f4d4a99cc79b104226a756aa7400adc722e83b0d03244 \
|
||||||
|
--hash=sha256:a5e18a238a2b2249c9a9235466b90e96ae4795672598a58772dd806edc7ac6d3 \
|
||||||
|
--hash=sha256:a653aea902e0324b52f1613332ddf50b00c06fdaf7e92624fbf8c77c78fa5767 \
|
||||||
|
--hash=sha256:abf050a199613f64c886ea10f38b47770a65154dc37181bfaff70c160f45315a \
|
||||||
|
--hash=sha256:af80d74d4edfa3cb9ed973a0a5ba2b2a549371f8a741e0800cb07becdd20f23d \
|
||||||
|
--hash=sha256:b14dc141ed6d2dde437cddb216004bcac6a1df0935d79656387bd41632ba0bbd \
|
||||||
|
--hash=sha256:b784ca5de850f4ce93ec85d3269d24d4c82f22b7212023c974c401d4980ebc5e \
|
||||||
|
--hash=sha256:bc59589ab64b0022385f429b94697348a6a234e8ce22544e3681b2e9331b5944 \
|
||||||
|
--hash=sha256:c0204dc62a89dc9d50d682412c10b3542d748260d743500a85c13cd1ee4bde82 \
|
||||||
|
--hash=sha256:c0ee0e63f23914732c6d7e0cce24915c48f3f1512ec1d079ed01fc629dab269d \
|
||||||
|
--hash=sha256:caab51a72c51973ca21fa8a18bd8165e1a0183f1ac7066a182ff27107b71e1a4 \
|
||||||
|
--hash=sha256:d6297ce39ce5c2e6feb13c1a996a2ded3b6832155fcfc920265c76f24c7cceb5 \
|
||||||
|
--hash=sha256:daa3b6ff70a9241cf6c7fc9e949d41232d9d7d26fd3522b1ad2b4d62487e9904 \
|
||||||
|
--hash=sha256:df57afc692e517a85e65b72e165356ed1df12386ecb879ad5693be08fac65dde \
|
||||||
|
--hash=sha256:e0334872c0a37b606418ac52f6ab9cfd17317ac26365f7f65e203e2d0d0d359f \
|
||||||
|
--hash=sha256:e6578ed5b6981005df1860a56e3617f14a6c307e6a71b4fff8c48fdc50f3ed2c \
|
||||||
|
--hash=sha256:eaded469f5e5b7294e2bdca0ab06becb6756ea86894a47806456089298813c89 \
|
||||||
|
--hash=sha256:f4a32d1bd841d4bcbffdcb3d2ce50c09c3909fbead375ab28d0181af89fd04da \
|
||||||
|
--hash=sha256:fd3cb4adb94a2a6e2b7c0d8d05cb94e6f1c81a0cf9dc2694fb65c7e8d94c42e4
|
||||||
|
# via yt-dlp
|
||||||
|
yt-dlp-ejs==0.8.0 \
|
||||||
|
--hash=sha256:79300e5fca7f937a1eeede11f0456862c1b41107ce1d726871e0207424f4bdb4 \
|
||||||
|
--hash=sha256:d5fa1639f63b5c4af8d932495f60689d5370f1a095782c944f7f62a303eb104e
|
||||||
|
# via yt-dlp
|
||||||
5
bundle/requirements/requirements-pip.txt
Normal file
5
bundle/requirements/requirements-pip.txt
Normal file
@ -0,0 +1,5 @@
|
|||||||
|
# This file was autogenerated by uv via the following command:
|
||||||
|
# python -m devscripts.update_requirements
|
||||||
|
pip==26.0.1 \
|
||||||
|
--hash=sha256:bdb1b08f4274833d62c1aa29e20907365a2ceb950410df15fc9521bad440122b \
|
||||||
|
--hash=sha256:c4037d8a277c89b320abe636d59f91e6d0922d08a05b60e85e53b296613346d8
|
||||||
93
bundle/requirements/requirements-pypi-build.txt
Normal file
93
bundle/requirements/requirements-pypi-build.txt
Normal file
@ -0,0 +1,93 @@
|
|||||||
|
# This file was autogenerated by uv via the following command:
|
||||||
|
# uv export --no-python-downloads --no-progress --color=never --format=requirements.txt --frozen --refresh --no-emit-project --no-default-groups --group=build --output-file=bundle/requirements/requirements-pypi-build.txt
|
||||||
|
build==1.4.2 \
|
||||||
|
--hash=sha256:35b14e1ee329c186d3f08466003521ed7685ec15ecffc07e68d706090bf161d1 \
|
||||||
|
--hash=sha256:7a4d8651ea877cb2a89458b1b198f2e69f536c95e89129dbf5d448045d60db88
|
||||||
|
colorama==0.4.6 ; os_name == 'nt' \
|
||||||
|
--hash=sha256:08695f5cb7ed6e0531a20572697297273c47b8cae5a63ffc6d6ed5c201be6e44 \
|
||||||
|
--hash=sha256:4f1d9991f5acc0ca119f9d443620b77f9d6b33703e51011c16baf57afb285fc6
|
||||||
|
# via build
|
||||||
|
hatchling==1.29.0 \
|
||||||
|
--hash=sha256:50af9343281f34785fab12da82e445ed987a6efb34fd8c2fc0f6e6630dbcc1b0 \
|
||||||
|
--hash=sha256:793c31816d952cee405b83488ce001c719f325d9cda69f1fc4cd750527640ea6
|
||||||
|
importlib-metadata==9.0.0 ; python_full_version < '3.10.2' \
|
||||||
|
--hash=sha256:2d21d1cc5a017bd0559e36150c21c830ab1dc304dedd1b7ea85d20f45ef3edd7 \
|
||||||
|
--hash=sha256:a4f57ab599e6a2e3016d7595cfd72eb4661a5106e787a95bcc90c7105b831efc
|
||||||
|
# via build
|
||||||
|
packaging==26.0 \
|
||||||
|
--hash=sha256:00243ae351a257117b6a241061796684b084ed1c516a08c48a3f7e147a9d80b4 \
|
||||||
|
--hash=sha256:b36f1fef9334a5588b4166f8bcd26a14e521f2b55e6b9de3aaa80d3ff7a37529
|
||||||
|
# via
|
||||||
|
# build
|
||||||
|
# hatchling
|
||||||
|
pathspec==1.0.4 \
|
||||||
|
--hash=sha256:0210e2ae8a21a9137c0d470578cb0e595af87edaa6ebf12ff176f14a02e0e645 \
|
||||||
|
--hash=sha256:fb6ae2fd4e7c921a165808a552060e722767cfa526f99ca5156ed2ce45a5c723
|
||||||
|
# via hatchling
|
||||||
|
pluggy==1.6.0 \
|
||||||
|
--hash=sha256:7dcc130b76258d33b90f61b658791dede3486c3e6bfb003ee5c9bfb396dd22f3 \
|
||||||
|
--hash=sha256:e920276dd6813095e9377c0bc5566d94c932c33b27a3e3945d8389c374dd4746
|
||||||
|
# via hatchling
|
||||||
|
pyproject-hooks==1.2.0 \
|
||||||
|
--hash=sha256:1e859bd5c40fae9448642dd871adf459e5e2084186e8d2c2a79a824c970da1f8 \
|
||||||
|
--hash=sha256:9e5c6bfa8dcc30091c74b0cf803c81fdd29d94f01992a7707bc97babb1141913
|
||||||
|
# via build
|
||||||
|
tomli==2.4.1 ; python_full_version < '3.11' \
|
||||||
|
--hash=sha256:01f520d4f53ef97964a240a035ec2a869fe1a37dde002b57ebc4417a27ccd853 \
|
||||||
|
--hash=sha256:0d85819802132122da43cb86656f8d1f8c6587d54ae7dcaf30e90533028b49fe \
|
||||||
|
--hash=sha256:136443dbd7e1dee43c68ac2694fde36b2849865fa258d39bf822c10e8068eac5 \
|
||||||
|
--hash=sha256:1d8591993e228b0c930c4bb0db464bdad97b3289fb981255d6c9a41aedc84b2d \
|
||||||
|
--hash=sha256:2190f2e9dd7508d2a90ded5ed369255980a1bcdd58e52f7fe24b8162bf9fedbd \
|
||||||
|
--hash=sha256:2c1c351919aca02858f740c6d33adea0c5deea37f9ecca1cc1ef9e884a619d26 \
|
||||||
|
--hash=sha256:36d2bd2ad5fb9eaddba5226aa02c8ec3fa4f192631e347b3ed28186d43be6b54 \
|
||||||
|
--hash=sha256:3d48a93ee1c9b79c04bb38772ee1b64dcf18ff43085896ea460ca8dec96f35f6 \
|
||||||
|
--hash=sha256:47149d5bd38761ac8be13a84864bf0b7b70bc051806bc3669ab1cbc56216b23c \
|
||||||
|
--hash=sha256:4ab97e64ccda8756376892c53a72bd1f964e519c77236368527f758fbc36a53a \
|
||||||
|
--hash=sha256:4b605484e43cdc43f0954ddae319fb75f04cc10dd80d830540060ee7cd0243cd \
|
||||||
|
--hash=sha256:504aa796fe0569bb43171066009ead363de03675276d2d121ac1a4572397870f \
|
||||||
|
--hash=sha256:51529d40e3ca50046d7606fa99ce3956a617f9b36380da3b7f0dd3dd28e68cb5 \
|
||||||
|
--hash=sha256:52c8ef851d9a240f11a88c003eacb03c31fc1c9c4ec64a99a0f922b93874fda9 \
|
||||||
|
--hash=sha256:559db847dc486944896521f68d8190be1c9e719fced785720d2216fe7022b662 \
|
||||||
|
--hash=sha256:5a881ab208c0baf688221f8cecc5401bd291d67e38a1ac884d6736cbcd8247e9 \
|
||||||
|
--hash=sha256:5cb41aa38891e073ee49d55fbc7839cfdb2bc0e600add13874d048c94aadddd1 \
|
||||||
|
--hash=sha256:5e262d41726bc187e69af7825504c933b6794dc3fbd5945e41a79bb14c31f585 \
|
||||||
|
--hash=sha256:5ee18d9ebdb417e384b58fe414e8d6af9f4e7a0ae761519fb50f721de398dd4e \
|
||||||
|
--hash=sha256:7008df2e7655c495dd12d2a4ad038ff878d4ca4b81fccaf82b714e07eae4402c \
|
||||||
|
--hash=sha256:734e20b57ba95624ecf1841e72b53f6e186355e216e5412de414e3c51e5e3c41 \
|
||||||
|
--hash=sha256:7c7e1a961a0b2f2472c1ac5b69affa0ae1132c39adcb67aba98568702b9cc23f \
|
||||||
|
--hash=sha256:7f86fd587c4ed9dd76f318225e7d9b29cfc5a9d43de44e5754db8d1128487085 \
|
||||||
|
--hash=sha256:7f94b27a62cfad8496c8d2513e1a222dd446f095fca8987fceef261225538a15 \
|
||||||
|
--hash=sha256:88dceee75c2c63af144e456745e10101eb67361050196b0b6af5d717254dddf7 \
|
||||||
|
--hash=sha256:8a650c2dbafa08d42e51ba0b62740dae4ecb9338eefa093aa5c78ceb546fcd5c \
|
||||||
|
--hash=sha256:8d65a2fbf9d2f8352685bc1364177ee3923d6baf5e7f43ea4959d7d8bc326a36 \
|
||||||
|
--hash=sha256:96481a5786729fd470164b47cdb3e0e58062a496f455ee41b4403be77cb5a076 \
|
||||||
|
--hash=sha256:a120733b01c45e9a0c34aeef92bf0cf1d56cfe81ed9d47d562f9ed591a9828ac \
|
||||||
|
--hash=sha256:b1d22e6e9387bf4739fbe23bfa80e93f6b0373a7f1b96c6227c32bef95a4d7a8 \
|
||||||
|
--hash=sha256:b8c198f8c1805dc42708689ed6864951fd2494f924149d3e4bce7710f8eb5232 \
|
||||||
|
--hash=sha256:c2541745709bad0264b7d4705ad453b76ccd191e64aa6f0fc66b69a293a45ece \
|
||||||
|
--hash=sha256:c742f741d58a28940ce01d58f0ab2ea3ced8b12402f162f4d534dfe18ba1cd6a \
|
||||||
|
--hash=sha256:c7f2c7f2b9ca6bdeef8f0fa897f8e05085923eb091721675170254cbc5b02897 \
|
||||||
|
--hash=sha256:d312ef37c91508b0ab2cee7da26ec0b3ed2f03ce12bd87a588d771ae15dcf82d \
|
||||||
|
--hash=sha256:d4d8fe59808a54658fcc0160ecfb1b30f9089906c50b23bcb4c69eddc19ec2b4 \
|
||||||
|
--hash=sha256:da25dc3563bff5965356133435b757a795a17b17d01dbc0f42fb32447ddfd917 \
|
||||||
|
--hash=sha256:eab21f45c7f66c13f2a9e0e1535309cee140182a9cdae1e041d02e47291e8396 \
|
||||||
|
--hash=sha256:eb0dc4e38e6a1fd579e5d50369aa2e10acfc9cace504579b2faabb478e76941a \
|
||||||
|
--hash=sha256:ec9bfaf3ad2df51ace80688143a6a4ebc09a248f6ff781a9945e51937008fcbc \
|
||||||
|
--hash=sha256:ede3e6487c5ef5d28634ba3f31f989030ad6af71edfb0055cbbd14189ff240ba \
|
||||||
|
--hash=sha256:f3c6818a1a86dd6dca7ddcaaf76947d5ba31aecc28cb1b67009a5877c9a64f3f \
|
||||||
|
--hash=sha256:f758f1b9299d059cc3f6546ae2af89670cb1c4d48ea29c3cacc4fe7de3058257 \
|
||||||
|
--hash=sha256:f8f0fc26ec2cc2b965b7a3b87cd19c5c6b8c5e5f436b984e85f486d652285c30 \
|
||||||
|
--hash=sha256:fd0409a3653af6c147209d267a0e4243f0ae46b011aa978b1080359fddc9b6cf \
|
||||||
|
--hash=sha256:ff18e6a727ee0ab0388507b89d1bc6a22b138d1e2fa56d1ad494586d61d2eae9 \
|
||||||
|
--hash=sha256:ff2983983d34813c1aeb0fa89091e76c3a22889ee83ab27c5eeb45100560c049
|
||||||
|
# via
|
||||||
|
# build
|
||||||
|
# hatchling
|
||||||
|
trove-classifiers==2026.1.14.14 \
|
||||||
|
--hash=sha256:00492545a1402b09d4858605ba190ea33243d361e2b01c9c296ce06b5c3325f3 \
|
||||||
|
--hash=sha256:1f9553927f18d0513d8e5ff80ab8980b8202ce37ecae0e3274ed2ef11880e74d
|
||||||
|
# via hatchling
|
||||||
|
zipp==3.23.0 ; python_full_version < '3.10.2' \
|
||||||
|
--hash=sha256:071652d6115ed432f5ce1d34c336c0adfd6a884660d1e9712a256d3d3bd4b14e \
|
||||||
|
--hash=sha256:a07157588a12518c9d4034df3fbbee09c814741a33ff63c05fa29d26a2404166
|
||||||
|
# via importlib-metadata
|
||||||
41
bundle/requirements/requirements-win-arm64-pyinstaller.txt
Normal file
41
bundle/requirements/requirements-win-arm64-pyinstaller.txt
Normal file
@ -0,0 +1,41 @@
|
|||||||
|
# This file was autogenerated by uv via the following command:
|
||||||
|
# python -m devscripts.update_requirements
|
||||||
|
altgraph==0.17.5 \
|
||||||
|
--hash=sha256:c87b395dd12fabde9c99573a9749d67da8d29ef9de0125c7f536699b4a9bc9e7 \
|
||||||
|
--hash=sha256:f3a22400bce1b0c701683820ac4f3b159cd301acab067c51c653e06961600597
|
||||||
|
# via
|
||||||
|
# macholib
|
||||||
|
# pyinstaller
|
||||||
|
macholib==1.16.4 ; sys_platform == 'darwin' \
|
||||||
|
--hash=sha256:da1a3fa8266e30f0ce7e97c6a54eefaae8edd1e5f86f3eb8b95457cae90265ea \
|
||||||
|
--hash=sha256:f408c93ab2e995cd2c46e34fe328b130404be143469e41bc366c807448979362
|
||||||
|
# via pyinstaller
|
||||||
|
packaging==26.0 \
|
||||||
|
--hash=sha256:00243ae351a257117b6a241061796684b084ed1c516a08c48a3f7e147a9d80b4 \
|
||||||
|
--hash=sha256:b36f1fef9334a5588b4166f8bcd26a14e521f2b55e6b9de3aaa80d3ff7a37529
|
||||||
|
# via
|
||||||
|
# pyinstaller
|
||||||
|
# pyinstaller-hooks-contrib
|
||||||
|
pefile==2024.8.26 ; sys_platform == 'win32' \
|
||||||
|
--hash=sha256:3ff6c5d8b43e8c37bb6e6dd5085658d658a7a0bdcd20b6a07b1fcfc1c4e9d632 \
|
||||||
|
--hash=sha256:76f8b485dcd3b1bb8166f1128d395fa3d87af26360c2358fb75b80019b957c6f
|
||||||
|
# via pyinstaller
|
||||||
|
pyinstaller-hooks-contrib==2026.3 \
|
||||||
|
--hash=sha256:5ecd1068ad262afecadf07556279d2be52ca93a88b049fae17f1a2eb2969254a \
|
||||||
|
--hash=sha256:800d3a198a49a6cd0de2d7fb795005fdca7a0222ed9cb47c0691abd1c27b9310
|
||||||
|
# via pyinstaller
|
||||||
|
pywin32-ctypes==0.2.3 ; sys_platform == 'win32' \
|
||||||
|
--hash=sha256:8a1513379d709975552d202d942d9837758905c8d01eb82b8bcc30918929e7b8 \
|
||||||
|
--hash=sha256:d162dc04946d704503b2edc4d55f3dba5c1d539ead017afa00142c38b9885755
|
||||||
|
# via pyinstaller
|
||||||
|
setuptools==82.0.1 \
|
||||||
|
--hash=sha256:7d872682c5d01cfde07da7bccc7b65469d3dca203318515ada1de5eda35efbf9 \
|
||||||
|
--hash=sha256:a59e362652f08dcd477c78bb6e7bd9d80a7995bc73ce773050228a348ce2e5bb
|
||||||
|
# via
|
||||||
|
# pyinstaller
|
||||||
|
# pyinstaller-hooks-contrib
|
||||||
|
|
||||||
|
# The following packages were excluded from the output:
|
||||||
|
# pyinstaller
|
||||||
|
pyinstaller @ https://github.com/yt-dlp/Pyinstaller-Builds/releases/download/2026.03.17.175201/pyinstaller-6.19.0-py3-none-win_arm64.whl \
|
||||||
|
--hash=sha256:d008e5c8bb2143f7c05c8b5fcc15dab5f079d79425f78af1936c6768f8e87504
|
||||||
413
bundle/requirements/requirements-win-arm64.txt
Normal file
413
bundle/requirements/requirements-win-arm64.txt
Normal file
@ -0,0 +1,413 @@
|
|||||||
|
# This file was autogenerated by uv via the following command:
|
||||||
|
# uv export --no-python-downloads --no-progress --color=never --format=requirements.txt --frozen --refresh --no-emit-project --no-default-groups --extra=default --extra=curl-cffi --output-file=bundle/requirements/requirements-win-arm64.txt
|
||||||
|
brotli==1.2.0 ; implementation_name == 'cpython' and sys_platform != 'ios' \
|
||||||
|
--hash=sha256:022426c9e99fd65d9475dce5c195526f04bb8be8907607e27e747893f6ee3e24 \
|
||||||
|
--hash=sha256:072e7624b1fc4d601036ab3f4f27942ef772887e876beff0301d261210bca97f \
|
||||||
|
--hash=sha256:0bbd5b5ccd157ae7913750476d48099aaf507a79841c0d04a9db4415b14842de \
|
||||||
|
--hash=sha256:0cf8c3b8ba93d496b2fae778039e2f5ecc7cff99df84df337ca31d8f2252896c \
|
||||||
|
--hash=sha256:15b33fe93cedc4caaff8a0bd1eb7e3dab1c61bb22a0bf5bdfdfd97cd7da79744 \
|
||||||
|
--hash=sha256:1b1d6a4efedd53671c793be6dd760fcf2107da3a52331ad9ea429edf0902f27a \
|
||||||
|
--hash=sha256:1b557b29782a643420e08d75aea889462a4a8796e9a6cf5621ab05a3f7da8ef2 \
|
||||||
|
--hash=sha256:260d3692396e1895c5034f204f0db022c056f9e2ac841593a4cf9426e2a3faca \
|
||||||
|
--hash=sha256:26e8d3ecb0ee458a9804f47f21b74845cc823fd1bb19f02272be70774f56e2a6 \
|
||||||
|
--hash=sha256:2a7f1d03727130fc875448b65b127a9ec5d06d19d0148e7554384229706f9d1b \
|
||||||
|
--hash=sha256:2e1ad3fda65ae0d93fec742a128d72e145c9c7a99ee2fcd667785d99eb25a7fe \
|
||||||
|
--hash=sha256:3219bd9e69868e57183316ee19c84e03e8f8b5a1d1f2667e1aa8c2f91cb061ac \
|
||||||
|
--hash=sha256:350c8348f0e76fff0a0fd6c26755d2653863279d086d3aa2c290a6a7251135dd \
|
||||||
|
--hash=sha256:35d382625778834a7f3061b15423919aa03e4f5da34ac8e02c074e4b75ab4f84 \
|
||||||
|
--hash=sha256:3b90b767916ac44e93a8e28ce6adf8d551e43affb512f2377c732d486ac6514e \
|
||||||
|
--hash=sha256:3e1b35d56856f3ed326b140d3c6d9db91740f22e14b06e840fe4bb1923439a18 \
|
||||||
|
--hash=sha256:3f3c908bcc404c90c77d5a073e55271a0a498f4e0756e48127c35d91cf155947 \
|
||||||
|
--hash=sha256:40d918bce2b427a0c4ba189df7a006ac0c7277c180aee4617d99e9ccaaf59e6a \
|
||||||
|
--hash=sha256:4ecdb3b6dc36e6d6e14d3a1bdc6c1057c8cbf80db04031d566eb6080ce283a48 \
|
||||||
|
--hash=sha256:54a50a9dad16b32136b2241ddea9e4df159b41247b2ce6aac0b3276a66a8f1e5 \
|
||||||
|
--hash=sha256:67a91c5187e1eec76a61625c77a6c8c785650f5b576ca732bd33ef58b0dff49c \
|
||||||
|
--hash=sha256:6be67c19e0b0c56365c6a76e393b932fb0e78b3b56b711d180dd7013cb1fd984 \
|
||||||
|
--hash=sha256:6c12dad5cd04530323e723787ff762bac749a7b256a5bece32b2243dd5c27b21 \
|
||||||
|
--hash=sha256:7547369c4392b47d30a3467fe8c3330b4f2e0f7730e45e3103d7d636678a808b \
|
||||||
|
--hash=sha256:7a47ce5c2288702e09dc22a44d0ee6152f2c7eda97b3c8482d826a1f3cfc7da7 \
|
||||||
|
--hash=sha256:7a61c06b334bd99bc5ae84f1eeb36bfe01400264b3c352f968c6e30a10f9d08b \
|
||||||
|
--hash=sha256:81da1b229b1889f25adadc929aeb9dbc4e922bd18561b65b08dd9343cfccca84 \
|
||||||
|
--hash=sha256:832c115a020e463c2f67664560449a7bea26b0c1fdd690352addad6d0a08714d \
|
||||||
|
--hash=sha256:844a8ceb8483fefafc412f85c14f2aae2fb69567bf2a0de53cdb88b73e7c43ae \
|
||||||
|
--hash=sha256:898be2be399c221d2671d29eed26b6b2713a02c2119168ed914e7d00ceadb56f \
|
||||||
|
--hash=sha256:9322b9f8656782414b37e6af884146869d46ab85158201d82bab9abbcb971dc7 \
|
||||||
|
--hash=sha256:963a08f3bebd8b75ac57661045402da15991468a621f014be54e50f53a58d19e \
|
||||||
|
--hash=sha256:9c79f57faa25d97900bfb119480806d783fba83cd09ee0b33c17623935b05fa3 \
|
||||||
|
--hash=sha256:9e5825ba2c9998375530504578fd4d5d1059d09621a02065d1b6bfc41a8e05ab \
|
||||||
|
--hash=sha256:a1778532b978d2536e79c05dac2d8cd857f6c55cd0c95ace5b03740824e0e2f1 \
|
||||||
|
--hash=sha256:aa47441fa3026543513139cb8926a92a8e305ee9c71a6209ef7a97d91640ea03 \
|
||||||
|
--hash=sha256:acec55bb7c90f1dfc476126f9711a8e81c9af7fb617409a9ee2953115343f08d \
|
||||||
|
--hash=sha256:adedc4a67e15327dfdd04884873c6d5a01d3e3b6f61406f99b1ed4865a2f6d28 \
|
||||||
|
--hash=sha256:af43b8711a8264bb4e7d6d9a6d004c3a2019c04c01127a868709ec29962b6036 \
|
||||||
|
--hash=sha256:b232029d100d393ae3c603c8ffd7e3fe6f798c5e28ddca5feabb8e8fdb732997 \
|
||||||
|
--hash=sha256:b35c13ce241abdd44cb8ca70683f20c0c079728a36a996297adb5334adfc1c44 \
|
||||||
|
--hash=sha256:b63daa43d82f0cdabf98dee215b375b4058cce72871fd07934f179885aad16e8 \
|
||||||
|
--hash=sha256:c8565e3cdc1808b1a34714b553b262c5de5fbda202285782173ec137fd13709f \
|
||||||
|
--hash=sha256:cf9cba6f5b78a2071ec6fb1e7bd39acf35071d90a81231d67e92d637776a6a63 \
|
||||||
|
--hash=sha256:d2d085ded05278d1c7f65560aae97b3160aeb2ea2c0b3e26204856beccb60888 \
|
||||||
|
--hash=sha256:e310f77e41941c13340a95976fe66a8a95b01e783d430eeaf7a2f87e0a57dd0a \
|
||||||
|
--hash=sha256:e7c0af964e0b4e3412a0ebf341ea26ec767fa0b4cf81abb5e897c9338b5ad6a3 \
|
||||||
|
--hash=sha256:e99befa0b48f3cd293dafeacdd0d191804d105d279e0b387a32054c1180f3161 \
|
||||||
|
--hash=sha256:ef87b8ab2704da227e83a246356a2b179ef826f550f794b2c52cddb4efbd0196 \
|
||||||
|
--hash=sha256:fc1530af5c3c275b8524f2e24841cbe2599d74462455e9bae5109e9ff42e9361 \
|
||||||
|
--hash=sha256:ff09cd8c5eec3b9d02d2408db41be150d8891c5566addce57513bf546e3d6c6d
|
||||||
|
# via yt-dlp
|
||||||
|
brotlicffi==1.2.0.1 ; implementation_name != 'cpython' \
|
||||||
|
--hash=sha256:2c85e65913cf2b79c57a3fdd05b98d9731d9255dc0cb696b09376cc091b9cddd \
|
||||||
|
--hash=sha256:37cb587d32bf7168e2218c455e22e409ad1f3157c6c71945879a311f3e6b6abf \
|
||||||
|
--hash=sha256:3c9544f83cb715d95d7eab3af4adbbef8b2093ad6382288a83b3a25feb1a57ec \
|
||||||
|
--hash=sha256:535f2d05d0273408abc13fc0eebb467afac17b0ad85090c8913690d40207dac5 \
|
||||||
|
--hash=sha256:625f8115d32ae9c0740d01ea51518437c3fbaa3e78d41cb18459f6f7ac326000 \
|
||||||
|
--hash=sha256:6f3314a3476f59e5443f9f72a6dff16edc0c3463c9b318feaef04ae3e4683f5a \
|
||||||
|
--hash=sha256:82ea52e2b5d3145b6c406ebd3efb0d55db718b7ad996bd70c62cec0439de1187 \
|
||||||
|
--hash=sha256:91ba5f0ccc040f6ff8f7efaf839f797723d03ed46acb8ae9408f99ffd2572cf4 \
|
||||||
|
--hash=sha256:9d6ba65dd528892b4d9960beba2ae011a753620bcfc66cf6fa3cee18d7b0baa4 \
|
||||||
|
--hash=sha256:be9a670c6811af30a4bd42d7116dc5895d3b41beaa8ed8a89050447a0181f5ce \
|
||||||
|
--hash=sha256:c20d5c596278307ad06414a6d95a892377ea274a5c6b790c2548c009385d621c \
|
||||||
|
--hash=sha256:ce17eb798ca59ecec67a9bb3fd7a4304e120d1cd02953ce522d959b9a84d58ac \
|
||||||
|
--hash=sha256:da2e82a08e7778b8bc539d27ca03cdd684113e81394bfaaad8d0dfc6a17ddede \
|
||||||
|
--hash=sha256:e015af99584c6db1490a69a210c765953e473e63adc2d891ac3062a737c9e851 \
|
||||||
|
--hash=sha256:f2a5575653b0672638ba039b82fda56854934d7a6a24d4b8b5033f73ab43cbc1
|
||||||
|
# via yt-dlp
|
||||||
|
certifi==2026.2.25 \
|
||||||
|
--hash=sha256:027692e4402ad994f1c42e52a4997a9763c646b73e4096e4d5d6db8af1d6f0fa \
|
||||||
|
--hash=sha256:e887ab5cee78ea814d3472169153c2d12cd43b14bd03329a39a9c6e2e80bfba7
|
||||||
|
# via
|
||||||
|
# curl-cffi
|
||||||
|
# requests
|
||||||
|
# yt-dlp
|
||||||
|
cffi==2.0.0 \
|
||||||
|
--hash=sha256:00bdf7acc5f795150faa6957054fbbca2439db2f775ce831222b66f192f03beb \
|
||||||
|
--hash=sha256:07b271772c100085dd28b74fa0cd81c8fb1a3ba18b21e03d7c27f3436a10606b \
|
||||||
|
--hash=sha256:087067fa8953339c723661eda6b54bc98c5625757ea62e95eb4898ad5e776e9f \
|
||||||
|
--hash=sha256:0a1527a803f0a659de1af2e1fd700213caba79377e27e4693648c2923da066f9 \
|
||||||
|
--hash=sha256:0cf2d91ecc3fcc0625c2c530fe004f82c110405f101548512cce44322fa8ac44 \
|
||||||
|
--hash=sha256:12873ca6cb9b0f0d3a0da705d6086fe911591737a59f28b7936bdfed27c0d47c \
|
||||||
|
--hash=sha256:19f705ada2530c1167abacb171925dd886168931e0a7b78f5bffcae5c6b5be75 \
|
||||||
|
--hash=sha256:1e3a615586f05fc4065a8b22b8152f0c1b00cdbc60596d187c2a74f9e3036e4e \
|
||||||
|
--hash=sha256:1f72fb8906754ac8a2cc3f9f5aaa298070652a0ffae577e0ea9bd480dc3c931a \
|
||||||
|
--hash=sha256:1fc9ea04857caf665289b7a75923f2c6ed559b8298a1b8c49e59f7dd95c8481e \
|
||||||
|
--hash=sha256:203a48d1fb583fc7d78a4c6655692963b860a417c0528492a6bc21f1aaefab25 \
|
||||||
|
--hash=sha256:21d1152871b019407d8ac3985f6775c079416c282e431a4da6afe7aefd2bccbe \
|
||||||
|
--hash=sha256:24b6f81f1983e6df8db3adc38562c83f7d4a0c36162885ec7f7b77c7dcbec97b \
|
||||||
|
--hash=sha256:256f80b80ca3853f90c21b23ee78cd008713787b1b1e93eae9f3d6a7134abd91 \
|
||||||
|
--hash=sha256:28a3a209b96630bca57cce802da70c266eb08c6e97e5afd61a75611ee6c64592 \
|
||||||
|
--hash=sha256:2c8f814d84194c9ea681642fd164267891702542f028a15fc97d4674b6206187 \
|
||||||
|
--hash=sha256:2de9a304e27f7596cd03d16f1b7c72219bd944e99cc52b84d0145aefb07cbd3c \
|
||||||
|
--hash=sha256:38100abb9d1b1435bc4cc340bb4489635dc2f0da7456590877030c9b3d40b0c1 \
|
||||||
|
--hash=sha256:3925dd22fa2b7699ed2617149842d2e6adde22b262fcbfada50e3d195e4b3a94 \
|
||||||
|
--hash=sha256:3e17ed538242334bf70832644a32a7aae3d83b57567f9fd60a26257e992b79ba \
|
||||||
|
--hash=sha256:3e837e369566884707ddaf85fc1744b47575005c0a229de3327f8f9a20f4efeb \
|
||||||
|
--hash=sha256:44d1b5909021139fe36001ae048dbdde8214afa20200eda0f64c068cac5d5529 \
|
||||||
|
--hash=sha256:45d5e886156860dc35862657e1494b9bae8dfa63bf56796f2fb56e1679fc0bca \
|
||||||
|
--hash=sha256:4671d9dd5ec934cb9a73e7ee9676f9362aba54f7f34910956b84d727b0d73fb6 \
|
||||||
|
--hash=sha256:53f77cbe57044e88bbd5ed26ac1d0514d2acf0591dd6bb02a3ae37f76811b80c \
|
||||||
|
--hash=sha256:5eda85d6d1879e692d546a078b44251cdd08dd1cfb98dfb77b670c97cee49ea0 \
|
||||||
|
--hash=sha256:5fed36fccc0612a53f1d4d9a816b50a36702c28a2aa880cb8a122b3466638743 \
|
||||||
|
--hash=sha256:66f011380d0e49ed280c789fbd08ff0d40968ee7b665575489afa95c98196ab5 \
|
||||||
|
--hash=sha256:6824f87845e3396029f3820c206e459ccc91760e8fa24422f8b0c3d1731cbec5 \
|
||||||
|
--hash=sha256:6c6c373cfc5c83a975506110d17457138c8c63016b563cc9ed6e056a82f13ce4 \
|
||||||
|
--hash=sha256:6d02d6655b0e54f54c4ef0b94eb6be0607b70853c45ce98bd278dc7de718be5d \
|
||||||
|
--hash=sha256:6d50360be4546678fc1b79ffe7a66265e28667840010348dd69a314145807a1b \
|
||||||
|
--hash=sha256:730cacb21e1bdff3ce90babf007d0a0917cc3e6492f336c2f0134101e0944f93 \
|
||||||
|
--hash=sha256:737fe7d37e1a1bffe70bd5754ea763a62a066dc5913ca57e957824b72a85e205 \
|
||||||
|
--hash=sha256:74a03b9698e198d47562765773b4a8309919089150a0bb17d829ad7b44b60d27 \
|
||||||
|
--hash=sha256:7553fb2090d71822f02c629afe6042c299edf91ba1bf94951165613553984512 \
|
||||||
|
--hash=sha256:7a66c7204d8869299919db4d5069a82f1561581af12b11b3c9f48c584eb8743d \
|
||||||
|
--hash=sha256:7cc09976e8b56f8cebd752f7113ad07752461f48a58cbba644139015ac24954c \
|
||||||
|
--hash=sha256:81afed14892743bbe14dacb9e36d9e0e504cd204e0b165062c488942b9718037 \
|
||||||
|
--hash=sha256:8941aaadaf67246224cee8c3803777eed332a19d909b47e29c9842ef1e79ac26 \
|
||||||
|
--hash=sha256:8ea985900c5c95ce9db1745f7933eeef5d314f0565b27625d9a10ec9881e1bfb \
|
||||||
|
--hash=sha256:8eca2a813c1cb7ad4fb74d368c2ffbbb4789d377ee5bb8df98373c2cc0dee76c \
|
||||||
|
--hash=sha256:92b68146a71df78564e4ef48af17551a5ddd142e5190cdf2c5624d0c3ff5b2e8 \
|
||||||
|
--hash=sha256:9332088d75dc3241c702d852d4671613136d90fa6881da7d770a483fd05248b4 \
|
||||||
|
--hash=sha256:94698a9c5f91f9d138526b48fe26a199609544591f859c870d477351dc7b2414 \
|
||||||
|
--hash=sha256:9a67fc9e8eb39039280526379fb3a70023d77caec1852002b4da7e8b270c4dd9 \
|
||||||
|
--hash=sha256:9de40a7b0323d889cf8d23d1ef214f565ab154443c42737dfe52ff82cf857664 \
|
||||||
|
--hash=sha256:a05d0c237b3349096d3981b727493e22147f934b20f6f125a3eba8f994bec4a9 \
|
||||||
|
--hash=sha256:afb8db5439b81cf9c9d0c80404b60c3cc9c3add93e114dcae767f1477cb53775 \
|
||||||
|
--hash=sha256:b18a3ed7d5b3bd8d9ef7a8cb226502c6bf8308df1525e1cc676c3680e7176739 \
|
||||||
|
--hash=sha256:b1e74d11748e7e98e2f426ab176d4ed720a64412b6a15054378afdb71e0f37dc \
|
||||||
|
--hash=sha256:b21e08af67b8a103c71a250401c78d5e0893beff75e28c53c98f4de42f774062 \
|
||||||
|
--hash=sha256:b4c854ef3adc177950a8dfc81a86f5115d2abd545751a304c5bcf2c2c7283cfe \
|
||||||
|
--hash=sha256:baf5215e0ab74c16e2dd324e8ec067ef59e41125d3eade2b863d294fd5035c92 \
|
||||||
|
--hash=sha256:c649e3a33450ec82378822b3dad03cc228b8f5963c0c12fc3b1e0ab940f768a5 \
|
||||||
|
--hash=sha256:c654de545946e0db659b3400168c9ad31b5d29593291482c43e3564effbcee13 \
|
||||||
|
--hash=sha256:c6638687455baf640e37344fe26d37c404db8b80d037c3d29f58fe8d1c3b194d \
|
||||||
|
--hash=sha256:c8d3b5532fc71b7a77c09192b4a5a200ea992702734a2e9279a37f2478236f26 \
|
||||||
|
--hash=sha256:cf364028c016c03078a23b503f02058f1814320a56ad535686f90565636a9495 \
|
||||||
|
--hash=sha256:d48a880098c96020b02d5a1f7d9251308510ce8858940e6fa99ece33f610838b \
|
||||||
|
--hash=sha256:d68b6cef7827e8641e8ef16f4494edda8b36104d79773a334beaa1e3521430f6 \
|
||||||
|
--hash=sha256:d9b29c1f0ae438d5ee9acb31cadee00a58c46cc9c0b2f9038c6b0b3470877a8c \
|
||||||
|
--hash=sha256:d9b97165e8aed9272a6bb17c01e3cc5871a594a446ebedc996e2397a1c1ea8ef \
|
||||||
|
--hash=sha256:da68248800ad6320861f129cd9c1bf96ca849a2771a59e0344e88681905916f5 \
|
||||||
|
--hash=sha256:da902562c3e9c550df360bfa53c035b2f241fed6d9aef119048073680ace4a18 \
|
||||||
|
--hash=sha256:dbd5c7a25a7cb98f5ca55d258b103a2054f859a46ae11aaf23134f9cc0d356ad \
|
||||||
|
--hash=sha256:dd4f05f54a52fb558f1ba9f528228066954fee3ebe629fc1660d874d040ae5a3 \
|
||||||
|
--hash=sha256:e11e82b744887154b182fd3e7e8512418446501191994dbf9c9fc1f32cc8efd5 \
|
||||||
|
--hash=sha256:f73b96c41e3b2adedc34a7356e64c8eb96e03a3782b535e043a986276ce12a49 \
|
||||||
|
--hash=sha256:f93fd8e5c8c0a4aa1f424d6173f14a892044054871c771f8566e4008eaa359d2 \
|
||||||
|
--hash=sha256:fc33c5141b55ed366cfaad382df24fe7dcbc686de5be719b207bb248e3053dc5 \
|
||||||
|
--hash=sha256:fc7de24befaeae77ba923797c7c87834c73648a05a4bde34b3b7e5588973a453
|
||||||
|
# via
|
||||||
|
# brotlicffi
|
||||||
|
# curl-cffi
|
||||||
|
charset-normalizer==3.4.6 \
|
||||||
|
--hash=sha256:06a7e86163334edfc5d20fe104db92fcd666e5a5df0977cb5680a506fe26cc8e \
|
||||||
|
--hash=sha256:0c173ce3a681f309f31b87125fecec7a5d1347261ea11ebbb856fa6006b23c8c \
|
||||||
|
--hash=sha256:0e28d62a8fc7a1fa411c43bd65e346f3bce9716dc51b897fbe930c5987b402d5 \
|
||||||
|
--hash=sha256:0e901eb1049fdb80f5bd11ed5ea1e498ec423102f7a9b9e4645d5b8204ff2815 \
|
||||||
|
--hash=sha256:11afb56037cbc4b1555a34dd69151e8e069bee82e613a73bef6e714ce733585f \
|
||||||
|
--hash=sha256:150b8ce8e830eb7ccb029ec9ca36022f756986aaaa7956aad6d9ec90089338c0 \
|
||||||
|
--hash=sha256:172985e4ff804a7ad08eebec0a1640ece87ba5041d565fff23c8f99c1f389484 \
|
||||||
|
--hash=sha256:197c1a244a274bb016dd8b79204850144ef77fe81c5b797dc389327adb552407 \
|
||||||
|
--hash=sha256:1ae6b62897110aa7c79ea2f5dd38d1abca6db663687c0b1ad9aed6f6bae3d9d6 \
|
||||||
|
--hash=sha256:22c6f0c2fbc31e76c3b8a86fba1a56eda6166e238c29cdd3d14befdb4a4e4815 \
|
||||||
|
--hash=sha256:231d4da14bcd9301310faf492051bee27df11f2bc7549bc0bb41fef11b82daa2 \
|
||||||
|
--hash=sha256:259695e2ccc253feb2a016303543d691825e920917e31f894ca1a687982b1de4 \
|
||||||
|
--hash=sha256:2a24157fa36980478dd1770b585c0f30d19e18f4fb0c47c13aa568f871718579 \
|
||||||
|
--hash=sha256:2b1a63e8224e401cafe7739f77efd3f9e7f5f2026bda4aead8e59afab537784f \
|
||||||
|
--hash=sha256:2e1d8ca8611099001949d1cdfaefc510cf0f212484fe7c565f735b68c78c3c95 \
|
||||||
|
--hash=sha256:2ef7fedc7a6ecbe99969cd09632516738a97eeb8bd7258bf8a0f23114c057dab \
|
||||||
|
--hash=sha256:30f445ae60aad5e1f8bdbb3108e39f6fbc09f4ea16c815c66578878325f8f15a \
|
||||||
|
--hash=sha256:34315ff4fc374b285ad7f4a0bf7dcbfe769e1b104230d40f49f700d4ab6bbd84 \
|
||||||
|
--hash=sha256:3778fd7d7cd04ae8f54651f4a7a0bd6e39a0cf20f801720a4c21d80e9b7ad6b0 \
|
||||||
|
--hash=sha256:39f5068d35621da2881271e5c3205125cc456f54e9030d3f723288c873a71bf9 \
|
||||||
|
--hash=sha256:404a1e552cf5b675a87f0651f8b79f5f1e6fd100ee88dc612f89aa16abd4486f \
|
||||||
|
--hash=sha256:419a9d91bd238052642a51938af8ac05da5b3343becde08d5cdeab9046df9ee1 \
|
||||||
|
--hash=sha256:423fb7e748a08f854a08a222b983f4df1912b1daedce51a72bd24fe8f26a1843 \
|
||||||
|
--hash=sha256:4482481cb0572180b6fd976a4d5c72a30263e98564da68b86ec91f0fe35e8565 \
|
||||||
|
--hash=sha256:47955475ac79cc504ef2704b192364e51d0d473ad452caedd0002605f780101c \
|
||||||
|
--hash=sha256:4be9f4830ba8741527693848403e2c457c16e499100963ec711b1c6f2049b7c7 \
|
||||||
|
--hash=sha256:51fb3c322c81d20567019778cb5a4a6f2dc1c200b886bc0d636238e364848c89 \
|
||||||
|
--hash=sha256:5273b9f0b5835ff0350c0828faea623c68bfa65b792720c453e22b25cc72930f \
|
||||||
|
--hash=sha256:530d548084c4a9f7a16ed4a294d459b4f229db50df689bfe92027452452943a0 \
|
||||||
|
--hash=sha256:530e8cebeea0d76bdcf93357aa5e41336f48c3dc709ac52da2bb167c5b8271d9 \
|
||||||
|
--hash=sha256:572d7c822caf521f0525ba1bce1a622a0b85cf47ffbdae6c9c19e3b5ac3c4389 \
|
||||||
|
--hash=sha256:58c948d0d086229efc484fe2f30c2d382c86720f55cd9bc33591774348ad44e0 \
|
||||||
|
--hash=sha256:5d11595abf8dd942a77883a39d81433739b287b6aa71620f15164f8096221b30 \
|
||||||
|
--hash=sha256:5f8ddd609f9e1af8c7bd6e2aca279c931aefecd148a14402d4e368f3171769fd \
|
||||||
|
--hash=sha256:5feb91325bbceade6afab43eb3b508c63ee53579fe896c77137ded51c6b6958e \
|
||||||
|
--hash=sha256:60c74963d8350241a79cb8feea80e54d518f72c26db618862a8f53e5023deaf9 \
|
||||||
|
--hash=sha256:613f19aa6e082cf96e17e3ffd89383343d0d589abda756b7764cf78361fd41dc \
|
||||||
|
--hash=sha256:695f5c2823691a25f17bc5d5ffe79fa90972cc34b002ac6c843bb8a1720e950d \
|
||||||
|
--hash=sha256:6cceb5473417d28edd20c6c984ab6fee6c6267d38d906823ebfe20b03d607dc2 \
|
||||||
|
--hash=sha256:74119174722c4349af9708993118581686f343adc1c8c9c007d59be90d077f3f \
|
||||||
|
--hash=sha256:74a2e659c7ecbc73562e2a15e05039f1e22c75b7c7618b4b574a3ea9118d1557 \
|
||||||
|
--hash=sha256:7504e9b7dc05f99a9bbb4525c67a2c155073b44d720470a148b34166a69c054e \
|
||||||
|
--hash=sha256:79090741d842f564b1b2827c0b82d846405b744d31e84f18d7a7b41c20e473ff \
|
||||||
|
--hash=sha256:7a6967aaf043bceabab5412ed6bd6bd26603dae84d5cb75bf8d9a74a4959d398 \
|
||||||
|
--hash=sha256:7bda6eebafd42133efdca535b04ccb338ab29467b3f7bf79569883676fc628db \
|
||||||
|
--hash=sha256:7edbed096e4a4798710ed6bc75dcaa2a21b68b6c356553ac4823c3658d53743a \
|
||||||
|
--hash=sha256:7f9019c9cb613f084481bd6a100b12e1547cf2efe362d873c2e31e4035a6fa43 \
|
||||||
|
--hash=sha256:80d0a5615143c0b3225e5e3ef22c8d5d51f3f72ce0ea6fb84c943546c7b25b6c \
|
||||||
|
--hash=sha256:82060f995ab5003a2d6e0f4ad29065b7672b6593c8c63559beefe5b443242c3e \
|
||||||
|
--hash=sha256:836ab36280f21fc1a03c99cd05c6b7af70d2697e374c7af0b61ed271401a72a2 \
|
||||||
|
--hash=sha256:87725cfb1a4f1f8c2fc9890ae2f42094120f4b44db9360be5d99a4c6b0e03a9e \
|
||||||
|
--hash=sha256:899d28f422116b08be5118ef350c292b36fc15ec2daeb9ea987c89281c7bb5c4 \
|
||||||
|
--hash=sha256:8bea55c4eef25b0b19a0337dc4e3f9a15b00d569c77211fa8cde38684f234fb7 \
|
||||||
|
--hash=sha256:8e5a94886bedca0f9b78fecd6afb6629142fd2605aa70a125d49f4edc6037ee6 \
|
||||||
|
--hash=sha256:90ca27cd8da8118b18a52d5f547859cc1f8354a00cd1e8e5120df3e30d6279e5 \
|
||||||
|
--hash=sha256:92734d4d8d187a354a556626c221cd1a892a4e0802ccb2af432a1d85ec012194 \
|
||||||
|
--hash=sha256:947cf925bc916d90adba35a64c82aace04fa39b46b52d4630ece166655905a69 \
|
||||||
|
--hash=sha256:95b52c68d64c1878818687a473a10547b3292e82b6f6fe483808fb1468e2f52f \
|
||||||
|
--hash=sha256:97d0235baafca5f2b09cf332cc275f021e694e8362c6bb9c96fc9a0eb74fc316 \
|
||||||
|
--hash=sha256:9ca4c0b502ab399ef89248a2c84c54954f77a070f28e546a85e91da627d1301e \
|
||||||
|
--hash=sha256:9cc4fc6c196d6a8b76629a70ddfcd4635a6898756e2d9cac5565cf0654605d73 \
|
||||||
|
--hash=sha256:9cc6e6d9e571d2f863fa77700701dae73ed5f78881efc8b3f9a4398772ff53e8 \
|
||||||
|
--hash=sha256:a056d1ad2633548ca18ffa2f85c202cfb48b68615129143915b8dc72a806a923 \
|
||||||
|
--hash=sha256:a26611d9987b230566f24a0a125f17fe0de6a6aff9f25c9f564aaa2721a5fb88 \
|
||||||
|
--hash=sha256:a4474d924a47185a06411e0064b803c68be044be2d60e50e8bddcc2649957c1f \
|
||||||
|
--hash=sha256:a4ea868bc28109052790eb2b52a9ab33f3aa7adc02f96673526ff47419490e21 \
|
||||||
|
--hash=sha256:a9e68c9d88823b274cf1e72f28cb5dc89c990edf430b0bfd3e2fb0785bfeabf4 \
|
||||||
|
--hash=sha256:aa9cccf4a44b9b62d8ba8b4dd06c649ba683e4bf04eea606d2e94cfc2d6ff4d6 \
|
||||||
|
--hash=sha256:ac2393c73378fea4e52aa56285a3d64be50f1a12395afef9cce47772f60334c2 \
|
||||||
|
--hash=sha256:ad8faf8df23f0378c6d527d8b0b15ea4a2e23c89376877c598c4870d1b2c7866 \
|
||||||
|
--hash=sha256:b35b200d6a71b9839a46b9b7fff66b6638bb52fc9658aa58796b0326595d3021 \
|
||||||
|
--hash=sha256:b3694e3f87f8ac7ce279d4355645b3c878d24d1424581b46282f24b92f5a4ae2 \
|
||||||
|
--hash=sha256:b4ff1d35e8c5bd078be89349b6f3a845128e685e751b6ea1169cf2160b344c4d \
|
||||||
|
--hash=sha256:bbc8c8650c6e51041ad1be191742b8b421d05bbd3410f43fa2a00c8db87678e8 \
|
||||||
|
--hash=sha256:bc72863f4d9aba2e8fd9085e63548a324ba706d2ea2c83b260da08a59b9482de \
|
||||||
|
--hash=sha256:c2274ca724536f173122f36c98ce188fd24ce3dad886ec2b7af859518ce008a4 \
|
||||||
|
--hash=sha256:c8ae56368f8cc97c7e40a7ee18e1cedaf8e780cd8bc5ed5ac8b81f238614facb \
|
||||||
|
--hash=sha256:c907cdc8109f6c619e6254212e794d6548373cc40e1ec75e6e3823d9135d29cc \
|
||||||
|
--hash=sha256:ca0276464d148c72defa8bb4390cce01b4a0e425f3b50d1435aa6d7a18107602 \
|
||||||
|
--hash=sha256:cd5e2801c89992ed8c0a3f0293ae83c159a60d9a5d685005383ef4caca77f2c4 \
|
||||||
|
--hash=sha256:d60377dce4511655582e300dc1e5a5f24ba0cb229005a1d5c8d0cb72bb758ab8 \
|
||||||
|
--hash=sha256:d73beaac5e90173ac3deb9928a74763a6d230f494e4bfb422c217a0ad8e629bf \
|
||||||
|
--hash=sha256:d7de2637729c67d67cf87614b566626057e95c303bc0a55ffe391f5205e7003d \
|
||||||
|
--hash=sha256:dad6e0f2e481fffdcf776d10ebee25e0ef89f16d691f1e5dee4b586375fdc64b \
|
||||||
|
--hash=sha256:dda86aba335c902b6149a02a55b38e96287157e609200811837678214ba2b1db \
|
||||||
|
--hash=sha256:e1f6e2f00a6b8edb562826e4632e26d063ac10307e80f7461f7de3ad8ef3f077 \
|
||||||
|
--hash=sha256:e25369dc110d58ddf29b949377a93e0716d72a24f62bad72b2b39f155949c1fd \
|
||||||
|
--hash=sha256:e3c701e954abf6fc03a49f7c579cc80c2c6cc52525340ca3186c41d3f33482ef \
|
||||||
|
--hash=sha256:e5bcc1a1ae744e0bb59641171ae53743760130600da8db48cbb6e4918e186e4e \
|
||||||
|
--hash=sha256:e68c14b04827dd76dcbd1aeea9e604e3e4b78322d8faf2f8132c7138efa340a8 \
|
||||||
|
--hash=sha256:e985a16ff513596f217cee86c21371b8cd011c0f6f056d0920aa2d926c544058 \
|
||||||
|
--hash=sha256:ef5960d965e67165d75b7c7ffc60a83ec5abfc5c11b764ec13ea54fbef8b4421 \
|
||||||
|
--hash=sha256:f0cdaecd4c953bfae0b6bb64910aaaca5a424ad9c72d85cb88417bb9814f7550 \
|
||||||
|
--hash=sha256:f1ce721c8a7dfec21fcbdfe04e8f68174183cf4e8188e0645e92aa23985c57ff \
|
||||||
|
--hash=sha256:f5ea69428fa1b49573eef0cc44a1d43bebd45ad0c611eb7d7eac760c7ae771bc \
|
||||||
|
--hash=sha256:f6e4333fb15c83f7d1482a76d45a0818897b3d33f00efd215528ff7c51b8e35d \
|
||||||
|
--hash=sha256:f820f24b09e3e779fe84c3c456cb4108a7aa639b0d1f02c28046e11bfcd088ed \
|
||||||
|
--hash=sha256:fcce033e4021347d80ed9c66dcf1e7b1546319834b74445f561d2e2221de5659
|
||||||
|
# via requests
|
||||||
|
curl-cffi==0.15.0 ; implementation_name == 'cpython' \
|
||||||
|
--hash=sha256:08c799b89740b9bc49c09fbc3d5907f13ac1f845ca52620507ef9466d4639dd5 \
|
||||||
|
--hash=sha256:0b6c0543b993996670e9e4b78e305a2d60809d5681903ffb5568e21a387434d3 \
|
||||||
|
--hash=sha256:1977e1e12cfb5c11352cbb74acef1bed24eb7d226dab61ca57c168c21acd4d61 \
|
||||||
|
--hash=sha256:2b6c847d86283b07ae69bb72c82eb8a59242277142aa35b89850f89e792a02fc \
|
||||||
|
--hash=sha256:408d6f14e346841cd889c2e0962832bb235ba3b6749ebf609f347f747da5e60f \
|
||||||
|
--hash=sha256:41f80170ba844009273b2660da1964ec31e99e5719d16b3422ada87177e32e13 \
|
||||||
|
--hash=sha256:4682dc38d4336e0eb0b185374db90a760efde63cbea994b4e63f3521d44c4c92 \
|
||||||
|
--hash=sha256:582e570aa2586b96ed47cf4a17586b9a3c462cbe43f780487c3dc245c6ef1527 \
|
||||||
|
--hash=sha256:5a0c1896a0d5a5ac1eb89cd24b008d2b718dd1df6fd2f75451b59ca66e49e572 \
|
||||||
|
--hash=sha256:7b7a92767a888ee90147e18964b396d8435ff42737030d6fb00824ffd6094805 \
|
||||||
|
--hash=sha256:7e63539d0d839d0a8c5eacf86229bc68c57803547f35e0db7ee0986328b478c3 \
|
||||||
|
--hash=sha256:829cc357061ecb99cc2d406301f609a039e05665322f5c025ec67c38b0dc49ce \
|
||||||
|
--hash=sha256:838e48212447d9c81364b04707a5c861daf08f8320f9ecb3406a8919d1d5c3b3 \
|
||||||
|
--hash=sha256:967ad7355bd8e9586f8c2d02eaa99953747549e7ea4a9b25cd53353e6b67fe6d \
|
||||||
|
--hash=sha256:9e5e69eee735f659287e2c84444319d68a1fa68dd37abf228943a4074864283a \
|
||||||
|
--hash=sha256:a25620d9bf989c9c029a7d1642999c4c265abb0bad811deb2f77b0b5b2b12e5b \
|
||||||
|
--hash=sha256:a6d57f8389273a3a1f94370473c74897467bcc36af0a17336989780c507fa43d \
|
||||||
|
--hash=sha256:aa1323950224db24f4c510d010b3affa02196ca853fb424191fa917a513d3f4b \
|
||||||
|
--hash=sha256:b624c7ce087bfda967a013ed0a64702a525444e5b6e97d23534d567ccc6525aa \
|
||||||
|
--hash=sha256:bda66404010e9ed743b1b83c20c86f24fe21a9a6873e17479d6e67e29d8ded28 \
|
||||||
|
--hash=sha256:ea0c67652bf6893d34ee0f82c944f37e488f6147e9421bef1771cc6545b02ded
|
||||||
|
# via yt-dlp
|
||||||
|
idna==3.11 \
|
||||||
|
--hash=sha256:771a87f49d9defaf64091e6e6fe9c18d4833f140bd19464795bc32d966ca37ea \
|
||||||
|
--hash=sha256:795dafcc9c04ed0c1fb032c2aa73654d8e8c5023a7df64a53f39190ada629902
|
||||||
|
# via requests
|
||||||
|
markdown-it-py==4.0.0 ; implementation_name == 'cpython' \
|
||||||
|
--hash=sha256:87327c59b172c5011896038353a81343b6754500a08cd7a4973bb48c6d578147 \
|
||||||
|
--hash=sha256:cb0a2b4aa34f932c007117b194e945bd74e0ec24133ceb5bac59009cda1cb9f3
|
||||||
|
# via rich
|
||||||
|
mdurl==0.1.2 ; implementation_name == 'cpython' \
|
||||||
|
--hash=sha256:84008a41e51615a49fc9966191ff91509e3c40b939176e643fd50a5c2196b8f8 \
|
||||||
|
--hash=sha256:bb413d29f5eea38f31dd4754dd7377d4465116fb207585f97bf925588687c1ba
|
||||||
|
# via markdown-it-py
|
||||||
|
mutagen==1.47.0 \
|
||||||
|
--hash=sha256:719fadef0a978c31b4cf3c956261b3c58b6948b32023078a2117b1de09f0fc99 \
|
||||||
|
--hash=sha256:edd96f50c5907a9539d8e5bba7245f62c9f520aef333d13392a79a4f70aca719
|
||||||
|
# via yt-dlp
|
||||||
|
pycparser==3.0 ; implementation_name != 'PyPy' \
|
||||||
|
--hash=sha256:600f49d217304a5902ac3c37e1281c9fe94e4d0489de643a9504c5cdfdfc6b29 \
|
||||||
|
--hash=sha256:b727414169a36b7d524c1c3e31839a521725078d7b2ff038656844266160a992
|
||||||
|
# via cffi
|
||||||
|
pycryptodomex==3.23.0 \
|
||||||
|
--hash=sha256:02d87b80778c171445d67e23d1caef279bf4b25c3597050ccd2e13970b57fd51 \
|
||||||
|
--hash=sha256:06698f957fe1ab229a99ba2defeeae1c09af185baa909a31a5d1f9d42b1aaed6 \
|
||||||
|
--hash=sha256:14c37aaece158d0ace436f76a7bb19093db3b4deade9797abfc39ec6cd6cc2fe \
|
||||||
|
--hash=sha256:189afbc87f0b9f158386bf051f720e20fa6145975f1e76369303d0f31d1a8d7c \
|
||||||
|
--hash=sha256:43c446e2ba8df8889e0e16f02211c25b4934898384c1ec1ec04d7889c0333587 \
|
||||||
|
--hash=sha256:4f2596e643d4365e14d0879dc5aafe6355616c61c2176009270f3048f6d9a61f \
|
||||||
|
--hash=sha256:52e5ca58c3a0b0bd5e100a9fbc8015059b05cffc6c66ce9d98b4b45e023443b9 \
|
||||||
|
--hash=sha256:55ccbe27f049743a4caf4f4221b166560d3438d0b1e5ab929e07ae1702a4d6fd \
|
||||||
|
--hash=sha256:58b851b9effd0d072d4ca2e4542bf2a4abcf13c82a29fd2c93ce27ee2a2e9462 \
|
||||||
|
--hash=sha256:6b8962204c47464d5c1c4038abeadd4514a133b28748bcd9fa5b6d62e3cec6fa \
|
||||||
|
--hash=sha256:6bbcb1dd0f646484939e142462d9e532482bc74475cecf9c4903d4e1cd21f003 \
|
||||||
|
--hash=sha256:71909758f010c82bc99b0abf4ea12012c98962fbf0583c2164f8b84533c2e4da \
|
||||||
|
--hash=sha256:7b37e08e3871efe2187bc1fd9320cc81d87caf19816c648f24443483005ff886 \
|
||||||
|
--hash=sha256:8a4fcd42ccb04c31268d1efeecfccfd1249612b4de6374205376b8f280321744 \
|
||||||
|
--hash=sha256:91979028227543010d7b2ba2471cf1d1e398b3f183cb105ac584df0c36dac28d \
|
||||||
|
--hash=sha256:a33986a0066860f7fcf7c7bd2bc804fa90e434183645595ae7b33d01f3c91ed8 \
|
||||||
|
--hash=sha256:a9d446e844f08299236780f2efa9898c818fe7e02f17263866b8550c7d5fb328 \
|
||||||
|
--hash=sha256:b2c2537863eccef2d41061e82a881dcabb04944c5c06c5aa7110b577cc487545 \
|
||||||
|
--hash=sha256:bc65bdd9fc8de7a35a74cab1c898cab391a4add33a8fe740bda00f5976ca4708 \
|
||||||
|
--hash=sha256:bdc69d0d3d989a1029df0eed67cc5e8e5d968f3724f4519bd03e0ec68df7543c \
|
||||||
|
--hash=sha256:c25e30a20e1b426e1f0fa00131c516f16e474204eee1139d1603e132acffc314 \
|
||||||
|
--hash=sha256:c7947ab8d589e3178da3d7cdeabe14f841b391e17046954f2fbcd941705762b5 \
|
||||||
|
--hash=sha256:c885da45e70139464f082018ac527fdaad26f1657a99ee13eecdce0f0ca24ab4 \
|
||||||
|
--hash=sha256:da4fa650cef02db88c2b98acc5434461e027dce0ae8c22dd5a69013eaf510006 \
|
||||||
|
--hash=sha256:ebfff755c360d674306e5891c564a274a47953562b42fb74a5c25b8fc1fb1cb5 \
|
||||||
|
--hash=sha256:eca54f4bb349d45afc17e3011ed4264ef1cc9e266699874cdd1349c504e64798 \
|
||||||
|
--hash=sha256:f489c4765093fb60e2edafdf223397bc716491b2b69fe74367b70d6999257a5c \
|
||||||
|
--hash=sha256:fdfac7cda115bca3a5abb2f9e43bc2fb66c2b65ab074913643803ca7083a79ea
|
||||||
|
# via yt-dlp
|
||||||
|
pygments==2.19.2 ; implementation_name == 'cpython' \
|
||||||
|
--hash=sha256:636cb2477cec7f8952536970bc533bc43743542f70392ae026374600add5b887 \
|
||||||
|
--hash=sha256:86540386c03d588bb81d44bc3928634ff26449851e99741617ecb9037ee5ec0b
|
||||||
|
# via rich
|
||||||
|
requests==2.33.0 \
|
||||||
|
--hash=sha256:3324635456fa185245e24865e810cecec7b4caf933d7eb133dcde67d48cee69b \
|
||||||
|
--hash=sha256:c7ebc5e8b0f21837386ad0e1c8fe8b829fa5f544d8df3b2253bff14ef29d7652
|
||||||
|
# via yt-dlp
|
||||||
|
rich==14.3.3 ; implementation_name == 'cpython' \
|
||||||
|
--hash=sha256:793431c1f8619afa7d3b52b2cdec859562b950ea0d4b6b505397612db8d5362d \
|
||||||
|
--hash=sha256:b8daa0b9e4eef54dd8cf7c86c03713f53241884e814f4e2f5fb342fe520f639b
|
||||||
|
# via curl-cffi
|
||||||
|
urllib3==2.6.3 \
|
||||||
|
--hash=sha256:1b62b6884944a57dbe321509ab94fd4d3b307075e0c2eae991ac71ee15ad38ed \
|
||||||
|
--hash=sha256:bf272323e553dfb2e87d9bfd225ca7b0f467b919d7bbd355436d3fd37cb0acd4
|
||||||
|
# via
|
||||||
|
# requests
|
||||||
|
# yt-dlp
|
||||||
|
websockets==16.0 \
|
||||||
|
--hash=sha256:0298d07ee155e2e9fda5be8a9042200dd2e3bb0b8a38482156576f863a9d457c \
|
||||||
|
--hash=sha256:04cdd5d2d1dacbad0a7bf36ccbcd3ccd5a30ee188f2560b7a62a30d14107b31a \
|
||||||
|
--hash=sha256:08d7af67b64d29823fed316505a89b86705f2b7981c07848fb5e3ea3020c1abe \
|
||||||
|
--hash=sha256:152284a83a00c59b759697b7f9e9cddf4e3c7861dd0d964b472b70f78f89e80e \
|
||||||
|
--hash=sha256:1637db62fad1dc833276dded54215f2c7fa46912301a24bd94d45d46a011ceec \
|
||||||
|
--hash=sha256:19c4dc84098e523fd63711e563077d39e90ec6702aff4b5d9e344a60cb3c0cb1 \
|
||||||
|
--hash=sha256:1c1b30e4f497b0b354057f3467f56244c603a79c0d1dafce1d16c283c25f6e64 \
|
||||||
|
--hash=sha256:2b9f1e0d69bc60a4a87349d50c09a037a2607918746f07de04df9e43252c77a3 \
|
||||||
|
--hash=sha256:31a52addea25187bde0797a97d6fc3d2f92b6f72a9370792d65a6e84615ac8a8 \
|
||||||
|
--hash=sha256:32da954ffa2814258030e5a57bc73a3635463238e797c7375dc8091327434206 \
|
||||||
|
--hash=sha256:335c23addf3d5e6a8633f9f8eda77efad001671e80b95c491dd0924587ece0b3 \
|
||||||
|
--hash=sha256:3425ac5cf448801335d6fdc7ae1eb22072055417a96cc6b31b3861f455fbc156 \
|
||||||
|
--hash=sha256:349f83cd6c9a415428ee1005cadb5c2c56f4389bc06a9af16103c3bc3dcc8b7d \
|
||||||
|
--hash=sha256:37b31c1623c6605e4c00d466c9d633f9b812ea430c11c8a278774a1fde1acfa9 \
|
||||||
|
--hash=sha256:417b28978cdccab24f46400586d128366313e8a96312e4b9362a4af504f3bbad \
|
||||||
|
--hash=sha256:485c49116d0af10ac698623c513c1cc01c9446c058a4e61e3bf6c19dff7335a2 \
|
||||||
|
--hash=sha256:4a1aba3340a8dca8db6eb5a7986157f52eb9e436b74813764241981ca4888f03 \
|
||||||
|
--hash=sha256:50f23cdd8343b984957e4077839841146f67a3d31ab0d00e6b824e74c5b2f6e8 \
|
||||||
|
--hash=sha256:52a0fec0e6c8d9a784c2c78276a48a2bdf099e4ccc2a4cad53b27718dbfd0230 \
|
||||||
|
--hash=sha256:52ac480f44d32970d66763115edea932f1c5b1312de36df06d6b219f6741eed8 \
|
||||||
|
--hash=sha256:5569417dc80977fc8c2d43a86f78e0a5a22fee17565d78621b6bb264a115d4ea \
|
||||||
|
--hash=sha256:569d01a4e7fba956c5ae4fc988f0d4e187900f5497ce46339c996dbf24f17641 \
|
||||||
|
--hash=sha256:583b7c42688636f930688d712885cf1531326ee05effd982028212ccc13e5957 \
|
||||||
|
--hash=sha256:5a4b4cc550cb665dd8a47f868c8d04c8230f857363ad3c9caf7a0c3bf8c61ca6 \
|
||||||
|
--hash=sha256:5f451484aeb5cafee1ccf789b1b66f535409d038c56966d6101740c1614b86c6 \
|
||||||
|
--hash=sha256:5f6261a5e56e8d5c42a4497b364ea24d94d9563e8fbd44e78ac40879c60179b5 \
|
||||||
|
--hash=sha256:6e5a82b677f8f6f59e8dfc34ec06ca6b5b48bc4fcda346acd093694cc2c24d8f \
|
||||||
|
--hash=sha256:71c989cbf3254fbd5e84d3bff31e4da39c43f884e64f2551d14bb3c186230f00 \
|
||||||
|
--hash=sha256:781caf5e8eee67f663126490c2f96f40906594cb86b408a703630f95550a8c3e \
|
||||||
|
--hash=sha256:7be95cfb0a4dae143eaed2bcba8ac23f4892d8971311f1b06f3c6b78952ee70b \
|
||||||
|
--hash=sha256:7d837379b647c0c4c2355c2499723f82f1635fd2c26510e1f587d89bc2199e72 \
|
||||||
|
--hash=sha256:86890e837d61574c92a97496d590968b23c2ef0aeb8a9bc9421d174cd378ae39 \
|
||||||
|
--hash=sha256:878b336ac47938b474c8f982ac2f7266a540adc3fa4ad74ae96fea9823a02cc9 \
|
||||||
|
--hash=sha256:8b6e209ffee39ff1b6d0fa7bfef6de950c60dfb91b8fcead17da4ee539121a79 \
|
||||||
|
--hash=sha256:8cc451a50f2aee53042ac52d2d053d08bf89bcb31ae799cb4487587661c038a0 \
|
||||||
|
--hash=sha256:8d7f0659570eefb578dacde98e24fb60af35350193e4f56e11190787bee77dac \
|
||||||
|
--hash=sha256:8e1dab317b6e77424356e11e99a432b7cb2f3ec8c5ab4dabbcee6add48f72b35 \
|
||||||
|
--hash=sha256:8ff32bb86522a9e5e31439a58addbb0166f0204d64066fb955265c4e214160f0 \
|
||||||
|
--hash=sha256:95724e638f0f9c350bb1c2b0a7ad0e83d9cc0c9259f3ea94e40d7b02a2179ae5 \
|
||||||
|
--hash=sha256:9b5aca38b67492ef518a8ab76851862488a478602229112c4b0d58d63a7a4d5c \
|
||||||
|
--hash=sha256:a069d734c4a043182729edd3e9f247c3b2a4035415a9172fd0f1b71658a320a8 \
|
||||||
|
--hash=sha256:a0b31e0b424cc6b5a04b8838bbaec1688834b2383256688cf47eb97412531da1 \
|
||||||
|
--hash=sha256:a35539cacc3febb22b8f4d4a99cc79b104226a756aa7400adc722e83b0d03244 \
|
||||||
|
--hash=sha256:a5e18a238a2b2249c9a9235466b90e96ae4795672598a58772dd806edc7ac6d3 \
|
||||||
|
--hash=sha256:a653aea902e0324b52f1613332ddf50b00c06fdaf7e92624fbf8c77c78fa5767 \
|
||||||
|
--hash=sha256:abf050a199613f64c886ea10f38b47770a65154dc37181bfaff70c160f45315a \
|
||||||
|
--hash=sha256:af80d74d4edfa3cb9ed973a0a5ba2b2a549371f8a741e0800cb07becdd20f23d \
|
||||||
|
--hash=sha256:b14dc141ed6d2dde437cddb216004bcac6a1df0935d79656387bd41632ba0bbd \
|
||||||
|
--hash=sha256:b784ca5de850f4ce93ec85d3269d24d4c82f22b7212023c974c401d4980ebc5e \
|
||||||
|
--hash=sha256:bc59589ab64b0022385f429b94697348a6a234e8ce22544e3681b2e9331b5944 \
|
||||||
|
--hash=sha256:c0204dc62a89dc9d50d682412c10b3542d748260d743500a85c13cd1ee4bde82 \
|
||||||
|
--hash=sha256:c0ee0e63f23914732c6d7e0cce24915c48f3f1512ec1d079ed01fc629dab269d \
|
||||||
|
--hash=sha256:caab51a72c51973ca21fa8a18bd8165e1a0183f1ac7066a182ff27107b71e1a4 \
|
||||||
|
--hash=sha256:d6297ce39ce5c2e6feb13c1a996a2ded3b6832155fcfc920265c76f24c7cceb5 \
|
||||||
|
--hash=sha256:daa3b6ff70a9241cf6c7fc9e949d41232d9d7d26fd3522b1ad2b4d62487e9904 \
|
||||||
|
--hash=sha256:df57afc692e517a85e65b72e165356ed1df12386ecb879ad5693be08fac65dde \
|
||||||
|
--hash=sha256:e0334872c0a37b606418ac52f6ab9cfd17317ac26365f7f65e203e2d0d0d359f \
|
||||||
|
--hash=sha256:e6578ed5b6981005df1860a56e3617f14a6c307e6a71b4fff8c48fdc50f3ed2c \
|
||||||
|
--hash=sha256:eaded469f5e5b7294e2bdca0ab06becb6756ea86894a47806456089298813c89 \
|
||||||
|
--hash=sha256:f4a32d1bd841d4bcbffdcb3d2ce50c09c3909fbead375ab28d0181af89fd04da \
|
||||||
|
--hash=sha256:fd3cb4adb94a2a6e2b7c0d8d05cb94e6f1c81a0cf9dc2694fb65c7e8d94c42e4
|
||||||
|
# via yt-dlp
|
||||||
|
yt-dlp-ejs==0.8.0 \
|
||||||
|
--hash=sha256:79300e5fca7f937a1eeede11f0456862c1b41107ce1d726871e0207424f4bdb4 \
|
||||||
|
--hash=sha256:d5fa1639f63b5c4af8d932495f60689d5370f1a095782c944f7f62a303eb104e
|
||||||
|
# via yt-dlp
|
||||||
41
bundle/requirements/requirements-win-x64-pyinstaller.txt
Normal file
41
bundle/requirements/requirements-win-x64-pyinstaller.txt
Normal file
@ -0,0 +1,41 @@
|
|||||||
|
# This file was autogenerated by uv via the following command:
|
||||||
|
# python -m devscripts.update_requirements
|
||||||
|
altgraph==0.17.5 \
|
||||||
|
--hash=sha256:c87b395dd12fabde9c99573a9749d67da8d29ef9de0125c7f536699b4a9bc9e7 \
|
||||||
|
--hash=sha256:f3a22400bce1b0c701683820ac4f3b159cd301acab067c51c653e06961600597
|
||||||
|
# via
|
||||||
|
# macholib
|
||||||
|
# pyinstaller
|
||||||
|
macholib==1.16.4 ; sys_platform == 'darwin' \
|
||||||
|
--hash=sha256:da1a3fa8266e30f0ce7e97c6a54eefaae8edd1e5f86f3eb8b95457cae90265ea \
|
||||||
|
--hash=sha256:f408c93ab2e995cd2c46e34fe328b130404be143469e41bc366c807448979362
|
||||||
|
# via pyinstaller
|
||||||
|
packaging==26.0 \
|
||||||
|
--hash=sha256:00243ae351a257117b6a241061796684b084ed1c516a08c48a3f7e147a9d80b4 \
|
||||||
|
--hash=sha256:b36f1fef9334a5588b4166f8bcd26a14e521f2b55e6b9de3aaa80d3ff7a37529
|
||||||
|
# via
|
||||||
|
# pyinstaller
|
||||||
|
# pyinstaller-hooks-contrib
|
||||||
|
pefile==2024.8.26 ; sys_platform == 'win32' \
|
||||||
|
--hash=sha256:3ff6c5d8b43e8c37bb6e6dd5085658d658a7a0bdcd20b6a07b1fcfc1c4e9d632 \
|
||||||
|
--hash=sha256:76f8b485dcd3b1bb8166f1128d395fa3d87af26360c2358fb75b80019b957c6f
|
||||||
|
# via pyinstaller
|
||||||
|
pyinstaller-hooks-contrib==2026.3 \
|
||||||
|
--hash=sha256:5ecd1068ad262afecadf07556279d2be52ca93a88b049fae17f1a2eb2969254a \
|
||||||
|
--hash=sha256:800d3a198a49a6cd0de2d7fb795005fdca7a0222ed9cb47c0691abd1c27b9310
|
||||||
|
# via pyinstaller
|
||||||
|
pywin32-ctypes==0.2.3 ; sys_platform == 'win32' \
|
||||||
|
--hash=sha256:8a1513379d709975552d202d942d9837758905c8d01eb82b8bcc30918929e7b8 \
|
||||||
|
--hash=sha256:d162dc04946d704503b2edc4d55f3dba5c1d539ead017afa00142c38b9885755
|
||||||
|
# via pyinstaller
|
||||||
|
setuptools==82.0.1 \
|
||||||
|
--hash=sha256:7d872682c5d01cfde07da7bccc7b65469d3dca203318515ada1de5eda35efbf9 \
|
||||||
|
--hash=sha256:a59e362652f08dcd477c78bb6e7bd9d80a7995bc73ce773050228a348ce2e5bb
|
||||||
|
# via
|
||||||
|
# pyinstaller
|
||||||
|
# pyinstaller-hooks-contrib
|
||||||
|
|
||||||
|
# The following packages were excluded from the output:
|
||||||
|
# pyinstaller
|
||||||
|
pyinstaller @ https://github.com/yt-dlp/Pyinstaller-Builds/releases/download/2026.03.17.175201/pyinstaller-6.19.0-py3-none-win_amd64.whl \
|
||||||
|
--hash=sha256:1a5f4b844abd02bd758ae6b64c5243fed1a2fa641dbcab2f79480c6a7b957e2d
|
||||||
413
bundle/requirements/requirements-win-x64.txt
Normal file
413
bundle/requirements/requirements-win-x64.txt
Normal file
@ -0,0 +1,413 @@
|
|||||||
|
# This file was autogenerated by uv via the following command:
|
||||||
|
# uv export --no-python-downloads --no-progress --color=never --format=requirements.txt --frozen --refresh --no-emit-project --no-default-groups --extra=default --extra=curl-cffi --output-file=bundle/requirements/requirements-win-x64.txt
|
||||||
|
brotli==1.2.0 ; implementation_name == 'cpython' and sys_platform != 'ios' \
|
||||||
|
--hash=sha256:022426c9e99fd65d9475dce5c195526f04bb8be8907607e27e747893f6ee3e24 \
|
||||||
|
--hash=sha256:072e7624b1fc4d601036ab3f4f27942ef772887e876beff0301d261210bca97f \
|
||||||
|
--hash=sha256:0bbd5b5ccd157ae7913750476d48099aaf507a79841c0d04a9db4415b14842de \
|
||||||
|
--hash=sha256:0cf8c3b8ba93d496b2fae778039e2f5ecc7cff99df84df337ca31d8f2252896c \
|
||||||
|
--hash=sha256:15b33fe93cedc4caaff8a0bd1eb7e3dab1c61bb22a0bf5bdfdfd97cd7da79744 \
|
||||||
|
--hash=sha256:1b1d6a4efedd53671c793be6dd760fcf2107da3a52331ad9ea429edf0902f27a \
|
||||||
|
--hash=sha256:1b557b29782a643420e08d75aea889462a4a8796e9a6cf5621ab05a3f7da8ef2 \
|
||||||
|
--hash=sha256:260d3692396e1895c5034f204f0db022c056f9e2ac841593a4cf9426e2a3faca \
|
||||||
|
--hash=sha256:26e8d3ecb0ee458a9804f47f21b74845cc823fd1bb19f02272be70774f56e2a6 \
|
||||||
|
--hash=sha256:2a7f1d03727130fc875448b65b127a9ec5d06d19d0148e7554384229706f9d1b \
|
||||||
|
--hash=sha256:2e1ad3fda65ae0d93fec742a128d72e145c9c7a99ee2fcd667785d99eb25a7fe \
|
||||||
|
--hash=sha256:3219bd9e69868e57183316ee19c84e03e8f8b5a1d1f2667e1aa8c2f91cb061ac \
|
||||||
|
--hash=sha256:350c8348f0e76fff0a0fd6c26755d2653863279d086d3aa2c290a6a7251135dd \
|
||||||
|
--hash=sha256:35d382625778834a7f3061b15423919aa03e4f5da34ac8e02c074e4b75ab4f84 \
|
||||||
|
--hash=sha256:3b90b767916ac44e93a8e28ce6adf8d551e43affb512f2377c732d486ac6514e \
|
||||||
|
--hash=sha256:3e1b35d56856f3ed326b140d3c6d9db91740f22e14b06e840fe4bb1923439a18 \
|
||||||
|
--hash=sha256:3f3c908bcc404c90c77d5a073e55271a0a498f4e0756e48127c35d91cf155947 \
|
||||||
|
--hash=sha256:40d918bce2b427a0c4ba189df7a006ac0c7277c180aee4617d99e9ccaaf59e6a \
|
||||||
|
--hash=sha256:4ecdb3b6dc36e6d6e14d3a1bdc6c1057c8cbf80db04031d566eb6080ce283a48 \
|
||||||
|
--hash=sha256:54a50a9dad16b32136b2241ddea9e4df159b41247b2ce6aac0b3276a66a8f1e5 \
|
||||||
|
--hash=sha256:67a91c5187e1eec76a61625c77a6c8c785650f5b576ca732bd33ef58b0dff49c \
|
||||||
|
--hash=sha256:6be67c19e0b0c56365c6a76e393b932fb0e78b3b56b711d180dd7013cb1fd984 \
|
||||||
|
--hash=sha256:6c12dad5cd04530323e723787ff762bac749a7b256a5bece32b2243dd5c27b21 \
|
||||||
|
--hash=sha256:7547369c4392b47d30a3467fe8c3330b4f2e0f7730e45e3103d7d636678a808b \
|
||||||
|
--hash=sha256:7a47ce5c2288702e09dc22a44d0ee6152f2c7eda97b3c8482d826a1f3cfc7da7 \
|
||||||
|
--hash=sha256:7a61c06b334bd99bc5ae84f1eeb36bfe01400264b3c352f968c6e30a10f9d08b \
|
||||||
|
--hash=sha256:81da1b229b1889f25adadc929aeb9dbc4e922bd18561b65b08dd9343cfccca84 \
|
||||||
|
--hash=sha256:832c115a020e463c2f67664560449a7bea26b0c1fdd690352addad6d0a08714d \
|
||||||
|
--hash=sha256:844a8ceb8483fefafc412f85c14f2aae2fb69567bf2a0de53cdb88b73e7c43ae \
|
||||||
|
--hash=sha256:898be2be399c221d2671d29eed26b6b2713a02c2119168ed914e7d00ceadb56f \
|
||||||
|
--hash=sha256:9322b9f8656782414b37e6af884146869d46ab85158201d82bab9abbcb971dc7 \
|
||||||
|
--hash=sha256:963a08f3bebd8b75ac57661045402da15991468a621f014be54e50f53a58d19e \
|
||||||
|
--hash=sha256:9c79f57faa25d97900bfb119480806d783fba83cd09ee0b33c17623935b05fa3 \
|
||||||
|
--hash=sha256:9e5825ba2c9998375530504578fd4d5d1059d09621a02065d1b6bfc41a8e05ab \
|
||||||
|
--hash=sha256:a1778532b978d2536e79c05dac2d8cd857f6c55cd0c95ace5b03740824e0e2f1 \
|
||||||
|
--hash=sha256:aa47441fa3026543513139cb8926a92a8e305ee9c71a6209ef7a97d91640ea03 \
|
||||||
|
--hash=sha256:acec55bb7c90f1dfc476126f9711a8e81c9af7fb617409a9ee2953115343f08d \
|
||||||
|
--hash=sha256:adedc4a67e15327dfdd04884873c6d5a01d3e3b6f61406f99b1ed4865a2f6d28 \
|
||||||
|
--hash=sha256:af43b8711a8264bb4e7d6d9a6d004c3a2019c04c01127a868709ec29962b6036 \
|
||||||
|
--hash=sha256:b232029d100d393ae3c603c8ffd7e3fe6f798c5e28ddca5feabb8e8fdb732997 \
|
||||||
|
--hash=sha256:b35c13ce241abdd44cb8ca70683f20c0c079728a36a996297adb5334adfc1c44 \
|
||||||
|
--hash=sha256:b63daa43d82f0cdabf98dee215b375b4058cce72871fd07934f179885aad16e8 \
|
||||||
|
--hash=sha256:c8565e3cdc1808b1a34714b553b262c5de5fbda202285782173ec137fd13709f \
|
||||||
|
--hash=sha256:cf9cba6f5b78a2071ec6fb1e7bd39acf35071d90a81231d67e92d637776a6a63 \
|
||||||
|
--hash=sha256:d2d085ded05278d1c7f65560aae97b3160aeb2ea2c0b3e26204856beccb60888 \
|
||||||
|
--hash=sha256:e310f77e41941c13340a95976fe66a8a95b01e783d430eeaf7a2f87e0a57dd0a \
|
||||||
|
--hash=sha256:e7c0af964e0b4e3412a0ebf341ea26ec767fa0b4cf81abb5e897c9338b5ad6a3 \
|
||||||
|
--hash=sha256:e99befa0b48f3cd293dafeacdd0d191804d105d279e0b387a32054c1180f3161 \
|
||||||
|
--hash=sha256:ef87b8ab2704da227e83a246356a2b179ef826f550f794b2c52cddb4efbd0196 \
|
||||||
|
--hash=sha256:fc1530af5c3c275b8524f2e24841cbe2599d74462455e9bae5109e9ff42e9361 \
|
||||||
|
--hash=sha256:ff09cd8c5eec3b9d02d2408db41be150d8891c5566addce57513bf546e3d6c6d
|
||||||
|
# via yt-dlp
|
||||||
|
brotlicffi==1.2.0.1 ; implementation_name != 'cpython' \
|
||||||
|
--hash=sha256:2c85e65913cf2b79c57a3fdd05b98d9731d9255dc0cb696b09376cc091b9cddd \
|
||||||
|
--hash=sha256:37cb587d32bf7168e2218c455e22e409ad1f3157c6c71945879a311f3e6b6abf \
|
||||||
|
--hash=sha256:3c9544f83cb715d95d7eab3af4adbbef8b2093ad6382288a83b3a25feb1a57ec \
|
||||||
|
--hash=sha256:535f2d05d0273408abc13fc0eebb467afac17b0ad85090c8913690d40207dac5 \
|
||||||
|
--hash=sha256:625f8115d32ae9c0740d01ea51518437c3fbaa3e78d41cb18459f6f7ac326000 \
|
||||||
|
--hash=sha256:6f3314a3476f59e5443f9f72a6dff16edc0c3463c9b318feaef04ae3e4683f5a \
|
||||||
|
--hash=sha256:82ea52e2b5d3145b6c406ebd3efb0d55db718b7ad996bd70c62cec0439de1187 \
|
||||||
|
--hash=sha256:91ba5f0ccc040f6ff8f7efaf839f797723d03ed46acb8ae9408f99ffd2572cf4 \
|
||||||
|
--hash=sha256:9d6ba65dd528892b4d9960beba2ae011a753620bcfc66cf6fa3cee18d7b0baa4 \
|
||||||
|
--hash=sha256:be9a670c6811af30a4bd42d7116dc5895d3b41beaa8ed8a89050447a0181f5ce \
|
||||||
|
--hash=sha256:c20d5c596278307ad06414a6d95a892377ea274a5c6b790c2548c009385d621c \
|
||||||
|
--hash=sha256:ce17eb798ca59ecec67a9bb3fd7a4304e120d1cd02953ce522d959b9a84d58ac \
|
||||||
|
--hash=sha256:da2e82a08e7778b8bc539d27ca03cdd684113e81394bfaaad8d0dfc6a17ddede \
|
||||||
|
--hash=sha256:e015af99584c6db1490a69a210c765953e473e63adc2d891ac3062a737c9e851 \
|
||||||
|
--hash=sha256:f2a5575653b0672638ba039b82fda56854934d7a6a24d4b8b5033f73ab43cbc1
|
||||||
|
# via yt-dlp
|
||||||
|
certifi==2026.2.25 \
|
||||||
|
--hash=sha256:027692e4402ad994f1c42e52a4997a9763c646b73e4096e4d5d6db8af1d6f0fa \
|
||||||
|
--hash=sha256:e887ab5cee78ea814d3472169153c2d12cd43b14bd03329a39a9c6e2e80bfba7
|
||||||
|
# via
|
||||||
|
# curl-cffi
|
||||||
|
# requests
|
||||||
|
# yt-dlp
|
||||||
|
cffi==2.0.0 \
|
||||||
|
--hash=sha256:00bdf7acc5f795150faa6957054fbbca2439db2f775ce831222b66f192f03beb \
|
||||||
|
--hash=sha256:07b271772c100085dd28b74fa0cd81c8fb1a3ba18b21e03d7c27f3436a10606b \
|
||||||
|
--hash=sha256:087067fa8953339c723661eda6b54bc98c5625757ea62e95eb4898ad5e776e9f \
|
||||||
|
--hash=sha256:0a1527a803f0a659de1af2e1fd700213caba79377e27e4693648c2923da066f9 \
|
||||||
|
--hash=sha256:0cf2d91ecc3fcc0625c2c530fe004f82c110405f101548512cce44322fa8ac44 \
|
||||||
|
--hash=sha256:12873ca6cb9b0f0d3a0da705d6086fe911591737a59f28b7936bdfed27c0d47c \
|
||||||
|
--hash=sha256:19f705ada2530c1167abacb171925dd886168931e0a7b78f5bffcae5c6b5be75 \
|
||||||
|
--hash=sha256:1e3a615586f05fc4065a8b22b8152f0c1b00cdbc60596d187c2a74f9e3036e4e \
|
||||||
|
--hash=sha256:1f72fb8906754ac8a2cc3f9f5aaa298070652a0ffae577e0ea9bd480dc3c931a \
|
||||||
|
--hash=sha256:1fc9ea04857caf665289b7a75923f2c6ed559b8298a1b8c49e59f7dd95c8481e \
|
||||||
|
--hash=sha256:203a48d1fb583fc7d78a4c6655692963b860a417c0528492a6bc21f1aaefab25 \
|
||||||
|
--hash=sha256:21d1152871b019407d8ac3985f6775c079416c282e431a4da6afe7aefd2bccbe \
|
||||||
|
--hash=sha256:24b6f81f1983e6df8db3adc38562c83f7d4a0c36162885ec7f7b77c7dcbec97b \
|
||||||
|
--hash=sha256:256f80b80ca3853f90c21b23ee78cd008713787b1b1e93eae9f3d6a7134abd91 \
|
||||||
|
--hash=sha256:28a3a209b96630bca57cce802da70c266eb08c6e97e5afd61a75611ee6c64592 \
|
||||||
|
--hash=sha256:2c8f814d84194c9ea681642fd164267891702542f028a15fc97d4674b6206187 \
|
||||||
|
--hash=sha256:2de9a304e27f7596cd03d16f1b7c72219bd944e99cc52b84d0145aefb07cbd3c \
|
||||||
|
--hash=sha256:38100abb9d1b1435bc4cc340bb4489635dc2f0da7456590877030c9b3d40b0c1 \
|
||||||
|
--hash=sha256:3925dd22fa2b7699ed2617149842d2e6adde22b262fcbfada50e3d195e4b3a94 \
|
||||||
|
--hash=sha256:3e17ed538242334bf70832644a32a7aae3d83b57567f9fd60a26257e992b79ba \
|
||||||
|
--hash=sha256:3e837e369566884707ddaf85fc1744b47575005c0a229de3327f8f9a20f4efeb \
|
||||||
|
--hash=sha256:44d1b5909021139fe36001ae048dbdde8214afa20200eda0f64c068cac5d5529 \
|
||||||
|
--hash=sha256:45d5e886156860dc35862657e1494b9bae8dfa63bf56796f2fb56e1679fc0bca \
|
||||||
|
--hash=sha256:4671d9dd5ec934cb9a73e7ee9676f9362aba54f7f34910956b84d727b0d73fb6 \
|
||||||
|
--hash=sha256:53f77cbe57044e88bbd5ed26ac1d0514d2acf0591dd6bb02a3ae37f76811b80c \
|
||||||
|
--hash=sha256:5eda85d6d1879e692d546a078b44251cdd08dd1cfb98dfb77b670c97cee49ea0 \
|
||||||
|
--hash=sha256:5fed36fccc0612a53f1d4d9a816b50a36702c28a2aa880cb8a122b3466638743 \
|
||||||
|
--hash=sha256:66f011380d0e49ed280c789fbd08ff0d40968ee7b665575489afa95c98196ab5 \
|
||||||
|
--hash=sha256:6824f87845e3396029f3820c206e459ccc91760e8fa24422f8b0c3d1731cbec5 \
|
||||||
|
--hash=sha256:6c6c373cfc5c83a975506110d17457138c8c63016b563cc9ed6e056a82f13ce4 \
|
||||||
|
--hash=sha256:6d02d6655b0e54f54c4ef0b94eb6be0607b70853c45ce98bd278dc7de718be5d \
|
||||||
|
--hash=sha256:6d50360be4546678fc1b79ffe7a66265e28667840010348dd69a314145807a1b \
|
||||||
|
--hash=sha256:730cacb21e1bdff3ce90babf007d0a0917cc3e6492f336c2f0134101e0944f93 \
|
||||||
|
--hash=sha256:737fe7d37e1a1bffe70bd5754ea763a62a066dc5913ca57e957824b72a85e205 \
|
||||||
|
--hash=sha256:74a03b9698e198d47562765773b4a8309919089150a0bb17d829ad7b44b60d27 \
|
||||||
|
--hash=sha256:7553fb2090d71822f02c629afe6042c299edf91ba1bf94951165613553984512 \
|
||||||
|
--hash=sha256:7a66c7204d8869299919db4d5069a82f1561581af12b11b3c9f48c584eb8743d \
|
||||||
|
--hash=sha256:7cc09976e8b56f8cebd752f7113ad07752461f48a58cbba644139015ac24954c \
|
||||||
|
--hash=sha256:81afed14892743bbe14dacb9e36d9e0e504cd204e0b165062c488942b9718037 \
|
||||||
|
--hash=sha256:8941aaadaf67246224cee8c3803777eed332a19d909b47e29c9842ef1e79ac26 \
|
||||||
|
--hash=sha256:8ea985900c5c95ce9db1745f7933eeef5d314f0565b27625d9a10ec9881e1bfb \
|
||||||
|
--hash=sha256:8eca2a813c1cb7ad4fb74d368c2ffbbb4789d377ee5bb8df98373c2cc0dee76c \
|
||||||
|
--hash=sha256:92b68146a71df78564e4ef48af17551a5ddd142e5190cdf2c5624d0c3ff5b2e8 \
|
||||||
|
--hash=sha256:9332088d75dc3241c702d852d4671613136d90fa6881da7d770a483fd05248b4 \
|
||||||
|
--hash=sha256:94698a9c5f91f9d138526b48fe26a199609544591f859c870d477351dc7b2414 \
|
||||||
|
--hash=sha256:9a67fc9e8eb39039280526379fb3a70023d77caec1852002b4da7e8b270c4dd9 \
|
||||||
|
--hash=sha256:9de40a7b0323d889cf8d23d1ef214f565ab154443c42737dfe52ff82cf857664 \
|
||||||
|
--hash=sha256:a05d0c237b3349096d3981b727493e22147f934b20f6f125a3eba8f994bec4a9 \
|
||||||
|
--hash=sha256:afb8db5439b81cf9c9d0c80404b60c3cc9c3add93e114dcae767f1477cb53775 \
|
||||||
|
--hash=sha256:b18a3ed7d5b3bd8d9ef7a8cb226502c6bf8308df1525e1cc676c3680e7176739 \
|
||||||
|
--hash=sha256:b1e74d11748e7e98e2f426ab176d4ed720a64412b6a15054378afdb71e0f37dc \
|
||||||
|
--hash=sha256:b21e08af67b8a103c71a250401c78d5e0893beff75e28c53c98f4de42f774062 \
|
||||||
|
--hash=sha256:b4c854ef3adc177950a8dfc81a86f5115d2abd545751a304c5bcf2c2c7283cfe \
|
||||||
|
--hash=sha256:baf5215e0ab74c16e2dd324e8ec067ef59e41125d3eade2b863d294fd5035c92 \
|
||||||
|
--hash=sha256:c649e3a33450ec82378822b3dad03cc228b8f5963c0c12fc3b1e0ab940f768a5 \
|
||||||
|
--hash=sha256:c654de545946e0db659b3400168c9ad31b5d29593291482c43e3564effbcee13 \
|
||||||
|
--hash=sha256:c6638687455baf640e37344fe26d37c404db8b80d037c3d29f58fe8d1c3b194d \
|
||||||
|
--hash=sha256:c8d3b5532fc71b7a77c09192b4a5a200ea992702734a2e9279a37f2478236f26 \
|
||||||
|
--hash=sha256:cf364028c016c03078a23b503f02058f1814320a56ad535686f90565636a9495 \
|
||||||
|
--hash=sha256:d48a880098c96020b02d5a1f7d9251308510ce8858940e6fa99ece33f610838b \
|
||||||
|
--hash=sha256:d68b6cef7827e8641e8ef16f4494edda8b36104d79773a334beaa1e3521430f6 \
|
||||||
|
--hash=sha256:d9b29c1f0ae438d5ee9acb31cadee00a58c46cc9c0b2f9038c6b0b3470877a8c \
|
||||||
|
--hash=sha256:d9b97165e8aed9272a6bb17c01e3cc5871a594a446ebedc996e2397a1c1ea8ef \
|
||||||
|
--hash=sha256:da68248800ad6320861f129cd9c1bf96ca849a2771a59e0344e88681905916f5 \
|
||||||
|
--hash=sha256:da902562c3e9c550df360bfa53c035b2f241fed6d9aef119048073680ace4a18 \
|
||||||
|
--hash=sha256:dbd5c7a25a7cb98f5ca55d258b103a2054f859a46ae11aaf23134f9cc0d356ad \
|
||||||
|
--hash=sha256:dd4f05f54a52fb558f1ba9f528228066954fee3ebe629fc1660d874d040ae5a3 \
|
||||||
|
--hash=sha256:e11e82b744887154b182fd3e7e8512418446501191994dbf9c9fc1f32cc8efd5 \
|
||||||
|
--hash=sha256:f73b96c41e3b2adedc34a7356e64c8eb96e03a3782b535e043a986276ce12a49 \
|
||||||
|
--hash=sha256:f93fd8e5c8c0a4aa1f424d6173f14a892044054871c771f8566e4008eaa359d2 \
|
||||||
|
--hash=sha256:fc33c5141b55ed366cfaad382df24fe7dcbc686de5be719b207bb248e3053dc5 \
|
||||||
|
--hash=sha256:fc7de24befaeae77ba923797c7c87834c73648a05a4bde34b3b7e5588973a453
|
||||||
|
# via
|
||||||
|
# brotlicffi
|
||||||
|
# curl-cffi
|
||||||
|
charset-normalizer==3.4.6 \
|
||||||
|
--hash=sha256:06a7e86163334edfc5d20fe104db92fcd666e5a5df0977cb5680a506fe26cc8e \
|
||||||
|
--hash=sha256:0c173ce3a681f309f31b87125fecec7a5d1347261ea11ebbb856fa6006b23c8c \
|
||||||
|
--hash=sha256:0e28d62a8fc7a1fa411c43bd65e346f3bce9716dc51b897fbe930c5987b402d5 \
|
||||||
|
--hash=sha256:0e901eb1049fdb80f5bd11ed5ea1e498ec423102f7a9b9e4645d5b8204ff2815 \
|
||||||
|
--hash=sha256:11afb56037cbc4b1555a34dd69151e8e069bee82e613a73bef6e714ce733585f \
|
||||||
|
--hash=sha256:150b8ce8e830eb7ccb029ec9ca36022f756986aaaa7956aad6d9ec90089338c0 \
|
||||||
|
--hash=sha256:172985e4ff804a7ad08eebec0a1640ece87ba5041d565fff23c8f99c1f389484 \
|
||||||
|
--hash=sha256:197c1a244a274bb016dd8b79204850144ef77fe81c5b797dc389327adb552407 \
|
||||||
|
--hash=sha256:1ae6b62897110aa7c79ea2f5dd38d1abca6db663687c0b1ad9aed6f6bae3d9d6 \
|
||||||
|
--hash=sha256:22c6f0c2fbc31e76c3b8a86fba1a56eda6166e238c29cdd3d14befdb4a4e4815 \
|
||||||
|
--hash=sha256:231d4da14bcd9301310faf492051bee27df11f2bc7549bc0bb41fef11b82daa2 \
|
||||||
|
--hash=sha256:259695e2ccc253feb2a016303543d691825e920917e31f894ca1a687982b1de4 \
|
||||||
|
--hash=sha256:2a24157fa36980478dd1770b585c0f30d19e18f4fb0c47c13aa568f871718579 \
|
||||||
|
--hash=sha256:2b1a63e8224e401cafe7739f77efd3f9e7f5f2026bda4aead8e59afab537784f \
|
||||||
|
--hash=sha256:2e1d8ca8611099001949d1cdfaefc510cf0f212484fe7c565f735b68c78c3c95 \
|
||||||
|
--hash=sha256:2ef7fedc7a6ecbe99969cd09632516738a97eeb8bd7258bf8a0f23114c057dab \
|
||||||
|
--hash=sha256:30f445ae60aad5e1f8bdbb3108e39f6fbc09f4ea16c815c66578878325f8f15a \
|
||||||
|
--hash=sha256:34315ff4fc374b285ad7f4a0bf7dcbfe769e1b104230d40f49f700d4ab6bbd84 \
|
||||||
|
--hash=sha256:3778fd7d7cd04ae8f54651f4a7a0bd6e39a0cf20f801720a4c21d80e9b7ad6b0 \
|
||||||
|
--hash=sha256:39f5068d35621da2881271e5c3205125cc456f54e9030d3f723288c873a71bf9 \
|
||||||
|
--hash=sha256:404a1e552cf5b675a87f0651f8b79f5f1e6fd100ee88dc612f89aa16abd4486f \
|
||||||
|
--hash=sha256:419a9d91bd238052642a51938af8ac05da5b3343becde08d5cdeab9046df9ee1 \
|
||||||
|
--hash=sha256:423fb7e748a08f854a08a222b983f4df1912b1daedce51a72bd24fe8f26a1843 \
|
||||||
|
--hash=sha256:4482481cb0572180b6fd976a4d5c72a30263e98564da68b86ec91f0fe35e8565 \
|
||||||
|
--hash=sha256:47955475ac79cc504ef2704b192364e51d0d473ad452caedd0002605f780101c \
|
||||||
|
--hash=sha256:4be9f4830ba8741527693848403e2c457c16e499100963ec711b1c6f2049b7c7 \
|
||||||
|
--hash=sha256:51fb3c322c81d20567019778cb5a4a6f2dc1c200b886bc0d636238e364848c89 \
|
||||||
|
--hash=sha256:5273b9f0b5835ff0350c0828faea623c68bfa65b792720c453e22b25cc72930f \
|
||||||
|
--hash=sha256:530d548084c4a9f7a16ed4a294d459b4f229db50df689bfe92027452452943a0 \
|
||||||
|
--hash=sha256:530e8cebeea0d76bdcf93357aa5e41336f48c3dc709ac52da2bb167c5b8271d9 \
|
||||||
|
--hash=sha256:572d7c822caf521f0525ba1bce1a622a0b85cf47ffbdae6c9c19e3b5ac3c4389 \
|
||||||
|
--hash=sha256:58c948d0d086229efc484fe2f30c2d382c86720f55cd9bc33591774348ad44e0 \
|
||||||
|
--hash=sha256:5d11595abf8dd942a77883a39d81433739b287b6aa71620f15164f8096221b30 \
|
||||||
|
--hash=sha256:5f8ddd609f9e1af8c7bd6e2aca279c931aefecd148a14402d4e368f3171769fd \
|
||||||
|
--hash=sha256:5feb91325bbceade6afab43eb3b508c63ee53579fe896c77137ded51c6b6958e \
|
||||||
|
--hash=sha256:60c74963d8350241a79cb8feea80e54d518f72c26db618862a8f53e5023deaf9 \
|
||||||
|
--hash=sha256:613f19aa6e082cf96e17e3ffd89383343d0d589abda756b7764cf78361fd41dc \
|
||||||
|
--hash=sha256:695f5c2823691a25f17bc5d5ffe79fa90972cc34b002ac6c843bb8a1720e950d \
|
||||||
|
--hash=sha256:6cceb5473417d28edd20c6c984ab6fee6c6267d38d906823ebfe20b03d607dc2 \
|
||||||
|
--hash=sha256:74119174722c4349af9708993118581686f343adc1c8c9c007d59be90d077f3f \
|
||||||
|
--hash=sha256:74a2e659c7ecbc73562e2a15e05039f1e22c75b7c7618b4b574a3ea9118d1557 \
|
||||||
|
--hash=sha256:7504e9b7dc05f99a9bbb4525c67a2c155073b44d720470a148b34166a69c054e \
|
||||||
|
--hash=sha256:79090741d842f564b1b2827c0b82d846405b744d31e84f18d7a7b41c20e473ff \
|
||||||
|
--hash=sha256:7a6967aaf043bceabab5412ed6bd6bd26603dae84d5cb75bf8d9a74a4959d398 \
|
||||||
|
--hash=sha256:7bda6eebafd42133efdca535b04ccb338ab29467b3f7bf79569883676fc628db \
|
||||||
|
--hash=sha256:7edbed096e4a4798710ed6bc75dcaa2a21b68b6c356553ac4823c3658d53743a \
|
||||||
|
--hash=sha256:7f9019c9cb613f084481bd6a100b12e1547cf2efe362d873c2e31e4035a6fa43 \
|
||||||
|
--hash=sha256:80d0a5615143c0b3225e5e3ef22c8d5d51f3f72ce0ea6fb84c943546c7b25b6c \
|
||||||
|
--hash=sha256:82060f995ab5003a2d6e0f4ad29065b7672b6593c8c63559beefe5b443242c3e \
|
||||||
|
--hash=sha256:836ab36280f21fc1a03c99cd05c6b7af70d2697e374c7af0b61ed271401a72a2 \
|
||||||
|
--hash=sha256:87725cfb1a4f1f8c2fc9890ae2f42094120f4b44db9360be5d99a4c6b0e03a9e \
|
||||||
|
--hash=sha256:899d28f422116b08be5118ef350c292b36fc15ec2daeb9ea987c89281c7bb5c4 \
|
||||||
|
--hash=sha256:8bea55c4eef25b0b19a0337dc4e3f9a15b00d569c77211fa8cde38684f234fb7 \
|
||||||
|
--hash=sha256:8e5a94886bedca0f9b78fecd6afb6629142fd2605aa70a125d49f4edc6037ee6 \
|
||||||
|
--hash=sha256:90ca27cd8da8118b18a52d5f547859cc1f8354a00cd1e8e5120df3e30d6279e5 \
|
||||||
|
--hash=sha256:92734d4d8d187a354a556626c221cd1a892a4e0802ccb2af432a1d85ec012194 \
|
||||||
|
--hash=sha256:947cf925bc916d90adba35a64c82aace04fa39b46b52d4630ece166655905a69 \
|
||||||
|
--hash=sha256:95b52c68d64c1878818687a473a10547b3292e82b6f6fe483808fb1468e2f52f \
|
||||||
|
--hash=sha256:97d0235baafca5f2b09cf332cc275f021e694e8362c6bb9c96fc9a0eb74fc316 \
|
||||||
|
--hash=sha256:9ca4c0b502ab399ef89248a2c84c54954f77a070f28e546a85e91da627d1301e \
|
||||||
|
--hash=sha256:9cc4fc6c196d6a8b76629a70ddfcd4635a6898756e2d9cac5565cf0654605d73 \
|
||||||
|
--hash=sha256:9cc6e6d9e571d2f863fa77700701dae73ed5f78881efc8b3f9a4398772ff53e8 \
|
||||||
|
--hash=sha256:a056d1ad2633548ca18ffa2f85c202cfb48b68615129143915b8dc72a806a923 \
|
||||||
|
--hash=sha256:a26611d9987b230566f24a0a125f17fe0de6a6aff9f25c9f564aaa2721a5fb88 \
|
||||||
|
--hash=sha256:a4474d924a47185a06411e0064b803c68be044be2d60e50e8bddcc2649957c1f \
|
||||||
|
--hash=sha256:a4ea868bc28109052790eb2b52a9ab33f3aa7adc02f96673526ff47419490e21 \
|
||||||
|
--hash=sha256:a9e68c9d88823b274cf1e72f28cb5dc89c990edf430b0bfd3e2fb0785bfeabf4 \
|
||||||
|
--hash=sha256:aa9cccf4a44b9b62d8ba8b4dd06c649ba683e4bf04eea606d2e94cfc2d6ff4d6 \
|
||||||
|
--hash=sha256:ac2393c73378fea4e52aa56285a3d64be50f1a12395afef9cce47772f60334c2 \
|
||||||
|
--hash=sha256:ad8faf8df23f0378c6d527d8b0b15ea4a2e23c89376877c598c4870d1b2c7866 \
|
||||||
|
--hash=sha256:b35b200d6a71b9839a46b9b7fff66b6638bb52fc9658aa58796b0326595d3021 \
|
||||||
|
--hash=sha256:b3694e3f87f8ac7ce279d4355645b3c878d24d1424581b46282f24b92f5a4ae2 \
|
||||||
|
--hash=sha256:b4ff1d35e8c5bd078be89349b6f3a845128e685e751b6ea1169cf2160b344c4d \
|
||||||
|
--hash=sha256:bbc8c8650c6e51041ad1be191742b8b421d05bbd3410f43fa2a00c8db87678e8 \
|
||||||
|
--hash=sha256:bc72863f4d9aba2e8fd9085e63548a324ba706d2ea2c83b260da08a59b9482de \
|
||||||
|
--hash=sha256:c2274ca724536f173122f36c98ce188fd24ce3dad886ec2b7af859518ce008a4 \
|
||||||
|
--hash=sha256:c8ae56368f8cc97c7e40a7ee18e1cedaf8e780cd8bc5ed5ac8b81f238614facb \
|
||||||
|
--hash=sha256:c907cdc8109f6c619e6254212e794d6548373cc40e1ec75e6e3823d9135d29cc \
|
||||||
|
--hash=sha256:ca0276464d148c72defa8bb4390cce01b4a0e425f3b50d1435aa6d7a18107602 \
|
||||||
|
--hash=sha256:cd5e2801c89992ed8c0a3f0293ae83c159a60d9a5d685005383ef4caca77f2c4 \
|
||||||
|
--hash=sha256:d60377dce4511655582e300dc1e5a5f24ba0cb229005a1d5c8d0cb72bb758ab8 \
|
||||||
|
--hash=sha256:d73beaac5e90173ac3deb9928a74763a6d230f494e4bfb422c217a0ad8e629bf \
|
||||||
|
--hash=sha256:d7de2637729c67d67cf87614b566626057e95c303bc0a55ffe391f5205e7003d \
|
||||||
|
--hash=sha256:dad6e0f2e481fffdcf776d10ebee25e0ef89f16d691f1e5dee4b586375fdc64b \
|
||||||
|
--hash=sha256:dda86aba335c902b6149a02a55b38e96287157e609200811837678214ba2b1db \
|
||||||
|
--hash=sha256:e1f6e2f00a6b8edb562826e4632e26d063ac10307e80f7461f7de3ad8ef3f077 \
|
||||||
|
--hash=sha256:e25369dc110d58ddf29b949377a93e0716d72a24f62bad72b2b39f155949c1fd \
|
||||||
|
--hash=sha256:e3c701e954abf6fc03a49f7c579cc80c2c6cc52525340ca3186c41d3f33482ef \
|
||||||
|
--hash=sha256:e5bcc1a1ae744e0bb59641171ae53743760130600da8db48cbb6e4918e186e4e \
|
||||||
|
--hash=sha256:e68c14b04827dd76dcbd1aeea9e604e3e4b78322d8faf2f8132c7138efa340a8 \
|
||||||
|
--hash=sha256:e985a16ff513596f217cee86c21371b8cd011c0f6f056d0920aa2d926c544058 \
|
||||||
|
--hash=sha256:ef5960d965e67165d75b7c7ffc60a83ec5abfc5c11b764ec13ea54fbef8b4421 \
|
||||||
|
--hash=sha256:f0cdaecd4c953bfae0b6bb64910aaaca5a424ad9c72d85cb88417bb9814f7550 \
|
||||||
|
--hash=sha256:f1ce721c8a7dfec21fcbdfe04e8f68174183cf4e8188e0645e92aa23985c57ff \
|
||||||
|
--hash=sha256:f5ea69428fa1b49573eef0cc44a1d43bebd45ad0c611eb7d7eac760c7ae771bc \
|
||||||
|
--hash=sha256:f6e4333fb15c83f7d1482a76d45a0818897b3d33f00efd215528ff7c51b8e35d \
|
||||||
|
--hash=sha256:f820f24b09e3e779fe84c3c456cb4108a7aa639b0d1f02c28046e11bfcd088ed \
|
||||||
|
--hash=sha256:fcce033e4021347d80ed9c66dcf1e7b1546319834b74445f561d2e2221de5659
|
||||||
|
# via requests
|
||||||
|
curl-cffi==0.15.0 ; implementation_name == 'cpython' \
|
||||||
|
--hash=sha256:08c799b89740b9bc49c09fbc3d5907f13ac1f845ca52620507ef9466d4639dd5 \
|
||||||
|
--hash=sha256:0b6c0543b993996670e9e4b78e305a2d60809d5681903ffb5568e21a387434d3 \
|
||||||
|
--hash=sha256:1977e1e12cfb5c11352cbb74acef1bed24eb7d226dab61ca57c168c21acd4d61 \
|
||||||
|
--hash=sha256:2b6c847d86283b07ae69bb72c82eb8a59242277142aa35b89850f89e792a02fc \
|
||||||
|
--hash=sha256:408d6f14e346841cd889c2e0962832bb235ba3b6749ebf609f347f747da5e60f \
|
||||||
|
--hash=sha256:41f80170ba844009273b2660da1964ec31e99e5719d16b3422ada87177e32e13 \
|
||||||
|
--hash=sha256:4682dc38d4336e0eb0b185374db90a760efde63cbea994b4e63f3521d44c4c92 \
|
||||||
|
--hash=sha256:582e570aa2586b96ed47cf4a17586b9a3c462cbe43f780487c3dc245c6ef1527 \
|
||||||
|
--hash=sha256:5a0c1896a0d5a5ac1eb89cd24b008d2b718dd1df6fd2f75451b59ca66e49e572 \
|
||||||
|
--hash=sha256:7b7a92767a888ee90147e18964b396d8435ff42737030d6fb00824ffd6094805 \
|
||||||
|
--hash=sha256:7e63539d0d839d0a8c5eacf86229bc68c57803547f35e0db7ee0986328b478c3 \
|
||||||
|
--hash=sha256:829cc357061ecb99cc2d406301f609a039e05665322f5c025ec67c38b0dc49ce \
|
||||||
|
--hash=sha256:838e48212447d9c81364b04707a5c861daf08f8320f9ecb3406a8919d1d5c3b3 \
|
||||||
|
--hash=sha256:967ad7355bd8e9586f8c2d02eaa99953747549e7ea4a9b25cd53353e6b67fe6d \
|
||||||
|
--hash=sha256:9e5e69eee735f659287e2c84444319d68a1fa68dd37abf228943a4074864283a \
|
||||||
|
--hash=sha256:a25620d9bf989c9c029a7d1642999c4c265abb0bad811deb2f77b0b5b2b12e5b \
|
||||||
|
--hash=sha256:a6d57f8389273a3a1f94370473c74897467bcc36af0a17336989780c507fa43d \
|
||||||
|
--hash=sha256:aa1323950224db24f4c510d010b3affa02196ca853fb424191fa917a513d3f4b \
|
||||||
|
--hash=sha256:b624c7ce087bfda967a013ed0a64702a525444e5b6e97d23534d567ccc6525aa \
|
||||||
|
--hash=sha256:bda66404010e9ed743b1b83c20c86f24fe21a9a6873e17479d6e67e29d8ded28 \
|
||||||
|
--hash=sha256:ea0c67652bf6893d34ee0f82c944f37e488f6147e9421bef1771cc6545b02ded
|
||||||
|
# via yt-dlp
|
||||||
|
idna==3.11 \
|
||||||
|
--hash=sha256:771a87f49d9defaf64091e6e6fe9c18d4833f140bd19464795bc32d966ca37ea \
|
||||||
|
--hash=sha256:795dafcc9c04ed0c1fb032c2aa73654d8e8c5023a7df64a53f39190ada629902
|
||||||
|
# via requests
|
||||||
|
markdown-it-py==4.0.0 ; implementation_name == 'cpython' \
|
||||||
|
--hash=sha256:87327c59b172c5011896038353a81343b6754500a08cd7a4973bb48c6d578147 \
|
||||||
|
--hash=sha256:cb0a2b4aa34f932c007117b194e945bd74e0ec24133ceb5bac59009cda1cb9f3
|
||||||
|
# via rich
|
||||||
|
mdurl==0.1.2 ; implementation_name == 'cpython' \
|
||||||
|
--hash=sha256:84008a41e51615a49fc9966191ff91509e3c40b939176e643fd50a5c2196b8f8 \
|
||||||
|
--hash=sha256:bb413d29f5eea38f31dd4754dd7377d4465116fb207585f97bf925588687c1ba
|
||||||
|
# via markdown-it-py
|
||||||
|
mutagen==1.47.0 \
|
||||||
|
--hash=sha256:719fadef0a978c31b4cf3c956261b3c58b6948b32023078a2117b1de09f0fc99 \
|
||||||
|
--hash=sha256:edd96f50c5907a9539d8e5bba7245f62c9f520aef333d13392a79a4f70aca719
|
||||||
|
# via yt-dlp
|
||||||
|
pycparser==3.0 ; implementation_name != 'PyPy' \
|
||||||
|
--hash=sha256:600f49d217304a5902ac3c37e1281c9fe94e4d0489de643a9504c5cdfdfc6b29 \
|
||||||
|
--hash=sha256:b727414169a36b7d524c1c3e31839a521725078d7b2ff038656844266160a992
|
||||||
|
# via cffi
|
||||||
|
pycryptodomex==3.23.0 \
|
||||||
|
--hash=sha256:02d87b80778c171445d67e23d1caef279bf4b25c3597050ccd2e13970b57fd51 \
|
||||||
|
--hash=sha256:06698f957fe1ab229a99ba2defeeae1c09af185baa909a31a5d1f9d42b1aaed6 \
|
||||||
|
--hash=sha256:14c37aaece158d0ace436f76a7bb19093db3b4deade9797abfc39ec6cd6cc2fe \
|
||||||
|
--hash=sha256:189afbc87f0b9f158386bf051f720e20fa6145975f1e76369303d0f31d1a8d7c \
|
||||||
|
--hash=sha256:43c446e2ba8df8889e0e16f02211c25b4934898384c1ec1ec04d7889c0333587 \
|
||||||
|
--hash=sha256:4f2596e643d4365e14d0879dc5aafe6355616c61c2176009270f3048f6d9a61f \
|
||||||
|
--hash=sha256:52e5ca58c3a0b0bd5e100a9fbc8015059b05cffc6c66ce9d98b4b45e023443b9 \
|
||||||
|
--hash=sha256:55ccbe27f049743a4caf4f4221b166560d3438d0b1e5ab929e07ae1702a4d6fd \
|
||||||
|
--hash=sha256:58b851b9effd0d072d4ca2e4542bf2a4abcf13c82a29fd2c93ce27ee2a2e9462 \
|
||||||
|
--hash=sha256:6b8962204c47464d5c1c4038abeadd4514a133b28748bcd9fa5b6d62e3cec6fa \
|
||||||
|
--hash=sha256:6bbcb1dd0f646484939e142462d9e532482bc74475cecf9c4903d4e1cd21f003 \
|
||||||
|
--hash=sha256:71909758f010c82bc99b0abf4ea12012c98962fbf0583c2164f8b84533c2e4da \
|
||||||
|
--hash=sha256:7b37e08e3871efe2187bc1fd9320cc81d87caf19816c648f24443483005ff886 \
|
||||||
|
--hash=sha256:8a4fcd42ccb04c31268d1efeecfccfd1249612b4de6374205376b8f280321744 \
|
||||||
|
--hash=sha256:91979028227543010d7b2ba2471cf1d1e398b3f183cb105ac584df0c36dac28d \
|
||||||
|
--hash=sha256:a33986a0066860f7fcf7c7bd2bc804fa90e434183645595ae7b33d01f3c91ed8 \
|
||||||
|
--hash=sha256:a9d446e844f08299236780f2efa9898c818fe7e02f17263866b8550c7d5fb328 \
|
||||||
|
--hash=sha256:b2c2537863eccef2d41061e82a881dcabb04944c5c06c5aa7110b577cc487545 \
|
||||||
|
--hash=sha256:bc65bdd9fc8de7a35a74cab1c898cab391a4add33a8fe740bda00f5976ca4708 \
|
||||||
|
--hash=sha256:bdc69d0d3d989a1029df0eed67cc5e8e5d968f3724f4519bd03e0ec68df7543c \
|
||||||
|
--hash=sha256:c25e30a20e1b426e1f0fa00131c516f16e474204eee1139d1603e132acffc314 \
|
||||||
|
--hash=sha256:c7947ab8d589e3178da3d7cdeabe14f841b391e17046954f2fbcd941705762b5 \
|
||||||
|
--hash=sha256:c885da45e70139464f082018ac527fdaad26f1657a99ee13eecdce0f0ca24ab4 \
|
||||||
|
--hash=sha256:da4fa650cef02db88c2b98acc5434461e027dce0ae8c22dd5a69013eaf510006 \
|
||||||
|
--hash=sha256:ebfff755c360d674306e5891c564a274a47953562b42fb74a5c25b8fc1fb1cb5 \
|
||||||
|
--hash=sha256:eca54f4bb349d45afc17e3011ed4264ef1cc9e266699874cdd1349c504e64798 \
|
||||||
|
--hash=sha256:f489c4765093fb60e2edafdf223397bc716491b2b69fe74367b70d6999257a5c \
|
||||||
|
--hash=sha256:fdfac7cda115bca3a5abb2f9e43bc2fb66c2b65ab074913643803ca7083a79ea
|
||||||
|
# via yt-dlp
|
||||||
|
pygments==2.19.2 ; implementation_name == 'cpython' \
|
||||||
|
--hash=sha256:636cb2477cec7f8952536970bc533bc43743542f70392ae026374600add5b887 \
|
||||||
|
--hash=sha256:86540386c03d588bb81d44bc3928634ff26449851e99741617ecb9037ee5ec0b
|
||||||
|
# via rich
|
||||||
|
requests==2.33.0 \
|
||||||
|
--hash=sha256:3324635456fa185245e24865e810cecec7b4caf933d7eb133dcde67d48cee69b \
|
||||||
|
--hash=sha256:c7ebc5e8b0f21837386ad0e1c8fe8b829fa5f544d8df3b2253bff14ef29d7652
|
||||||
|
# via yt-dlp
|
||||||
|
rich==14.3.3 ; implementation_name == 'cpython' \
|
||||||
|
--hash=sha256:793431c1f8619afa7d3b52b2cdec859562b950ea0d4b6b505397612db8d5362d \
|
||||||
|
--hash=sha256:b8daa0b9e4eef54dd8cf7c86c03713f53241884e814f4e2f5fb342fe520f639b
|
||||||
|
# via curl-cffi
|
||||||
|
urllib3==2.6.3 \
|
||||||
|
--hash=sha256:1b62b6884944a57dbe321509ab94fd4d3b307075e0c2eae991ac71ee15ad38ed \
|
||||||
|
--hash=sha256:bf272323e553dfb2e87d9bfd225ca7b0f467b919d7bbd355436d3fd37cb0acd4
|
||||||
|
# via
|
||||||
|
# requests
|
||||||
|
# yt-dlp
|
||||||
|
websockets==16.0 \
|
||||||
|
--hash=sha256:0298d07ee155e2e9fda5be8a9042200dd2e3bb0b8a38482156576f863a9d457c \
|
||||||
|
--hash=sha256:04cdd5d2d1dacbad0a7bf36ccbcd3ccd5a30ee188f2560b7a62a30d14107b31a \
|
||||||
|
--hash=sha256:08d7af67b64d29823fed316505a89b86705f2b7981c07848fb5e3ea3020c1abe \
|
||||||
|
--hash=sha256:152284a83a00c59b759697b7f9e9cddf4e3c7861dd0d964b472b70f78f89e80e \
|
||||||
|
--hash=sha256:1637db62fad1dc833276dded54215f2c7fa46912301a24bd94d45d46a011ceec \
|
||||||
|
--hash=sha256:19c4dc84098e523fd63711e563077d39e90ec6702aff4b5d9e344a60cb3c0cb1 \
|
||||||
|
--hash=sha256:1c1b30e4f497b0b354057f3467f56244c603a79c0d1dafce1d16c283c25f6e64 \
|
||||||
|
--hash=sha256:2b9f1e0d69bc60a4a87349d50c09a037a2607918746f07de04df9e43252c77a3 \
|
||||||
|
--hash=sha256:31a52addea25187bde0797a97d6fc3d2f92b6f72a9370792d65a6e84615ac8a8 \
|
||||||
|
--hash=sha256:32da954ffa2814258030e5a57bc73a3635463238e797c7375dc8091327434206 \
|
||||||
|
--hash=sha256:335c23addf3d5e6a8633f9f8eda77efad001671e80b95c491dd0924587ece0b3 \
|
||||||
|
--hash=sha256:3425ac5cf448801335d6fdc7ae1eb22072055417a96cc6b31b3861f455fbc156 \
|
||||||
|
--hash=sha256:349f83cd6c9a415428ee1005cadb5c2c56f4389bc06a9af16103c3bc3dcc8b7d \
|
||||||
|
--hash=sha256:37b31c1623c6605e4c00d466c9d633f9b812ea430c11c8a278774a1fde1acfa9 \
|
||||||
|
--hash=sha256:417b28978cdccab24f46400586d128366313e8a96312e4b9362a4af504f3bbad \
|
||||||
|
--hash=sha256:485c49116d0af10ac698623c513c1cc01c9446c058a4e61e3bf6c19dff7335a2 \
|
||||||
|
--hash=sha256:4a1aba3340a8dca8db6eb5a7986157f52eb9e436b74813764241981ca4888f03 \
|
||||||
|
--hash=sha256:50f23cdd8343b984957e4077839841146f67a3d31ab0d00e6b824e74c5b2f6e8 \
|
||||||
|
--hash=sha256:52a0fec0e6c8d9a784c2c78276a48a2bdf099e4ccc2a4cad53b27718dbfd0230 \
|
||||||
|
--hash=sha256:52ac480f44d32970d66763115edea932f1c5b1312de36df06d6b219f6741eed8 \
|
||||||
|
--hash=sha256:5569417dc80977fc8c2d43a86f78e0a5a22fee17565d78621b6bb264a115d4ea \
|
||||||
|
--hash=sha256:569d01a4e7fba956c5ae4fc988f0d4e187900f5497ce46339c996dbf24f17641 \
|
||||||
|
--hash=sha256:583b7c42688636f930688d712885cf1531326ee05effd982028212ccc13e5957 \
|
||||||
|
--hash=sha256:5a4b4cc550cb665dd8a47f868c8d04c8230f857363ad3c9caf7a0c3bf8c61ca6 \
|
||||||
|
--hash=sha256:5f451484aeb5cafee1ccf789b1b66f535409d038c56966d6101740c1614b86c6 \
|
||||||
|
--hash=sha256:5f6261a5e56e8d5c42a4497b364ea24d94d9563e8fbd44e78ac40879c60179b5 \
|
||||||
|
--hash=sha256:6e5a82b677f8f6f59e8dfc34ec06ca6b5b48bc4fcda346acd093694cc2c24d8f \
|
||||||
|
--hash=sha256:71c989cbf3254fbd5e84d3bff31e4da39c43f884e64f2551d14bb3c186230f00 \
|
||||||
|
--hash=sha256:781caf5e8eee67f663126490c2f96f40906594cb86b408a703630f95550a8c3e \
|
||||||
|
--hash=sha256:7be95cfb0a4dae143eaed2bcba8ac23f4892d8971311f1b06f3c6b78952ee70b \
|
||||||
|
--hash=sha256:7d837379b647c0c4c2355c2499723f82f1635fd2c26510e1f587d89bc2199e72 \
|
||||||
|
--hash=sha256:86890e837d61574c92a97496d590968b23c2ef0aeb8a9bc9421d174cd378ae39 \
|
||||||
|
--hash=sha256:878b336ac47938b474c8f982ac2f7266a540adc3fa4ad74ae96fea9823a02cc9 \
|
||||||
|
--hash=sha256:8b6e209ffee39ff1b6d0fa7bfef6de950c60dfb91b8fcead17da4ee539121a79 \
|
||||||
|
--hash=sha256:8cc451a50f2aee53042ac52d2d053d08bf89bcb31ae799cb4487587661c038a0 \
|
||||||
|
--hash=sha256:8d7f0659570eefb578dacde98e24fb60af35350193e4f56e11190787bee77dac \
|
||||||
|
--hash=sha256:8e1dab317b6e77424356e11e99a432b7cb2f3ec8c5ab4dabbcee6add48f72b35 \
|
||||||
|
--hash=sha256:8ff32bb86522a9e5e31439a58addbb0166f0204d64066fb955265c4e214160f0 \
|
||||||
|
--hash=sha256:95724e638f0f9c350bb1c2b0a7ad0e83d9cc0c9259f3ea94e40d7b02a2179ae5 \
|
||||||
|
--hash=sha256:9b5aca38b67492ef518a8ab76851862488a478602229112c4b0d58d63a7a4d5c \
|
||||||
|
--hash=sha256:a069d734c4a043182729edd3e9f247c3b2a4035415a9172fd0f1b71658a320a8 \
|
||||||
|
--hash=sha256:a0b31e0b424cc6b5a04b8838bbaec1688834b2383256688cf47eb97412531da1 \
|
||||||
|
--hash=sha256:a35539cacc3febb22b8f4d4a99cc79b104226a756aa7400adc722e83b0d03244 \
|
||||||
|
--hash=sha256:a5e18a238a2b2249c9a9235466b90e96ae4795672598a58772dd806edc7ac6d3 \
|
||||||
|
--hash=sha256:a653aea902e0324b52f1613332ddf50b00c06fdaf7e92624fbf8c77c78fa5767 \
|
||||||
|
--hash=sha256:abf050a199613f64c886ea10f38b47770a65154dc37181bfaff70c160f45315a \
|
||||||
|
--hash=sha256:af80d74d4edfa3cb9ed973a0a5ba2b2a549371f8a741e0800cb07becdd20f23d \
|
||||||
|
--hash=sha256:b14dc141ed6d2dde437cddb216004bcac6a1df0935d79656387bd41632ba0bbd \
|
||||||
|
--hash=sha256:b784ca5de850f4ce93ec85d3269d24d4c82f22b7212023c974c401d4980ebc5e \
|
||||||
|
--hash=sha256:bc59589ab64b0022385f429b94697348a6a234e8ce22544e3681b2e9331b5944 \
|
||||||
|
--hash=sha256:c0204dc62a89dc9d50d682412c10b3542d748260d743500a85c13cd1ee4bde82 \
|
||||||
|
--hash=sha256:c0ee0e63f23914732c6d7e0cce24915c48f3f1512ec1d079ed01fc629dab269d \
|
||||||
|
--hash=sha256:caab51a72c51973ca21fa8a18bd8165e1a0183f1ac7066a182ff27107b71e1a4 \
|
||||||
|
--hash=sha256:d6297ce39ce5c2e6feb13c1a996a2ded3b6832155fcfc920265c76f24c7cceb5 \
|
||||||
|
--hash=sha256:daa3b6ff70a9241cf6c7fc9e949d41232d9d7d26fd3522b1ad2b4d62487e9904 \
|
||||||
|
--hash=sha256:df57afc692e517a85e65b72e165356ed1df12386ecb879ad5693be08fac65dde \
|
||||||
|
--hash=sha256:e0334872c0a37b606418ac52f6ab9cfd17317ac26365f7f65e203e2d0d0d359f \
|
||||||
|
--hash=sha256:e6578ed5b6981005df1860a56e3617f14a6c307e6a71b4fff8c48fdc50f3ed2c \
|
||||||
|
--hash=sha256:eaded469f5e5b7294e2bdca0ab06becb6756ea86894a47806456089298813c89 \
|
||||||
|
--hash=sha256:f4a32d1bd841d4bcbffdcb3d2ce50c09c3909fbead375ab28d0181af89fd04da \
|
||||||
|
--hash=sha256:fd3cb4adb94a2a6e2b7c0d8d05cb94e6f1c81a0cf9dc2694fb65c7e8d94c42e4
|
||||||
|
# via yt-dlp
|
||||||
|
yt-dlp-ejs==0.8.0 \
|
||||||
|
--hash=sha256:79300e5fca7f937a1eeede11f0456862c1b41107ce1d726871e0207424f4bdb4 \
|
||||||
|
--hash=sha256:d5fa1639f63b5c4af8d932495f60689d5370f1a095782c944f7f62a303eb104e
|
||||||
|
# via yt-dlp
|
||||||
41
bundle/requirements/requirements-win-x86-pyinstaller.txt
Normal file
41
bundle/requirements/requirements-win-x86-pyinstaller.txt
Normal file
@ -0,0 +1,41 @@
|
|||||||
|
# This file was autogenerated by uv via the following command:
|
||||||
|
# python -m devscripts.update_requirements
|
||||||
|
altgraph==0.17.5 \
|
||||||
|
--hash=sha256:c87b395dd12fabde9c99573a9749d67da8d29ef9de0125c7f536699b4a9bc9e7 \
|
||||||
|
--hash=sha256:f3a22400bce1b0c701683820ac4f3b159cd301acab067c51c653e06961600597
|
||||||
|
# via
|
||||||
|
# macholib
|
||||||
|
# pyinstaller
|
||||||
|
macholib==1.16.4 ; sys_platform == 'darwin' \
|
||||||
|
--hash=sha256:da1a3fa8266e30f0ce7e97c6a54eefaae8edd1e5f86f3eb8b95457cae90265ea \
|
||||||
|
--hash=sha256:f408c93ab2e995cd2c46e34fe328b130404be143469e41bc366c807448979362
|
||||||
|
# via pyinstaller
|
||||||
|
packaging==26.0 \
|
||||||
|
--hash=sha256:00243ae351a257117b6a241061796684b084ed1c516a08c48a3f7e147a9d80b4 \
|
||||||
|
--hash=sha256:b36f1fef9334a5588b4166f8bcd26a14e521f2b55e6b9de3aaa80d3ff7a37529
|
||||||
|
# via
|
||||||
|
# pyinstaller
|
||||||
|
# pyinstaller-hooks-contrib
|
||||||
|
pefile==2024.8.26 ; sys_platform == 'win32' \
|
||||||
|
--hash=sha256:3ff6c5d8b43e8c37bb6e6dd5085658d658a7a0bdcd20b6a07b1fcfc1c4e9d632 \
|
||||||
|
--hash=sha256:76f8b485dcd3b1bb8166f1128d395fa3d87af26360c2358fb75b80019b957c6f
|
||||||
|
# via pyinstaller
|
||||||
|
pyinstaller-hooks-contrib==2026.3 \
|
||||||
|
--hash=sha256:5ecd1068ad262afecadf07556279d2be52ca93a88b049fae17f1a2eb2969254a \
|
||||||
|
--hash=sha256:800d3a198a49a6cd0de2d7fb795005fdca7a0222ed9cb47c0691abd1c27b9310
|
||||||
|
# via pyinstaller
|
||||||
|
pywin32-ctypes==0.2.3 ; sys_platform == 'win32' \
|
||||||
|
--hash=sha256:8a1513379d709975552d202d942d9837758905c8d01eb82b8bcc30918929e7b8 \
|
||||||
|
--hash=sha256:d162dc04946d704503b2edc4d55f3dba5c1d539ead017afa00142c38b9885755
|
||||||
|
# via pyinstaller
|
||||||
|
setuptools==82.0.1 \
|
||||||
|
--hash=sha256:7d872682c5d01cfde07da7bccc7b65469d3dca203318515ada1de5eda35efbf9 \
|
||||||
|
--hash=sha256:a59e362652f08dcd477c78bb6e7bd9d80a7995bc73ce773050228a348ce2e5bb
|
||||||
|
# via
|
||||||
|
# pyinstaller
|
||||||
|
# pyinstaller-hooks-contrib
|
||||||
|
|
||||||
|
# The following packages were excluded from the output:
|
||||||
|
# pyinstaller
|
||||||
|
pyinstaller @ https://github.com/yt-dlp/Pyinstaller-Builds/releases/download/2026.03.17.175201/pyinstaller-6.19.0-py3-none-win32.whl \
|
||||||
|
--hash=sha256:9b3c791d7e5cc23f5b48dffc3c367dac10a516b86904db48b6096c2b5d1ffb41
|
||||||
371
bundle/requirements/requirements-win-x86.txt
Normal file
371
bundle/requirements/requirements-win-x86.txt
Normal file
@ -0,0 +1,371 @@
|
|||||||
|
# This file was autogenerated by uv via the following command:
|
||||||
|
# uv export --no-python-downloads --no-progress --color=never --format=requirements.txt --frozen --refresh --no-emit-project --no-default-groups --extra=default --output-file=bundle/requirements/requirements-win-x86.txt
|
||||||
|
brotli==1.2.0 ; implementation_name == 'cpython' and sys_platform != 'ios' \
|
||||||
|
--hash=sha256:022426c9e99fd65d9475dce5c195526f04bb8be8907607e27e747893f6ee3e24 \
|
||||||
|
--hash=sha256:072e7624b1fc4d601036ab3f4f27942ef772887e876beff0301d261210bca97f \
|
||||||
|
--hash=sha256:0bbd5b5ccd157ae7913750476d48099aaf507a79841c0d04a9db4415b14842de \
|
||||||
|
--hash=sha256:0cf8c3b8ba93d496b2fae778039e2f5ecc7cff99df84df337ca31d8f2252896c \
|
||||||
|
--hash=sha256:15b33fe93cedc4caaff8a0bd1eb7e3dab1c61bb22a0bf5bdfdfd97cd7da79744 \
|
||||||
|
--hash=sha256:1b1d6a4efedd53671c793be6dd760fcf2107da3a52331ad9ea429edf0902f27a \
|
||||||
|
--hash=sha256:1b557b29782a643420e08d75aea889462a4a8796e9a6cf5621ab05a3f7da8ef2 \
|
||||||
|
--hash=sha256:260d3692396e1895c5034f204f0db022c056f9e2ac841593a4cf9426e2a3faca \
|
||||||
|
--hash=sha256:26e8d3ecb0ee458a9804f47f21b74845cc823fd1bb19f02272be70774f56e2a6 \
|
||||||
|
--hash=sha256:2a7f1d03727130fc875448b65b127a9ec5d06d19d0148e7554384229706f9d1b \
|
||||||
|
--hash=sha256:2e1ad3fda65ae0d93fec742a128d72e145c9c7a99ee2fcd667785d99eb25a7fe \
|
||||||
|
--hash=sha256:3219bd9e69868e57183316ee19c84e03e8f8b5a1d1f2667e1aa8c2f91cb061ac \
|
||||||
|
--hash=sha256:350c8348f0e76fff0a0fd6c26755d2653863279d086d3aa2c290a6a7251135dd \
|
||||||
|
--hash=sha256:35d382625778834a7f3061b15423919aa03e4f5da34ac8e02c074e4b75ab4f84 \
|
||||||
|
--hash=sha256:3b90b767916ac44e93a8e28ce6adf8d551e43affb512f2377c732d486ac6514e \
|
||||||
|
--hash=sha256:3e1b35d56856f3ed326b140d3c6d9db91740f22e14b06e840fe4bb1923439a18 \
|
||||||
|
--hash=sha256:3f3c908bcc404c90c77d5a073e55271a0a498f4e0756e48127c35d91cf155947 \
|
||||||
|
--hash=sha256:40d918bce2b427a0c4ba189df7a006ac0c7277c180aee4617d99e9ccaaf59e6a \
|
||||||
|
--hash=sha256:4ecdb3b6dc36e6d6e14d3a1bdc6c1057c8cbf80db04031d566eb6080ce283a48 \
|
||||||
|
--hash=sha256:54a50a9dad16b32136b2241ddea9e4df159b41247b2ce6aac0b3276a66a8f1e5 \
|
||||||
|
--hash=sha256:67a91c5187e1eec76a61625c77a6c8c785650f5b576ca732bd33ef58b0dff49c \
|
||||||
|
--hash=sha256:6be67c19e0b0c56365c6a76e393b932fb0e78b3b56b711d180dd7013cb1fd984 \
|
||||||
|
--hash=sha256:6c12dad5cd04530323e723787ff762bac749a7b256a5bece32b2243dd5c27b21 \
|
||||||
|
--hash=sha256:7547369c4392b47d30a3467fe8c3330b4f2e0f7730e45e3103d7d636678a808b \
|
||||||
|
--hash=sha256:7a47ce5c2288702e09dc22a44d0ee6152f2c7eda97b3c8482d826a1f3cfc7da7 \
|
||||||
|
--hash=sha256:7a61c06b334bd99bc5ae84f1eeb36bfe01400264b3c352f968c6e30a10f9d08b \
|
||||||
|
--hash=sha256:81da1b229b1889f25adadc929aeb9dbc4e922bd18561b65b08dd9343cfccca84 \
|
||||||
|
--hash=sha256:832c115a020e463c2f67664560449a7bea26b0c1fdd690352addad6d0a08714d \
|
||||||
|
--hash=sha256:844a8ceb8483fefafc412f85c14f2aae2fb69567bf2a0de53cdb88b73e7c43ae \
|
||||||
|
--hash=sha256:898be2be399c221d2671d29eed26b6b2713a02c2119168ed914e7d00ceadb56f \
|
||||||
|
--hash=sha256:9322b9f8656782414b37e6af884146869d46ab85158201d82bab9abbcb971dc7 \
|
||||||
|
--hash=sha256:963a08f3bebd8b75ac57661045402da15991468a621f014be54e50f53a58d19e \
|
||||||
|
--hash=sha256:9c79f57faa25d97900bfb119480806d783fba83cd09ee0b33c17623935b05fa3 \
|
||||||
|
--hash=sha256:9e5825ba2c9998375530504578fd4d5d1059d09621a02065d1b6bfc41a8e05ab \
|
||||||
|
--hash=sha256:a1778532b978d2536e79c05dac2d8cd857f6c55cd0c95ace5b03740824e0e2f1 \
|
||||||
|
--hash=sha256:aa47441fa3026543513139cb8926a92a8e305ee9c71a6209ef7a97d91640ea03 \
|
||||||
|
--hash=sha256:acec55bb7c90f1dfc476126f9711a8e81c9af7fb617409a9ee2953115343f08d \
|
||||||
|
--hash=sha256:adedc4a67e15327dfdd04884873c6d5a01d3e3b6f61406f99b1ed4865a2f6d28 \
|
||||||
|
--hash=sha256:af43b8711a8264bb4e7d6d9a6d004c3a2019c04c01127a868709ec29962b6036 \
|
||||||
|
--hash=sha256:b232029d100d393ae3c603c8ffd7e3fe6f798c5e28ddca5feabb8e8fdb732997 \
|
||||||
|
--hash=sha256:b35c13ce241abdd44cb8ca70683f20c0c079728a36a996297adb5334adfc1c44 \
|
||||||
|
--hash=sha256:b63daa43d82f0cdabf98dee215b375b4058cce72871fd07934f179885aad16e8 \
|
||||||
|
--hash=sha256:c8565e3cdc1808b1a34714b553b262c5de5fbda202285782173ec137fd13709f \
|
||||||
|
--hash=sha256:cf9cba6f5b78a2071ec6fb1e7bd39acf35071d90a81231d67e92d637776a6a63 \
|
||||||
|
--hash=sha256:d2d085ded05278d1c7f65560aae97b3160aeb2ea2c0b3e26204856beccb60888 \
|
||||||
|
--hash=sha256:e310f77e41941c13340a95976fe66a8a95b01e783d430eeaf7a2f87e0a57dd0a \
|
||||||
|
--hash=sha256:e7c0af964e0b4e3412a0ebf341ea26ec767fa0b4cf81abb5e897c9338b5ad6a3 \
|
||||||
|
--hash=sha256:e99befa0b48f3cd293dafeacdd0d191804d105d279e0b387a32054c1180f3161 \
|
||||||
|
--hash=sha256:ef87b8ab2704da227e83a246356a2b179ef826f550f794b2c52cddb4efbd0196 \
|
||||||
|
--hash=sha256:fc1530af5c3c275b8524f2e24841cbe2599d74462455e9bae5109e9ff42e9361 \
|
||||||
|
--hash=sha256:ff09cd8c5eec3b9d02d2408db41be150d8891c5566addce57513bf546e3d6c6d
|
||||||
|
# via yt-dlp
|
||||||
|
brotlicffi==1.2.0.1 ; implementation_name != 'cpython' \
|
||||||
|
--hash=sha256:2c85e65913cf2b79c57a3fdd05b98d9731d9255dc0cb696b09376cc091b9cddd \
|
||||||
|
--hash=sha256:37cb587d32bf7168e2218c455e22e409ad1f3157c6c71945879a311f3e6b6abf \
|
||||||
|
--hash=sha256:3c9544f83cb715d95d7eab3af4adbbef8b2093ad6382288a83b3a25feb1a57ec \
|
||||||
|
--hash=sha256:535f2d05d0273408abc13fc0eebb467afac17b0ad85090c8913690d40207dac5 \
|
||||||
|
--hash=sha256:625f8115d32ae9c0740d01ea51518437c3fbaa3e78d41cb18459f6f7ac326000 \
|
||||||
|
--hash=sha256:6f3314a3476f59e5443f9f72a6dff16edc0c3463c9b318feaef04ae3e4683f5a \
|
||||||
|
--hash=sha256:82ea52e2b5d3145b6c406ebd3efb0d55db718b7ad996bd70c62cec0439de1187 \
|
||||||
|
--hash=sha256:91ba5f0ccc040f6ff8f7efaf839f797723d03ed46acb8ae9408f99ffd2572cf4 \
|
||||||
|
--hash=sha256:9d6ba65dd528892b4d9960beba2ae011a753620bcfc66cf6fa3cee18d7b0baa4 \
|
||||||
|
--hash=sha256:be9a670c6811af30a4bd42d7116dc5895d3b41beaa8ed8a89050447a0181f5ce \
|
||||||
|
--hash=sha256:c20d5c596278307ad06414a6d95a892377ea274a5c6b790c2548c009385d621c \
|
||||||
|
--hash=sha256:ce17eb798ca59ecec67a9bb3fd7a4304e120d1cd02953ce522d959b9a84d58ac \
|
||||||
|
--hash=sha256:da2e82a08e7778b8bc539d27ca03cdd684113e81394bfaaad8d0dfc6a17ddede \
|
||||||
|
--hash=sha256:e015af99584c6db1490a69a210c765953e473e63adc2d891ac3062a737c9e851 \
|
||||||
|
--hash=sha256:f2a5575653b0672638ba039b82fda56854934d7a6a24d4b8b5033f73ab43cbc1
|
||||||
|
# via yt-dlp
|
||||||
|
certifi==2026.2.25 \
|
||||||
|
--hash=sha256:027692e4402ad994f1c42e52a4997a9763c646b73e4096e4d5d6db8af1d6f0fa \
|
||||||
|
--hash=sha256:e887ab5cee78ea814d3472169153c2d12cd43b14bd03329a39a9c6e2e80bfba7
|
||||||
|
# via
|
||||||
|
# requests
|
||||||
|
# yt-dlp
|
||||||
|
cffi==2.0.0 ; implementation_name != 'cpython' \
|
||||||
|
--hash=sha256:00bdf7acc5f795150faa6957054fbbca2439db2f775ce831222b66f192f03beb \
|
||||||
|
--hash=sha256:07b271772c100085dd28b74fa0cd81c8fb1a3ba18b21e03d7c27f3436a10606b \
|
||||||
|
--hash=sha256:087067fa8953339c723661eda6b54bc98c5625757ea62e95eb4898ad5e776e9f \
|
||||||
|
--hash=sha256:0a1527a803f0a659de1af2e1fd700213caba79377e27e4693648c2923da066f9 \
|
||||||
|
--hash=sha256:0cf2d91ecc3fcc0625c2c530fe004f82c110405f101548512cce44322fa8ac44 \
|
||||||
|
--hash=sha256:12873ca6cb9b0f0d3a0da705d6086fe911591737a59f28b7936bdfed27c0d47c \
|
||||||
|
--hash=sha256:19f705ada2530c1167abacb171925dd886168931e0a7b78f5bffcae5c6b5be75 \
|
||||||
|
--hash=sha256:1e3a615586f05fc4065a8b22b8152f0c1b00cdbc60596d187c2a74f9e3036e4e \
|
||||||
|
--hash=sha256:1f72fb8906754ac8a2cc3f9f5aaa298070652a0ffae577e0ea9bd480dc3c931a \
|
||||||
|
--hash=sha256:1fc9ea04857caf665289b7a75923f2c6ed559b8298a1b8c49e59f7dd95c8481e \
|
||||||
|
--hash=sha256:203a48d1fb583fc7d78a4c6655692963b860a417c0528492a6bc21f1aaefab25 \
|
||||||
|
--hash=sha256:21d1152871b019407d8ac3985f6775c079416c282e431a4da6afe7aefd2bccbe \
|
||||||
|
--hash=sha256:24b6f81f1983e6df8db3adc38562c83f7d4a0c36162885ec7f7b77c7dcbec97b \
|
||||||
|
--hash=sha256:256f80b80ca3853f90c21b23ee78cd008713787b1b1e93eae9f3d6a7134abd91 \
|
||||||
|
--hash=sha256:28a3a209b96630bca57cce802da70c266eb08c6e97e5afd61a75611ee6c64592 \
|
||||||
|
--hash=sha256:2c8f814d84194c9ea681642fd164267891702542f028a15fc97d4674b6206187 \
|
||||||
|
--hash=sha256:2de9a304e27f7596cd03d16f1b7c72219bd944e99cc52b84d0145aefb07cbd3c \
|
||||||
|
--hash=sha256:38100abb9d1b1435bc4cc340bb4489635dc2f0da7456590877030c9b3d40b0c1 \
|
||||||
|
--hash=sha256:3925dd22fa2b7699ed2617149842d2e6adde22b262fcbfada50e3d195e4b3a94 \
|
||||||
|
--hash=sha256:3e17ed538242334bf70832644a32a7aae3d83b57567f9fd60a26257e992b79ba \
|
||||||
|
--hash=sha256:3e837e369566884707ddaf85fc1744b47575005c0a229de3327f8f9a20f4efeb \
|
||||||
|
--hash=sha256:44d1b5909021139fe36001ae048dbdde8214afa20200eda0f64c068cac5d5529 \
|
||||||
|
--hash=sha256:45d5e886156860dc35862657e1494b9bae8dfa63bf56796f2fb56e1679fc0bca \
|
||||||
|
--hash=sha256:4671d9dd5ec934cb9a73e7ee9676f9362aba54f7f34910956b84d727b0d73fb6 \
|
||||||
|
--hash=sha256:53f77cbe57044e88bbd5ed26ac1d0514d2acf0591dd6bb02a3ae37f76811b80c \
|
||||||
|
--hash=sha256:5eda85d6d1879e692d546a078b44251cdd08dd1cfb98dfb77b670c97cee49ea0 \
|
||||||
|
--hash=sha256:5fed36fccc0612a53f1d4d9a816b50a36702c28a2aa880cb8a122b3466638743 \
|
||||||
|
--hash=sha256:66f011380d0e49ed280c789fbd08ff0d40968ee7b665575489afa95c98196ab5 \
|
||||||
|
--hash=sha256:6824f87845e3396029f3820c206e459ccc91760e8fa24422f8b0c3d1731cbec5 \
|
||||||
|
--hash=sha256:6c6c373cfc5c83a975506110d17457138c8c63016b563cc9ed6e056a82f13ce4 \
|
||||||
|
--hash=sha256:6d02d6655b0e54f54c4ef0b94eb6be0607b70853c45ce98bd278dc7de718be5d \
|
||||||
|
--hash=sha256:6d50360be4546678fc1b79ffe7a66265e28667840010348dd69a314145807a1b \
|
||||||
|
--hash=sha256:730cacb21e1bdff3ce90babf007d0a0917cc3e6492f336c2f0134101e0944f93 \
|
||||||
|
--hash=sha256:737fe7d37e1a1bffe70bd5754ea763a62a066dc5913ca57e957824b72a85e205 \
|
||||||
|
--hash=sha256:74a03b9698e198d47562765773b4a8309919089150a0bb17d829ad7b44b60d27 \
|
||||||
|
--hash=sha256:7553fb2090d71822f02c629afe6042c299edf91ba1bf94951165613553984512 \
|
||||||
|
--hash=sha256:7a66c7204d8869299919db4d5069a82f1561581af12b11b3c9f48c584eb8743d \
|
||||||
|
--hash=sha256:7cc09976e8b56f8cebd752f7113ad07752461f48a58cbba644139015ac24954c \
|
||||||
|
--hash=sha256:81afed14892743bbe14dacb9e36d9e0e504cd204e0b165062c488942b9718037 \
|
||||||
|
--hash=sha256:8941aaadaf67246224cee8c3803777eed332a19d909b47e29c9842ef1e79ac26 \
|
||||||
|
--hash=sha256:8ea985900c5c95ce9db1745f7933eeef5d314f0565b27625d9a10ec9881e1bfb \
|
||||||
|
--hash=sha256:8eca2a813c1cb7ad4fb74d368c2ffbbb4789d377ee5bb8df98373c2cc0dee76c \
|
||||||
|
--hash=sha256:92b68146a71df78564e4ef48af17551a5ddd142e5190cdf2c5624d0c3ff5b2e8 \
|
||||||
|
--hash=sha256:9332088d75dc3241c702d852d4671613136d90fa6881da7d770a483fd05248b4 \
|
||||||
|
--hash=sha256:94698a9c5f91f9d138526b48fe26a199609544591f859c870d477351dc7b2414 \
|
||||||
|
--hash=sha256:9a67fc9e8eb39039280526379fb3a70023d77caec1852002b4da7e8b270c4dd9 \
|
||||||
|
--hash=sha256:9de40a7b0323d889cf8d23d1ef214f565ab154443c42737dfe52ff82cf857664 \
|
||||||
|
--hash=sha256:a05d0c237b3349096d3981b727493e22147f934b20f6f125a3eba8f994bec4a9 \
|
||||||
|
--hash=sha256:afb8db5439b81cf9c9d0c80404b60c3cc9c3add93e114dcae767f1477cb53775 \
|
||||||
|
--hash=sha256:b18a3ed7d5b3bd8d9ef7a8cb226502c6bf8308df1525e1cc676c3680e7176739 \
|
||||||
|
--hash=sha256:b1e74d11748e7e98e2f426ab176d4ed720a64412b6a15054378afdb71e0f37dc \
|
||||||
|
--hash=sha256:b21e08af67b8a103c71a250401c78d5e0893beff75e28c53c98f4de42f774062 \
|
||||||
|
--hash=sha256:b4c854ef3adc177950a8dfc81a86f5115d2abd545751a304c5bcf2c2c7283cfe \
|
||||||
|
--hash=sha256:baf5215e0ab74c16e2dd324e8ec067ef59e41125d3eade2b863d294fd5035c92 \
|
||||||
|
--hash=sha256:c649e3a33450ec82378822b3dad03cc228b8f5963c0c12fc3b1e0ab940f768a5 \
|
||||||
|
--hash=sha256:c654de545946e0db659b3400168c9ad31b5d29593291482c43e3564effbcee13 \
|
||||||
|
--hash=sha256:c6638687455baf640e37344fe26d37c404db8b80d037c3d29f58fe8d1c3b194d \
|
||||||
|
--hash=sha256:c8d3b5532fc71b7a77c09192b4a5a200ea992702734a2e9279a37f2478236f26 \
|
||||||
|
--hash=sha256:cf364028c016c03078a23b503f02058f1814320a56ad535686f90565636a9495 \
|
||||||
|
--hash=sha256:d48a880098c96020b02d5a1f7d9251308510ce8858940e6fa99ece33f610838b \
|
||||||
|
--hash=sha256:d68b6cef7827e8641e8ef16f4494edda8b36104d79773a334beaa1e3521430f6 \
|
||||||
|
--hash=sha256:d9b29c1f0ae438d5ee9acb31cadee00a58c46cc9c0b2f9038c6b0b3470877a8c \
|
||||||
|
--hash=sha256:d9b97165e8aed9272a6bb17c01e3cc5871a594a446ebedc996e2397a1c1ea8ef \
|
||||||
|
--hash=sha256:da68248800ad6320861f129cd9c1bf96ca849a2771a59e0344e88681905916f5 \
|
||||||
|
--hash=sha256:da902562c3e9c550df360bfa53c035b2f241fed6d9aef119048073680ace4a18 \
|
||||||
|
--hash=sha256:dbd5c7a25a7cb98f5ca55d258b103a2054f859a46ae11aaf23134f9cc0d356ad \
|
||||||
|
--hash=sha256:dd4f05f54a52fb558f1ba9f528228066954fee3ebe629fc1660d874d040ae5a3 \
|
||||||
|
--hash=sha256:e11e82b744887154b182fd3e7e8512418446501191994dbf9c9fc1f32cc8efd5 \
|
||||||
|
--hash=sha256:f73b96c41e3b2adedc34a7356e64c8eb96e03a3782b535e043a986276ce12a49 \
|
||||||
|
--hash=sha256:f93fd8e5c8c0a4aa1f424d6173f14a892044054871c771f8566e4008eaa359d2 \
|
||||||
|
--hash=sha256:fc33c5141b55ed366cfaad382df24fe7dcbc686de5be719b207bb248e3053dc5 \
|
||||||
|
--hash=sha256:fc7de24befaeae77ba923797c7c87834c73648a05a4bde34b3b7e5588973a453
|
||||||
|
# via brotlicffi
|
||||||
|
charset-normalizer==3.4.6 \
|
||||||
|
--hash=sha256:06a7e86163334edfc5d20fe104db92fcd666e5a5df0977cb5680a506fe26cc8e \
|
||||||
|
--hash=sha256:0c173ce3a681f309f31b87125fecec7a5d1347261ea11ebbb856fa6006b23c8c \
|
||||||
|
--hash=sha256:0e28d62a8fc7a1fa411c43bd65e346f3bce9716dc51b897fbe930c5987b402d5 \
|
||||||
|
--hash=sha256:0e901eb1049fdb80f5bd11ed5ea1e498ec423102f7a9b9e4645d5b8204ff2815 \
|
||||||
|
--hash=sha256:11afb56037cbc4b1555a34dd69151e8e069bee82e613a73bef6e714ce733585f \
|
||||||
|
--hash=sha256:150b8ce8e830eb7ccb029ec9ca36022f756986aaaa7956aad6d9ec90089338c0 \
|
||||||
|
--hash=sha256:172985e4ff804a7ad08eebec0a1640ece87ba5041d565fff23c8f99c1f389484 \
|
||||||
|
--hash=sha256:197c1a244a274bb016dd8b79204850144ef77fe81c5b797dc389327adb552407 \
|
||||||
|
--hash=sha256:1ae6b62897110aa7c79ea2f5dd38d1abca6db663687c0b1ad9aed6f6bae3d9d6 \
|
||||||
|
--hash=sha256:22c6f0c2fbc31e76c3b8a86fba1a56eda6166e238c29cdd3d14befdb4a4e4815 \
|
||||||
|
--hash=sha256:231d4da14bcd9301310faf492051bee27df11f2bc7549bc0bb41fef11b82daa2 \
|
||||||
|
--hash=sha256:259695e2ccc253feb2a016303543d691825e920917e31f894ca1a687982b1de4 \
|
||||||
|
--hash=sha256:2a24157fa36980478dd1770b585c0f30d19e18f4fb0c47c13aa568f871718579 \
|
||||||
|
--hash=sha256:2b1a63e8224e401cafe7739f77efd3f9e7f5f2026bda4aead8e59afab537784f \
|
||||||
|
--hash=sha256:2e1d8ca8611099001949d1cdfaefc510cf0f212484fe7c565f735b68c78c3c95 \
|
||||||
|
--hash=sha256:2ef7fedc7a6ecbe99969cd09632516738a97eeb8bd7258bf8a0f23114c057dab \
|
||||||
|
--hash=sha256:30f445ae60aad5e1f8bdbb3108e39f6fbc09f4ea16c815c66578878325f8f15a \
|
||||||
|
--hash=sha256:34315ff4fc374b285ad7f4a0bf7dcbfe769e1b104230d40f49f700d4ab6bbd84 \
|
||||||
|
--hash=sha256:3778fd7d7cd04ae8f54651f4a7a0bd6e39a0cf20f801720a4c21d80e9b7ad6b0 \
|
||||||
|
--hash=sha256:39f5068d35621da2881271e5c3205125cc456f54e9030d3f723288c873a71bf9 \
|
||||||
|
--hash=sha256:404a1e552cf5b675a87f0651f8b79f5f1e6fd100ee88dc612f89aa16abd4486f \
|
||||||
|
--hash=sha256:419a9d91bd238052642a51938af8ac05da5b3343becde08d5cdeab9046df9ee1 \
|
||||||
|
--hash=sha256:423fb7e748a08f854a08a222b983f4df1912b1daedce51a72bd24fe8f26a1843 \
|
||||||
|
--hash=sha256:4482481cb0572180b6fd976a4d5c72a30263e98564da68b86ec91f0fe35e8565 \
|
||||||
|
--hash=sha256:47955475ac79cc504ef2704b192364e51d0d473ad452caedd0002605f780101c \
|
||||||
|
--hash=sha256:4be9f4830ba8741527693848403e2c457c16e499100963ec711b1c6f2049b7c7 \
|
||||||
|
--hash=sha256:51fb3c322c81d20567019778cb5a4a6f2dc1c200b886bc0d636238e364848c89 \
|
||||||
|
--hash=sha256:5273b9f0b5835ff0350c0828faea623c68bfa65b792720c453e22b25cc72930f \
|
||||||
|
--hash=sha256:530d548084c4a9f7a16ed4a294d459b4f229db50df689bfe92027452452943a0 \
|
||||||
|
--hash=sha256:530e8cebeea0d76bdcf93357aa5e41336f48c3dc709ac52da2bb167c5b8271d9 \
|
||||||
|
--hash=sha256:572d7c822caf521f0525ba1bce1a622a0b85cf47ffbdae6c9c19e3b5ac3c4389 \
|
||||||
|
--hash=sha256:58c948d0d086229efc484fe2f30c2d382c86720f55cd9bc33591774348ad44e0 \
|
||||||
|
--hash=sha256:5d11595abf8dd942a77883a39d81433739b287b6aa71620f15164f8096221b30 \
|
||||||
|
--hash=sha256:5f8ddd609f9e1af8c7bd6e2aca279c931aefecd148a14402d4e368f3171769fd \
|
||||||
|
--hash=sha256:5feb91325bbceade6afab43eb3b508c63ee53579fe896c77137ded51c6b6958e \
|
||||||
|
--hash=sha256:60c74963d8350241a79cb8feea80e54d518f72c26db618862a8f53e5023deaf9 \
|
||||||
|
--hash=sha256:613f19aa6e082cf96e17e3ffd89383343d0d589abda756b7764cf78361fd41dc \
|
||||||
|
--hash=sha256:695f5c2823691a25f17bc5d5ffe79fa90972cc34b002ac6c843bb8a1720e950d \
|
||||||
|
--hash=sha256:6cceb5473417d28edd20c6c984ab6fee6c6267d38d906823ebfe20b03d607dc2 \
|
||||||
|
--hash=sha256:74119174722c4349af9708993118581686f343adc1c8c9c007d59be90d077f3f \
|
||||||
|
--hash=sha256:74a2e659c7ecbc73562e2a15e05039f1e22c75b7c7618b4b574a3ea9118d1557 \
|
||||||
|
--hash=sha256:7504e9b7dc05f99a9bbb4525c67a2c155073b44d720470a148b34166a69c054e \
|
||||||
|
--hash=sha256:79090741d842f564b1b2827c0b82d846405b744d31e84f18d7a7b41c20e473ff \
|
||||||
|
--hash=sha256:7a6967aaf043bceabab5412ed6bd6bd26603dae84d5cb75bf8d9a74a4959d398 \
|
||||||
|
--hash=sha256:7bda6eebafd42133efdca535b04ccb338ab29467b3f7bf79569883676fc628db \
|
||||||
|
--hash=sha256:7edbed096e4a4798710ed6bc75dcaa2a21b68b6c356553ac4823c3658d53743a \
|
||||||
|
--hash=sha256:7f9019c9cb613f084481bd6a100b12e1547cf2efe362d873c2e31e4035a6fa43 \
|
||||||
|
--hash=sha256:80d0a5615143c0b3225e5e3ef22c8d5d51f3f72ce0ea6fb84c943546c7b25b6c \
|
||||||
|
--hash=sha256:82060f995ab5003a2d6e0f4ad29065b7672b6593c8c63559beefe5b443242c3e \
|
||||||
|
--hash=sha256:836ab36280f21fc1a03c99cd05c6b7af70d2697e374c7af0b61ed271401a72a2 \
|
||||||
|
--hash=sha256:87725cfb1a4f1f8c2fc9890ae2f42094120f4b44db9360be5d99a4c6b0e03a9e \
|
||||||
|
--hash=sha256:899d28f422116b08be5118ef350c292b36fc15ec2daeb9ea987c89281c7bb5c4 \
|
||||||
|
--hash=sha256:8bea55c4eef25b0b19a0337dc4e3f9a15b00d569c77211fa8cde38684f234fb7 \
|
||||||
|
--hash=sha256:8e5a94886bedca0f9b78fecd6afb6629142fd2605aa70a125d49f4edc6037ee6 \
|
||||||
|
--hash=sha256:90ca27cd8da8118b18a52d5f547859cc1f8354a00cd1e8e5120df3e30d6279e5 \
|
||||||
|
--hash=sha256:92734d4d8d187a354a556626c221cd1a892a4e0802ccb2af432a1d85ec012194 \
|
||||||
|
--hash=sha256:947cf925bc916d90adba35a64c82aace04fa39b46b52d4630ece166655905a69 \
|
||||||
|
--hash=sha256:95b52c68d64c1878818687a473a10547b3292e82b6f6fe483808fb1468e2f52f \
|
||||||
|
--hash=sha256:97d0235baafca5f2b09cf332cc275f021e694e8362c6bb9c96fc9a0eb74fc316 \
|
||||||
|
--hash=sha256:9ca4c0b502ab399ef89248a2c84c54954f77a070f28e546a85e91da627d1301e \
|
||||||
|
--hash=sha256:9cc4fc6c196d6a8b76629a70ddfcd4635a6898756e2d9cac5565cf0654605d73 \
|
||||||
|
--hash=sha256:9cc6e6d9e571d2f863fa77700701dae73ed5f78881efc8b3f9a4398772ff53e8 \
|
||||||
|
--hash=sha256:a056d1ad2633548ca18ffa2f85c202cfb48b68615129143915b8dc72a806a923 \
|
||||||
|
--hash=sha256:a26611d9987b230566f24a0a125f17fe0de6a6aff9f25c9f564aaa2721a5fb88 \
|
||||||
|
--hash=sha256:a4474d924a47185a06411e0064b803c68be044be2d60e50e8bddcc2649957c1f \
|
||||||
|
--hash=sha256:a4ea868bc28109052790eb2b52a9ab33f3aa7adc02f96673526ff47419490e21 \
|
||||||
|
--hash=sha256:a9e68c9d88823b274cf1e72f28cb5dc89c990edf430b0bfd3e2fb0785bfeabf4 \
|
||||||
|
--hash=sha256:aa9cccf4a44b9b62d8ba8b4dd06c649ba683e4bf04eea606d2e94cfc2d6ff4d6 \
|
||||||
|
--hash=sha256:ac2393c73378fea4e52aa56285a3d64be50f1a12395afef9cce47772f60334c2 \
|
||||||
|
--hash=sha256:ad8faf8df23f0378c6d527d8b0b15ea4a2e23c89376877c598c4870d1b2c7866 \
|
||||||
|
--hash=sha256:b35b200d6a71b9839a46b9b7fff66b6638bb52fc9658aa58796b0326595d3021 \
|
||||||
|
--hash=sha256:b3694e3f87f8ac7ce279d4355645b3c878d24d1424581b46282f24b92f5a4ae2 \
|
||||||
|
--hash=sha256:b4ff1d35e8c5bd078be89349b6f3a845128e685e751b6ea1169cf2160b344c4d \
|
||||||
|
--hash=sha256:bbc8c8650c6e51041ad1be191742b8b421d05bbd3410f43fa2a00c8db87678e8 \
|
||||||
|
--hash=sha256:bc72863f4d9aba2e8fd9085e63548a324ba706d2ea2c83b260da08a59b9482de \
|
||||||
|
--hash=sha256:c2274ca724536f173122f36c98ce188fd24ce3dad886ec2b7af859518ce008a4 \
|
||||||
|
--hash=sha256:c8ae56368f8cc97c7e40a7ee18e1cedaf8e780cd8bc5ed5ac8b81f238614facb \
|
||||||
|
--hash=sha256:c907cdc8109f6c619e6254212e794d6548373cc40e1ec75e6e3823d9135d29cc \
|
||||||
|
--hash=sha256:ca0276464d148c72defa8bb4390cce01b4a0e425f3b50d1435aa6d7a18107602 \
|
||||||
|
--hash=sha256:cd5e2801c89992ed8c0a3f0293ae83c159a60d9a5d685005383ef4caca77f2c4 \
|
||||||
|
--hash=sha256:d60377dce4511655582e300dc1e5a5f24ba0cb229005a1d5c8d0cb72bb758ab8 \
|
||||||
|
--hash=sha256:d73beaac5e90173ac3deb9928a74763a6d230f494e4bfb422c217a0ad8e629bf \
|
||||||
|
--hash=sha256:d7de2637729c67d67cf87614b566626057e95c303bc0a55ffe391f5205e7003d \
|
||||||
|
--hash=sha256:dad6e0f2e481fffdcf776d10ebee25e0ef89f16d691f1e5dee4b586375fdc64b \
|
||||||
|
--hash=sha256:dda86aba335c902b6149a02a55b38e96287157e609200811837678214ba2b1db \
|
||||||
|
--hash=sha256:e1f6e2f00a6b8edb562826e4632e26d063ac10307e80f7461f7de3ad8ef3f077 \
|
||||||
|
--hash=sha256:e25369dc110d58ddf29b949377a93e0716d72a24f62bad72b2b39f155949c1fd \
|
||||||
|
--hash=sha256:e3c701e954abf6fc03a49f7c579cc80c2c6cc52525340ca3186c41d3f33482ef \
|
||||||
|
--hash=sha256:e5bcc1a1ae744e0bb59641171ae53743760130600da8db48cbb6e4918e186e4e \
|
||||||
|
--hash=sha256:e68c14b04827dd76dcbd1aeea9e604e3e4b78322d8faf2f8132c7138efa340a8 \
|
||||||
|
--hash=sha256:e985a16ff513596f217cee86c21371b8cd011c0f6f056d0920aa2d926c544058 \
|
||||||
|
--hash=sha256:ef5960d965e67165d75b7c7ffc60a83ec5abfc5c11b764ec13ea54fbef8b4421 \
|
||||||
|
--hash=sha256:f0cdaecd4c953bfae0b6bb64910aaaca5a424ad9c72d85cb88417bb9814f7550 \
|
||||||
|
--hash=sha256:f1ce721c8a7dfec21fcbdfe04e8f68174183cf4e8188e0645e92aa23985c57ff \
|
||||||
|
--hash=sha256:f5ea69428fa1b49573eef0cc44a1d43bebd45ad0c611eb7d7eac760c7ae771bc \
|
||||||
|
--hash=sha256:f6e4333fb15c83f7d1482a76d45a0818897b3d33f00efd215528ff7c51b8e35d \
|
||||||
|
--hash=sha256:f820f24b09e3e779fe84c3c456cb4108a7aa639b0d1f02c28046e11bfcd088ed \
|
||||||
|
--hash=sha256:fcce033e4021347d80ed9c66dcf1e7b1546319834b74445f561d2e2221de5659
|
||||||
|
# via requests
|
||||||
|
idna==3.11 \
|
||||||
|
--hash=sha256:771a87f49d9defaf64091e6e6fe9c18d4833f140bd19464795bc32d966ca37ea \
|
||||||
|
--hash=sha256:795dafcc9c04ed0c1fb032c2aa73654d8e8c5023a7df64a53f39190ada629902
|
||||||
|
# via requests
|
||||||
|
mutagen==1.47.0 \
|
||||||
|
--hash=sha256:719fadef0a978c31b4cf3c956261b3c58b6948b32023078a2117b1de09f0fc99 \
|
||||||
|
--hash=sha256:edd96f50c5907a9539d8e5bba7245f62c9f520aef333d13392a79a4f70aca719
|
||||||
|
# via yt-dlp
|
||||||
|
pycparser==3.0 ; implementation_name != 'PyPy' and implementation_name != 'cpython' \
|
||||||
|
--hash=sha256:600f49d217304a5902ac3c37e1281c9fe94e4d0489de643a9504c5cdfdfc6b29 \
|
||||||
|
--hash=sha256:b727414169a36b7d524c1c3e31839a521725078d7b2ff038656844266160a992
|
||||||
|
# via cffi
|
||||||
|
pycryptodomex==3.23.0 \
|
||||||
|
--hash=sha256:02d87b80778c171445d67e23d1caef279bf4b25c3597050ccd2e13970b57fd51 \
|
||||||
|
--hash=sha256:06698f957fe1ab229a99ba2defeeae1c09af185baa909a31a5d1f9d42b1aaed6 \
|
||||||
|
--hash=sha256:14c37aaece158d0ace436f76a7bb19093db3b4deade9797abfc39ec6cd6cc2fe \
|
||||||
|
--hash=sha256:189afbc87f0b9f158386bf051f720e20fa6145975f1e76369303d0f31d1a8d7c \
|
||||||
|
--hash=sha256:43c446e2ba8df8889e0e16f02211c25b4934898384c1ec1ec04d7889c0333587 \
|
||||||
|
--hash=sha256:4f2596e643d4365e14d0879dc5aafe6355616c61c2176009270f3048f6d9a61f \
|
||||||
|
--hash=sha256:52e5ca58c3a0b0bd5e100a9fbc8015059b05cffc6c66ce9d98b4b45e023443b9 \
|
||||||
|
--hash=sha256:55ccbe27f049743a4caf4f4221b166560d3438d0b1e5ab929e07ae1702a4d6fd \
|
||||||
|
--hash=sha256:58b851b9effd0d072d4ca2e4542bf2a4abcf13c82a29fd2c93ce27ee2a2e9462 \
|
||||||
|
--hash=sha256:6b8962204c47464d5c1c4038abeadd4514a133b28748bcd9fa5b6d62e3cec6fa \
|
||||||
|
--hash=sha256:6bbcb1dd0f646484939e142462d9e532482bc74475cecf9c4903d4e1cd21f003 \
|
||||||
|
--hash=sha256:71909758f010c82bc99b0abf4ea12012c98962fbf0583c2164f8b84533c2e4da \
|
||||||
|
--hash=sha256:7b37e08e3871efe2187bc1fd9320cc81d87caf19816c648f24443483005ff886 \
|
||||||
|
--hash=sha256:8a4fcd42ccb04c31268d1efeecfccfd1249612b4de6374205376b8f280321744 \
|
||||||
|
--hash=sha256:91979028227543010d7b2ba2471cf1d1e398b3f183cb105ac584df0c36dac28d \
|
||||||
|
--hash=sha256:a33986a0066860f7fcf7c7bd2bc804fa90e434183645595ae7b33d01f3c91ed8 \
|
||||||
|
--hash=sha256:a9d446e844f08299236780f2efa9898c818fe7e02f17263866b8550c7d5fb328 \
|
||||||
|
--hash=sha256:b2c2537863eccef2d41061e82a881dcabb04944c5c06c5aa7110b577cc487545 \
|
||||||
|
--hash=sha256:bc65bdd9fc8de7a35a74cab1c898cab391a4add33a8fe740bda00f5976ca4708 \
|
||||||
|
--hash=sha256:bdc69d0d3d989a1029df0eed67cc5e8e5d968f3724f4519bd03e0ec68df7543c \
|
||||||
|
--hash=sha256:c25e30a20e1b426e1f0fa00131c516f16e474204eee1139d1603e132acffc314 \
|
||||||
|
--hash=sha256:c7947ab8d589e3178da3d7cdeabe14f841b391e17046954f2fbcd941705762b5 \
|
||||||
|
--hash=sha256:c885da45e70139464f082018ac527fdaad26f1657a99ee13eecdce0f0ca24ab4 \
|
||||||
|
--hash=sha256:da4fa650cef02db88c2b98acc5434461e027dce0ae8c22dd5a69013eaf510006 \
|
||||||
|
--hash=sha256:ebfff755c360d674306e5891c564a274a47953562b42fb74a5c25b8fc1fb1cb5 \
|
||||||
|
--hash=sha256:eca54f4bb349d45afc17e3011ed4264ef1cc9e266699874cdd1349c504e64798 \
|
||||||
|
--hash=sha256:f489c4765093fb60e2edafdf223397bc716491b2b69fe74367b70d6999257a5c \
|
||||||
|
--hash=sha256:fdfac7cda115bca3a5abb2f9e43bc2fb66c2b65ab074913643803ca7083a79ea
|
||||||
|
# via yt-dlp
|
||||||
|
requests==2.33.0 \
|
||||||
|
--hash=sha256:3324635456fa185245e24865e810cecec7b4caf933d7eb133dcde67d48cee69b \
|
||||||
|
--hash=sha256:c7ebc5e8b0f21837386ad0e1c8fe8b829fa5f544d8df3b2253bff14ef29d7652
|
||||||
|
# via yt-dlp
|
||||||
|
urllib3==2.6.3 \
|
||||||
|
--hash=sha256:1b62b6884944a57dbe321509ab94fd4d3b307075e0c2eae991ac71ee15ad38ed \
|
||||||
|
--hash=sha256:bf272323e553dfb2e87d9bfd225ca7b0f467b919d7bbd355436d3fd37cb0acd4
|
||||||
|
# via
|
||||||
|
# requests
|
||||||
|
# yt-dlp
|
||||||
|
websockets==16.0 \
|
||||||
|
--hash=sha256:0298d07ee155e2e9fda5be8a9042200dd2e3bb0b8a38482156576f863a9d457c \
|
||||||
|
--hash=sha256:04cdd5d2d1dacbad0a7bf36ccbcd3ccd5a30ee188f2560b7a62a30d14107b31a \
|
||||||
|
--hash=sha256:08d7af67b64d29823fed316505a89b86705f2b7981c07848fb5e3ea3020c1abe \
|
||||||
|
--hash=sha256:152284a83a00c59b759697b7f9e9cddf4e3c7861dd0d964b472b70f78f89e80e \
|
||||||
|
--hash=sha256:1637db62fad1dc833276dded54215f2c7fa46912301a24bd94d45d46a011ceec \
|
||||||
|
--hash=sha256:19c4dc84098e523fd63711e563077d39e90ec6702aff4b5d9e344a60cb3c0cb1 \
|
||||||
|
--hash=sha256:1c1b30e4f497b0b354057f3467f56244c603a79c0d1dafce1d16c283c25f6e64 \
|
||||||
|
--hash=sha256:2b9f1e0d69bc60a4a87349d50c09a037a2607918746f07de04df9e43252c77a3 \
|
||||||
|
--hash=sha256:31a52addea25187bde0797a97d6fc3d2f92b6f72a9370792d65a6e84615ac8a8 \
|
||||||
|
--hash=sha256:32da954ffa2814258030e5a57bc73a3635463238e797c7375dc8091327434206 \
|
||||||
|
--hash=sha256:335c23addf3d5e6a8633f9f8eda77efad001671e80b95c491dd0924587ece0b3 \
|
||||||
|
--hash=sha256:3425ac5cf448801335d6fdc7ae1eb22072055417a96cc6b31b3861f455fbc156 \
|
||||||
|
--hash=sha256:349f83cd6c9a415428ee1005cadb5c2c56f4389bc06a9af16103c3bc3dcc8b7d \
|
||||||
|
--hash=sha256:37b31c1623c6605e4c00d466c9d633f9b812ea430c11c8a278774a1fde1acfa9 \
|
||||||
|
--hash=sha256:417b28978cdccab24f46400586d128366313e8a96312e4b9362a4af504f3bbad \
|
||||||
|
--hash=sha256:485c49116d0af10ac698623c513c1cc01c9446c058a4e61e3bf6c19dff7335a2 \
|
||||||
|
--hash=sha256:4a1aba3340a8dca8db6eb5a7986157f52eb9e436b74813764241981ca4888f03 \
|
||||||
|
--hash=sha256:50f23cdd8343b984957e4077839841146f67a3d31ab0d00e6b824e74c5b2f6e8 \
|
||||||
|
--hash=sha256:52a0fec0e6c8d9a784c2c78276a48a2bdf099e4ccc2a4cad53b27718dbfd0230 \
|
||||||
|
--hash=sha256:52ac480f44d32970d66763115edea932f1c5b1312de36df06d6b219f6741eed8 \
|
||||||
|
--hash=sha256:5569417dc80977fc8c2d43a86f78e0a5a22fee17565d78621b6bb264a115d4ea \
|
||||||
|
--hash=sha256:569d01a4e7fba956c5ae4fc988f0d4e187900f5497ce46339c996dbf24f17641 \
|
||||||
|
--hash=sha256:583b7c42688636f930688d712885cf1531326ee05effd982028212ccc13e5957 \
|
||||||
|
--hash=sha256:5a4b4cc550cb665dd8a47f868c8d04c8230f857363ad3c9caf7a0c3bf8c61ca6 \
|
||||||
|
--hash=sha256:5f451484aeb5cafee1ccf789b1b66f535409d038c56966d6101740c1614b86c6 \
|
||||||
|
--hash=sha256:5f6261a5e56e8d5c42a4497b364ea24d94d9563e8fbd44e78ac40879c60179b5 \
|
||||||
|
--hash=sha256:6e5a82b677f8f6f59e8dfc34ec06ca6b5b48bc4fcda346acd093694cc2c24d8f \
|
||||||
|
--hash=sha256:71c989cbf3254fbd5e84d3bff31e4da39c43f884e64f2551d14bb3c186230f00 \
|
||||||
|
--hash=sha256:781caf5e8eee67f663126490c2f96f40906594cb86b408a703630f95550a8c3e \
|
||||||
|
--hash=sha256:7be95cfb0a4dae143eaed2bcba8ac23f4892d8971311f1b06f3c6b78952ee70b \
|
||||||
|
--hash=sha256:7d837379b647c0c4c2355c2499723f82f1635fd2c26510e1f587d89bc2199e72 \
|
||||||
|
--hash=sha256:86890e837d61574c92a97496d590968b23c2ef0aeb8a9bc9421d174cd378ae39 \
|
||||||
|
--hash=sha256:878b336ac47938b474c8f982ac2f7266a540adc3fa4ad74ae96fea9823a02cc9 \
|
||||||
|
--hash=sha256:8b6e209ffee39ff1b6d0fa7bfef6de950c60dfb91b8fcead17da4ee539121a79 \
|
||||||
|
--hash=sha256:8cc451a50f2aee53042ac52d2d053d08bf89bcb31ae799cb4487587661c038a0 \
|
||||||
|
--hash=sha256:8d7f0659570eefb578dacde98e24fb60af35350193e4f56e11190787bee77dac \
|
||||||
|
--hash=sha256:8e1dab317b6e77424356e11e99a432b7cb2f3ec8c5ab4dabbcee6add48f72b35 \
|
||||||
|
--hash=sha256:8ff32bb86522a9e5e31439a58addbb0166f0204d64066fb955265c4e214160f0 \
|
||||||
|
--hash=sha256:95724e638f0f9c350bb1c2b0a7ad0e83d9cc0c9259f3ea94e40d7b02a2179ae5 \
|
||||||
|
--hash=sha256:9b5aca38b67492ef518a8ab76851862488a478602229112c4b0d58d63a7a4d5c \
|
||||||
|
--hash=sha256:a069d734c4a043182729edd3e9f247c3b2a4035415a9172fd0f1b71658a320a8 \
|
||||||
|
--hash=sha256:a0b31e0b424cc6b5a04b8838bbaec1688834b2383256688cf47eb97412531da1 \
|
||||||
|
--hash=sha256:a35539cacc3febb22b8f4d4a99cc79b104226a756aa7400adc722e83b0d03244 \
|
||||||
|
--hash=sha256:a5e18a238a2b2249c9a9235466b90e96ae4795672598a58772dd806edc7ac6d3 \
|
||||||
|
--hash=sha256:a653aea902e0324b52f1613332ddf50b00c06fdaf7e92624fbf8c77c78fa5767 \
|
||||||
|
--hash=sha256:abf050a199613f64c886ea10f38b47770a65154dc37181bfaff70c160f45315a \
|
||||||
|
--hash=sha256:af80d74d4edfa3cb9ed973a0a5ba2b2a549371f8a741e0800cb07becdd20f23d \
|
||||||
|
--hash=sha256:b14dc141ed6d2dde437cddb216004bcac6a1df0935d79656387bd41632ba0bbd \
|
||||||
|
--hash=sha256:b784ca5de850f4ce93ec85d3269d24d4c82f22b7212023c974c401d4980ebc5e \
|
||||||
|
--hash=sha256:bc59589ab64b0022385f429b94697348a6a234e8ce22544e3681b2e9331b5944 \
|
||||||
|
--hash=sha256:c0204dc62a89dc9d50d682412c10b3542d748260d743500a85c13cd1ee4bde82 \
|
||||||
|
--hash=sha256:c0ee0e63f23914732c6d7e0cce24915c48f3f1512ec1d079ed01fc629dab269d \
|
||||||
|
--hash=sha256:caab51a72c51973ca21fa8a18bd8165e1a0183f1ac7066a182ff27107b71e1a4 \
|
||||||
|
--hash=sha256:d6297ce39ce5c2e6feb13c1a996a2ded3b6832155fcfc920265c76f24c7cceb5 \
|
||||||
|
--hash=sha256:daa3b6ff70a9241cf6c7fc9e949d41232d9d7d26fd3522b1ad2b4d62487e9904 \
|
||||||
|
--hash=sha256:df57afc692e517a85e65b72e165356ed1df12386ecb879ad5693be08fac65dde \
|
||||||
|
--hash=sha256:e0334872c0a37b606418ac52f6ab9cfd17317ac26365f7f65e203e2d0d0d359f \
|
||||||
|
--hash=sha256:e6578ed5b6981005df1860a56e3617f14a6c307e6a71b4fff8c48fdc50f3ed2c \
|
||||||
|
--hash=sha256:eaded469f5e5b7294e2bdca0ab06becb6756ea86894a47806456089298813c89 \
|
||||||
|
--hash=sha256:f4a32d1bd841d4bcbffdcb3d2ce50c09c3909fbead375ab28d0181af89fd04da \
|
||||||
|
--hash=sha256:fd3cb4adb94a2a6e2b7c0d8d05cb94e6f1c81a0cf9dc2694fb65c7e8d94c42e4
|
||||||
|
# via yt-dlp
|
||||||
|
yt-dlp-ejs==0.8.0 \
|
||||||
|
--hash=sha256:79300e5fca7f937a1eeede11f0456862c1b41107ce1d726871e0207424f4bdb4 \
|
||||||
|
--hash=sha256:d5fa1639f63b5c4af8d932495f60689d5370f1a095782c944f7f62a303eb104e
|
||||||
|
# via yt-dlp
|
||||||
@ -337,5 +337,10 @@
|
|||||||
"when": "e2ea6bd6ab639f910b99e55add18856974ff4c3a",
|
"when": "e2ea6bd6ab639f910b99e55add18856974ff4c3a",
|
||||||
"short": "[ie] Fix prioritization of Youtube URL matching (#15596)",
|
"short": "[ie] Fix prioritization of Youtube URL matching (#15596)",
|
||||||
"authors": ["Grub4K"]
|
"authors": ["Grub4K"]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"action": "add",
|
||||||
|
"when": "1fbbe29b99dc61375bf6d786f824d9fcf6ea9c1a",
|
||||||
|
"short": "[priority] Security: [[CVE-2026-26331](https://nvd.nist.gov/vuln/detail/CVE-2026-26331)] [Arbitrary command injection with the `--netrc-cmd` option](https://github.com/yt-dlp/yt-dlp/security/advisories/GHSA-g3gw-q23r-pgqm)\n - The argument passed to the command in `--netrc-cmd` is now limited to a safe subset of characters"
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
|
|||||||
@ -25,8 +25,8 @@ def parse_args():
|
|||||||
'-e', '--exclude-dependency', metavar='DEPENDENCY', action='append',
|
'-e', '--exclude-dependency', metavar='DEPENDENCY', action='append',
|
||||||
help='exclude a dependency (can be used multiple times)')
|
help='exclude a dependency (can be used multiple times)')
|
||||||
parser.add_argument(
|
parser.add_argument(
|
||||||
'-i', '--include-extra', metavar='EXTRA', action='append',
|
'-i', '--include', '--include-extra', '--include-group', metavar='EXTRA/GROUP', action='append', dest='includes',
|
||||||
help='include an extra/optional-dependencies list (can be used multiple times)')
|
help='include an extra/group (can be used multiple times)')
|
||||||
parser.add_argument(
|
parser.add_argument(
|
||||||
'-c', '--cherry-pick', metavar='DEPENDENCY', action='append',
|
'-c', '--cherry-pick', metavar='DEPENDENCY', action='append',
|
||||||
help=(
|
help=(
|
||||||
@ -50,29 +50,41 @@ def uniq(arg) -> dict[str, None]:
|
|||||||
|
|
||||||
def main():
|
def main():
|
||||||
args = parse_args()
|
args = parse_args()
|
||||||
project_table = parse_toml(read_file(args.input))['project']
|
toml_data = parse_toml(read_file(args.input))
|
||||||
|
project_table = toml_data['project']
|
||||||
recursive_pattern = re.compile(rf'{project_table["name"]}\[(?P<extra_name>[\w-]+)\]')
|
recursive_pattern = re.compile(rf'{project_table["name"]}\[(?P<extra_name>[\w-]+)\]')
|
||||||
extras = project_table['optional-dependencies']
|
extras = project_table['optional-dependencies']
|
||||||
|
groups = toml_data['dependency-groups']
|
||||||
|
|
||||||
excludes = uniq(args.exclude_dependency)
|
excludes = uniq(args.exclude_dependency)
|
||||||
only_includes = uniq(args.cherry_pick)
|
only_includes = uniq(args.cherry_pick)
|
||||||
include_extras = uniq(args.include_extra)
|
includes = uniq(args.includes)
|
||||||
|
|
||||||
def yield_deps(extra):
|
def yield_deps_from_extra(extra):
|
||||||
for dep in extra:
|
for dep in extra:
|
||||||
if mobj := recursive_pattern.fullmatch(dep):
|
if mobj := recursive_pattern.fullmatch(dep):
|
||||||
yield from extras.get(mobj.group('extra_name'), ())
|
yield from extras.get(mobj.group('extra_name'), ())
|
||||||
else:
|
else:
|
||||||
yield dep
|
yield dep
|
||||||
|
|
||||||
|
def yield_deps_from_group(group):
|
||||||
|
for dep in group:
|
||||||
|
if isinstance(dep, dict):
|
||||||
|
yield from yield_deps_from_group(groups[dep['include-group']])
|
||||||
|
else:
|
||||||
|
yield dep
|
||||||
|
|
||||||
targets = {}
|
targets = {}
|
||||||
if not args.omit_default:
|
if not args.omit_default:
|
||||||
# legacy: 'dependencies' is empty now
|
# legacy: 'dependencies' is empty now
|
||||||
targets.update(dict.fromkeys(project_table['dependencies']))
|
targets.update(dict.fromkeys(project_table['dependencies']))
|
||||||
targets.update(dict.fromkeys(yield_deps(extras['default'])))
|
targets.update(dict.fromkeys(yield_deps_from_extra(extras['default'])))
|
||||||
|
|
||||||
for include in filter(None, map(extras.get, include_extras)):
|
for include in filter(None, map(extras.get, includes)):
|
||||||
targets.update(dict.fromkeys(yield_deps(include)))
|
targets.update(dict.fromkeys(yield_deps_from_extra(include)))
|
||||||
|
|
||||||
|
for include in filter(None, map(groups.get, includes)):
|
||||||
|
targets.update(dict.fromkeys(yield_deps_from_group(include)))
|
||||||
|
|
||||||
def target_filter(target):
|
def target_filter(target):
|
||||||
name = re.match(r'[\w-]+', target).group(0).lower()
|
name = re.match(r'[\w-]+', target).group(0).lower()
|
||||||
|
|||||||
@ -16,12 +16,11 @@ STABLE_REPOSITORY = 'yt-dlp/yt-dlp'
|
|||||||
def setup_variables(environment):
|
def setup_variables(environment):
|
||||||
"""
|
"""
|
||||||
`environment` must contain these keys:
|
`environment` must contain these keys:
|
||||||
REPOSITORY, INPUTS, PROCESSED,
|
REPOSITORY, INPUTS, PROCESSED, PYPI_PROJECT,
|
||||||
PUSH_VERSION_COMMIT, PYPI_PROJECT,
|
|
||||||
SOURCE_PYPI_PROJECT, SOURCE_PYPI_SUFFIX,
|
SOURCE_PYPI_PROJECT, SOURCE_PYPI_SUFFIX,
|
||||||
TARGET_PYPI_PROJECT, TARGET_PYPI_SUFFIX,
|
TARGET_PYPI_PROJECT, TARGET_PYPI_SUFFIX,
|
||||||
SOURCE_ARCHIVE_REPO, TARGET_ARCHIVE_REPO,
|
SOURCE_ARCHIVE_REPO, TARGET_ARCHIVE_REPO,
|
||||||
HAS_ARCHIVE_REPO_TOKEN
|
HAS_ARCHIVE_REPO_TOKEN, HAS_RELEASE_KEY
|
||||||
|
|
||||||
`INPUTS` must contain these keys:
|
`INPUTS` must contain these keys:
|
||||||
prerelease
|
prerelease
|
||||||
@ -57,7 +56,7 @@ def setup_variables(environment):
|
|||||||
resolved_source = 'stable'
|
resolved_source = 'stable'
|
||||||
|
|
||||||
revision = None
|
revision = None
|
||||||
if INPUTS['prerelease'] or not environment['PUSH_VERSION_COMMIT']:
|
if INPUTS['prerelease'] or not json.loads(environment['HAS_RELEASE_KEY']):
|
||||||
revision = dt.datetime.now(tz=dt.timezone.utc).strftime('%H%M%S')
|
revision = dt.datetime.now(tz=dt.timezone.utc).strftime('%H%M%S')
|
||||||
|
|
||||||
version = calculate_version(INPUTS.get('version') or revision)
|
version = calculate_version(INPUTS.get('version') or revision)
|
||||||
|
|||||||
@ -27,7 +27,6 @@ def _test(github_repository, note, repo_vars, repo_secrets, inputs, expected, ig
|
|||||||
'INPUTS': json.dumps(inp),
|
'INPUTS': json.dumps(inp),
|
||||||
'PROCESSED': json.dumps(processed),
|
'PROCESSED': json.dumps(processed),
|
||||||
'REPOSITORY': github_repository,
|
'REPOSITORY': github_repository,
|
||||||
'PUSH_VERSION_COMMIT': variables.get('PUSH_VERSION_COMMIT') or '',
|
|
||||||
'PYPI_PROJECT': variables.get('PYPI_PROJECT') or '',
|
'PYPI_PROJECT': variables.get('PYPI_PROJECT') or '',
|
||||||
'SOURCE_PYPI_PROJECT': variables.get(f'{source_repo}_PYPI_PROJECT') or '',
|
'SOURCE_PYPI_PROJECT': variables.get(f'{source_repo}_PYPI_PROJECT') or '',
|
||||||
'SOURCE_PYPI_SUFFIX': variables.get(f'{source_repo}_PYPI_SUFFIX') or '',
|
'SOURCE_PYPI_SUFFIX': variables.get(f'{source_repo}_PYPI_SUFFIX') or '',
|
||||||
@ -36,6 +35,7 @@ def _test(github_repository, note, repo_vars, repo_secrets, inputs, expected, ig
|
|||||||
'SOURCE_ARCHIVE_REPO': variables.get(f'{source_repo}_ARCHIVE_REPO') or '',
|
'SOURCE_ARCHIVE_REPO': variables.get(f'{source_repo}_ARCHIVE_REPO') or '',
|
||||||
'TARGET_ARCHIVE_REPO': variables.get(f'{target_repo}_ARCHIVE_REPO') or '',
|
'TARGET_ARCHIVE_REPO': variables.get(f'{target_repo}_ARCHIVE_REPO') or '',
|
||||||
'HAS_ARCHIVE_REPO_TOKEN': json.dumps(bool(secrets.get('ARCHIVE_REPO_TOKEN'))),
|
'HAS_ARCHIVE_REPO_TOKEN': json.dumps(bool(secrets.get('ARCHIVE_REPO_TOKEN'))),
|
||||||
|
'HAS_RELEASE_KEY': json.dumps(bool(secrets.get('RELEASE_KEY'))),
|
||||||
}
|
}
|
||||||
|
|
||||||
result = setup_variables(env)
|
result = setup_variables(env)
|
||||||
@ -67,11 +67,11 @@ def test_setup_variables():
|
|||||||
'NIGHTLY_ARCHIVE_REPO': 'yt-dlp/yt-dlp-nightly-builds',
|
'NIGHTLY_ARCHIVE_REPO': 'yt-dlp/yt-dlp-nightly-builds',
|
||||||
'NIGHTLY_PYPI_PROJECT': 'yt-dlp',
|
'NIGHTLY_PYPI_PROJECT': 'yt-dlp',
|
||||||
'NIGHTLY_PYPI_SUFFIX': 'dev',
|
'NIGHTLY_PYPI_SUFFIX': 'dev',
|
||||||
'PUSH_VERSION_COMMIT': '1',
|
|
||||||
'PYPI_PROJECT': 'yt-dlp',
|
'PYPI_PROJECT': 'yt-dlp',
|
||||||
}
|
}
|
||||||
BASE_REPO_SECRETS = {
|
BASE_REPO_SECRETS = {
|
||||||
'ARCHIVE_REPO_TOKEN': '1',
|
'ARCHIVE_REPO_TOKEN': '1',
|
||||||
|
'RELEASE_KEY': '1',
|
||||||
}
|
}
|
||||||
FORK_REPOSITORY = 'fork/yt-dlp'
|
FORK_REPOSITORY = 'fork/yt-dlp'
|
||||||
FORK_ORG = FORK_REPOSITORY.partition('/')[0]
|
FORK_ORG = FORK_REPOSITORY.partition('/')[0]
|
||||||
@ -227,8 +227,8 @@ def test_setup_variables():
|
|||||||
})
|
})
|
||||||
|
|
||||||
_test(
|
_test(
|
||||||
FORK_REPOSITORY, 'fork w/ PUSH_VERSION_COMMIT, stable',
|
FORK_REPOSITORY, 'fork w/ RELEASE_KEY, stable',
|
||||||
{'PUSH_VERSION_COMMIT': '1'}, {}, {}, {
|
{}, {'RELEASE_KEY': '1'}, {}, {
|
||||||
'channel': FORK_REPOSITORY,
|
'channel': FORK_REPOSITORY,
|
||||||
'version': DEFAULT_VERSION,
|
'version': DEFAULT_VERSION,
|
||||||
'target_repo': FORK_REPOSITORY,
|
'target_repo': FORK_REPOSITORY,
|
||||||
@ -237,8 +237,8 @@ def test_setup_variables():
|
|||||||
'pypi_suffix': None,
|
'pypi_suffix': None,
|
||||||
})
|
})
|
||||||
_test(
|
_test(
|
||||||
FORK_REPOSITORY, 'fork w/ PUSH_VERSION_COMMIT, prerelease',
|
FORK_REPOSITORY, 'fork w/ RELEASE_KEY, prerelease',
|
||||||
{'PUSH_VERSION_COMMIT': '1'}, {}, {'prerelease': True}, {
|
{}, {'RELEASE_KEY': '1'}, {'prerelease': True}, {
|
||||||
'channel': FORK_REPOSITORY,
|
'channel': FORK_REPOSITORY,
|
||||||
'version': DEFAULT_VERSION_WITH_REVISION,
|
'version': DEFAULT_VERSION_WITH_REVISION,
|
||||||
'target_repo': FORK_REPOSITORY,
|
'target_repo': FORK_REPOSITORY,
|
||||||
|
|||||||
@ -1,166 +0,0 @@
|
|||||||
#!/usr/bin/env python3
|
|
||||||
from __future__ import annotations
|
|
||||||
|
|
||||||
import contextlib
|
|
||||||
import io
|
|
||||||
import json
|
|
||||||
import hashlib
|
|
||||||
import pathlib
|
|
||||||
import urllib.request
|
|
||||||
import zipfile
|
|
||||||
|
|
||||||
|
|
||||||
TEMPLATE = '''\
|
|
||||||
# This file is generated by devscripts/update_ejs.py. DO NOT MODIFY!
|
|
||||||
|
|
||||||
VERSION = {version!r}
|
|
||||||
HASHES = {{
|
|
||||||
{hash_mapping}
|
|
||||||
}}
|
|
||||||
'''
|
|
||||||
PREFIX = ' "yt-dlp-ejs=='
|
|
||||||
BASE_PATH = pathlib.Path(__file__).parent.parent
|
|
||||||
PYPROJECT_PATH = BASE_PATH / 'pyproject.toml'
|
|
||||||
PACKAGE_PATH = BASE_PATH / 'yt_dlp/extractor/youtube/jsc/_builtin/vendor'
|
|
||||||
RELEASE_URL = 'https://api.github.com/repos/yt-dlp/ejs/releases/latest'
|
|
||||||
ASSETS = {
|
|
||||||
'yt.solver.lib.js': False,
|
|
||||||
'yt.solver.lib.min.js': False,
|
|
||||||
'yt.solver.deno.lib.js': True,
|
|
||||||
'yt.solver.bun.lib.js': True,
|
|
||||||
'yt.solver.core.min.js': False,
|
|
||||||
'yt.solver.core.js': True,
|
|
||||||
}
|
|
||||||
MAKEFILE_PATH = BASE_PATH / 'Makefile'
|
|
||||||
|
|
||||||
|
|
||||||
def request(url: str):
|
|
||||||
return contextlib.closing(urllib.request.urlopen(url))
|
|
||||||
|
|
||||||
|
|
||||||
def makefile_variables(
|
|
||||||
version: str | None = None,
|
|
||||||
name: str | None = None,
|
|
||||||
digest: str | None = None,
|
|
||||||
data: bytes | None = None,
|
|
||||||
keys_only: bool = False,
|
|
||||||
) -> dict[str, str | None]:
|
|
||||||
assert keys_only or all(arg is not None for arg in (version, name, digest, data))
|
|
||||||
|
|
||||||
return {
|
|
||||||
'EJS_VERSION': None if keys_only else version,
|
|
||||||
'EJS_WHEEL_NAME': None if keys_only else name,
|
|
||||||
'EJS_WHEEL_HASH': None if keys_only else digest,
|
|
||||||
'EJS_PY_FOLDERS': None if keys_only else list_wheel_contents(data, 'py', files=False),
|
|
||||||
'EJS_PY_FILES': None if keys_only else list_wheel_contents(data, 'py', folders=False),
|
|
||||||
'EJS_JS_FOLDERS': None if keys_only else list_wheel_contents(data, 'js', files=False),
|
|
||||||
'EJS_JS_FILES': None if keys_only else list_wheel_contents(data, 'js', folders=False),
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
def list_wheel_contents(
|
|
||||||
wheel_data: bytes,
|
|
||||||
suffix: str | None = None,
|
|
||||||
folders: bool = True,
|
|
||||||
files: bool = True,
|
|
||||||
) -> str:
|
|
||||||
assert folders or files, 'at least one of "folders" or "files" must be True'
|
|
||||||
|
|
||||||
with zipfile.ZipFile(io.BytesIO(wheel_data)) as zipf:
|
|
||||||
path_gen = (zinfo.filename for zinfo in zipf.infolist())
|
|
||||||
|
|
||||||
filtered = filter(lambda path: path.startswith('yt_dlp_ejs/'), path_gen)
|
|
||||||
if suffix:
|
|
||||||
filtered = filter(lambda path: path.endswith(f'.{suffix}'), filtered)
|
|
||||||
|
|
||||||
files_list = list(filtered)
|
|
||||||
if not folders:
|
|
||||||
return ' '.join(files_list)
|
|
||||||
|
|
||||||
folders_list = list(dict.fromkeys(path.rpartition('/')[0] for path in files_list))
|
|
||||||
if not files:
|
|
||||||
return ' '.join(folders_list)
|
|
||||||
|
|
||||||
return ' '.join(folders_list + files_list)
|
|
||||||
|
|
||||||
|
|
||||||
def main():
|
|
||||||
current_version = None
|
|
||||||
with PYPROJECT_PATH.open() as file:
|
|
||||||
for line in file:
|
|
||||||
if not line.startswith(PREFIX):
|
|
||||||
continue
|
|
||||||
current_version, _, _ = line.removeprefix(PREFIX).partition('"')
|
|
||||||
|
|
||||||
if not current_version:
|
|
||||||
print('yt-dlp-ejs dependency line could not be found')
|
|
||||||
return
|
|
||||||
|
|
||||||
makefile_info = makefile_variables(keys_only=True)
|
|
||||||
prefixes = tuple(f'{key} = ' for key in makefile_info)
|
|
||||||
with MAKEFILE_PATH.open() as file:
|
|
||||||
for line in file:
|
|
||||||
if not line.startswith(prefixes):
|
|
||||||
continue
|
|
||||||
key, _, val = line.partition(' = ')
|
|
||||||
makefile_info[key] = val.rstrip()
|
|
||||||
|
|
||||||
with request(RELEASE_URL) as resp:
|
|
||||||
info = json.load(resp)
|
|
||||||
|
|
||||||
version = info['tag_name']
|
|
||||||
if version == current_version:
|
|
||||||
print(f'yt-dlp-ejs is up to date! ({version})')
|
|
||||||
return
|
|
||||||
|
|
||||||
print(f'Updating yt-dlp-ejs from {current_version} to {version}')
|
|
||||||
hashes = []
|
|
||||||
wheel_info = {}
|
|
||||||
for asset in info['assets']:
|
|
||||||
name = asset['name']
|
|
||||||
is_wheel = name.startswith('yt_dlp_ejs-') and name.endswith('.whl')
|
|
||||||
if not is_wheel and name not in ASSETS:
|
|
||||||
continue
|
|
||||||
with request(asset['browser_download_url']) as resp:
|
|
||||||
data = resp.read()
|
|
||||||
|
|
||||||
# verify digest from github
|
|
||||||
digest = asset['digest']
|
|
||||||
algo, _, expected = digest.partition(':')
|
|
||||||
hexdigest = hashlib.new(algo, data).hexdigest()
|
|
||||||
assert hexdigest == expected, f'downloaded attest mismatch ({hexdigest!r} != {expected!r})'
|
|
||||||
|
|
||||||
if is_wheel:
|
|
||||||
wheel_info = makefile_variables(version, name, digest, data)
|
|
||||||
continue
|
|
||||||
|
|
||||||
# calculate sha3-512 digest
|
|
||||||
asset_hash = hashlib.sha3_512(data).hexdigest()
|
|
||||||
hashes.append(f' {name!r}: {asset_hash!r},')
|
|
||||||
|
|
||||||
if ASSETS[name]:
|
|
||||||
(PACKAGE_PATH / name).write_bytes(data)
|
|
||||||
|
|
||||||
hash_mapping = '\n'.join(hashes)
|
|
||||||
for asset_name in ASSETS:
|
|
||||||
assert asset_name in hash_mapping, f'{asset_name} not found in release'
|
|
||||||
|
|
||||||
assert all(wheel_info.get(key) for key in makefile_info), 'wheel info not found in release'
|
|
||||||
|
|
||||||
(PACKAGE_PATH / '_info.py').write_text(TEMPLATE.format(
|
|
||||||
version=version,
|
|
||||||
hash_mapping=hash_mapping,
|
|
||||||
))
|
|
||||||
|
|
||||||
content = PYPROJECT_PATH.read_text()
|
|
||||||
updated = content.replace(PREFIX + current_version, PREFIX + version)
|
|
||||||
PYPROJECT_PATH.write_text(updated)
|
|
||||||
|
|
||||||
makefile = MAKEFILE_PATH.read_text()
|
|
||||||
for key in wheel_info:
|
|
||||||
makefile = makefile.replace(f'{key} = {makefile_info[key]}', f'{key} = {wheel_info[key]}')
|
|
||||||
MAKEFILE_PATH.write_text(makefile)
|
|
||||||
|
|
||||||
|
|
||||||
if __name__ == '__main__':
|
|
||||||
main()
|
|
||||||
447
devscripts/update_requirements.py
Executable file
447
devscripts/update_requirements.py
Executable file
@ -0,0 +1,447 @@
|
|||||||
|
#!/usr/bin/env python3
|
||||||
|
from __future__ import annotations
|
||||||
|
|
||||||
|
# Allow direct execution
|
||||||
|
import os
|
||||||
|
import sys
|
||||||
|
|
||||||
|
sys.path.insert(0, os.path.dirname(os.path.dirname(os.path.abspath(__file__))))
|
||||||
|
|
||||||
|
import collections.abc
|
||||||
|
import dataclasses
|
||||||
|
import hashlib
|
||||||
|
import io
|
||||||
|
import pathlib
|
||||||
|
import re
|
||||||
|
import zipfile
|
||||||
|
|
||||||
|
from devscripts.tomlparse import parse_toml
|
||||||
|
from devscripts.utils import (
|
||||||
|
call_github_api,
|
||||||
|
request,
|
||||||
|
run_process,
|
||||||
|
zipf_files_and_folders,
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
|
BASE_PATH = pathlib.Path(__file__).parent.parent
|
||||||
|
PYPROJECT_PATH = BASE_PATH / 'pyproject.toml'
|
||||||
|
MAKEFILE_PATH = BASE_PATH / 'Makefile'
|
||||||
|
LOCKFILE_PATH = BASE_PATH / 'uv.lock'
|
||||||
|
REQUIREMENTS_PATH = BASE_PATH / 'bundle/requirements'
|
||||||
|
REQS_OUTPUT_TMPL = 'requirements-{}.txt'
|
||||||
|
CUSTOM_COMPILE_COMMAND = 'python -m devscripts.update_requirements'
|
||||||
|
|
||||||
|
EXTRAS_TABLE = 'project.optional-dependencies'
|
||||||
|
GROUPS_TABLE = 'dependency-groups'
|
||||||
|
|
||||||
|
PINNED_EXTRAS = {
|
||||||
|
'pin': 'default',
|
||||||
|
'pin-curl-cffi': 'curl-cffi',
|
||||||
|
'pin-secretstorage': 'secretstorage',
|
||||||
|
'pin-deno': 'deno',
|
||||||
|
}
|
||||||
|
|
||||||
|
EJS_ASSETS = {
|
||||||
|
'yt.solver.lib.js': False,
|
||||||
|
'yt.solver.lib.min.js': False,
|
||||||
|
'yt.solver.deno.lib.js': True,
|
||||||
|
'yt.solver.bun.lib.js': True,
|
||||||
|
'yt.solver.core.min.js': False,
|
||||||
|
'yt.solver.core.js': True,
|
||||||
|
}
|
||||||
|
|
||||||
|
EJS_TEMPLATE = '''\
|
||||||
|
# This file is generated by devscripts/update_requirements.py. DO NOT MODIFY!
|
||||||
|
|
||||||
|
VERSION = {version!r}
|
||||||
|
HASHES = {{
|
||||||
|
{hash_mapping}
|
||||||
|
}}
|
||||||
|
'''
|
||||||
|
|
||||||
|
|
||||||
|
@dataclasses.dataclass
|
||||||
|
class Target:
|
||||||
|
extras: list[str] = dataclasses.field(default_factory=list)
|
||||||
|
groups: list[str] = dataclasses.field(default_factory=list)
|
||||||
|
prune_packages: list[str] = dataclasses.field(default_factory=list)
|
||||||
|
omit_packages: list[str] = dataclasses.field(default_factory=list)
|
||||||
|
|
||||||
|
|
||||||
|
LINUX_TARGET = Target(
|
||||||
|
extras=['default', 'curl-cffi', 'secretstorage'],
|
||||||
|
groups=['pyinstaller'],
|
||||||
|
)
|
||||||
|
WIN64_TARGET = Target(
|
||||||
|
extras=['default', 'curl-cffi'],
|
||||||
|
)
|
||||||
|
|
||||||
|
BUNDLE_TARGETS = {
|
||||||
|
'linux-x86_64': LINUX_TARGET,
|
||||||
|
'linux-aarch64': LINUX_TARGET,
|
||||||
|
'linux-armv7l': LINUX_TARGET,
|
||||||
|
'musllinux-x86_64': LINUX_TARGET,
|
||||||
|
'musllinux-aarch64': LINUX_TARGET,
|
||||||
|
'win-x64': WIN64_TARGET,
|
||||||
|
'win-arm64': WIN64_TARGET,
|
||||||
|
'win-x86': Target(extras=['default']),
|
||||||
|
'macos': Target(
|
||||||
|
extras=['default', 'curl-cffi'],
|
||||||
|
# NB: Resolve delocate and PyInstaller together since they share dependencies
|
||||||
|
groups=['delocate', 'pyinstaller'],
|
||||||
|
# curl-cffi and cffi don't provide universal2 wheels, so only directly install their deps
|
||||||
|
omit_packages=['curl-cffi', 'cffi'],
|
||||||
|
),
|
||||||
|
# We fuse our own universal2 wheels for curl-cffi+cffi, so we need a separate requirements file
|
||||||
|
'macos-curl_cffi': Target(
|
||||||
|
extras=['curl-cffi'],
|
||||||
|
# Only need curl-cffi+cffi in this requirements file; their deps are installed directly
|
||||||
|
# XXX: Try to keep these in sync with curl-cffi's and cffi's transitive dependencies
|
||||||
|
prune_packages=['rich'],
|
||||||
|
omit_packages=['certifi', 'pycparser'],
|
||||||
|
),
|
||||||
|
}
|
||||||
|
|
||||||
|
PYINSTALLER_BUILDS_TARGETS = {
|
||||||
|
'win-x64-pyinstaller': 'win_amd64',
|
||||||
|
'win-x86-pyinstaller': 'win32',
|
||||||
|
'win-arm64-pyinstaller': 'win_arm64',
|
||||||
|
}
|
||||||
|
|
||||||
|
PYINSTALLER_BUILDS_URL = 'https://api.github.com/repos/yt-dlp/Pyinstaller-Builds/releases/latest'
|
||||||
|
|
||||||
|
PYINSTALLER_BUILDS_TMPL = '''\
|
||||||
|
{}pyinstaller @ {} \\
|
||||||
|
--hash={}
|
||||||
|
'''
|
||||||
|
|
||||||
|
PYINSTALLER_VERSION_RE = re.compile(r'pyinstaller-(?P<version>[0-9]+\.[0-9]+\.[0-9]+)-')
|
||||||
|
|
||||||
|
|
||||||
|
def generate_table_lines(
|
||||||
|
table_name: str,
|
||||||
|
table: dict[str, str | list[str | dict[str, str]]],
|
||||||
|
) -> collections.abc.Iterator[str]:
|
||||||
|
yield f'[{table_name}]\n'
|
||||||
|
for name, value in table.items():
|
||||||
|
assert isinstance(value, (str, list)), 'only string & array table values are supported'
|
||||||
|
|
||||||
|
if isinstance(value, str):
|
||||||
|
yield f'{name} = "{value}"\n'
|
||||||
|
continue
|
||||||
|
|
||||||
|
yield f'{name} = ['
|
||||||
|
if value:
|
||||||
|
yield '\n'
|
||||||
|
for element in value:
|
||||||
|
yield ' '
|
||||||
|
if isinstance(element, dict):
|
||||||
|
yield '{ ' + ', '.join(f'{k} = "{v}"' for k, v in element.items()) + ' }'
|
||||||
|
else:
|
||||||
|
yield f'"{element}"'
|
||||||
|
yield ',\n'
|
||||||
|
yield ']\n'
|
||||||
|
yield '\n'
|
||||||
|
|
||||||
|
|
||||||
|
def replace_table_in_pyproject(
|
||||||
|
pyproject_text: str,
|
||||||
|
table_name: str,
|
||||||
|
table: dict[str, str | list[str | dict[str, str]]],
|
||||||
|
) -> collections.abc.Iterator[str]:
|
||||||
|
INSIDE = 1
|
||||||
|
BEYOND = 2
|
||||||
|
|
||||||
|
state = 0
|
||||||
|
for line in pyproject_text.splitlines(True):
|
||||||
|
if state == INSIDE:
|
||||||
|
if line == '\n':
|
||||||
|
state = BEYOND
|
||||||
|
continue
|
||||||
|
if line != f'[{table_name}]\n' or state == BEYOND:
|
||||||
|
yield line
|
||||||
|
continue
|
||||||
|
yield from generate_table_lines(table_name, table)
|
||||||
|
state = INSIDE
|
||||||
|
|
||||||
|
|
||||||
|
def modify_and_write_pyproject(
|
||||||
|
pyproject_text: str,
|
||||||
|
table_name: str,
|
||||||
|
table: dict[str, str | list[str | dict[str, str]]],
|
||||||
|
) -> None:
|
||||||
|
with PYPROJECT_PATH.open(mode='w') as f:
|
||||||
|
f.writelines(replace_table_in_pyproject(pyproject_text, table_name, table))
|
||||||
|
|
||||||
|
|
||||||
|
def run_uv_export(
|
||||||
|
*,
|
||||||
|
extras: list[str] | None = None,
|
||||||
|
groups: list[str] | None = None,
|
||||||
|
prune_packages: list[str] | None = None,
|
||||||
|
omit_packages: list[str] | None = None,
|
||||||
|
bare: bool = False,
|
||||||
|
output_file: pathlib.Path | None = None,
|
||||||
|
) -> str:
|
||||||
|
return run_process(
|
||||||
|
'uv', 'export',
|
||||||
|
'--no-python-downloads',
|
||||||
|
'--quiet',
|
||||||
|
'--no-progress',
|
||||||
|
'--color=never',
|
||||||
|
'--format=requirements.txt',
|
||||||
|
'--frozen',
|
||||||
|
'--refresh',
|
||||||
|
'--no-emit-project',
|
||||||
|
'--no-default-groups',
|
||||||
|
*(f'--extra={extra}' for extra in (extras or [])),
|
||||||
|
*(f'--group={group}' for group in (groups or [])),
|
||||||
|
*(f'--prune={package}' for package in (prune_packages or [])),
|
||||||
|
*(f'--no-emit-package={package}' for package in (omit_packages or [])),
|
||||||
|
*(['--no-annotate', '--no-hashes', '--no-header'] if bare else []),
|
||||||
|
*([f'--output-file={output_file.relative_to(BASE_PATH)}'] if output_file else []),
|
||||||
|
).stdout
|
||||||
|
|
||||||
|
|
||||||
|
def run_pip_compile(
|
||||||
|
*args: str,
|
||||||
|
input_line: str,
|
||||||
|
output_file: pathlib.Path | None = None,
|
||||||
|
env: dict[str, str] | None = None,
|
||||||
|
) -> str:
|
||||||
|
return run_process(
|
||||||
|
'uv', 'pip', 'compile',
|
||||||
|
'--no-python-downloads',
|
||||||
|
'--quiet',
|
||||||
|
'--no-progress',
|
||||||
|
'--color=never',
|
||||||
|
'--format=requirements.txt',
|
||||||
|
'--refresh',
|
||||||
|
'--generate-hashes',
|
||||||
|
'--no-strip-markers',
|
||||||
|
f'--custom-compile-command={CUSTOM_COMPILE_COMMAND}',
|
||||||
|
'--universal',
|
||||||
|
*args,
|
||||||
|
*([f'--output-file={output_file.relative_to(BASE_PATH)}'] if output_file else []),
|
||||||
|
'-', # Read from stdin
|
||||||
|
input=f'{input_line}\n',
|
||||||
|
env=env,
|
||||||
|
).stdout
|
||||||
|
|
||||||
|
|
||||||
|
def makefile_variables(
|
||||||
|
prefix: str,
|
||||||
|
filetypes: list[str] | None = None,
|
||||||
|
*,
|
||||||
|
version: str | None = None,
|
||||||
|
name: str | None = None,
|
||||||
|
digest: str | None = None,
|
||||||
|
data: bytes | None = None,
|
||||||
|
keys_only: bool = False,
|
||||||
|
) -> dict[str, str | None]:
|
||||||
|
|
||||||
|
variables = {
|
||||||
|
f'{prefix}_VERSION': version,
|
||||||
|
f'{prefix}_WHEEL_NAME': name,
|
||||||
|
f'{prefix}_WHEEL_HASH': digest,
|
||||||
|
}
|
||||||
|
for ft in filetypes or []:
|
||||||
|
variables.update({
|
||||||
|
f'{prefix}_{ft.upper()}_FOLDERS': None,
|
||||||
|
f'{prefix}_{ft.upper()}_FILES': None,
|
||||||
|
})
|
||||||
|
|
||||||
|
if keys_only:
|
||||||
|
return variables
|
||||||
|
|
||||||
|
assert all(arg is not None for arg in (version, name, digest, not filetypes or data))
|
||||||
|
|
||||||
|
if filetypes:
|
||||||
|
with io.BytesIO(data) as buf, zipfile.ZipFile(buf) as zipf:
|
||||||
|
for ft in filetypes:
|
||||||
|
files, folders = zipf_files_and_folders(zipf, f'*.{ft.lower()}')
|
||||||
|
variables[f'{prefix}_{ft.upper()}_FOLDERS'] = ' '.join(folders)
|
||||||
|
variables[f'{prefix}_{ft.upper()}_FILES'] = ' '.join(files)
|
||||||
|
|
||||||
|
return variables
|
||||||
|
|
||||||
|
|
||||||
|
def ejs_makefile_variables(**kwargs) -> dict[str, str | None]:
|
||||||
|
return makefile_variables('EJS', filetypes=['PY', 'JS'], **kwargs)
|
||||||
|
|
||||||
|
|
||||||
|
def update_ejs(verify: bool = False):
|
||||||
|
PACKAGE_NAME = 'yt-dlp-ejs'
|
||||||
|
PREFIX = f' "{PACKAGE_NAME}=='
|
||||||
|
LIBRARY_NAME = PACKAGE_NAME.replace('-', '_')
|
||||||
|
PACKAGE_PATH = BASE_PATH / 'yt_dlp/extractor/youtube/jsc/_builtin/vendor'
|
||||||
|
RELEASE_URL = 'https://api.github.com/repos/yt-dlp/ejs/releases/latest'
|
||||||
|
|
||||||
|
current_version = None
|
||||||
|
with PYPROJECT_PATH.open() as file:
|
||||||
|
for line in file:
|
||||||
|
if not line.startswith(PREFIX):
|
||||||
|
continue
|
||||||
|
current_version, _, _ = line.removeprefix(PREFIX).partition('"')
|
||||||
|
|
||||||
|
if not current_version:
|
||||||
|
print(f'{PACKAGE_NAME} dependency line could not be found')
|
||||||
|
return
|
||||||
|
|
||||||
|
makefile_info = ejs_makefile_variables(keys_only=True)
|
||||||
|
prefixes = tuple(f'{key} = ' for key in makefile_info)
|
||||||
|
with MAKEFILE_PATH.open() as file:
|
||||||
|
for line in file:
|
||||||
|
if not line.startswith(prefixes):
|
||||||
|
continue
|
||||||
|
key, _, val = line.partition(' = ')
|
||||||
|
makefile_info[key] = val.rstrip()
|
||||||
|
|
||||||
|
info = call_github_api(RELEASE_URL)
|
||||||
|
version = info['tag_name']
|
||||||
|
if version == current_version:
|
||||||
|
print(f'{PACKAGE_NAME} is up to date! ({version})')
|
||||||
|
return
|
||||||
|
|
||||||
|
print(f'Updating {PACKAGE_NAME} from {current_version} to {version}')
|
||||||
|
hashes = []
|
||||||
|
wheel_info = {}
|
||||||
|
for asset in info['assets']:
|
||||||
|
name = asset['name']
|
||||||
|
digest = asset['digest']
|
||||||
|
|
||||||
|
is_wheel = name.startswith(f'{LIBRARY_NAME}-') and name.endswith('.whl')
|
||||||
|
if not is_wheel and name not in EJS_ASSETS:
|
||||||
|
continue
|
||||||
|
|
||||||
|
with request(asset['browser_download_url']) as resp:
|
||||||
|
data = resp.read()
|
||||||
|
|
||||||
|
# verify digest from github
|
||||||
|
algo, _, expected = digest.partition(':')
|
||||||
|
hexdigest = hashlib.new(algo, data).hexdigest()
|
||||||
|
assert hexdigest == expected, f'downloaded attest mismatch ({hexdigest!r} != {expected!r})'
|
||||||
|
|
||||||
|
if is_wheel:
|
||||||
|
wheel_info = ejs_makefile_variables(version=version, name=name, digest=digest, data=data)
|
||||||
|
continue
|
||||||
|
|
||||||
|
# calculate sha3-512 digest
|
||||||
|
asset_hash = hashlib.sha3_512(data).hexdigest()
|
||||||
|
hashes.append(f' {name!r}: {asset_hash!r},')
|
||||||
|
|
||||||
|
if EJS_ASSETS[name]:
|
||||||
|
(PACKAGE_PATH / name).write_bytes(data)
|
||||||
|
|
||||||
|
hash_mapping = '\n'.join(hashes)
|
||||||
|
for asset_name in EJS_ASSETS:
|
||||||
|
assert asset_name in hash_mapping, f'{asset_name} not found in release'
|
||||||
|
|
||||||
|
assert all(wheel_info.get(key) for key in makefile_info), 'wheel info not found in release'
|
||||||
|
|
||||||
|
(PACKAGE_PATH / '_info.py').write_text(EJS_TEMPLATE.format(
|
||||||
|
version=version,
|
||||||
|
hash_mapping=hash_mapping,
|
||||||
|
))
|
||||||
|
|
||||||
|
content = PYPROJECT_PATH.read_text()
|
||||||
|
updated = content.replace(PREFIX + current_version, PREFIX + version)
|
||||||
|
PYPROJECT_PATH.write_text(updated)
|
||||||
|
|
||||||
|
makefile = MAKEFILE_PATH.read_text()
|
||||||
|
for key in wheel_info:
|
||||||
|
makefile = makefile.replace(f'{key} = {makefile_info[key]}', f'{key} = {wheel_info[key]}')
|
||||||
|
MAKEFILE_PATH.write_text(makefile)
|
||||||
|
|
||||||
|
update_requirements(upgrade_only=PACKAGE_NAME, verify=verify)
|
||||||
|
|
||||||
|
|
||||||
|
def update_requirements(upgrade_only: str | None = None, verify: bool = False):
|
||||||
|
# Are we upgrading all packages or only one (e.g. 'yt-dlp-ejs' or 'protobug')?
|
||||||
|
upgrade_arg = f'--upgrade-package={upgrade_only}' if upgrade_only else '--upgrade'
|
||||||
|
|
||||||
|
pyproject_text = PYPROJECT_PATH.read_text()
|
||||||
|
pyproject_toml = parse_toml(pyproject_text)
|
||||||
|
extras = pyproject_toml['project']['optional-dependencies']
|
||||||
|
|
||||||
|
# Remove pinned extras so they don't muck up the lockfile during generation/upgrade
|
||||||
|
for pinned_extra_name in PINNED_EXTRAS:
|
||||||
|
extras.pop(pinned_extra_name, None)
|
||||||
|
|
||||||
|
# Write an intermediate pyproject.toml to use for generating lockfile and bundle requirements
|
||||||
|
modify_and_write_pyproject(pyproject_text, table_name=EXTRAS_TABLE, table=extras)
|
||||||
|
|
||||||
|
# If verifying, set UV_EXCLUDE_NEWER env var with the last timestamp recorded in uv.lock
|
||||||
|
env = None
|
||||||
|
if verify:
|
||||||
|
env = os.environ.copy()
|
||||||
|
env['UV_EXCLUDE_NEWER'] = parse_toml(LOCKFILE_PATH.read_text())['options']['exclude-newer']
|
||||||
|
|
||||||
|
# Generate/upgrade lockfile
|
||||||
|
run_process('uv', 'lock', upgrade_arg, env=env)
|
||||||
|
|
||||||
|
# Generate bundle requirements
|
||||||
|
if not upgrade_only or upgrade_only.lower() == 'pyinstaller':
|
||||||
|
info = call_github_api(PYINSTALLER_BUILDS_URL)
|
||||||
|
for target_suffix, asset_tag in PYINSTALLER_BUILDS_TARGETS.items():
|
||||||
|
asset_info = next(asset for asset in info['assets'] if asset_tag in asset['name'])
|
||||||
|
pyinstaller_version = PYINSTALLER_VERSION_RE.match(asset_info['name']).group('version')
|
||||||
|
pyinstaller_builds_deps = run_pip_compile(
|
||||||
|
'--no-emit-package=pyinstaller',
|
||||||
|
upgrade_arg,
|
||||||
|
input_line=f'pyinstaller=={pyinstaller_version}',
|
||||||
|
env=env)
|
||||||
|
requirements_path = REQUIREMENTS_PATH / REQS_OUTPUT_TMPL.format(target_suffix)
|
||||||
|
requirements_path.write_text(PYINSTALLER_BUILDS_TMPL.format(
|
||||||
|
pyinstaller_builds_deps, asset_info['browser_download_url'], asset_info['digest']))
|
||||||
|
|
||||||
|
for target_suffix, target in BUNDLE_TARGETS.items():
|
||||||
|
run_uv_export(
|
||||||
|
extras=target.extras,
|
||||||
|
groups=target.groups,
|
||||||
|
prune_packages=target.prune_packages,
|
||||||
|
omit_packages=target.omit_packages,
|
||||||
|
output_file=REQUIREMENTS_PATH / REQS_OUTPUT_TMPL.format(target_suffix))
|
||||||
|
|
||||||
|
run_uv_export(
|
||||||
|
groups=['build'],
|
||||||
|
output_file=REQUIREMENTS_PATH / REQS_OUTPUT_TMPL.format('pypi-build'))
|
||||||
|
|
||||||
|
run_pip_compile(
|
||||||
|
upgrade_arg,
|
||||||
|
input_line='pip',
|
||||||
|
output_file=REQUIREMENTS_PATH / REQS_OUTPUT_TMPL.format('pip'),
|
||||||
|
env=env)
|
||||||
|
|
||||||
|
# Generate pinned extras
|
||||||
|
for pinned_name, extra_name in PINNED_EXTRAS.items():
|
||||||
|
extras[pinned_name] = run_uv_export(extras=[extra_name], bare=True).splitlines()
|
||||||
|
|
||||||
|
# Write the finalized pyproject.toml
|
||||||
|
modify_and_write_pyproject(pyproject_text, table_name=EXTRAS_TABLE, table=extras)
|
||||||
|
|
||||||
|
|
||||||
|
def parse_args():
|
||||||
|
import argparse
|
||||||
|
parser = argparse.ArgumentParser(description='generate/update lockfile and requirements')
|
||||||
|
parser.add_argument(
|
||||||
|
'upgrade_only', nargs='?', metavar='PACKAGE',
|
||||||
|
help='only upgrade this package. (by default, all packages will be upgraded)')
|
||||||
|
parser.add_argument(
|
||||||
|
'--verify', action='store_true',
|
||||||
|
help='only verify the update(s) using the previously recorded cooldown timestamp')
|
||||||
|
return parser.parse_args()
|
||||||
|
|
||||||
|
|
||||||
|
def main():
|
||||||
|
args = parse_args()
|
||||||
|
|
||||||
|
if args.upgrade_only in ('ejs', 'yt-dlp-ejs'):
|
||||||
|
update_ejs(verify=args.verify)
|
||||||
|
else:
|
||||||
|
update_requirements(upgrade_only=args.upgrade_only, verify=args.verify)
|
||||||
|
|
||||||
|
|
||||||
|
if __name__ == '__main__':
|
||||||
|
main()
|
||||||
@ -1,8 +1,17 @@
|
|||||||
|
from __future__ import annotations
|
||||||
|
|
||||||
import argparse
|
import argparse
|
||||||
|
import contextlib
|
||||||
import datetime as dt
|
import datetime as dt
|
||||||
import functools
|
import functools
|
||||||
|
import itertools
|
||||||
|
import json
|
||||||
|
import os
|
||||||
import re
|
import re
|
||||||
import subprocess
|
import subprocess
|
||||||
|
import urllib.parse
|
||||||
|
import urllib.request
|
||||||
|
import zipfile
|
||||||
|
|
||||||
|
|
||||||
def read_file(fname):
|
def read_file(fname):
|
||||||
@ -64,3 +73,46 @@ def run_process(*args, **kwargs):
|
|||||||
kwargs.setdefault('encoding', 'utf-8')
|
kwargs.setdefault('encoding', 'utf-8')
|
||||||
kwargs.setdefault('errors', 'replace')
|
kwargs.setdefault('errors', 'replace')
|
||||||
return subprocess.run(args, **kwargs)
|
return subprocess.run(args, **kwargs)
|
||||||
|
|
||||||
|
|
||||||
|
def request(url: str, *, headers: dict | None = None):
|
||||||
|
req = urllib.request.Request(url, headers=headers or {})
|
||||||
|
return contextlib.closing(urllib.request.urlopen(req))
|
||||||
|
|
||||||
|
|
||||||
|
def call_github_api(path: str, *, query: dict | None = None) -> dict | list:
|
||||||
|
API_BASE_URL = 'https://api.github.com/'
|
||||||
|
assert not path.startswith(('https://', 'http://')) or path.startswith(API_BASE_URL)
|
||||||
|
|
||||||
|
url = urllib.parse.urlparse(urllib.parse.urljoin(API_BASE_URL, path))
|
||||||
|
qs = urllib.parse.urlencode({
|
||||||
|
**urllib.parse.parse_qs(url.query),
|
||||||
|
**(query or {}),
|
||||||
|
}, True)
|
||||||
|
|
||||||
|
headers = {
|
||||||
|
'Accept': 'application/vnd.github+json',
|
||||||
|
'User-Agent': 'yt-dlp',
|
||||||
|
'X-GitHub-Api-Version': '2026-03-10',
|
||||||
|
}
|
||||||
|
if gh_token := os.getenv('GH_TOKEN'):
|
||||||
|
headers['Authorization'] = f'Bearer {gh_token}'
|
||||||
|
|
||||||
|
with request(urllib.parse.urlunparse(url._replace(query=qs)), headers=headers) as resp:
|
||||||
|
return json.load(resp)
|
||||||
|
|
||||||
|
|
||||||
|
def zipf_files_and_folders(zipf: zipfile.ZipFile, glob: str = '*') -> tuple[list[str], list[str]]:
|
||||||
|
files = []
|
||||||
|
folders = []
|
||||||
|
|
||||||
|
path = zipfile.Path(zipf)
|
||||||
|
for f in itertools.chain(path.glob(glob), path.rglob(glob)):
|
||||||
|
if not f.is_file():
|
||||||
|
continue
|
||||||
|
files.append(f.at)
|
||||||
|
folder = f.parent.at.rstrip('/')
|
||||||
|
if folder and folder not in folders:
|
||||||
|
folders.append(folder)
|
||||||
|
|
||||||
|
return files, folders
|
||||||
|
|||||||
109
pyproject.toml
109
pyproject.toml
@ -47,52 +47,85 @@ dependencies = []
|
|||||||
|
|
||||||
[project.optional-dependencies]
|
[project.optional-dependencies]
|
||||||
default = [
|
default = [
|
||||||
"brotli; implementation_name=='cpython'",
|
"brotli ; implementation_name == 'cpython' and sys_platform != 'ios'",
|
||||||
"brotlicffi; implementation_name!='cpython'",
|
"brotlicffi ; implementation_name != 'cpython'",
|
||||||
"certifi",
|
"certifi",
|
||||||
"mutagen",
|
"mutagen",
|
||||||
"pycryptodomex",
|
"pycryptodomex",
|
||||||
"requests>=2.32.2,<3",
|
"requests>=2.32.2,<3",
|
||||||
"urllib3>=2.0.2,<3",
|
"urllib3>=2.0.2,<3",
|
||||||
"websockets>=13.0",
|
"websockets>=13.0",
|
||||||
"yt-dlp-ejs==0.4.0",
|
"yt-dlp-ejs==0.8.0",
|
||||||
]
|
]
|
||||||
curl-cffi = [
|
curl-cffi = [
|
||||||
"curl-cffi>=0.5.10,!=0.6.*,!=0.7.*,!=0.8.*,!=0.9.*,<0.15; implementation_name=='cpython'",
|
"curl-cffi>=0.5.10,!=0.6.*,!=0.7.*,!=0.8.*,!=0.9.*,<0.16 ; implementation_name == 'cpython'",
|
||||||
]
|
|
||||||
build-curl-cffi = [
|
|
||||||
"curl-cffi==0.13.0; sys_platform=='darwin' or (sys_platform=='linux' and platform_machine!='armv7l')",
|
|
||||||
"curl-cffi==0.14.0; sys_platform=='win32' or (sys_platform=='linux' and platform_machine=='armv7l')",
|
|
||||||
]
|
]
|
||||||
secretstorage = [
|
secretstorage = [
|
||||||
"cffi",
|
|
||||||
"secretstorage",
|
"secretstorage",
|
||||||
]
|
]
|
||||||
deno = [
|
deno = [
|
||||||
"deno>=2.6.6", # v2.6.5 fixes compatibility, v2.6.6 adds integrity check
|
"deno>=2.6.6",
|
||||||
]
|
]
|
||||||
|
pin = [
|
||||||
|
"brotli==1.2.0 ; implementation_name == 'cpython' and sys_platform != 'ios'",
|
||||||
|
"brotlicffi==1.2.0.1 ; implementation_name != 'cpython'",
|
||||||
|
"certifi==2026.2.25",
|
||||||
|
"cffi==2.0.0 ; implementation_name != 'cpython'",
|
||||||
|
"charset-normalizer==3.4.6",
|
||||||
|
"idna==3.11",
|
||||||
|
"mutagen==1.47.0",
|
||||||
|
"pycparser==3.0 ; implementation_name != 'PyPy' and implementation_name != 'cpython'",
|
||||||
|
"pycryptodomex==3.23.0",
|
||||||
|
"requests==2.33.0",
|
||||||
|
"urllib3==2.6.3",
|
||||||
|
"websockets==16.0",
|
||||||
|
"yt-dlp-ejs==0.8.0",
|
||||||
|
]
|
||||||
|
pin-curl-cffi = [
|
||||||
|
"certifi==2026.2.25 ; implementation_name == 'cpython'",
|
||||||
|
"cffi==2.0.0 ; implementation_name == 'cpython'",
|
||||||
|
"curl-cffi==0.15.0 ; implementation_name == 'cpython'",
|
||||||
|
"markdown-it-py==4.0.0 ; implementation_name == 'cpython'",
|
||||||
|
"mdurl==0.1.2 ; implementation_name == 'cpython'",
|
||||||
|
"pycparser==3.0 ; implementation_name == 'cpython'",
|
||||||
|
"pygments==2.19.2 ; implementation_name == 'cpython'",
|
||||||
|
"rich==14.3.3 ; implementation_name == 'cpython'",
|
||||||
|
]
|
||||||
|
pin-secretstorage = [
|
||||||
|
"cffi==2.0.0 ; platform_python_implementation != 'PyPy'",
|
||||||
|
"cryptography==46.0.6",
|
||||||
|
"jeepney==0.9.0",
|
||||||
|
"pycparser==3.0 ; implementation_name != 'PyPy' and platform_python_implementation != 'PyPy'",
|
||||||
|
"secretstorage==3.5.0",
|
||||||
|
"typing-extensions==4.15.0 ; python_full_version < '3.11'",
|
||||||
|
]
|
||||||
|
pin-deno = [
|
||||||
|
"deno==2.7.8",
|
||||||
|
]
|
||||||
|
|
||||||
|
[dependency-groups]
|
||||||
build = [
|
build = [
|
||||||
"build",
|
"build",
|
||||||
"hatchling>=1.27.0",
|
"hatchling>=1.27.0",
|
||||||
"pip",
|
|
||||||
"setuptools>=71.0.2",
|
|
||||||
"wheel",
|
|
||||||
]
|
|
||||||
dev = [
|
|
||||||
"pre-commit",
|
|
||||||
"yt-dlp[static-analysis]",
|
|
||||||
"yt-dlp[test]",
|
|
||||||
]
|
]
|
||||||
static-analysis = [
|
static-analysis = [
|
||||||
"autopep8~=2.0",
|
"autopep8~=2.0",
|
||||||
"ruff~=0.14.0",
|
"ruff~=0.15.0",
|
||||||
]
|
]
|
||||||
test = [
|
test = [
|
||||||
"pytest~=8.1",
|
"pytest~=8.1",
|
||||||
"pytest-rerunfailures~=14.0",
|
"pytest-rerunfailures~=14.0",
|
||||||
]
|
]
|
||||||
|
dev = [
|
||||||
|
"pre-commit",
|
||||||
|
{include-group = "static-analysis"},
|
||||||
|
{include-group = "test"},
|
||||||
|
]
|
||||||
pyinstaller = [
|
pyinstaller = [
|
||||||
"pyinstaller>=6.17.0", # 6.17.0+ needed for compat with setuptools 81+
|
"pyinstaller>=6.17.0",
|
||||||
|
]
|
||||||
|
delocate = [
|
||||||
|
"delocate>=0.13.0 ; sys_platform == 'darwin'",
|
||||||
]
|
]
|
||||||
|
|
||||||
[project.urls]
|
[project.urls]
|
||||||
@ -147,9 +180,17 @@ exclude = [
|
|||||||
path = "yt_dlp/version.py"
|
path = "yt_dlp/version.py"
|
||||||
pattern = "_pkg_version = '(?P<version>[^']+)'"
|
pattern = "_pkg_version = '(?P<version>[^']+)'"
|
||||||
|
|
||||||
|
[tool.hatch.metadata]
|
||||||
|
allow-direct-references = true
|
||||||
|
|
||||||
[tool.hatch.envs.default]
|
[tool.hatch.envs.default]
|
||||||
features = ["curl-cffi", "default"]
|
features = [
|
||||||
dependencies = ["pre-commit"]
|
"curl-cffi",
|
||||||
|
"default",
|
||||||
|
]
|
||||||
|
dependencies = [
|
||||||
|
"pre-commit",
|
||||||
|
]
|
||||||
path = ".venv"
|
path = ".venv"
|
||||||
installer = "uv"
|
installer = "uv"
|
||||||
|
|
||||||
@ -157,9 +198,16 @@ installer = "uv"
|
|||||||
setup = "pre-commit install --config .pre-commit-hatch.yaml"
|
setup = "pre-commit install --config .pre-commit-hatch.yaml"
|
||||||
yt-dlp = "python -Werror -Xdev -m yt_dlp {args}"
|
yt-dlp = "python -Werror -Xdev -m yt_dlp {args}"
|
||||||
|
|
||||||
|
[tool.hatch.envs.hatch-uv]
|
||||||
|
dependencies = [
|
||||||
|
"uv>=0.10",
|
||||||
|
]
|
||||||
|
|
||||||
[tool.hatch.envs.hatch-static-analysis]
|
[tool.hatch.envs.hatch-static-analysis]
|
||||||
detached = true
|
detached = true
|
||||||
features = ["static-analysis"]
|
dependency-groups = [
|
||||||
|
"static-analysis",
|
||||||
|
]
|
||||||
dependencies = [] # override hatch ruff version
|
dependencies = [] # override hatch ruff version
|
||||||
config-path = "pyproject.toml"
|
config-path = "pyproject.toml"
|
||||||
|
|
||||||
@ -170,7 +218,13 @@ lint-check = "ruff check {args:.}"
|
|||||||
lint-fix = "ruff check --fix {args:.}"
|
lint-fix = "ruff check --fix {args:.}"
|
||||||
|
|
||||||
[tool.hatch.envs.hatch-test]
|
[tool.hatch.envs.hatch-test]
|
||||||
features = ["test"]
|
features = [
|
||||||
|
"curl-cffi",
|
||||||
|
"default",
|
||||||
|
]
|
||||||
|
dependency-groups = [
|
||||||
|
"test",
|
||||||
|
]
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"pytest-randomly~=3.15",
|
"pytest-randomly~=3.15",
|
||||||
"pytest-xdist[psutil]~=3.5",
|
"pytest-xdist[psutil]~=3.5",
|
||||||
@ -190,6 +244,13 @@ python = [
|
|||||||
"pypy3.11",
|
"pypy3.11",
|
||||||
]
|
]
|
||||||
|
|
||||||
|
[tool.uv]
|
||||||
|
exclude-newer = "7 days"
|
||||||
|
|
||||||
|
[tool.uv.exclude-newer-package]
|
||||||
|
protobug = false
|
||||||
|
yt-dlp-ejs = false
|
||||||
|
|
||||||
[tool.ruff]
|
[tool.ruff]
|
||||||
line-length = 120
|
line-length = 120
|
||||||
|
|
||||||
|
|||||||
@ -506,7 +506,8 @@ The only reliable way to check if a site is supported is to try it.
|
|||||||
- **GDCVault**: [*gdcvault*](## "netrc machine") (**Currently broken**)
|
- **GDCVault**: [*gdcvault*](## "netrc machine") (**Currently broken**)
|
||||||
- **GediDigital**
|
- **GediDigital**
|
||||||
- **gem.cbc.ca**: [*cbcgem*](## "netrc machine")
|
- **gem.cbc.ca**: [*cbcgem*](## "netrc machine")
|
||||||
- **gem.cbc.ca:live**
|
- **gem.cbc.ca:live**: [*cbcgem*](## "netrc machine")
|
||||||
|
- **gem.cbc.ca:olympics**: [*cbcgem*](## "netrc machine")
|
||||||
- **gem.cbc.ca:playlist**: [*cbcgem*](## "netrc machine")
|
- **gem.cbc.ca:playlist**: [*cbcgem*](## "netrc machine")
|
||||||
- **Genius**
|
- **Genius**
|
||||||
- **GeniusLyrics**
|
- **GeniusLyrics**
|
||||||
@ -734,6 +735,8 @@ The only reliable way to check if a site is supported is to try it.
|
|||||||
- **Livestreamfails**
|
- **Livestreamfails**
|
||||||
- **Lnk**
|
- **Lnk**
|
||||||
- **loc**: Library of Congress
|
- **loc**: Library of Congress
|
||||||
|
- **Locipo**
|
||||||
|
- **LocipoPlaylist**
|
||||||
- **Loco**
|
- **Loco**
|
||||||
- **loom**
|
- **loom**
|
||||||
- **loom:folder**: (**Currently broken**)
|
- **loom:folder**: (**Currently broken**)
|
||||||
@ -763,6 +766,7 @@ The only reliable way to check if a site is supported is to try it.
|
|||||||
- **MarkizaPage**: (**Currently broken**)
|
- **MarkizaPage**: (**Currently broken**)
|
||||||
- **massengeschmack.tv**
|
- **massengeschmack.tv**
|
||||||
- **Masters**
|
- **Masters**
|
||||||
|
- **MatchiTV**
|
||||||
- **MatchTV**
|
- **MatchTV**
|
||||||
- **mave**
|
- **mave**
|
||||||
- **mave:channel**
|
- **mave:channel**
|
||||||
@ -1283,6 +1287,7 @@ The only reliable way to check if a site is supported is to try it.
|
|||||||
- **Sangiin**: 参議院インターネット審議中継 (archive)
|
- **Sangiin**: 参議院インターネット審議中継 (archive)
|
||||||
- **Sapo**: SAPO Vídeos
|
- **Sapo**: SAPO Vídeos
|
||||||
- **SaucePlus**: Sauce+
|
- **SaucePlus**: Sauce+
|
||||||
|
- **SaucePlusChannel**
|
||||||
- **SBS**: sbs.com.au
|
- **SBS**: sbs.com.au
|
||||||
- **sbs.co.kr**
|
- **sbs.co.kr**
|
||||||
- **sbs.co.kr:allvod_program**
|
- **sbs.co.kr:allvod_program**
|
||||||
@ -1467,7 +1472,7 @@ The only reliable way to check if a site is supported is to try it.
|
|||||||
- **theatercomplextown:ppv**: [*theatercomplextown*](## "netrc machine")
|
- **theatercomplextown:ppv**: [*theatercomplextown*](## "netrc machine")
|
||||||
- **theatercomplextown:vod**: [*theatercomplextown*](## "netrc machine")
|
- **theatercomplextown:vod**: [*theatercomplextown*](## "netrc machine")
|
||||||
- **TheChosen**
|
- **TheChosen**
|
||||||
- **TheChosenGroup**
|
- **TheChosenGroup**: (**Currently broken**)
|
||||||
- **TheGuardianPodcast**
|
- **TheGuardianPodcast**
|
||||||
- **TheGuardianPodcastPlaylist**
|
- **TheGuardianPodcastPlaylist**
|
||||||
- **TheHighWire**
|
- **TheHighWire**
|
||||||
@ -1550,10 +1555,12 @@ The only reliable way to check if a site is supported is to try it.
|
|||||||
- **TVC**
|
- **TVC**
|
||||||
- **TVCArticle**
|
- **TVCArticle**
|
||||||
- **TVer**
|
- **TVer**
|
||||||
|
- **tver:olympic**
|
||||||
- **tvigle**: Интернет-телевидение Tvigle.ru
|
- **tvigle**: Интернет-телевидение Tvigle.ru
|
||||||
- **TVIPlayer**
|
- **TVIPlayer**
|
||||||
- **TVN24**: (**Currently broken**)
|
- **TVN24**: (**Currently broken**)
|
||||||
- **tvnoe**: Televize Noe
|
- **tvnoe**: Televize Noe
|
||||||
|
- **TVO**
|
||||||
- **tvopengr:embed**: tvopen.gr embedded videos
|
- **tvopengr:embed**: tvopen.gr embedded videos
|
||||||
- **tvopengr:watch**: tvopen.gr (and ethnos.gr) videos
|
- **tvopengr:watch**: tvopen.gr (and ethnos.gr) videos
|
||||||
- **tvp**: Telewizja Polska
|
- **tvp**: Telewizja Polska
|
||||||
@ -1664,6 +1671,7 @@ The only reliable way to check if a site is supported is to try it.
|
|||||||
- **ViMP:Playlist**
|
- **ViMP:Playlist**
|
||||||
- **Viously**
|
- **Viously**
|
||||||
- **Viqeo**: (**Currently broken**)
|
- **Viqeo**: (**Currently broken**)
|
||||||
|
- **Visir**: Vísir
|
||||||
- **Viu**
|
- **Viu**
|
||||||
- **viu:ott**: [*viu*](## "netrc machine")
|
- **viu:ott**: [*viu*](## "netrc machine")
|
||||||
- **viu:playlist**
|
- **viu:playlist**
|
||||||
@ -1812,7 +1820,6 @@ The only reliable way to check if a site is supported is to try it.
|
|||||||
- **youtube:playlist**: [*youtube*](## "netrc machine") YouTube playlists
|
- **youtube:playlist**: [*youtube*](## "netrc machine") YouTube playlists
|
||||||
- **youtube:recommended**: [*youtube*](## "netrc machine") YouTube recommended videos; ":ytrec" keyword
|
- **youtube:recommended**: [*youtube*](## "netrc machine") YouTube recommended videos; ":ytrec" keyword
|
||||||
- **youtube:search**: [*youtube*](## "netrc machine") YouTube search; "ytsearch:" prefix
|
- **youtube:search**: [*youtube*](## "netrc machine") YouTube search; "ytsearch:" prefix
|
||||||
- **youtube:search:date**: [*youtube*](## "netrc machine") YouTube search, newest videos first; "ytsearchdate:" prefix
|
|
||||||
- **youtube:search_url**: [*youtube*](## "netrc machine") YouTube search URLs with sorting and filter support
|
- **youtube:search_url**: [*youtube*](## "netrc machine") YouTube search URLs with sorting and filter support
|
||||||
- **youtube:shorts:pivot:audio**: [*youtube*](## "netrc machine") YouTube Shorts audio pivot (Shorts using audio of a given video)
|
- **youtube:shorts:pivot:audio**: [*youtube*](## "netrc machine") YouTube Shorts audio pivot (Shorts using audio of a given video)
|
||||||
- **youtube:subscriptions**: [*youtube*](## "netrc machine") YouTube subscriptions feed; ":ytsubs" keyword (requires cookies)
|
- **youtube:subscriptions**: [*youtube*](## "netrc machine") YouTube subscriptions feed; ":ytsubs" keyword (requires cookies)
|
||||||
|
|||||||
@ -294,7 +294,7 @@ def expect_info_dict(self, got_dict, expected_dict):
|
|||||||
|
|
||||||
missing_keys = sorted(
|
missing_keys = sorted(
|
||||||
test_info_dict.keys() - expected_dict.keys(),
|
test_info_dict.keys() - expected_dict.keys(),
|
||||||
key=lambda x: ALLOWED_KEYS_SORT_ORDER.index(x))
|
key=ALLOWED_KEYS_SORT_ORDER.index)
|
||||||
if missing_keys:
|
if missing_keys:
|
||||||
def _repr(v):
|
def _repr(v):
|
||||||
if isinstance(v, str):
|
if isinstance(v, str):
|
||||||
|
|||||||
@ -76,6 +76,8 @@ class TestInfoExtractor(unittest.TestCase):
|
|||||||
self.assertEqual(ie._get_netrc_login_info(netrc_machine='empty_pass'), ('user', ''))
|
self.assertEqual(ie._get_netrc_login_info(netrc_machine='empty_pass'), ('user', ''))
|
||||||
self.assertEqual(ie._get_netrc_login_info(netrc_machine='both_empty'), ('', ''))
|
self.assertEqual(ie._get_netrc_login_info(netrc_machine='both_empty'), ('', ''))
|
||||||
self.assertEqual(ie._get_netrc_login_info(netrc_machine='nonexistent'), (None, None))
|
self.assertEqual(ie._get_netrc_login_info(netrc_machine='nonexistent'), (None, None))
|
||||||
|
with self.assertRaises(ExtractorError):
|
||||||
|
ie._get_netrc_login_info(netrc_machine=';echo rce')
|
||||||
|
|
||||||
def test_html_search_regex(self):
|
def test_html_search_regex(self):
|
||||||
html = '<p id="foo">Watch this <a href="http://www.youtube.com/watch?v=BaW_jenozKc">video</a></p>'
|
html = '<p id="foo">Watch this <a href="http://www.youtube.com/watch?v=BaW_jenozKc">video</a></p>'
|
||||||
|
|||||||
@ -205,8 +205,8 @@ class TestLenientSimpleCookie(unittest.TestCase):
|
|||||||
),
|
),
|
||||||
(
|
(
|
||||||
'Test quoted cookie',
|
'Test quoted cookie',
|
||||||
'keebler="E=mc2; L=\\"Loves\\"; fudge=\\012;"',
|
'keebler="E=mc2; L=\\"Loves\\"; fudge=;"',
|
||||||
{'keebler': 'E=mc2; L="Loves"; fudge=\012;'},
|
{'keebler': 'E=mc2; L="Loves"; fudge=;'},
|
||||||
),
|
),
|
||||||
(
|
(
|
||||||
"Allow '=' in an unquoted value",
|
"Allow '=' in an unquoted value",
|
||||||
@ -328,4 +328,30 @@ class TestLenientSimpleCookie(unittest.TestCase):
|
|||||||
'Key=Value; [Invalid]=Value; Another=Value',
|
'Key=Value; [Invalid]=Value; Another=Value',
|
||||||
{'Key': 'Value', 'Another': 'Value'},
|
{'Key': 'Value', 'Another': 'Value'},
|
||||||
),
|
),
|
||||||
|
# Ref: https://github.com/python/cpython/issues/143919
|
||||||
|
(
|
||||||
|
'Test invalid cookie name w/ control character',
|
||||||
|
'foo\012=bar;',
|
||||||
|
{},
|
||||||
|
),
|
||||||
|
(
|
||||||
|
'Test invalid cookie name w/ control character 2',
|
||||||
|
'foo\015baz=bar',
|
||||||
|
{},
|
||||||
|
),
|
||||||
|
(
|
||||||
|
'Test invalid cookie name w/ control character followed by valid cookie',
|
||||||
|
'foo\015=bar; x=y;',
|
||||||
|
{'x': 'y'},
|
||||||
|
),
|
||||||
|
(
|
||||||
|
'Test invalid cookie value w/ control character',
|
||||||
|
'keebler="E=mc2; L=\\"Loves\\"; fudge=\\012;"',
|
||||||
|
{},
|
||||||
|
),
|
||||||
|
(
|
||||||
|
'Test invalid quoted attribute value w/ control character',
|
||||||
|
'Customer="WILE_E_COYOTE"; Version="1\\012"; Path="/acme"',
|
||||||
|
{},
|
||||||
|
),
|
||||||
)
|
)
|
||||||
|
|||||||
@ -33,9 +33,12 @@ class Variant(enum.Enum):
|
|||||||
tce = 'player_ias_tce.vflset/en_US/base.js'
|
tce = 'player_ias_tce.vflset/en_US/base.js'
|
||||||
es5 = 'player_es5.vflset/en_US/base.js'
|
es5 = 'player_es5.vflset/en_US/base.js'
|
||||||
es6 = 'player_es6.vflset/en_US/base.js'
|
es6 = 'player_es6.vflset/en_US/base.js'
|
||||||
|
es6_tcc = 'player_es6_tcc.vflset/en_US/base.js'
|
||||||
|
es6_tce = 'player_es6_tce.vflset/en_US/base.js'
|
||||||
tv = 'tv-player-ias.vflset/tv-player-ias.js'
|
tv = 'tv-player-ias.vflset/tv-player-ias.js'
|
||||||
tv_es6 = 'tv-player-es6.vflset/tv-player-es6.js'
|
tv_es6 = 'tv-player-es6.vflset/tv-player-es6.js'
|
||||||
phone = 'player-plasma-ias-phone-en_US.vflset/base.js'
|
phone = 'player-plasma-ias-phone-en_US.vflset/base.js'
|
||||||
|
house = 'house_brand_player.vflset/en_US/base.js'
|
||||||
|
|
||||||
|
|
||||||
@dataclasses.dataclass
|
@dataclasses.dataclass
|
||||||
@ -50,57 +53,65 @@ class Challenge:
|
|||||||
|
|
||||||
|
|
||||||
CHALLENGES: list[Challenge] = [
|
CHALLENGES: list[Challenge] = [
|
||||||
Challenge('3d3ba064', Variant.tce, JsChallengeType.N, {
|
# 20522
|
||||||
'ZdZIqFPQK-Ty8wId': 'qmtUsIz04xxiNW',
|
Challenge('74edf1a3', Variant.main, JsChallengeType.N, {
|
||||||
'4GMrWHyKI5cEvhDO': 'N9gmEX7YhKTSmw',
|
'IlLiA21ny7gqA2m4p37': '9nRTxrbM1f0yHg',
|
||||||
|
'eabGFpsUKuWHXGh6FR4': 'izmYqDEY6kl7Sg',
|
||||||
|
'eabGF/ps%UK=uWHXGh6FR4': 'LACmqlhaBpiPlgE-a',
|
||||||
}),
|
}),
|
||||||
Challenge('3d3ba064', Variant.tce, JsChallengeType.SIG, {
|
Challenge('74edf1a3', Variant.main, JsChallengeType.SIG, {
|
||||||
'gN7a-hudCuAuPH6fByOk1_GNXN0yNMHShjZXS2VOgsEItAJz0tipeavEOmNdYN-wUtcEqD3bCXjc0iyKfAyZxCBGgIARwsSdQfJ2CJtt':
|
'NJAJEij0EwRgIhAI0KExTgjfPk-MPM9MAdzyyPRt=BM8-XO5tm5hlMCSVpAiEAv7eP3CURqZNSPow8BXXAoazVoXgeMP7gH9BdylHCwgw=gwzz':
|
||||||
'ttJC2JfQdSswRAIgGBCxZyAfKyi0cjXCb3gqEctUw-NYdNmOEvaepit0zJAtIEsgOV2SXZjhSHMNy0NXNG_1kNyBf6HPuAuCduh-a7O',
|
'NJAJEij0EwRgIhAI0KExTgjfPk-MPM9MAdzyyPRt=BM8-XO5tm5hzMCSVpAiEAv7eP3CURqZNSPow8BXXAoazVoXgeMP7gH9BdylHCwgw=gwzl',
|
||||||
|
'\x00\x01\x02%\x03\x04\x05\x06\x07\x08\x09\x10\x11\x12\x13\x14\x15\x16\x17\x18\x19\x20\x21\x22\x23\x24\x25\x26\x27\x28\x29\x30\x31\x32\x33\x34\x35\x36\x37\x38\x39\x40\x41\x42\x43\x44\x45\x46\x47\x48\x49':
|
||||||
|
'\x00\x01\x02%\x03\x04\x05\x06\x07\x08\x09\x10\x11\x12\x13\x14\x15\x16\x17\x18\x19\x20\x21\x22\x23\x24\x25\x26\x27\x28\x29\x30\x31\x32\x33\x34\x35\x36\x37\x38\x39\x40\x41\x42\x49\x44\x45\x46\x47\x48\x43',
|
||||||
}),
|
}),
|
||||||
Challenge('5ec65609', Variant.tce, JsChallengeType.N, {
|
# 20523
|
||||||
'0eRGgQWJGfT5rFHFj': '4SvMpDQH-vBJCw',
|
Challenge('901741ab', Variant.main, JsChallengeType.N, {
|
||||||
|
'BQoJvGBkC2nj1ZZLK-': 'UMPovvBZRh-sjb',
|
||||||
}),
|
}),
|
||||||
Challenge('5ec65609', Variant.tce, JsChallengeType.SIG, {
|
Challenge('901741ab', Variant.main, JsChallengeType.SIG, {
|
||||||
'AAJAJfQdSswRQIhAMG5SN7-cAFChdrE7tLA6grH0rTMICA1mmDc0HoXgW3CAiAQQ4=CspfaF_vt82XH5yewvqcuEkvzeTsbRuHssRMyJQ=I':
|
'NJAJEij0EwRgIhAI0KExTgjfPk-MPM9MAdzyyPRt=BM8-XO5tm5hlMCSVpAiEAv7eP3CURqZNSPow8BXXAoazVoXgeMP7gH9BdylHCwgw=gwzz':
|
||||||
'AJfQdSswRQIhAMG5SN7-cAFChdrE7tLA6grI0rTMICA1mmDc0HoXgW3CAiAQQ4HCspfaF_vt82XH5yewvqcuEkvzeTsbRuHssRMyJQ==',
|
'wgwCHlydB9Hg7PMegXoVzaoAXXB8woPSNZqRUC3Pe7vAEiApVSCMlhwmt5ON-8MB=5RPyyzdAM9MPM-kPfjgTxEK0IAhIgRwE0jiEJA',
|
||||||
}),
|
}),
|
||||||
Challenge('6742b2b9', Variant.tce, JsChallengeType.N, {
|
# 20524
|
||||||
'_HPB-7GFg1VTkn9u': 'qUAsPryAO_ByYg',
|
Challenge('e7573094', Variant.main, JsChallengeType.N, {
|
||||||
'K1t_fcB6phzuq2SF': 'Y7PcOt3VE62mog',
|
'IlLiA21ny7gqA2m4p37': '3KuQ3235dojTSjo4',
|
||||||
}),
|
}),
|
||||||
Challenge('6742b2b9', Variant.tce, JsChallengeType.SIG, {
|
Challenge('e7573094', Variant.main, JsChallengeType.SIG, {
|
||||||
'MMGZJMUucirzS_SnrSPYsc85CJNnTUi6GgR5NKn-znQEICACojE8MHS6S7uYq4TGjQX_D4aPk99hNU6wbTvorvVVMgIARwsSdQfJAA':
|
'NJAJEij0EwRgIhAI0KExTgjfPk-MPM9MAdzyyPRt=BM8-XO5tm5hlMCSVpAiEAv7eP3CURqZNSPow8BXXAoazVoXgeMP7gH9BdylHCwgw=gwzz':
|
||||||
'AJfQdSswRAIgMVVvrovTbw6UNh99kPa4D_XQjGT4qYu7S6SHM8EjoCACIEQnz-nKN5RgG6iUTnNJC58csYPSrnS_SzricuUMJZGM',
|
'yEij0EwRgIhAI0KExTgjfPk-MPM9MAdzyNPRt=BM8-XO5tm5hlMCSVNAiEAvpeP3CURqZJSPow8BXXAoazVoXgeMP7gH9BdylHCwgw=g',
|
||||||
}),
|
}),
|
||||||
Challenge('2b83d2e0', Variant.main, JsChallengeType.N, {
|
# 20525
|
||||||
'0eRGgQWJGfT5rFHFj': 'euHbygrCMLksxd',
|
Challenge('9fcf08e8', Variant.main, JsChallengeType.N, {
|
||||||
|
'Dyc5ALyWiO0VqwCiT': 'H2PLmmAmJsYjKA',
|
||||||
}),
|
}),
|
||||||
Challenge('2b83d2e0', Variant.main, JsChallengeType.SIG, {
|
Challenge('9fcf08e8', Variant.main, JsChallengeType.SIG, {
|
||||||
'MMGZJMUucirzS_SnrSPYsc85CJNnTUi6GgR5NKn-znQEICACojE8MHS6S7uYq4TGjQX_D4aPk99hNU6wbTvorvVVMgIARwsSdQfJA':
|
'\x00\x01\x02\x03\x04\x05\x06\x07\x08\x09\x0a\x0b\x0c\x0d\x0e\x0f\x10\x11\x12\x13\x14\x15\x16\x17\x18\x19\x1a\x1b\x1c\x1d\x1e\x1f\x20\x21\x22\x23\x24\x25\x26\x27\x28\x29\x2a\x2b\x2c\x2d\x2e\x2f\x30\x31\x32\x33\x34\x35\x36\x37\x38\x39\x3a\x3b\x3c\x3d\x3e\x3f\x40\x41\x42\x43\x44\x45\x46\x47\x48\x49\x4a\x4b\x4c\x4d\x4e\x4f\x50\x51\x52\x53\x54\x55\x56\x57\x58\x59\x5a\x5b\x5c\x5d\x5e\x5f\x60\x61\x62\x63\x64\x65\x66\x67\x68\x69\x6a':
|
||||||
'-MGZJMUucirzS_SnrSPYsc85CJNnTUi6GgR5NKnMznQEICACojE8MHS6S7uYq4TGjQX_D4aPk99hNU6wbTvorvVVMgIARwsSdQfJ',
|
'\x6a\x69\x68\x67\x66\x65\x64\x63\x62\x61\x60\x5f\x5e\x5d\x5c\x5b\x5a\x59\x58\x57\x56\x55\x54\x53\x52\x51\x50\x4f\x4e\x4d\x4c\x4b\x4a\x49\x48\x47\x46\x45\x44\x43\x42\x41\x40\x3f\x3e\x3d\x3c\x3b\x3a\x39\x38\x37\x36\x35\x34\x33\x32\x31\x30\x2f\x2e\x2d\x2c\x2b\x2a\x29\x28\x27\x26\x25\x24\x23\x22\x21\x20\x1f\x1e\x1d\x1c\x1b\x1a\x19\x18\x17\x16\x15\x14\x13\x12\x11\x10\x0f\x0e\x0d\x0c\x0b\x03\x09\x08\x07\x06\x05\x04\x0a',
|
||||||
}),
|
}),
|
||||||
Challenge('638ec5c6', Variant.main, JsChallengeType.N, {
|
# 20527
|
||||||
'ZdZIqFPQK-Ty8wId': '1qov8-KM-yH',
|
Challenge('21cd2156', Variant.main, JsChallengeType.N, {
|
||||||
|
'CiOxDbW1WEE8Ti4w': 'ZcBE4klItiC4rQ',
|
||||||
}),
|
}),
|
||||||
Challenge('638ec5c6', Variant.main, JsChallengeType.SIG, {
|
Challenge('21cd2156', Variant.main, JsChallengeType.SIG, {
|
||||||
'gN7a-hudCuAuPH6fByOk1_GNXN0yNMHShjZXS2VOgsEItAJz0tipeavEOmNdYN-wUtcEqD3bCXjc0iyKfAyZxCBGgIARwsSdQfJ2CJtt':
|
'\x00\x01\x02\x03\x04\x05\x06\x07\x08\x09\x0a\x0b\x0c\x0d\x0e\x0f\x10\x11\x12\x13\x14\x15\x16\x17\x18\x19\x1a\x1b\x1c\x1d\x1e\x1f\x20\x21\x22\x23\x24\x25\x26\x27\x28\x29\x2a\x2b\x2c\x2d\x2e\x2f\x30\x31\x32\x33\x34\x35\x36\x37\x38\x39\x3a\x3b\x3c\x3d\x3e\x3f\x40\x41\x42\x43\x44\x45\x46\x47\x48\x49\x4a\x4b\x4c\x4d\x4e\x4f\x50\x51\x52\x53\x54\x55\x56\x57\x58\x59\x5a\x5b\x5c\x5d\x5e\x5f\x60\x61\x62\x63\x64\x65\x66\x67\x68\x69\x6a':
|
||||||
'MhudCuAuP-6fByOk1_GNXN7gNHHShjyXS2VOgsEItAJz0tipeav0OmNdYN-wUtcEqD3bCXjc0iyKfAyZxCBGgIARwsSdQfJ2CJtt',
|
'\x03\x04\x05\x06\x07\x08\x09\x0a\x0b\x0c\x0d\x0e\x0f\x10\x11\x12\x13\x14\x15\x16\x17\x18\x19\x1a\x1b\x1c\x1d\x1e\x1f\x20\x21\x22\x23\x24\x25\x26\x27\x28\x29\x2a\x2b\x2c\x2d\x2e\x2f\x30\x31\x32\x33\x34\x35\x36\x37\x38\x39\x3a\x3b\x3c\x3d\x3e\x3f\x40\x41\x42\x43\x44\x00\x46\x47\x48\x49\x4a\x4b\x6a\x4d\x4e\x4f\x50\x51\x52\x53\x54\x55\x56\x57\x58\x59\x5a\x5b\x5c\x5d\x5e\x5f\x60\x61\x62\x63\x64\x65\x66\x67\x68\x69\x4c',
|
||||||
}),
|
}),
|
||||||
# c1c87fb0: tce variant broke sig solving; n and main variant are added only for regression testing
|
# 20528
|
||||||
Challenge('c1c87fb0', Variant.main, JsChallengeType.N, {
|
Challenge('5e55da5a', Variant.tv, JsChallengeType.N, {
|
||||||
'ZdZIqFPQK-Ty8wId': 'jCHBK5GuAFNa2',
|
'FgTvzyq4jKv482R7': 'l26nyYSotkzDxg',
|
||||||
}),
|
}),
|
||||||
Challenge('c1c87fb0', Variant.main, JsChallengeType.SIG, {
|
Challenge('5e55da5a', Variant.tv, JsChallengeType.SIG, {
|
||||||
'gN7a-hudCuAuPH6fByOk1_GNXN0yNMHShjZXS2VOgsEItAJz0tipeavEOmNdYN-wUtcEqD3bCXjc0iyKfAyZxCBGgIARwsSdQfJ2CJtt':
|
'\x00\x01\x02\x03\x04\x05\x06\x07\x08\x09\x0a\x0b\x0c\x0d\x0e\x0f\x10\x11\x12\x13\x14\x15\x16\x17\x18\x19\x1a\x1b\x1c\x1d\x1e\x1f\x20\x21\x22\x23\x24\x25\x26\x27\x28\x29\x2a\x2b\x2c\x2d\x2e\x2f\x30\x31\x32\x33\x34\x35\x36\x37\x38\x39\x3a\x3b\x3c\x3d\x3e\x3f\x40\x41\x42\x43\x44\x45\x46\x47\x48\x49\x4a\x4b\x4c\x4d\x4e\x4f\x50\x51\x52\x53\x54\x55\x56\x57\x58\x59\x5a\x5b\x5c\x5d\x5e\x5f\x60\x61\x62\x63\x64\x65\x66\x67\x68\x69\x6a':
|
||||||
'ttJC2JfQdSswRAIgGBCxZyAfKyi0cjXCb3DqEctUw-NYdNmOEvaepit0zJAtIEsgOV2SXZjhSHMNy0NXNGa1kOyBf6HPuAuCduh-_',
|
'\x46\x66\x65\x64\x63\x62\x61\x60\x5f\x5e\x67\x6a\x5b\x5a\x59\x58\x57\x56\x55\x54\x53\x52\x51\x50\x4f\x4e\x4d\x4c\x4b\x4a\x49\x48\x47\x2c\x45\x44\x43\x42\x41\x40\x3f\x3e\x3d\x3c\x3b\x3a\x39\x38\x13\x36\x35\x34\x33\x32\x31\x30\x2f\x2e\x2d\x5d\x2b\x2a\x29\x28\x27\x26\x25\x24\x23\x22\x21\x20\x1f\x1e\x1d\x1c\x1b\x1a\x19\x18\x17\x16\x15\x14\x0c\x12\x11\x10\x0f\x0e\x0d\x00\x0b\x0a\x09\x08\x07\x06\x05\x04\x03\x02\x01\x37',
|
||||||
}),
|
}),
|
||||||
Challenge('c1c87fb0', Variant.tce, JsChallengeType.N, {
|
# 20529
|
||||||
'ZdZIqFPQK-Ty8wId': 'jCHBK5GuAFNa2',
|
Challenge('631d3938', Variant.main, JsChallengeType.N, {
|
||||||
|
'KBx1qz7jMhxELa8c': 'ttPvh7WIptsgSw',
|
||||||
}),
|
}),
|
||||||
Challenge('c1c87fb0', Variant.tce, JsChallengeType.SIG, {
|
Challenge('631d3938', Variant.main, JsChallengeType.SIG, {
|
||||||
'gN7a-hudCuAuPH6fByOk1_GNXN0yNMHShjZXS2VOgsEItAJz0tipeavEOmNdYN-wUtcEqD3bCXjc0iyKfAyZxCBGgIARwsSdQfJ2CJtt':
|
'\x00\x01\x02\x03\x04\x05\x06\x07\x08\x09\x0a\x0b\x0c\x0d\x0e\x0f\x10\x11\x12\x13\x14\x15\x16\x17\x18\x19\x1a\x1b\x1c\x1d\x1e\x1f\x20\x21\x22\x23\x24\x25\x26\x27\x28\x29\x2a\x2b\x2c\x2d\x2e\x2f\x30\x31\x32\x33\x34\x35\x36\x37\x38\x39\x3a\x3b\x3c\x3d\x3e\x3f\x40\x41\x42\x43\x44\x45\x46\x47\x48\x49\x4a\x4b\x4c\x4d\x4e\x4f\x50\x51\x52\x53\x54\x55\x56\x57\x58\x59\x5a\x5b\x5c\x5d\x5e\x5f\x60\x61\x62\x63\x64\x65\x66':
|
||||||
'ttJC2JfQdSswRAIgGBCxZyAfKyi0cjXCb3DqEctUw-NYdNmOEvaepit0zJAtIEsgOV2SXZjhSHMNy0NXNGa1kOyBf6HPuAuCduh-_',
|
'\x19\x01\x02\x03\x04\x05\x06\x07\x08\x09\x0a\x0b\x0c\x0d\x0e\x0f\x10\x11\x12\x13\x14\x15\x16\x17\x18\x00\x1a\x1b\x1c\x1d\x1e\x1f\x20\x21\x22\x23\x24\x25\x26\x27\x28\x29\x2a\x2b\x2c\x2d\x2e\x2f\x30\x31\x32\x33\x34\x35\x36\x37\x38\x39\x3a\x3b\x3c\x3d\x3e\x3f\x40\x41\x42\x43\x44\x45\x46\x47\x48\x49\x4a\x4b\x4c\x4d\x4e\x4f\x50\x51\x52\x53\x54\x55\x56\x57\x58\x59\x5a\x5b\x5c\x5d\x5e\x5f\x60\x61\x62\x63',
|
||||||
}),
|
}),
|
||||||
]
|
]
|
||||||
|
|
||||||
|
|||||||
@ -9,7 +9,12 @@ sys.path.insert(0, os.path.dirname(os.path.dirname(os.path.abspath(__file__))))
|
|||||||
|
|
||||||
import math
|
import math
|
||||||
|
|
||||||
from yt_dlp.jsinterp import JS_Undefined, JSInterpreter, js_number_to_string
|
from yt_dlp.jsinterp import (
|
||||||
|
JS_Undefined,
|
||||||
|
JSInterpreter,
|
||||||
|
int_to_int32,
|
||||||
|
js_number_to_string,
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
class NaN:
|
class NaN:
|
||||||
@ -101,8 +106,16 @@ class TestJSInterpreter(unittest.TestCase):
|
|||||||
self._test('function f(){return 5 ^ 9;}', 12)
|
self._test('function f(){return 5 ^ 9;}', 12)
|
||||||
self._test('function f(){return 0.0 << NaN}', 0)
|
self._test('function f(){return 0.0 << NaN}', 0)
|
||||||
self._test('function f(){return null << undefined}', 0)
|
self._test('function f(){return null << undefined}', 0)
|
||||||
# TODO: Does not work due to number too large
|
self._test('function f(){return -12616 ^ 5041}', -8951)
|
||||||
# self._test('function f(){return 21 << 4294967297}', 42)
|
self._test('function f(){return 21 << 4294967297}', 42)
|
||||||
|
|
||||||
|
def test_string_concat(self):
|
||||||
|
self._test('function f(){return "a" + "b";}', 'ab')
|
||||||
|
self._test('function f(){let x = "a"; x += "b"; return x;}', 'ab')
|
||||||
|
self._test('function f(){return "a" + 1;}', 'a1')
|
||||||
|
self._test('function f(){let x = "a"; x += 1; return x;}', 'a1')
|
||||||
|
self._test('function f(){return 2 + "b";}', '2b')
|
||||||
|
self._test('function f(){let x = 2; x += "b"; return x;}', '2b')
|
||||||
|
|
||||||
def test_array_access(self):
|
def test_array_access(self):
|
||||||
self._test('function f(){var x = [1,2,3]; x[0] = 4; x[0] = 5; x[2.0] = 7; return x;}', [5, 2, 7])
|
self._test('function f(){var x = [1,2,3]; x[0] = 4; x[0] = 5; x[2.0] = 7; return x;}', [5, 2, 7])
|
||||||
@ -325,6 +338,7 @@ class TestJSInterpreter(unittest.TestCase):
|
|||||||
self._test('function f() { let a = {m1: 42, m2: 0 }; return [a["m1"], a.m2]; }', [42, 0])
|
self._test('function f() { let a = {m1: 42, m2: 0 }; return [a["m1"], a.m2]; }', [42, 0])
|
||||||
self._test('function f() { let a; return a?.qq; }', JS_Undefined)
|
self._test('function f() { let a; return a?.qq; }', JS_Undefined)
|
||||||
self._test('function f() { let a = {m1: 42, m2: 0 }; return a?.qq; }', JS_Undefined)
|
self._test('function f() { let a = {m1: 42, m2: 0 }; return a?.qq; }', JS_Undefined)
|
||||||
|
self._test('function f() { let a = {"1": 123}; return a[1]; }', 123)
|
||||||
|
|
||||||
def test_regex(self):
|
def test_regex(self):
|
||||||
self._test('function f() { let a=/,,[/,913,/](,)}/; }', None)
|
self._test('function f() { let a=/,,[/,913,/](,)}/; }', None)
|
||||||
@ -447,6 +461,22 @@ class TestJSInterpreter(unittest.TestCase):
|
|||||||
def test_splice(self):
|
def test_splice(self):
|
||||||
self._test('function f(){var T = ["0", "1", "2"]; T["splice"](2, 1, "0")[0]; return T }', ['0', '1', '0'])
|
self._test('function f(){var T = ["0", "1", "2"]; T["splice"](2, 1, "0")[0]; return T }', ['0', '1', '0'])
|
||||||
|
|
||||||
|
def test_int_to_int32(self):
|
||||||
|
for inp, exp in [
|
||||||
|
(0, 0),
|
||||||
|
(1, 1),
|
||||||
|
(-1, -1),
|
||||||
|
(-8951, -8951),
|
||||||
|
(2147483647, 2147483647),
|
||||||
|
(2147483648, -2147483648),
|
||||||
|
(2147483649, -2147483647),
|
||||||
|
(-2147483649, 2147483647),
|
||||||
|
(-2147483648, -2147483648),
|
||||||
|
(-16799986688, 379882496),
|
||||||
|
(39570129568, 915423904),
|
||||||
|
]:
|
||||||
|
assert int_to_int32(inp) == exp
|
||||||
|
|
||||||
def test_js_number_to_string(self):
|
def test_js_number_to_string(self):
|
||||||
for test, radix, expected in [
|
for test, radix, expected in [
|
||||||
(0, None, '0'),
|
(0, None, '0'),
|
||||||
|
|||||||
@ -312,7 +312,7 @@ class TestRequestHandlerBase:
|
|||||||
|
|
||||||
|
|
||||||
@pytest.mark.parametrize('handler', ['Urllib', 'Requests', 'CurlCFFI'], indirect=True)
|
@pytest.mark.parametrize('handler', ['Urllib', 'Requests', 'CurlCFFI'], indirect=True)
|
||||||
@pytest.mark.handler_flaky('CurlCFFI', os.name == 'nt', reason='segfaults')
|
@pytest.mark.handler_flaky('CurlCFFI', reason='segfaults')
|
||||||
class TestHTTPRequestHandler(TestRequestHandlerBase):
|
class TestHTTPRequestHandler(TestRequestHandlerBase):
|
||||||
|
|
||||||
def test_verify_cert(self, handler):
|
def test_verify_cert(self, handler):
|
||||||
@ -1004,6 +1004,7 @@ class TestUrllibRequestHandler(TestRequestHandlerBase):
|
|||||||
|
|
||||||
@pytest.mark.parametrize('handler', ['Requests'], indirect=True)
|
@pytest.mark.parametrize('handler', ['Requests'], indirect=True)
|
||||||
class TestRequestsRequestHandler(TestRequestHandlerBase):
|
class TestRequestsRequestHandler(TestRequestHandlerBase):
|
||||||
|
# ruff: disable[PLW0108] `requests` and/or `urllib3` may not be available
|
||||||
@pytest.mark.parametrize('raised,expected', [
|
@pytest.mark.parametrize('raised,expected', [
|
||||||
(lambda: requests.exceptions.ConnectTimeout(), TransportError),
|
(lambda: requests.exceptions.ConnectTimeout(), TransportError),
|
||||||
(lambda: requests.exceptions.ReadTimeout(), TransportError),
|
(lambda: requests.exceptions.ReadTimeout(), TransportError),
|
||||||
@ -1017,8 +1018,10 @@ class TestRequestsRequestHandler(TestRequestHandlerBase):
|
|||||||
# catch-all: https://github.com/psf/requests/blob/main/src/requests/adapters.py#L535
|
# catch-all: https://github.com/psf/requests/blob/main/src/requests/adapters.py#L535
|
||||||
(lambda: urllib3.exceptions.HTTPError(), TransportError),
|
(lambda: urllib3.exceptions.HTTPError(), TransportError),
|
||||||
(lambda: requests.exceptions.RequestException(), RequestError),
|
(lambda: requests.exceptions.RequestException(), RequestError),
|
||||||
# (lambda: requests.exceptions.TooManyRedirects(), HTTPError) - Needs a response object
|
# Needs a response object
|
||||||
|
# (lambda: requests.exceptions.TooManyRedirects(), HTTPError),
|
||||||
])
|
])
|
||||||
|
# ruff: enable[PLW0108]
|
||||||
def test_request_error_mapping(self, handler, monkeypatch, raised, expected):
|
def test_request_error_mapping(self, handler, monkeypatch, raised, expected):
|
||||||
with handler() as rh:
|
with handler() as rh:
|
||||||
def mock_get_instance(*args, **kwargs):
|
def mock_get_instance(*args, **kwargs):
|
||||||
@ -1034,6 +1037,7 @@ class TestRequestsRequestHandler(TestRequestHandlerBase):
|
|||||||
|
|
||||||
assert exc_info.type is expected
|
assert exc_info.type is expected
|
||||||
|
|
||||||
|
# ruff: disable[PLW0108] `urllib3` may not be available
|
||||||
@pytest.mark.parametrize('raised,expected,match', [
|
@pytest.mark.parametrize('raised,expected,match', [
|
||||||
(lambda: urllib3.exceptions.SSLError(), SSLError, None),
|
(lambda: urllib3.exceptions.SSLError(), SSLError, None),
|
||||||
(lambda: urllib3.exceptions.TimeoutError(), TransportError, None),
|
(lambda: urllib3.exceptions.TimeoutError(), TransportError, None),
|
||||||
@ -1052,6 +1056,7 @@ class TestRequestsRequestHandler(TestRequestHandlerBase):
|
|||||||
'3 bytes read, 5 more expected',
|
'3 bytes read, 5 more expected',
|
||||||
),
|
),
|
||||||
])
|
])
|
||||||
|
# ruff: enable[PLW0108]
|
||||||
def test_response_error_mapping(self, handler, monkeypatch, raised, expected, match):
|
def test_response_error_mapping(self, handler, monkeypatch, raised, expected, match):
|
||||||
from requests.models import Response as RequestsResponse
|
from requests.models import Response as RequestsResponse
|
||||||
from urllib3.response import HTTPResponse as Urllib3Response
|
from urllib3.response import HTTPResponse as Urllib3Response
|
||||||
@ -1095,7 +1100,7 @@ class TestRequestsRequestHandler(TestRequestHandlerBase):
|
|||||||
|
|
||||||
|
|
||||||
@pytest.mark.parametrize('handler', ['CurlCFFI'], indirect=True)
|
@pytest.mark.parametrize('handler', ['CurlCFFI'], indirect=True)
|
||||||
@pytest.mark.handler_flaky('CurlCFFI', os.name == 'nt', reason='segfaults')
|
@pytest.mark.handler_flaky('CurlCFFI', reason='segfaults')
|
||||||
class TestCurlCFFIRequestHandler(TestRequestHandlerBase):
|
class TestCurlCFFIRequestHandler(TestRequestHandlerBase):
|
||||||
|
|
||||||
@pytest.mark.parametrize('params,extensions', [
|
@pytest.mark.parametrize('params,extensions', [
|
||||||
|
|||||||
@ -239,6 +239,7 @@ class TestTraversal:
|
|||||||
'accept matching `expected_type` type'
|
'accept matching `expected_type` type'
|
||||||
assert traverse_obj(_EXPECTED_TYPE_DATA, 'str', expected_type=int) is None, \
|
assert traverse_obj(_EXPECTED_TYPE_DATA, 'str', expected_type=int) is None, \
|
||||||
'reject non matching `expected_type` type'
|
'reject non matching `expected_type` type'
|
||||||
|
# ruff: noqa: PLW0108 `type`s get special treatment, so wrap in lambda
|
||||||
assert traverse_obj(_EXPECTED_TYPE_DATA, 'int', expected_type=lambda x: str(x)) == '0', \
|
assert traverse_obj(_EXPECTED_TYPE_DATA, 'int', expected_type=lambda x: str(x)) == '0', \
|
||||||
'transform type using type function'
|
'transform type using type function'
|
||||||
assert traverse_obj(_EXPECTED_TYPE_DATA, 'str', expected_type=lambda _: 1 / 0) is None, \
|
assert traverse_obj(_EXPECTED_TYPE_DATA, 'str', expected_type=lambda _: 1 / 0) is None, \
|
||||||
|
|||||||
@ -924,6 +924,7 @@ class TestUtil(unittest.TestCase):
|
|||||||
self.assertEqual(month_by_name(None), None)
|
self.assertEqual(month_by_name(None), None)
|
||||||
self.assertEqual(month_by_name('December', 'en'), 12)
|
self.assertEqual(month_by_name('December', 'en'), 12)
|
||||||
self.assertEqual(month_by_name('décembre', 'fr'), 12)
|
self.assertEqual(month_by_name('décembre', 'fr'), 12)
|
||||||
|
self.assertEqual(month_by_name('desember', 'is'), 12)
|
||||||
self.assertEqual(month_by_name('December'), 12)
|
self.assertEqual(month_by_name('December'), 12)
|
||||||
self.assertEqual(month_by_name('décembre'), None)
|
self.assertEqual(month_by_name('décembre'), None)
|
||||||
self.assertEqual(month_by_name('Unknown', 'unknown'), None)
|
self.assertEqual(month_by_name('Unknown', 'unknown'), None)
|
||||||
|
|||||||
@ -448,6 +448,7 @@ def create_fake_ws_connection(raised):
|
|||||||
|
|
||||||
@pytest.mark.parametrize('handler', ['Websockets'], indirect=True)
|
@pytest.mark.parametrize('handler', ['Websockets'], indirect=True)
|
||||||
class TestWebsocketsRequestHandler:
|
class TestWebsocketsRequestHandler:
|
||||||
|
# ruff: disable[PLW0108] `websockets` may not be available
|
||||||
@pytest.mark.parametrize('raised,expected', [
|
@pytest.mark.parametrize('raised,expected', [
|
||||||
# https://websockets.readthedocs.io/en/stable/reference/exceptions.html
|
# https://websockets.readthedocs.io/en/stable/reference/exceptions.html
|
||||||
(lambda: websockets.exceptions.InvalidURI(msg='test', uri='test://'), RequestError),
|
(lambda: websockets.exceptions.InvalidURI(msg='test', uri='test://'), RequestError),
|
||||||
@ -459,13 +460,14 @@ class TestWebsocketsRequestHandler:
|
|||||||
(lambda: websockets.exceptions.NegotiationError(), TransportError),
|
(lambda: websockets.exceptions.NegotiationError(), TransportError),
|
||||||
# Catch-all
|
# Catch-all
|
||||||
(lambda: websockets.exceptions.WebSocketException(), TransportError),
|
(lambda: websockets.exceptions.WebSocketException(), TransportError),
|
||||||
(lambda: TimeoutError(), TransportError),
|
(TimeoutError, TransportError),
|
||||||
# These may be raised by our create_connection implementation, which should also be caught
|
# These may be raised by our create_connection implementation, which should also be caught
|
||||||
(lambda: OSError(), TransportError),
|
(OSError, TransportError),
|
||||||
(lambda: ssl.SSLError(), SSLError),
|
(ssl.SSLError, SSLError),
|
||||||
(lambda: ssl.SSLCertVerificationError(), CertificateVerifyError),
|
(ssl.SSLCertVerificationError, CertificateVerifyError),
|
||||||
(lambda: socks.ProxyError(), ProxyError),
|
(socks.ProxyError, ProxyError),
|
||||||
])
|
])
|
||||||
|
# ruff: enable[PLW0108]
|
||||||
def test_request_error_mapping(self, handler, monkeypatch, raised, expected):
|
def test_request_error_mapping(self, handler, monkeypatch, raised, expected):
|
||||||
import websockets.sync.client
|
import websockets.sync.client
|
||||||
|
|
||||||
@ -482,11 +484,12 @@ class TestWebsocketsRequestHandler:
|
|||||||
@pytest.mark.parametrize('raised,expected,match', [
|
@pytest.mark.parametrize('raised,expected,match', [
|
||||||
# https://websockets.readthedocs.io/en/stable/reference/sync/client.html#websockets.sync.client.ClientConnection.send
|
# https://websockets.readthedocs.io/en/stable/reference/sync/client.html#websockets.sync.client.ClientConnection.send
|
||||||
(lambda: websockets.exceptions.ConnectionClosed(None, None), TransportError, None),
|
(lambda: websockets.exceptions.ConnectionClosed(None, None), TransportError, None),
|
||||||
(lambda: RuntimeError(), TransportError, None),
|
(RuntimeError, TransportError, None),
|
||||||
(lambda: TimeoutError(), TransportError, None),
|
(TimeoutError, TransportError, None),
|
||||||
(lambda: TypeError(), RequestError, None),
|
(TypeError, RequestError, None),
|
||||||
(lambda: socks.ProxyError(), ProxyError, None),
|
(socks.ProxyError, ProxyError, None),
|
||||||
# Catch-all
|
# Catch-all
|
||||||
|
# ruff: noqa: PLW0108 `websockets` may not be available
|
||||||
(lambda: websockets.exceptions.WebSocketException(), TransportError, None),
|
(lambda: websockets.exceptions.WebSocketException(), TransportError, None),
|
||||||
])
|
])
|
||||||
def test_ws_send_error_mapping(self, handler, monkeypatch, raised, expected, match):
|
def test_ws_send_error_mapping(self, handler, monkeypatch, raised, expected, match):
|
||||||
@ -499,10 +502,11 @@ class TestWebsocketsRequestHandler:
|
|||||||
@pytest.mark.parametrize('raised,expected,match', [
|
@pytest.mark.parametrize('raised,expected,match', [
|
||||||
# https://websockets.readthedocs.io/en/stable/reference/sync/client.html#websockets.sync.client.ClientConnection.recv
|
# https://websockets.readthedocs.io/en/stable/reference/sync/client.html#websockets.sync.client.ClientConnection.recv
|
||||||
(lambda: websockets.exceptions.ConnectionClosed(None, None), TransportError, None),
|
(lambda: websockets.exceptions.ConnectionClosed(None, None), TransportError, None),
|
||||||
(lambda: RuntimeError(), TransportError, None),
|
(RuntimeError, TransportError, None),
|
||||||
(lambda: TimeoutError(), TransportError, None),
|
(TimeoutError, TransportError, None),
|
||||||
(lambda: socks.ProxyError(), ProxyError, None),
|
(socks.ProxyError, ProxyError, None),
|
||||||
# Catch-all
|
# Catch-all
|
||||||
|
# ruff: noqa: PLW0108 `websockets` may not be available
|
||||||
(lambda: websockets.exceptions.WebSocketException(), TransportError, None),
|
(lambda: websockets.exceptions.WebSocketException(), TransportError, None),
|
||||||
])
|
])
|
||||||
def test_ws_recv_error_mapping(self, handler, monkeypatch, raised, expected, match):
|
def test_ws_recv_error_mapping(self, handler, monkeypatch, raised, expected, match):
|
||||||
|
|||||||
@ -1168,6 +1168,7 @@ class LenientSimpleCookie(http.cookies.SimpleCookie):
|
|||||||
# We use Morsel's legal key chars to avoid errors on setting values
|
# We use Morsel's legal key chars to avoid errors on setting values
|
||||||
_LEGAL_KEY_CHARS = r'\w\d' + re.escape('!#$%&\'*+-.:^_`|~')
|
_LEGAL_KEY_CHARS = r'\w\d' + re.escape('!#$%&\'*+-.:^_`|~')
|
||||||
_LEGAL_VALUE_CHARS = _LEGAL_KEY_CHARS + re.escape('(),/<=>?@[]{}')
|
_LEGAL_VALUE_CHARS = _LEGAL_KEY_CHARS + re.escape('(),/<=>?@[]{}')
|
||||||
|
_LEGAL_KEY_RE = re.compile(rf'[{_LEGAL_KEY_CHARS}]+', re.ASCII)
|
||||||
|
|
||||||
_RESERVED = {
|
_RESERVED = {
|
||||||
'expires',
|
'expires',
|
||||||
@ -1185,17 +1186,17 @@ class LenientSimpleCookie(http.cookies.SimpleCookie):
|
|||||||
|
|
||||||
# Added 'bad' group to catch the remaining value
|
# Added 'bad' group to catch the remaining value
|
||||||
_COOKIE_PATTERN = re.compile(r'''
|
_COOKIE_PATTERN = re.compile(r'''
|
||||||
\s* # Optional whitespace at start of cookie
|
[ ]* # Optional whitespace at start of cookie
|
||||||
(?P<key> # Start of group 'key'
|
(?P<key> # Start of group 'key'
|
||||||
[''' + _LEGAL_KEY_CHARS + r''']+?# Any word of at least one letter
|
[^ =;]+ # Match almost anything here for now and validate later
|
||||||
) # End of group 'key'
|
) # End of group 'key'
|
||||||
( # Optional group: there may not be a value.
|
( # Optional group: there may not be a value.
|
||||||
\s*=\s* # Equal Sign
|
[ ]*=[ ]* # Equal Sign
|
||||||
( # Start of potential value
|
( # Start of potential value
|
||||||
(?P<val> # Start of group 'val'
|
(?P<val> # Start of group 'val'
|
||||||
"(?:[^\\"]|\\.)*" # Any doublequoted string
|
"(?:[^\\"]|\\.)*" # Any doublequoted string
|
||||||
| # or
|
| # or
|
||||||
\w{3},\s[\w\d\s-]{9,11}\s[\d:]{8}\sGMT # Special case for "expires" attr
|
\w{3},\ [\w\d -]{9,11}\ [\d:]{8}\ GMT # Special case for "expires" attr
|
||||||
| # or
|
| # or
|
||||||
[''' + _LEGAL_VALUE_CHARS + r''']* # Any word or empty string
|
[''' + _LEGAL_VALUE_CHARS + r''']* # Any word or empty string
|
||||||
) # End of group 'val'
|
) # End of group 'val'
|
||||||
@ -1203,10 +1204,14 @@ class LenientSimpleCookie(http.cookies.SimpleCookie):
|
|||||||
(?P<bad>(?:\\;|[^;])*?) # 'bad' group fallback for invalid values
|
(?P<bad>(?:\\;|[^;])*?) # 'bad' group fallback for invalid values
|
||||||
) # End of potential value
|
) # End of potential value
|
||||||
)? # End of optional value group
|
)? # End of optional value group
|
||||||
\s* # Any number of spaces.
|
[ ]* # Any number of spaces.
|
||||||
(\s+|;|$) # Ending either at space, semicolon, or EOS.
|
([ ]+|;|$) # Ending either at space, semicolon, or EOS.
|
||||||
''', re.ASCII | re.VERBOSE)
|
''', re.ASCII | re.VERBOSE)
|
||||||
|
|
||||||
|
# http.cookies.Morsel raises on values w/ control characters in Python 3.14.3+ & 3.13.12+
|
||||||
|
# Ref: https://github.com/python/cpython/issues/143919
|
||||||
|
_CONTROL_CHARACTER_RE = re.compile(r'[\x00-\x1F\x7F]')
|
||||||
|
|
||||||
def load(self, data):
|
def load(self, data):
|
||||||
# Workaround for https://github.com/yt-dlp/yt-dlp/issues/4776
|
# Workaround for https://github.com/yt-dlp/yt-dlp/issues/4776
|
||||||
if not isinstance(data, str):
|
if not isinstance(data, str):
|
||||||
@ -1219,6 +1224,9 @@ class LenientSimpleCookie(http.cookies.SimpleCookie):
|
|||||||
continue
|
continue
|
||||||
|
|
||||||
key, value = match.group('key', 'val')
|
key, value = match.group('key', 'val')
|
||||||
|
if not self._LEGAL_KEY_RE.fullmatch(key):
|
||||||
|
morsel = None
|
||||||
|
continue
|
||||||
|
|
||||||
is_attribute = False
|
is_attribute = False
|
||||||
if key.startswith('$'):
|
if key.startswith('$'):
|
||||||
@ -1237,6 +1245,14 @@ class LenientSimpleCookie(http.cookies.SimpleCookie):
|
|||||||
value = True
|
value = True
|
||||||
else:
|
else:
|
||||||
value, _ = self.value_decode(value)
|
value, _ = self.value_decode(value)
|
||||||
|
# Guard against control characters in quoted attribute values
|
||||||
|
if self._CONTROL_CHARACTER_RE.search(value):
|
||||||
|
# While discarding the entire morsel is not very lenient,
|
||||||
|
# it's better than http.cookies.Morsel raising a CookieError
|
||||||
|
# and it's probably better to err on the side of caution
|
||||||
|
self.pop(morsel.key, None)
|
||||||
|
morsel = None
|
||||||
|
continue
|
||||||
|
|
||||||
morsel[key] = value
|
morsel[key] = value
|
||||||
|
|
||||||
@ -1246,6 +1262,10 @@ class LenientSimpleCookie(http.cookies.SimpleCookie):
|
|||||||
elif value is not None:
|
elif value is not None:
|
||||||
morsel = self.get(key, http.cookies.Morsel())
|
morsel = self.get(key, http.cookies.Morsel())
|
||||||
real_value, coded_value = self.value_decode(value)
|
real_value, coded_value = self.value_decode(value)
|
||||||
|
# Guard against control characters in quoted cookie values
|
||||||
|
if self._CONTROL_CHARACTER_RE.search(real_value):
|
||||||
|
morsel = None
|
||||||
|
continue
|
||||||
morsel.set(key, real_value, coded_value)
|
morsel.set(key, real_value, coded_value)
|
||||||
self[key] = morsel
|
self[key] = morsel
|
||||||
|
|
||||||
|
|||||||
@ -311,8 +311,10 @@ from .canalsurmas import CanalsurmasIE
|
|||||||
from .caracoltv import CaracolTvPlayIE
|
from .caracoltv import CaracolTvPlayIE
|
||||||
from .cbc import (
|
from .cbc import (
|
||||||
CBCIE,
|
CBCIE,
|
||||||
|
CBCGemContentIE,
|
||||||
CBCGemIE,
|
CBCGemIE,
|
||||||
CBCGemLiveIE,
|
CBCGemLiveIE,
|
||||||
|
CBCGemOlympicsIE,
|
||||||
CBCGemPlaylistIE,
|
CBCGemPlaylistIE,
|
||||||
CBCListenIE,
|
CBCListenIE,
|
||||||
CBCPlayerIE,
|
CBCPlayerIE,
|
||||||
@ -670,10 +672,6 @@ from .frontendmasters import (
|
|||||||
FrontendMastersIE,
|
FrontendMastersIE,
|
||||||
FrontendMastersLessonIE,
|
FrontendMastersLessonIE,
|
||||||
)
|
)
|
||||||
from .frontro import (
|
|
||||||
TheChosenGroupIE,
|
|
||||||
TheChosenIE,
|
|
||||||
)
|
|
||||||
from .fujitv import FujiTVFODPlus7IE
|
from .fujitv import FujiTVFODPlus7IE
|
||||||
from .funk import FunkIE
|
from .funk import FunkIE
|
||||||
from .funker530 import Funker530IE
|
from .funker530 import Funker530IE
|
||||||
@ -1029,6 +1027,10 @@ from .livestream import (
|
|||||||
)
|
)
|
||||||
from .livestreamfails import LivestreamfailsIE
|
from .livestreamfails import LivestreamfailsIE
|
||||||
from .lnk import LnkIE
|
from .lnk import LnkIE
|
||||||
|
from .locipo import (
|
||||||
|
LocipoIE,
|
||||||
|
LocipoPlaylistIE,
|
||||||
|
)
|
||||||
from .loco import LocoIE
|
from .loco import LocoIE
|
||||||
from .loom import (
|
from .loom import (
|
||||||
LoomFolderIE,
|
LoomFolderIE,
|
||||||
@ -1071,6 +1073,7 @@ from .markiza import (
|
|||||||
)
|
)
|
||||||
from .massengeschmacktv import MassengeschmackTVIE
|
from .massengeschmacktv import MassengeschmackTVIE
|
||||||
from .masters import MastersIE
|
from .masters import MastersIE
|
||||||
|
from .matchitv import MatchiTVIE
|
||||||
from .matchtv import MatchTVIE
|
from .matchtv import MatchTVIE
|
||||||
from .mave import (
|
from .mave import (
|
||||||
MaveChannelIE,
|
MaveChannelIE,
|
||||||
@ -1785,7 +1788,10 @@ from .safari import (
|
|||||||
from .saitosan import SaitosanIE
|
from .saitosan import SaitosanIE
|
||||||
from .samplefocus import SampleFocusIE
|
from .samplefocus import SampleFocusIE
|
||||||
from .sapo import SapoIE
|
from .sapo import SapoIE
|
||||||
from .sauceplus import SaucePlusIE
|
from .sauceplus import (
|
||||||
|
SaucePlusChannelIE,
|
||||||
|
SaucePlusIE,
|
||||||
|
)
|
||||||
from .sbs import SBSIE
|
from .sbs import SBSIE
|
||||||
from .sbscokr import (
|
from .sbscokr import (
|
||||||
SBSCoKrAllvodProgramIE,
|
SBSCoKrAllvodProgramIE,
|
||||||
@ -2053,6 +2059,10 @@ from .tenplay import (
|
|||||||
from .testurl import TestURLIE
|
from .testurl import TestURLIE
|
||||||
from .tf1 import TF1IE
|
from .tf1 import TF1IE
|
||||||
from .tfo import TFOIE
|
from .tfo import TFOIE
|
||||||
|
from .thechosen import (
|
||||||
|
TheChosenGroupIE,
|
||||||
|
TheChosenIE,
|
||||||
|
)
|
||||||
from .theguardian import (
|
from .theguardian import (
|
||||||
TheGuardianPodcastIE,
|
TheGuardianPodcastIE,
|
||||||
TheGuardianPodcastPlaylistIE,
|
TheGuardianPodcastPlaylistIE,
|
||||||
@ -2174,11 +2184,15 @@ from .tvc import (
|
|||||||
TVCIE,
|
TVCIE,
|
||||||
TVCArticleIE,
|
TVCArticleIE,
|
||||||
)
|
)
|
||||||
from .tver import TVerIE
|
from .tver import (
|
||||||
|
TVerIE,
|
||||||
|
TVerOlympicIE,
|
||||||
|
)
|
||||||
from .tvigle import TvigleIE
|
from .tvigle import TvigleIE
|
||||||
from .tviplayer import TVIPlayerIE
|
from .tviplayer import TVIPlayerIE
|
||||||
from .tvn24 import TVN24IE
|
from .tvn24 import TVN24IE
|
||||||
from .tvnoe import TVNoeIE
|
from .tvnoe import TVNoeIE
|
||||||
|
from .tvo import TvoIE
|
||||||
from .tvopengr import (
|
from .tvopengr import (
|
||||||
TVOpenGrEmbedIE,
|
TVOpenGrEmbedIE,
|
||||||
TVOpenGrWatchIE,
|
TVOpenGrWatchIE,
|
||||||
@ -2343,6 +2357,7 @@ from .vimm import (
|
|||||||
)
|
)
|
||||||
from .viously import ViouslyIE
|
from .viously import ViouslyIE
|
||||||
from .viqeo import ViqeoIE
|
from .viqeo import ViqeoIE
|
||||||
|
from .visir import VisirIE
|
||||||
from .viu import (
|
from .viu import (
|
||||||
ViuIE,
|
ViuIE,
|
||||||
ViuOTTIE,
|
ViuOTTIE,
|
||||||
@ -2541,7 +2556,6 @@ from .youtube import (
|
|||||||
YoutubeNotificationsIE,
|
YoutubeNotificationsIE,
|
||||||
YoutubePlaylistIE,
|
YoutubePlaylistIE,
|
||||||
YoutubeRecommendedIE,
|
YoutubeRecommendedIE,
|
||||||
YoutubeSearchDateIE,
|
|
||||||
YoutubeSearchIE,
|
YoutubeSearchIE,
|
||||||
YoutubeSearchURLIE,
|
YoutubeSearchURLIE,
|
||||||
YoutubeShortsAudioPivotIE,
|
YoutubeShortsAudioPivotIE,
|
||||||
|
|||||||
@ -5,10 +5,12 @@ from ..utils import (
|
|||||||
ExtractorError,
|
ExtractorError,
|
||||||
GeoRestrictedError,
|
GeoRestrictedError,
|
||||||
int_or_none,
|
int_or_none,
|
||||||
|
make_archive_id,
|
||||||
remove_start,
|
remove_start,
|
||||||
traverse_obj,
|
|
||||||
update_url_query,
|
update_url_query,
|
||||||
|
url_or_none,
|
||||||
)
|
)
|
||||||
|
from ..utils.traversal import traverse_obj
|
||||||
|
|
||||||
|
|
||||||
class AENetworksBaseIE(ThePlatformIE): # XXX: Do not subclass from concrete IE
|
class AENetworksBaseIE(ThePlatformIE): # XXX: Do not subclass from concrete IE
|
||||||
@ -29,6 +31,19 @@ class AENetworksBaseIE(ThePlatformIE): # XXX: Do not subclass from concrete IE
|
|||||||
'historyvault.com': (None, 'historyvault', None),
|
'historyvault.com': (None, 'historyvault', None),
|
||||||
'biography.com': (None, 'biography', None),
|
'biography.com': (None, 'biography', None),
|
||||||
}
|
}
|
||||||
|
_GRAPHQL_QUERY = '''
|
||||||
|
query getUserVideo($videoId: ID!) {
|
||||||
|
video(id: $videoId) {
|
||||||
|
title
|
||||||
|
publicUrl
|
||||||
|
programId
|
||||||
|
tvSeasonNumber
|
||||||
|
tvSeasonEpisodeNumber
|
||||||
|
series {
|
||||||
|
title
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}'''
|
||||||
|
|
||||||
def _extract_aen_smil(self, smil_url, video_id, auth=None):
|
def _extract_aen_smil(self, smil_url, video_id, auth=None):
|
||||||
query = {
|
query = {
|
||||||
@ -73,19 +88,39 @@ class AENetworksBaseIE(ThePlatformIE): # XXX: Do not subclass from concrete IE
|
|||||||
|
|
||||||
def _extract_aetn_info(self, domain, filter_key, filter_value, url):
|
def _extract_aetn_info(self, domain, filter_key, filter_value, url):
|
||||||
requestor_id, brand, software_statement = self._DOMAIN_MAP[domain]
|
requestor_id, brand, software_statement = self._DOMAIN_MAP[domain]
|
||||||
|
if filter_key == 'canonical':
|
||||||
|
webpage = self._download_webpage(url, filter_value)
|
||||||
|
graphql_video_id = self._search_regex(
|
||||||
|
r'<meta\b[^>]+\bcontent="[^"]*\btpid/(\d+)"', webpage, 'id',
|
||||||
|
default=None) or self._html_search_meta('videoId', webpage, 'GraphQL video ID', fatal=True)
|
||||||
|
else:
|
||||||
|
graphql_video_id = filter_value
|
||||||
|
|
||||||
result = self._download_json(
|
result = self._download_json(
|
||||||
f'https://feeds.video.aetnd.com/api/v2/{brand}/videos',
|
'https://yoga.appsvcs.aetnd.com/', graphql_video_id,
|
||||||
filter_value, query={f'filter[{filter_key}]': filter_value})
|
query={
|
||||||
result = traverse_obj(
|
'brand': brand,
|
||||||
result, ('results',
|
'mode': 'live',
|
||||||
lambda k, v: k == 0 and v[filter_key] == filter_value),
|
'platform': 'web',
|
||||||
get_all=False)
|
},
|
||||||
if not result:
|
data=json.dumps({
|
||||||
|
'operationName': 'getUserVideo',
|
||||||
|
'variables': {
|
||||||
|
'videoId': graphql_video_id,
|
||||||
|
},
|
||||||
|
'query': self._GRAPHQL_QUERY,
|
||||||
|
}).encode(),
|
||||||
|
headers={
|
||||||
|
'Content-Type': 'application/json',
|
||||||
|
})
|
||||||
|
|
||||||
|
result = traverse_obj(result, ('data', 'video', {dict}))
|
||||||
|
media_url = traverse_obj(result, ('publicUrl', {url_or_none}))
|
||||||
|
if not media_url:
|
||||||
raise ExtractorError('Show not found in A&E feed (too new?)', expected=True,
|
raise ExtractorError('Show not found in A&E feed (too new?)', expected=True,
|
||||||
video_id=remove_start(filter_value, '/'))
|
video_id=remove_start(filter_value, '/'))
|
||||||
title = result['title']
|
title = result['title']
|
||||||
video_id = result['id']
|
video_id = result['programId']
|
||||||
media_url = result['publicUrl']
|
|
||||||
theplatform_metadata = self._download_theplatform_metadata(self._search_regex(
|
theplatform_metadata = self._download_theplatform_metadata(self._search_regex(
|
||||||
r'https?://link\.theplatform\.com/s/([^?]+)', media_url, 'theplatform_path'), video_id)
|
r'https?://link\.theplatform\.com/s/([^?]+)', media_url, 'theplatform_path'), video_id)
|
||||||
info = self._parse_theplatform_metadata(theplatform_metadata)
|
info = self._parse_theplatform_metadata(theplatform_metadata)
|
||||||
@ -100,9 +135,13 @@ class AENetworksBaseIE(ThePlatformIE): # XXX: Do not subclass from concrete IE
|
|||||||
info.update(self._extract_aen_smil(media_url, video_id, auth))
|
info.update(self._extract_aen_smil(media_url, video_id, auth))
|
||||||
info.update({
|
info.update({
|
||||||
'title': title,
|
'title': title,
|
||||||
'series': result.get('seriesName'),
|
'display_id': graphql_video_id,
|
||||||
'season_number': int_or_none(result.get('tvSeasonNumber')),
|
'_old_archive_ids': [make_archive_id(self, graphql_video_id)],
|
||||||
'episode_number': int_or_none(result.get('tvSeasonEpisodeNumber')),
|
**traverse_obj(result, {
|
||||||
|
'series': ('series', 'title', {str}),
|
||||||
|
'season_number': ('tvSeasonNumber', {int_or_none}),
|
||||||
|
'episode_number': ('tvSeasonEpisodeNumber', {int_or_none}),
|
||||||
|
}),
|
||||||
})
|
})
|
||||||
return info
|
return info
|
||||||
|
|
||||||
@ -116,7 +155,7 @@ class AENetworksIE(AENetworksBaseIE):
|
|||||||
(?:shows/[^/?#]+/)?videos/[^/?#]+
|
(?:shows/[^/?#]+/)?videos/[^/?#]+
|
||||||
)'''
|
)'''
|
||||||
_TESTS = [{
|
_TESTS = [{
|
||||||
'url': 'http://www.history.com/shows/mountain-men/season-1/episode-1',
|
'url': 'https://www.history.com/shows/mountain-men/season-1/episode-1',
|
||||||
'info_dict': {
|
'info_dict': {
|
||||||
'id': '22253814',
|
'id': '22253814',
|
||||||
'ext': 'mp4',
|
'ext': 'mp4',
|
||||||
@ -139,11 +178,11 @@ class AENetworksIE(AENetworksBaseIE):
|
|||||||
},
|
},
|
||||||
'params': {'skip_download': 'm3u8'},
|
'params': {'skip_download': 'm3u8'},
|
||||||
'add_ie': ['ThePlatform'],
|
'add_ie': ['ThePlatform'],
|
||||||
'skip': 'Geo-restricted - This content is not available in your location.',
|
'skip': 'This content requires a valid, unexpired auth token',
|
||||||
}, {
|
}, {
|
||||||
'url': 'http://www.aetv.com/shows/duck-dynasty/season-9/episode-1',
|
'url': 'https://www.aetv.com/shows/duck-dynasty/season-9/episode-1',
|
||||||
'info_dict': {
|
'info_dict': {
|
||||||
'id': '600587331957',
|
'id': '147486',
|
||||||
'ext': 'mp4',
|
'ext': 'mp4',
|
||||||
'title': 'Inlawful Entry',
|
'title': 'Inlawful Entry',
|
||||||
'description': 'md5:57c12115a2b384d883fe64ca50529e08',
|
'description': 'md5:57c12115a2b384d883fe64ca50529e08',
|
||||||
@ -160,6 +199,8 @@ class AENetworksIE(AENetworksBaseIE):
|
|||||||
'season_number': 9,
|
'season_number': 9,
|
||||||
'series': 'Duck Dynasty',
|
'series': 'Duck Dynasty',
|
||||||
'age_limit': 0,
|
'age_limit': 0,
|
||||||
|
'display_id': '600587331957',
|
||||||
|
'_old_archive_ids': ['aenetworks 600587331957'],
|
||||||
},
|
},
|
||||||
'params': {'skip_download': 'm3u8'},
|
'params': {'skip_download': 'm3u8'},
|
||||||
'add_ie': ['ThePlatform'],
|
'add_ie': ['ThePlatform'],
|
||||||
@ -186,6 +227,7 @@ class AENetworksIE(AENetworksBaseIE):
|
|||||||
},
|
},
|
||||||
'params': {'skip_download': 'm3u8'},
|
'params': {'skip_download': 'm3u8'},
|
||||||
'add_ie': ['ThePlatform'],
|
'add_ie': ['ThePlatform'],
|
||||||
|
'skip': '404 Not Found',
|
||||||
}, {
|
}, {
|
||||||
'url': 'https://www.aetv.com/specials/hunting-jonbenets-killer-the-untold-story',
|
'url': 'https://www.aetv.com/specials/hunting-jonbenets-killer-the-untold-story',
|
||||||
'info_dict': {
|
'info_dict': {
|
||||||
@ -209,6 +251,7 @@ class AENetworksIE(AENetworksBaseIE):
|
|||||||
},
|
},
|
||||||
'params': {'skip_download': 'm3u8'},
|
'params': {'skip_download': 'm3u8'},
|
||||||
'add_ie': ['ThePlatform'],
|
'add_ie': ['ThePlatform'],
|
||||||
|
'skip': 'This content requires a valid, unexpired auth token',
|
||||||
}, {
|
}, {
|
||||||
'url': 'http://www.fyi.tv/shows/tiny-house-nation/season-1/episode-8',
|
'url': 'http://www.fyi.tv/shows/tiny-house-nation/season-1/episode-8',
|
||||||
'only_matching': True,
|
'only_matching': True,
|
||||||
@ -259,7 +302,7 @@ class AENetworksListBaseIE(AENetworksBaseIE):
|
|||||||
domain, slug = self._match_valid_url(url).groups()
|
domain, slug = self._match_valid_url(url).groups()
|
||||||
_, brand, _ = self._DOMAIN_MAP[domain]
|
_, brand, _ = self._DOMAIN_MAP[domain]
|
||||||
playlist = self._call_api(self._RESOURCE, slug, brand, self._FIELDS)
|
playlist = self._call_api(self._RESOURCE, slug, brand, self._FIELDS)
|
||||||
base_url = f'http://watch.{domain}'
|
base_url = f'https://watch.{domain}'
|
||||||
|
|
||||||
entries = []
|
entries = []
|
||||||
for item in (playlist.get(self._ITEMS_KEY) or []):
|
for item in (playlist.get(self._ITEMS_KEY) or []):
|
||||||
|
|||||||
@ -11,18 +11,18 @@ from ..utils.traversal import traverse_obj
|
|||||||
class ApplePodcastsIE(InfoExtractor):
|
class ApplePodcastsIE(InfoExtractor):
|
||||||
_VALID_URL = r'https?://podcasts\.apple\.com/(?:[^/]+/)?podcast(?:/[^/]+){1,2}.*?\bi=(?P<id>\d+)'
|
_VALID_URL = r'https?://podcasts\.apple\.com/(?:[^/]+/)?podcast(?:/[^/]+){1,2}.*?\bi=(?P<id>\d+)'
|
||||||
_TESTS = [{
|
_TESTS = [{
|
||||||
'url': 'https://podcasts.apple.com/us/podcast/ferreck-dawn-to-the-break-of-dawn-117/id1625658232?i=1000665010654',
|
'url': 'https://podcasts.apple.com/us/podcast/urbana-podcast-724-by-david-penn/id1531349107?i=1000748574256',
|
||||||
'md5': '82cc219b8cc1dcf8bfc5a5e99b23b172',
|
'md5': 'f8a6f92735d0cfbd5e6a7294151e28d8',
|
||||||
'info_dict': {
|
'info_dict': {
|
||||||
'id': '1000665010654',
|
'id': '1000748574256',
|
||||||
'ext': 'mp3',
|
'ext': 'm4a',
|
||||||
'title': 'Ferreck Dawn - To The Break of Dawn 117',
|
'title': 'URBANA PODCAST 724 BY DAVID PENN',
|
||||||
'episode': 'Ferreck Dawn - To The Break of Dawn 117',
|
'episode': 'URBANA PODCAST 724 BY DAVID PENN',
|
||||||
'description': 'md5:8c4f5c2c30af17ed6a98b0b9daf15b76',
|
'description': 'md5:fec77bacba32db8c9b3dda5486ed085f',
|
||||||
'upload_date': '20240812',
|
'upload_date': '20260206',
|
||||||
'timestamp': 1723449600,
|
'timestamp': 1770400801,
|
||||||
'duration': 3596,
|
'duration': 3602,
|
||||||
'series': 'Ferreck Dawn - To The Break of Dawn',
|
'series': 'Urbana Radio Show',
|
||||||
'thumbnail': 're:.+[.](png|jpe?g|webp)',
|
'thumbnail': 're:.+[.](png|jpe?g|webp)',
|
||||||
},
|
},
|
||||||
}, {
|
}, {
|
||||||
@ -57,22 +57,22 @@ class ApplePodcastsIE(InfoExtractor):
|
|||||||
webpage = self._download_webpage(url, episode_id)
|
webpage = self._download_webpage(url, episode_id)
|
||||||
server_data = self._search_json(
|
server_data = self._search_json(
|
||||||
r'<script [^>]*\bid=["\']serialized-server-data["\'][^>]*>', webpage,
|
r'<script [^>]*\bid=["\']serialized-server-data["\'][^>]*>', webpage,
|
||||||
'server data', episode_id, contains_pattern=r'\[{(?s:.+)}\]')[0]['data']
|
'server data', episode_id)['data'][0]['data']
|
||||||
model_data = traverse_obj(server_data, (
|
model_data = traverse_obj(server_data, (
|
||||||
'headerButtonItems', lambda _, v: v['$kind'] == 'share' and v['modelType'] == 'EpisodeLockup',
|
'headerButtonItems', lambda _, v: v['$kind'] == 'share' and v['modelType'] == 'EpisodeLockup',
|
||||||
'model', {dict}, any))
|
'model', {dict}, any))
|
||||||
|
|
||||||
return {
|
return {
|
||||||
'id': episode_id,
|
'id': episode_id,
|
||||||
**self._json_ld(
|
|
||||||
traverse_obj(server_data, ('seoData', 'schemaContent', {dict}))
|
|
||||||
or self._yield_json_ld(webpage, episode_id, fatal=False), episode_id, fatal=False),
|
|
||||||
**traverse_obj(model_data, {
|
**traverse_obj(model_data, {
|
||||||
'title': ('title', {str}),
|
'title': ('title', {str}),
|
||||||
'description': ('summary', {clean_html}),
|
'description': ('summary', {clean_html}),
|
||||||
'url': ('playAction', 'episodeOffer', 'streamUrl', {clean_podcast_url}),
|
'url': ('playAction', 'episodeOffer', 'streamUrl', {clean_podcast_url}),
|
||||||
'timestamp': ('releaseDate', {parse_iso8601}),
|
'timestamp': ('releaseDate', {parse_iso8601}),
|
||||||
'duration': ('duration', {int_or_none}),
|
'duration': ('duration', {int_or_none}),
|
||||||
|
'episode': ('title', {str}),
|
||||||
|
'episode_number': ('episodeNumber', {int_or_none}),
|
||||||
|
'series': ('showTitle', {str}),
|
||||||
}),
|
}),
|
||||||
'thumbnail': self._og_search_thumbnail(webpage),
|
'thumbnail': self._og_search_thumbnail(webpage),
|
||||||
'vcodec': 'none',
|
'vcodec': 'none',
|
||||||
|
|||||||
@ -439,31 +439,27 @@ class BandcampWeeklyIE(BandcampIE): # XXX: Do not subclass from concrete IE
|
|||||||
|
|
||||||
def _real_extract(self, url):
|
def _real_extract(self, url):
|
||||||
show_id = self._match_id(url)
|
show_id = self._match_id(url)
|
||||||
audio_data = self._download_json(
|
show_data = self._download_json(
|
||||||
'https://bandcamp.com/api/bcradio_api/1/get_show',
|
'https://bandcamp.com/api/bcradio_api/1/get_show',
|
||||||
show_id, 'Downloading radio show JSON',
|
show_id, 'Downloading radio show JSON',
|
||||||
data=json.dumps({'id': show_id}).encode(),
|
data=json.dumps({'id': show_id}).encode(),
|
||||||
headers={'Content-Type': 'application/json'})['radioShowAudio']
|
headers={'Content-Type': 'application/json'})
|
||||||
|
audio_data = show_data['compiledTrack']
|
||||||
|
|
||||||
stream_url = audio_data['streamUrl']
|
stream_url = audio_data['streamUrl']
|
||||||
format_id = traverse_obj(stream_url, ({parse_qs}, 'enc', -1))
|
format_id = traverse_obj(stream_url, ({parse_qs}, 'enc', -1))
|
||||||
encoding, _, bitrate_str = (format_id or '').partition('-')
|
encoding, _, bitrate_str = (format_id or '').partition('-')
|
||||||
|
|
||||||
webpage = self._download_webpage(url, show_id, fatal=False)
|
series_title = show_data.get('title')
|
||||||
metadata = traverse_obj(
|
release_timestamp = unified_timestamp(show_data.get('date'))
|
||||||
self._extract_data_attr(webpage, show_id, 'blob', fatal=False),
|
|
||||||
('appData', 'shows', lambda _, v: str(v['showId']) == show_id, any)) or {}
|
|
||||||
|
|
||||||
series_title = audio_data.get('title') or metadata.get('title')
|
|
||||||
release_timestamp = unified_timestamp(audio_data.get('date')) or unified_timestamp(metadata.get('date'))
|
|
||||||
|
|
||||||
return {
|
return {
|
||||||
'id': show_id,
|
'id': show_id,
|
||||||
'episode_id': show_id,
|
'episode_id': show_id,
|
||||||
'title': join_nonempty(series_title, strftime_or_none(release_timestamp, '%Y-%m-%d'), delim=', '),
|
'title': join_nonempty(series_title, strftime_or_none(release_timestamp, '%Y-%m-%d'), delim=', '),
|
||||||
'series': series_title,
|
'series': series_title,
|
||||||
'thumbnail': format_field(metadata, 'imageId', 'https://f4.bcbits.com/img/%s_0.jpg', default=None),
|
'thumbnail': format_field(show_data, 'imageId', 'https://f4.bcbits.com/img/%s_0.jpg', default=None),
|
||||||
'description': metadata.get('desc') or metadata.get('short_desc'),
|
'description': show_data.get('description'),
|
||||||
'duration': float_or_none(audio_data.get('duration')),
|
'duration': float_or_none(audio_data.get('duration')),
|
||||||
'release_timestamp': release_timestamp,
|
'release_timestamp': release_timestamp,
|
||||||
'formats': [{
|
'formats': [{
|
||||||
|
|||||||
@ -124,7 +124,7 @@ class BilibiliBaseIE(InfoExtractor):
|
|||||||
**traverse_obj(play_info, {
|
**traverse_obj(play_info, {
|
||||||
'quality': ('quality', {int_or_none}),
|
'quality': ('quality', {int_or_none}),
|
||||||
'format_id': ('quality', {str_or_none}),
|
'format_id': ('quality', {str_or_none}),
|
||||||
'format_note': ('quality', {lambda x: format_names.get(x)}),
|
'format_note': ('quality', {format_names.get}),
|
||||||
'duration': ('timelength', {float_or_none(scale=1000)}),
|
'duration': ('timelength', {float_or_none(scale=1000)}),
|
||||||
}),
|
}),
|
||||||
**parse_resolution(format_names.get(play_info.get('quality'))),
|
**parse_resolution(format_names.get(play_info.get('quality'))),
|
||||||
|
|||||||
@ -10,6 +10,7 @@ from ..utils import (
|
|||||||
ExtractorError,
|
ExtractorError,
|
||||||
float_or_none,
|
float_or_none,
|
||||||
int_or_none,
|
int_or_none,
|
||||||
|
join_nonempty,
|
||||||
js_to_json,
|
js_to_json,
|
||||||
jwt_decode_hs256,
|
jwt_decode_hs256,
|
||||||
mimetype2ext,
|
mimetype2ext,
|
||||||
@ -25,6 +26,7 @@ from ..utils import (
|
|||||||
url_basename,
|
url_basename,
|
||||||
url_or_none,
|
url_or_none,
|
||||||
urlencode_postdata,
|
urlencode_postdata,
|
||||||
|
urljoin,
|
||||||
)
|
)
|
||||||
from ..utils.traversal import require, traverse_obj, trim_str
|
from ..utils.traversal import require, traverse_obj, trim_str
|
||||||
|
|
||||||
@ -540,6 +542,32 @@ class CBCGemBaseIE(InfoExtractor):
|
|||||||
f'https://services.radio-canada.ca/ott/catalog/v2/gem/show/{item_id}',
|
f'https://services.radio-canada.ca/ott/catalog/v2/gem/show/{item_id}',
|
||||||
display_id or item_id, query={'device': 'web'})
|
display_id or item_id, query={'device': 'web'})
|
||||||
|
|
||||||
|
def _call_media_api(self, media_id, app_code='gem', display_id=None, headers=None):
|
||||||
|
media_data = self._download_json(
|
||||||
|
'https://services.radio-canada.ca/media/validation/v2/',
|
||||||
|
display_id or media_id, headers=headers, query={
|
||||||
|
'appCode': app_code,
|
||||||
|
'connectionType': 'hd',
|
||||||
|
'deviceType': 'ipad',
|
||||||
|
'multibitrate': 'true',
|
||||||
|
'output': 'json',
|
||||||
|
'tech': 'hls',
|
||||||
|
'manifestVersion': '2',
|
||||||
|
'manifestType': 'desktop',
|
||||||
|
'idMedia': media_id,
|
||||||
|
})
|
||||||
|
|
||||||
|
error_code = traverse_obj(media_data, ('errorCode', {int}))
|
||||||
|
if error_code == 1:
|
||||||
|
self.raise_geo_restricted(countries=self._GEO_COUNTRIES)
|
||||||
|
if error_code == 35:
|
||||||
|
self.raise_login_required(method='password')
|
||||||
|
if error_code != 0:
|
||||||
|
error_message = join_nonempty(error_code, media_data.get('message'), delim=' - ')
|
||||||
|
raise ExtractorError(f'{self.IE_NAME} said: {error_message}')
|
||||||
|
|
||||||
|
return media_data
|
||||||
|
|
||||||
def _extract_item_info(self, item_info):
|
def _extract_item_info(self, item_info):
|
||||||
episode_number = None
|
episode_number = None
|
||||||
title = traverse_obj(item_info, ('title', {str}))
|
title = traverse_obj(item_info, ('title', {str}))
|
||||||
@ -567,7 +595,7 @@ class CBCGemBaseIE(InfoExtractor):
|
|||||||
|
|
||||||
class CBCGemIE(CBCGemBaseIE):
|
class CBCGemIE(CBCGemBaseIE):
|
||||||
IE_NAME = 'gem.cbc.ca'
|
IE_NAME = 'gem.cbc.ca'
|
||||||
_VALID_URL = r'https?://gem\.cbc\.ca/(?:media/)?(?P<id>[0-9a-z-]+/s(?P<season>[0-9]+)[a-z][0-9]+)'
|
_VALID_URL = r'https?://gem\.cbc\.ca/(?:media/)?(?P<id>[0-9a-z-]+/s(?P<season>[0-9]+)[a-z][0-9]{2,4})/?(?:[?#]|$)'
|
||||||
_TESTS = [{
|
_TESTS = [{
|
||||||
# This is a normal, public, TV show video
|
# This is a normal, public, TV show video
|
||||||
'url': 'https://gem.cbc.ca/media/schitts-creek/s06e01',
|
'url': 'https://gem.cbc.ca/media/schitts-creek/s06e01',
|
||||||
@ -709,29 +737,10 @@ class CBCGemIE(CBCGemBaseIE):
|
|||||||
if claims_token := self._fetch_claims_token():
|
if claims_token := self._fetch_claims_token():
|
||||||
headers['x-claims-token'] = claims_token
|
headers['x-claims-token'] = claims_token
|
||||||
|
|
||||||
m3u8_info = self._download_json(
|
m3u8_url = self._call_media_api(
|
||||||
'https://services.radio-canada.ca/media/validation/v2/',
|
item_info['idMedia'], display_id=video_id, headers=headers)['url']
|
||||||
video_id, headers=headers, query={
|
|
||||||
'appCode': 'gem',
|
|
||||||
'connectionType': 'hd',
|
|
||||||
'deviceType': 'ipad',
|
|
||||||
'multibitrate': 'true',
|
|
||||||
'output': 'json',
|
|
||||||
'tech': 'hls',
|
|
||||||
'manifestVersion': '2',
|
|
||||||
'manifestType': 'desktop',
|
|
||||||
'idMedia': item_info['idMedia'],
|
|
||||||
})
|
|
||||||
|
|
||||||
if m3u8_info.get('errorCode') == 1:
|
|
||||||
self.raise_geo_restricted(countries=['CA'])
|
|
||||||
elif m3u8_info.get('errorCode') == 35:
|
|
||||||
self.raise_login_required(method='password')
|
|
||||||
elif m3u8_info.get('errorCode') != 0:
|
|
||||||
raise ExtractorError(f'{self.IE_NAME} said: {m3u8_info.get("errorCode")} - {m3u8_info.get("message")}')
|
|
||||||
|
|
||||||
formats = self._extract_m3u8_formats(
|
formats = self._extract_m3u8_formats(
|
||||||
m3u8_info['url'], video_id, 'mp4', m3u8_id='hls', query={'manifestType': ''})
|
m3u8_url, video_id, 'mp4', m3u8_id='hls', query={'manifestType': ''})
|
||||||
self._remove_duplicate_formats(formats)
|
self._remove_duplicate_formats(formats)
|
||||||
|
|
||||||
for fmt in formats:
|
for fmt in formats:
|
||||||
@ -801,7 +810,128 @@ class CBCGemPlaylistIE(CBCGemBaseIE):
|
|||||||
}), series=traverse_obj(show_info, ('title', {str})))
|
}), series=traverse_obj(show_info, ('title', {str})))
|
||||||
|
|
||||||
|
|
||||||
class CBCGemLiveIE(InfoExtractor):
|
class CBCGemContentIE(CBCGemBaseIE):
|
||||||
|
IE_NAME = 'gem.cbc.ca:content'
|
||||||
|
IE_DESC = False # Do not list
|
||||||
|
_VALID_URL = r'https?://gem\.cbc\.ca/(?P<id>[0-9a-z-]+)/?(?:[?#]|$)'
|
||||||
|
_TESTS = [{
|
||||||
|
# Series URL; content_type == 'Season'
|
||||||
|
'url': 'https://gem.cbc.ca/the-tunnel',
|
||||||
|
'playlist_count': 3,
|
||||||
|
'info_dict': {
|
||||||
|
'id': 'the-tunnel',
|
||||||
|
},
|
||||||
|
}, {
|
||||||
|
# Miniseries URL; content_type == 'Parts'
|
||||||
|
'url': 'https://gem.cbc.ca/summit-72',
|
||||||
|
'playlist_count': 1,
|
||||||
|
'info_dict': {
|
||||||
|
'id': 'summit-72',
|
||||||
|
},
|
||||||
|
}, {
|
||||||
|
# Olympics URL; content_type == 'Standalone'
|
||||||
|
'url': 'https://gem.cbc.ca/ski-jumping-nh-individual-womens-final-30086',
|
||||||
|
'info_dict': {
|
||||||
|
'id': 'ski-jumping-nh-individual-womens-final-30086',
|
||||||
|
'ext': 'mp4',
|
||||||
|
'title': 'Ski Jumping: NH Individual (Women\'s) - Final',
|
||||||
|
'description': 'md5:411c07c8a9a4a36344530b0c726bf8ab',
|
||||||
|
'duration': 12793,
|
||||||
|
'thumbnail': r're:https://[^.]+\.cbc\.ca/.+\.jpg',
|
||||||
|
'release_timestamp': 1770482100,
|
||||||
|
'release_date': '20260207',
|
||||||
|
'live_status': 'was_live',
|
||||||
|
},
|
||||||
|
}, {
|
||||||
|
# Movie URL; content_type == 'Standalone'; requires authentication
|
||||||
|
'url': 'https://gem.cbc.ca/copa-71',
|
||||||
|
'only_matching': True,
|
||||||
|
}]
|
||||||
|
|
||||||
|
def _real_extract(self, url):
|
||||||
|
display_id = self._match_id(url)
|
||||||
|
webpage = self._download_webpage(url, display_id)
|
||||||
|
data = self._search_nextjs_data(webpage, display_id)['props']['pageProps']['data']
|
||||||
|
content_type = data['contentType']
|
||||||
|
self.write_debug(f'Routing for content type "{content_type}"')
|
||||||
|
|
||||||
|
if content_type == 'Standalone':
|
||||||
|
new_url = traverse_obj(data, (
|
||||||
|
'header', 'cta', 'media', 'url', {urljoin('https://gem.cbc.ca/')}))
|
||||||
|
if CBCGemOlympicsIE.suitable(new_url):
|
||||||
|
return self.url_result(new_url, CBCGemOlympicsIE)
|
||||||
|
|
||||||
|
# Manually construct non-Olympics standalone URLs to avoid returning trailer URLs
|
||||||
|
return self.url_result(f'https://gem.cbc.ca/{display_id}/s01e01', CBCGemIE)
|
||||||
|
|
||||||
|
# Handle series URLs (content_type == 'Season') and miniseries URLs (content_type == 'Parts')
|
||||||
|
def entries():
|
||||||
|
for playlist_url in traverse_obj(data, (
|
||||||
|
'content', ..., 'lineups', ..., 'url', {urljoin('https://gem.cbc.ca/')},
|
||||||
|
{lambda x: x if CBCGemPlaylistIE.suitable(x) else None},
|
||||||
|
)):
|
||||||
|
yield self.url_result(playlist_url, CBCGemPlaylistIE)
|
||||||
|
|
||||||
|
return self.playlist_result(entries(), display_id)
|
||||||
|
|
||||||
|
|
||||||
|
class CBCGemOlympicsIE(CBCGemBaseIE):
|
||||||
|
IE_NAME = 'gem.cbc.ca:olympics'
|
||||||
|
_VALID_URL = r'https?://gem\.cbc\.ca/(?P<id>(?:[0-9a-z]+-)+[0-9]{5,})/s01e(?P<media_id>[0-9]{5,})'
|
||||||
|
_TESTS = [{
|
||||||
|
'url': 'https://gem.cbc.ca/ski-jumping-nh-individual-womens-final-30086/s01e30086',
|
||||||
|
'info_dict': {
|
||||||
|
'id': 'ski-jumping-nh-individual-womens-final-30086',
|
||||||
|
'ext': 'mp4',
|
||||||
|
'title': 'Ski Jumping: NH Individual (Women\'s) - Final',
|
||||||
|
'description': 'md5:411c07c8a9a4a36344530b0c726bf8ab',
|
||||||
|
'duration': 12793,
|
||||||
|
'thumbnail': r're:https://[^.]+\.cbc\.ca/.+\.jpg',
|
||||||
|
'release_timestamp': 1770482100,
|
||||||
|
'release_date': '20260207',
|
||||||
|
'live_status': 'was_live',
|
||||||
|
},
|
||||||
|
}]
|
||||||
|
|
||||||
|
def _real_extract(self, url):
|
||||||
|
video_id, media_id = self._match_valid_url(url).group('id', 'media_id')
|
||||||
|
|
||||||
|
video_info = self._call_show_api(video_id)
|
||||||
|
item_info = traverse_obj(video_info, (
|
||||||
|
'content', ..., 'lineups', ..., 'items',
|
||||||
|
lambda _, v: v['formattedIdMedia'] == media_id, any, {require('item info')}))
|
||||||
|
|
||||||
|
live_status = {
|
||||||
|
'LiveEvent': 'is_live',
|
||||||
|
'Replay': 'was_live',
|
||||||
|
}.get(item_info.get('type'))
|
||||||
|
|
||||||
|
release_timestamp = traverse_obj(item_info, (
|
||||||
|
'metadata', (('live', 'startDate'), ('replay', 'airDate')), {parse_iso8601}, any))
|
||||||
|
|
||||||
|
if live_status == 'is_live' and release_timestamp and release_timestamp > time.time():
|
||||||
|
formats = []
|
||||||
|
live_status = 'is_upcoming'
|
||||||
|
self.raise_no_formats('This livestream has not yet started', expected=True)
|
||||||
|
else:
|
||||||
|
m3u8_url = self._call_media_api(media_id, 'medianetlive', video_id)['url']
|
||||||
|
formats = self._extract_m3u8_formats(m3u8_url, video_id, 'mp4', live=live_status == 'is_live')
|
||||||
|
|
||||||
|
return {
|
||||||
|
'id': video_id,
|
||||||
|
'formats': formats,
|
||||||
|
'live_status': live_status,
|
||||||
|
'release_timestamp': release_timestamp,
|
||||||
|
**traverse_obj(item_info, {
|
||||||
|
'title': ('title', {str}),
|
||||||
|
'description': ('description', {str}),
|
||||||
|
'thumbnail': ('images', 'card', 'url', {url_or_none}),
|
||||||
|
'duration': ('metadata', 'replay', 'duration', {int_or_none}),
|
||||||
|
}),
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
class CBCGemLiveIE(CBCGemBaseIE):
|
||||||
IE_NAME = 'gem.cbc.ca:live'
|
IE_NAME = 'gem.cbc.ca:live'
|
||||||
_VALID_URL = r'https?://gem\.cbc\.ca/live(?:-event)?/(?P<id>\d+)'
|
_VALID_URL = r'https?://gem\.cbc\.ca/live(?:-event)?/(?P<id>\d+)'
|
||||||
_TESTS = [
|
_TESTS = [
|
||||||
@ -871,7 +1001,6 @@ class CBCGemLiveIE(InfoExtractor):
|
|||||||
'only_matching': True,
|
'only_matching': True,
|
||||||
},
|
},
|
||||||
]
|
]
|
||||||
_GEO_COUNTRIES = ['CA']
|
|
||||||
|
|
||||||
def _real_extract(self, url):
|
def _real_extract(self, url):
|
||||||
video_id = self._match_id(url)
|
video_id = self._match_id(url)
|
||||||
@ -900,19 +1029,8 @@ class CBCGemLiveIE(InfoExtractor):
|
|||||||
live_status = 'is_upcoming'
|
live_status = 'is_upcoming'
|
||||||
self.raise_no_formats('This livestream has not yet started', expected=True)
|
self.raise_no_formats('This livestream has not yet started', expected=True)
|
||||||
else:
|
else:
|
||||||
stream_data = self._download_json(
|
m3u8_url = self._call_media_api(video_stream_id, 'medianetlive', video_id)['url']
|
||||||
'https://services.radio-canada.ca/media/validation/v2/', video_id, query={
|
formats = self._extract_m3u8_formats(m3u8_url, video_id, 'mp4', live=live_status == 'is_live')
|
||||||
'appCode': 'medianetlive',
|
|
||||||
'connectionType': 'hd',
|
|
||||||
'deviceType': 'ipad',
|
|
||||||
'idMedia': video_stream_id,
|
|
||||||
'multibitrate': 'true',
|
|
||||||
'output': 'json',
|
|
||||||
'tech': 'hls',
|
|
||||||
'manifestType': 'desktop',
|
|
||||||
})
|
|
||||||
formats = self._extract_m3u8_formats(
|
|
||||||
stream_data['url'], video_id, 'mp4', live=live_status == 'is_live')
|
|
||||||
|
|
||||||
return {
|
return {
|
||||||
'id': video_id,
|
'id': video_id,
|
||||||
|
|||||||
@ -661,9 +661,11 @@ class InfoExtractor:
|
|||||||
if not self._ready:
|
if not self._ready:
|
||||||
self._initialize_pre_login()
|
self._initialize_pre_login()
|
||||||
if self.supports_login():
|
if self.supports_login():
|
||||||
username, password = self._get_login_info()
|
# try login only if it would actually do anything
|
||||||
if username:
|
if type(self)._perform_login is not InfoExtractor._perform_login:
|
||||||
self._perform_login(username, password)
|
username, password = self._get_login_info()
|
||||||
|
if username:
|
||||||
|
self._perform_login(username, password)
|
||||||
elif self.get_param('username') and False not in (self.IE_DESC, self._NETRC_MACHINE):
|
elif self.get_param('username') and False not in (self.IE_DESC, self._NETRC_MACHINE):
|
||||||
self.report_warning(f'Login with password is not supported for this website. {self._login_hint("cookies")}')
|
self.report_warning(f'Login with password is not supported for this website. {self._login_hint("cookies")}')
|
||||||
self._real_initialize()
|
self._real_initialize()
|
||||||
@ -1385,6 +1387,11 @@ class InfoExtractor:
|
|||||||
|
|
||||||
def _get_netrc_login_info(self, netrc_machine=None):
|
def _get_netrc_login_info(self, netrc_machine=None):
|
||||||
netrc_machine = netrc_machine or self._NETRC_MACHINE
|
netrc_machine = netrc_machine or self._NETRC_MACHINE
|
||||||
|
if not netrc_machine:
|
||||||
|
raise ExtractorError(f'Missing netrc_machine and {type(self).__name__}._NETRC_MACHINE')
|
||||||
|
ALLOWED = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789.-_'
|
||||||
|
if netrc_machine.startswith(('-', '_')) or not all(c in ALLOWED for c in netrc_machine):
|
||||||
|
raise ExtractorError(f'Invalid netrc machine: {netrc_machine!r}', expected=True)
|
||||||
|
|
||||||
cmd = self.get_param('netrc_cmd')
|
cmd = self.get_param('netrc_cmd')
|
||||||
if cmd:
|
if cmd:
|
||||||
@ -1883,6 +1890,7 @@ class InfoExtractor:
|
|||||||
'ShallowReactive': indirect_reviver,
|
'ShallowReactive': indirect_reviver,
|
||||||
'Ref': indirect_reviver,
|
'Ref': indirect_reviver,
|
||||||
'Reactive': indirect_reviver,
|
'Reactive': indirect_reviver,
|
||||||
|
'skipHydrate': indirect_reviver,
|
||||||
})
|
})
|
||||||
|
|
||||||
while True:
|
while True:
|
||||||
|
|||||||
@ -384,8 +384,7 @@ class DailymotionIE(DailymotionBaseInfoExtractor):
|
|||||||
last_error = None
|
last_error = None
|
||||||
|
|
||||||
for note, kwargs in (
|
for note, kwargs in (
|
||||||
('Downloading m3u8 information', {}),
|
('Downloading m3u8 information with randomized headers', {
|
||||||
('Retrying m3u8 download with randomized headers', {
|
|
||||||
'headers': self._generate_blockbuster_headers(),
|
'headers': self._generate_blockbuster_headers(),
|
||||||
}),
|
}),
|
||||||
('Retrying m3u8 download with Chrome impersonation', {
|
('Retrying m3u8 download with Chrome impersonation', {
|
||||||
|
|||||||
@ -1041,8 +1041,6 @@ class FacebookAdsIE(InfoExtractor):
|
|||||||
'uploader': 'Casper',
|
'uploader': 'Casper',
|
||||||
'uploader_id': '224110981099062',
|
'uploader_id': '224110981099062',
|
||||||
'uploader_url': 'https://www.facebook.com/Casper/',
|
'uploader_url': 'https://www.facebook.com/Casper/',
|
||||||
'timestamp': 1766299837,
|
|
||||||
'upload_date': '20251221',
|
|
||||||
'like_count': int,
|
'like_count': int,
|
||||||
},
|
},
|
||||||
'playlist_count': 2,
|
'playlist_count': 2,
|
||||||
@ -1054,12 +1052,23 @@ class FacebookAdsIE(InfoExtractor):
|
|||||||
'uploader': 'Case \u00e0 Chocs',
|
'uploader': 'Case \u00e0 Chocs',
|
||||||
'uploader_id': '112960472096793',
|
'uploader_id': '112960472096793',
|
||||||
'uploader_url': 'https://www.facebook.com/Caseachocs/',
|
'uploader_url': 'https://www.facebook.com/Caseachocs/',
|
||||||
'timestamp': 1768498293,
|
|
||||||
'upload_date': '20260115',
|
|
||||||
'like_count': int,
|
'like_count': int,
|
||||||
'description': 'md5:f02a255fcf7dce6ed40e9494cf4bc49a',
|
'description': 'md5:f02a255fcf7dce6ed40e9494cf4bc49a',
|
||||||
},
|
},
|
||||||
'playlist_count': 3,
|
'playlist_count': 3,
|
||||||
|
}, {
|
||||||
|
'url': 'https://www.facebook.com/ads/library/?id=1704834754236452',
|
||||||
|
'info_dict': {
|
||||||
|
'id': '1704834754236452',
|
||||||
|
'ext': 'mp4',
|
||||||
|
'title': 'Get answers now!',
|
||||||
|
'description': 'Ask the best psychics and get accurate answers on questions that bother you!',
|
||||||
|
'uploader': 'Your Relationship Advisor',
|
||||||
|
'uploader_id': '108939234726306',
|
||||||
|
'uploader_url': 'https://www.facebook.com/100068970634636/',
|
||||||
|
'like_count': int,
|
||||||
|
'thumbnail': r're:https://.+/.+\.jpg',
|
||||||
|
},
|
||||||
}, {
|
}, {
|
||||||
'url': 'https://es-la.facebook.com/ads/library/?id=901230958115569',
|
'url': 'https://es-la.facebook.com/ads/library/?id=901230958115569',
|
||||||
'only_matching': True,
|
'only_matching': True,
|
||||||
@ -1123,8 +1132,11 @@ class FacebookAdsIE(InfoExtractor):
|
|||||||
post_data = traverse_obj(
|
post_data = traverse_obj(
|
||||||
re.findall(r'data-sjs>({.*?ScheduledServerJS.*?})</script>', webpage), (..., {json.loads}))
|
re.findall(r'data-sjs>({.*?ScheduledServerJS.*?})</script>', webpage), (..., {json.loads}))
|
||||||
data = get_first(post_data, (
|
data = get_first(post_data, (
|
||||||
'require', ..., ..., ..., '__bbox', 'require', ..., ..., ...,
|
'require', ..., ..., ..., '__bbox', 'require', ..., ..., ..., (
|
||||||
'entryPointRoot', 'otherProps', 'deeplinkAdCard', 'snapshot', {dict}))
|
('__bbox', 'result', 'data', 'ad_library_main', 'deeplink_ad_archive_result', 'deeplink_ad_archive'),
|
||||||
|
# old path
|
||||||
|
('entryPointRoot', 'otherProps', 'deeplinkAdCard'),
|
||||||
|
), 'snapshot', {dict}))
|
||||||
if not data:
|
if not data:
|
||||||
raise ExtractorError('Unable to extract ad data')
|
raise ExtractorError('Unable to extract ad data')
|
||||||
|
|
||||||
@ -1140,11 +1152,12 @@ class FacebookAdsIE(InfoExtractor):
|
|||||||
'title': title,
|
'title': title,
|
||||||
'description': markup or None,
|
'description': markup or None,
|
||||||
}, traverse_obj(data, {
|
}, traverse_obj(data, {
|
||||||
'description': ('link_description', {lambda x: x if not x.startswith('{{product.') else None}),
|
'description': (
|
||||||
|
(('body', 'text'), 'link_description'),
|
||||||
|
{lambda x: x if not x.startswith('{{product.') else None}, any),
|
||||||
'uploader': ('page_name', {str}),
|
'uploader': ('page_name', {str}),
|
||||||
'uploader_id': ('page_id', {str_or_none}),
|
'uploader_id': ('page_id', {str_or_none}),
|
||||||
'uploader_url': ('page_profile_uri', {url_or_none}),
|
'uploader_url': ('page_profile_uri', {url_or_none}),
|
||||||
'timestamp': ('creation_time', {int_or_none}),
|
|
||||||
'like_count': ('page_like_count', {int_or_none}),
|
'like_count': ('page_like_count', {int_or_none}),
|
||||||
}))
|
}))
|
||||||
|
|
||||||
@ -1155,7 +1168,8 @@ class FacebookAdsIE(InfoExtractor):
|
|||||||
entries.append({
|
entries.append({
|
||||||
'id': f'{video_id}_{idx}',
|
'id': f'{video_id}_{idx}',
|
||||||
'title': entry.get('title') or title,
|
'title': entry.get('title') or title,
|
||||||
'description': traverse_obj(entry, 'body', 'link_description') or info_dict.get('description'),
|
'description': traverse_obj(
|
||||||
|
entry, 'body', 'link_description', expected_type=str) or info_dict.get('description'),
|
||||||
'thumbnail': url_or_none(entry.get('video_preview_image_url')),
|
'thumbnail': url_or_none(entry.get('video_preview_image_url')),
|
||||||
'formats': self._extract_formats(entry),
|
'formats': self._extract_formats(entry),
|
||||||
})
|
})
|
||||||
|
|||||||
@ -3,10 +3,12 @@ import urllib.parse
|
|||||||
from .common import InfoExtractor
|
from .common import InfoExtractor
|
||||||
from ..utils import (
|
from ..utils import (
|
||||||
determine_ext,
|
determine_ext,
|
||||||
|
float_or_none,
|
||||||
int_or_none,
|
int_or_none,
|
||||||
join_nonempty,
|
join_nonempty,
|
||||||
mimetype2ext,
|
mimetype2ext,
|
||||||
parse_qs,
|
parse_qs,
|
||||||
|
unescapeHTML,
|
||||||
unified_strdate,
|
unified_strdate,
|
||||||
url_or_none,
|
url_or_none,
|
||||||
)
|
)
|
||||||
@ -107,6 +109,11 @@ class FirstTVIE(InfoExtractor):
|
|||||||
'timestamp': ('dvr_begin_at', {int_or_none}),
|
'timestamp': ('dvr_begin_at', {int_or_none}),
|
||||||
'upload_date': ('date_air', {unified_strdate}),
|
'upload_date': ('date_air', {unified_strdate}),
|
||||||
'duration': ('duration', {int_or_none}),
|
'duration': ('duration', {int_or_none}),
|
||||||
|
'chapters': ('episodes', lambda _, v: float_or_none(v['from']) is not None, {
|
||||||
|
'start_time': ('from', {float_or_none}),
|
||||||
|
'title': ('name', {str}, {unescapeHTML}),
|
||||||
|
'end_time': ('to', {float_or_none}),
|
||||||
|
}),
|
||||||
}),
|
}),
|
||||||
'id': video_id,
|
'id': video_id,
|
||||||
'formats': formats,
|
'formats': formats,
|
||||||
|
|||||||
@ -318,9 +318,48 @@ class FloatplaneIE(FloatplaneBaseIE):
|
|||||||
self.raise_login_required()
|
self.raise_login_required()
|
||||||
|
|
||||||
|
|
||||||
class FloatplaneChannelIE(InfoExtractor):
|
class FloatplaneChannelBaseIE(InfoExtractor):
|
||||||
|
"""Subclasses must set _RESULT_IE, _BASE_URL and _PAGE_SIZE"""
|
||||||
|
|
||||||
|
def _fetch_page(self, display_id, creator_id, channel_id, page):
|
||||||
|
query = {
|
||||||
|
'id': creator_id,
|
||||||
|
'limit': self._PAGE_SIZE,
|
||||||
|
'fetchAfter': page * self._PAGE_SIZE,
|
||||||
|
}
|
||||||
|
if channel_id:
|
||||||
|
query['channel'] = channel_id
|
||||||
|
page_data = self._download_json(
|
||||||
|
f'{self._BASE_URL}/api/v3/content/creator', display_id,
|
||||||
|
query=query, note=f'Downloading page {page + 1}')
|
||||||
|
for post in page_data or []:
|
||||||
|
yield self.url_result(
|
||||||
|
f'{self._BASE_URL}/post/{post["id"]}',
|
||||||
|
self._RESULT_IE, id=post['id'], title=post.get('title'),
|
||||||
|
release_timestamp=parse_iso8601(post.get('releaseDate')))
|
||||||
|
|
||||||
|
def _real_extract(self, url):
|
||||||
|
creator, channel = self._match_valid_url(url).group('id', 'channel')
|
||||||
|
display_id = join_nonempty(creator, channel, delim='/')
|
||||||
|
|
||||||
|
creator_data = self._download_json(
|
||||||
|
f'{self._BASE_URL}/api/v3/creator/named',
|
||||||
|
display_id, query={'creatorURL[0]': creator})[0]
|
||||||
|
|
||||||
|
channel_data = traverse_obj(
|
||||||
|
creator_data, ('channels', lambda _, v: v['urlname'] == channel), get_all=False) or {}
|
||||||
|
|
||||||
|
return self.playlist_result(OnDemandPagedList(functools.partial(
|
||||||
|
self._fetch_page, display_id, creator_data['id'], channel_data.get('id')), self._PAGE_SIZE),
|
||||||
|
display_id, title=channel_data.get('title') or creator_data.get('title'),
|
||||||
|
description=channel_data.get('about') or creator_data.get('about'))
|
||||||
|
|
||||||
|
|
||||||
|
class FloatplaneChannelIE(FloatplaneChannelBaseIE):
|
||||||
_VALID_URL = r'https?://(?:(?:www|beta)\.)?floatplane\.com/channel/(?P<id>[\w-]+)/home(?:/(?P<channel>[\w-]+))?'
|
_VALID_URL = r'https?://(?:(?:www|beta)\.)?floatplane\.com/channel/(?P<id>[\w-]+)/home(?:/(?P<channel>[\w-]+))?'
|
||||||
|
_BASE_URL = 'https://www.floatplane.com'
|
||||||
_PAGE_SIZE = 20
|
_PAGE_SIZE = 20
|
||||||
|
_RESULT_IE = FloatplaneIE
|
||||||
_TESTS = [{
|
_TESTS = [{
|
||||||
'url': 'https://www.floatplane.com/channel/linustechtips/home/ltxexpo',
|
'url': 'https://www.floatplane.com/channel/linustechtips/home/ltxexpo',
|
||||||
'info_dict': {
|
'info_dict': {
|
||||||
@ -346,36 +385,3 @@ class FloatplaneChannelIE(InfoExtractor):
|
|||||||
},
|
},
|
||||||
'playlist_mincount': 200,
|
'playlist_mincount': 200,
|
||||||
}]
|
}]
|
||||||
|
|
||||||
def _fetch_page(self, display_id, creator_id, channel_id, page):
|
|
||||||
query = {
|
|
||||||
'id': creator_id,
|
|
||||||
'limit': self._PAGE_SIZE,
|
|
||||||
'fetchAfter': page * self._PAGE_SIZE,
|
|
||||||
}
|
|
||||||
if channel_id:
|
|
||||||
query['channel'] = channel_id
|
|
||||||
page_data = self._download_json(
|
|
||||||
'https://www.floatplane.com/api/v3/content/creator', display_id,
|
|
||||||
query=query, note=f'Downloading page {page + 1}')
|
|
||||||
for post in page_data or []:
|
|
||||||
yield self.url_result(
|
|
||||||
f'https://www.floatplane.com/post/{post["id"]}',
|
|
||||||
FloatplaneIE, id=post['id'], title=post.get('title'),
|
|
||||||
release_timestamp=parse_iso8601(post.get('releaseDate')))
|
|
||||||
|
|
||||||
def _real_extract(self, url):
|
|
||||||
creator, channel = self._match_valid_url(url).group('id', 'channel')
|
|
||||||
display_id = join_nonempty(creator, channel, delim='/')
|
|
||||||
|
|
||||||
creator_data = self._download_json(
|
|
||||||
'https://www.floatplane.com/api/v3/creator/named',
|
|
||||||
display_id, query={'creatorURL[0]': creator})[0]
|
|
||||||
|
|
||||||
channel_data = traverse_obj(
|
|
||||||
creator_data, ('channels', lambda _, v: v['urlname'] == channel), get_all=False) or {}
|
|
||||||
|
|
||||||
return self.playlist_result(OnDemandPagedList(functools.partial(
|
|
||||||
self._fetch_page, display_id, creator_data['id'], channel_data.get('id')), self._PAGE_SIZE),
|
|
||||||
display_id, title=channel_data.get('title') or creator_data.get('title'),
|
|
||||||
description=channel_data.get('about') or creator_data.get('about'))
|
|
||||||
|
|||||||
@ -99,66 +99,3 @@ class FrontroGroupBaseIE(FrontoBaseIE):
|
|||||||
'modified_timestamp': ('updatedAt', {parse_iso8601}),
|
'modified_timestamp': ('updatedAt', {parse_iso8601}),
|
||||||
}),
|
}),
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
class TheChosenIE(FrontroVideoBaseIE):
|
|
||||||
_CHANNEL_ID = '12884901895'
|
|
||||||
|
|
||||||
_VALID_URL = r'https?://(?:www\.)?watch\.thechosen\.tv/watch/(?P<id>[0-9]+)'
|
|
||||||
_TESTS = [{
|
|
||||||
'url': 'https://watch.thechosen.tv/watch/184683594325',
|
|
||||||
'md5': '3f878b689588c71b38ec9943c54ff5b0',
|
|
||||||
'info_dict': {
|
|
||||||
'id': '184683594325',
|
|
||||||
'ext': 'mp4',
|
|
||||||
'title': 'Season 3 Episode 2: Two by Two',
|
|
||||||
'description': 'md5:174c373756ecc8df46b403f4fcfbaf8c',
|
|
||||||
'comment_count': int,
|
|
||||||
'view_count': int,
|
|
||||||
'like_count': int,
|
|
||||||
'duration': 4212,
|
|
||||||
'thumbnail': r're:https://fastly\.frontrowcdn\.com/channels/12884901895/VIDEO_THUMBNAIL/184683594325/',
|
|
||||||
'timestamp': 1698954546,
|
|
||||||
'upload_date': '20231102',
|
|
||||||
'modified_timestamp': int,
|
|
||||||
'modified_date': str,
|
|
||||||
},
|
|
||||||
}, {
|
|
||||||
'url': 'https://watch.thechosen.tv/watch/184683596189',
|
|
||||||
'md5': 'd581562f9d29ce82f5b7770415334151',
|
|
||||||
'info_dict': {
|
|
||||||
'id': '184683596189',
|
|
||||||
'ext': 'mp4',
|
|
||||||
'title': 'Season 4 Episode 8: Humble',
|
|
||||||
'description': 'md5:20a57bead43da1cf77cd5b0fe29bbc76',
|
|
||||||
'comment_count': int,
|
|
||||||
'view_count': int,
|
|
||||||
'like_count': int,
|
|
||||||
'duration': 5092,
|
|
||||||
'thumbnail': r're:https://fastly\.frontrowcdn\.com/channels/12884901895/VIDEO_THUMBNAIL/184683596189/',
|
|
||||||
'timestamp': 1715019474,
|
|
||||||
'upload_date': '20240506',
|
|
||||||
'modified_timestamp': int,
|
|
||||||
'modified_date': str,
|
|
||||||
},
|
|
||||||
}]
|
|
||||||
|
|
||||||
|
|
||||||
class TheChosenGroupIE(FrontroGroupBaseIE):
|
|
||||||
_CHANNEL_ID = '12884901895'
|
|
||||||
_VIDEO_EXTRACTOR = TheChosenIE
|
|
||||||
_VIDEO_URL_TMPL = 'https://watch.thechosen.tv/watch/%s'
|
|
||||||
|
|
||||||
_VALID_URL = r'https?://(?:www\.)?watch\.thechosen\.tv/group/(?P<id>[0-9]+)'
|
|
||||||
_TESTS = [{
|
|
||||||
'url': 'https://watch.thechosen.tv/group/309237658592',
|
|
||||||
'info_dict': {
|
|
||||||
'id': '309237658592',
|
|
||||||
'title': 'Season 3',
|
|
||||||
'timestamp': 1746203969,
|
|
||||||
'upload_date': '20250502',
|
|
||||||
'modified_timestamp': int,
|
|
||||||
'modified_date': str,
|
|
||||||
},
|
|
||||||
'playlist_count': 8,
|
|
||||||
}]
|
|
||||||
|
|||||||
@ -59,7 +59,7 @@ class GetCourseRuIE(InfoExtractor):
|
|||||||
'marafon.mani-beauty.com',
|
'marafon.mani-beauty.com',
|
||||||
'on.psbook.ru',
|
'on.psbook.ru',
|
||||||
]
|
]
|
||||||
_BASE_URL_RE = rf'https?://(?:(?!player02\.)[^.]+\.getcourse\.(?:ru|io)|{"|".join(map(re.escape, _DOMAINS))})'
|
_BASE_URL_RE = rf'https?://(?:(?!player02\.)[a-zA-Z0-9-]+\.getcourse\.(?:ru|io)|{"|".join(map(re.escape, _DOMAINS))})'
|
||||||
_VALID_URL = [
|
_VALID_URL = [
|
||||||
rf'{_BASE_URL_RE}/(?!pl/|teach/)(?P<id>[^?#]+)',
|
rf'{_BASE_URL_RE}/(?!pl/|teach/)(?P<id>[^?#]+)',
|
||||||
rf'{_BASE_URL_RE}/(?:pl/)?teach/control/lesson/view\?(?:[^#]+&)?id=(?P<id>\d+)',
|
rf'{_BASE_URL_RE}/(?:pl/)?teach/control/lesson/view\?(?:[^#]+&)?id=(?P<id>\d+)',
|
||||||
|
|||||||
@ -29,7 +29,7 @@ class LearningOnScreenIE(InfoExtractor):
|
|||||||
}]
|
}]
|
||||||
|
|
||||||
def _real_initialize(self):
|
def _real_initialize(self):
|
||||||
if not self._get_cookies('https://learningonscreen.ac.uk/').get('PHPSESSID-BOB-LIVE'):
|
if not self._get_cookies('https://learningonscreen.ac.uk/').get('PHPSESSID-LOS-LIVE'):
|
||||||
self.raise_login_required(method='session_cookies')
|
self.raise_login_required(method='session_cookies')
|
||||||
|
|
||||||
def _real_extract(self, url):
|
def _real_extract(self, url):
|
||||||
|
|||||||
209
yt_dlp/extractor/locipo.py
Normal file
209
yt_dlp/extractor/locipo.py
Normal file
@ -0,0 +1,209 @@
|
|||||||
|
import functools
|
||||||
|
import math
|
||||||
|
|
||||||
|
from .streaks import StreaksBaseIE
|
||||||
|
from ..networking import HEADRequest
|
||||||
|
from ..utils import (
|
||||||
|
InAdvancePagedList,
|
||||||
|
clean_html,
|
||||||
|
js_to_json,
|
||||||
|
parse_iso8601,
|
||||||
|
parse_qs,
|
||||||
|
str_or_none,
|
||||||
|
)
|
||||||
|
from ..utils.traversal import require, traverse_obj
|
||||||
|
|
||||||
|
|
||||||
|
class LocipoBaseIE(StreaksBaseIE):
|
||||||
|
_API_BASE = 'https://web-api.locipo.jp'
|
||||||
|
_BASE_URL = 'https://locipo.jp'
|
||||||
|
_UUID_RE = r'[\da-f]{8}(?:-[\da-f]{4}){3}-[\da-f]{12}'
|
||||||
|
|
||||||
|
def _call_api(self, path, item_id, note, fatal=True):
|
||||||
|
return self._download_json(
|
||||||
|
f'{self._API_BASE}/{path}', item_id,
|
||||||
|
f'Downloading {note} API JSON',
|
||||||
|
f'Unable to download {note} API JSON',
|
||||||
|
fatal=fatal)
|
||||||
|
|
||||||
|
|
||||||
|
class LocipoIE(LocipoBaseIE):
|
||||||
|
_VALID_URL = [
|
||||||
|
fr'https?://locipo\.jp/creative/(?P<id>{LocipoBaseIE._UUID_RE})',
|
||||||
|
fr'https?://locipo\.jp/embed/?\?(?:[^#]+&)?id=(?P<id>{LocipoBaseIE._UUID_RE})',
|
||||||
|
]
|
||||||
|
_TESTS = [{
|
||||||
|
'url': 'https://locipo.jp/creative/fb5ffeaa-398d-45ce-bb49-0e221b5f94f1',
|
||||||
|
'info_dict': {
|
||||||
|
'id': 'fb5ffeaa-398d-45ce-bb49-0e221b5f94f1',
|
||||||
|
'ext': 'mp4',
|
||||||
|
'title': 'リアルカレカノ#4 ~伊達さゆりと勉強しよっ?~',
|
||||||
|
'description': 'md5:70a40c202f3fb7946b61e55fa015094c',
|
||||||
|
'display_id': '5a2947fe596441f5bab88a61b0432d0d',
|
||||||
|
'live_status': 'not_live',
|
||||||
|
'modified_date': r're:\d{8}',
|
||||||
|
'modified_timestamp': int,
|
||||||
|
'release_timestamp': 1711789200,
|
||||||
|
'release_date': '20240330',
|
||||||
|
'series': 'リアルカレカノ',
|
||||||
|
'series_id': '1142',
|
||||||
|
'tags': 'count:4',
|
||||||
|
'thumbnail': r're:https?://.+\.(?:jpg|png)',
|
||||||
|
'timestamp': 1756984919,
|
||||||
|
'upload_date': '20250904',
|
||||||
|
'uploader': '東海テレビ',
|
||||||
|
'uploader_id': 'locipo-prod',
|
||||||
|
},
|
||||||
|
}, {
|
||||||
|
'url': 'https://locipo.jp/embed/?id=71a334a0-2b25-406f-9d96-88f341f571c2',
|
||||||
|
'info_dict': {
|
||||||
|
'id': '71a334a0-2b25-406f-9d96-88f341f571c2',
|
||||||
|
'ext': 'mp4',
|
||||||
|
'title': '#1 オーディション/ゲスト伊藤美来、豊田萌絵',
|
||||||
|
'description': 'md5:5bbcf532474700439cf56ceb6a15630e',
|
||||||
|
'display_id': '0ab32634b884499a84adb25de844c551',
|
||||||
|
'live_status': 'not_live',
|
||||||
|
'modified_date': r're:\d{8}',
|
||||||
|
'modified_timestamp': int,
|
||||||
|
'release_timestamp': 1751623200,
|
||||||
|
'release_date': '20250704',
|
||||||
|
'series': '声優ラジオのウラカブリ~Locipo出張所~',
|
||||||
|
'series_id': '1454',
|
||||||
|
'tags': 'count:6',
|
||||||
|
'thumbnail': r're:https?://.+\.(?:jpg|png)',
|
||||||
|
'timestamp': 1757002966,
|
||||||
|
'upload_date': '20250904',
|
||||||
|
'uploader': 'テレビ愛知',
|
||||||
|
'uploader_id': 'locipo-prod',
|
||||||
|
},
|
||||||
|
}, {
|
||||||
|
'url': 'https://locipo.jp/creative/bff9950d-229b-4fe9-911a-7fa71a232f35?list=69a5b15c-901f-4828-a336-30c0de7612d3',
|
||||||
|
'info_dict': {
|
||||||
|
'id': '69a5b15c-901f-4828-a336-30c0de7612d3',
|
||||||
|
'title': '見て・乗って・語りたい。 東海の鉄道沼',
|
||||||
|
},
|
||||||
|
'playlist_mincount': 3,
|
||||||
|
}, {
|
||||||
|
'url': 'https://locipo.jp/creative/a0751a7f-c7dd-4a10-a7f1-e12720bdf16c?list=006cff3f-ba74-42f0-b4fd-241486ebda2b',
|
||||||
|
'info_dict': {
|
||||||
|
'id': 'a0751a7f-c7dd-4a10-a7f1-e12720bdf16c',
|
||||||
|
'ext': 'mp4',
|
||||||
|
'title': '#839 人間真空パック',
|
||||||
|
'description': 'md5:9fe190333b6975c5001c8c9cbe20d276',
|
||||||
|
'display_id': 'c2b4c9f4a6d648bd8e3c320e384b9d56',
|
||||||
|
'live_status': 'not_live',
|
||||||
|
'modified_date': r're:\d{8}',
|
||||||
|
'modified_timestamp': int,
|
||||||
|
'release_timestamp': 1746239400,
|
||||||
|
'release_date': '20250503',
|
||||||
|
'series': 'でんじろう先生のはぴエネ!',
|
||||||
|
'series_id': '202',
|
||||||
|
'tags': 'count:3',
|
||||||
|
'thumbnail': r're:https?://.+\.(?:jpg|png)',
|
||||||
|
'timestamp': 1756975909,
|
||||||
|
'upload_date': '20250904',
|
||||||
|
'uploader': '中京テレビ',
|
||||||
|
'uploader_id': 'locipo-prod',
|
||||||
|
},
|
||||||
|
'params': {'noplaylist': True},
|
||||||
|
}]
|
||||||
|
|
||||||
|
def _real_extract(self, url):
|
||||||
|
video_id = self._match_id(url)
|
||||||
|
playlist_id = traverse_obj(parse_qs(url), ('list', -1, {str}))
|
||||||
|
if self._yes_playlist(playlist_id, video_id):
|
||||||
|
return self.url_result(
|
||||||
|
f'{self._BASE_URL}/playlist/{playlist_id}', LocipoPlaylistIE)
|
||||||
|
|
||||||
|
creatives = self._call_api(f'creatives/{video_id}', video_id, 'Creatives')
|
||||||
|
media_id = traverse_obj(creatives, ('media_id', {str}, {require('Streaks media ID')}))
|
||||||
|
|
||||||
|
webpage = self._download_webpage(url, video_id)
|
||||||
|
config = self._search_json(
|
||||||
|
r'window\.__NUXT__\.config\s*=', webpage, 'config', video_id, transform_source=js_to_json)
|
||||||
|
api_key = traverse_obj(config, ('public', 'streaksVodPlaybackApiKey', {str}, {require('api key')}))
|
||||||
|
|
||||||
|
return {
|
||||||
|
**self._extract_from_streaks_api('locipo-prod', media_id, headers={
|
||||||
|
'Origin': 'https://locipo.jp',
|
||||||
|
'X-Streaks-Api-Key': api_key,
|
||||||
|
}),
|
||||||
|
**traverse_obj(creatives, {
|
||||||
|
'title': ('name', {clean_html}),
|
||||||
|
'description': ('description', {clean_html}, filter),
|
||||||
|
'release_timestamp': ('publication_started_at', {parse_iso8601}),
|
||||||
|
'tags': ('keyword', {clean_html}, {lambda x: x.split(',')}, ..., {str.strip}, filter),
|
||||||
|
'uploader': ('company', 'name', {clean_html}, filter),
|
||||||
|
}),
|
||||||
|
**traverse_obj(creatives, ('series', {
|
||||||
|
'series': ('name', {clean_html}, filter),
|
||||||
|
'series_id': ('id', {str_or_none}),
|
||||||
|
})),
|
||||||
|
'id': video_id,
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
class LocipoPlaylistIE(LocipoBaseIE):
|
||||||
|
_VALID_URL = [
|
||||||
|
fr'https?://locipo\.jp/(?P<type>playlist)/(?P<id>{LocipoBaseIE._UUID_RE})',
|
||||||
|
r'https?://locipo\.jp/(?P<type>series)/(?P<id>\d+)',
|
||||||
|
]
|
||||||
|
_TESTS = [{
|
||||||
|
'url': 'https://locipo.jp/playlist/35d3dd2b-531d-4824-8575-b1c527d29538',
|
||||||
|
'info_dict': {
|
||||||
|
'id': '35d3dd2b-531d-4824-8575-b1c527d29538',
|
||||||
|
'title': 'レシピ集',
|
||||||
|
},
|
||||||
|
'playlist_mincount': 135,
|
||||||
|
}, {
|
||||||
|
# Redirects to https://locipo.jp/series/1363
|
||||||
|
'url': 'https://locipo.jp/playlist/fef7c4fb-741f-4d6a-a3a6-754f354302a2',
|
||||||
|
'info_dict': {
|
||||||
|
'id': '1363',
|
||||||
|
'title': 'CBCアナウンサー公式【みてちょてれび】',
|
||||||
|
'description': 'md5:50a1b23e63112d5c06c882835c8c1fb1',
|
||||||
|
},
|
||||||
|
'playlist_mincount': 38,
|
||||||
|
}, {
|
||||||
|
'url': 'https://locipo.jp/series/503',
|
||||||
|
'info_dict': {
|
||||||
|
'id': '503',
|
||||||
|
'title': 'FishingLover東海',
|
||||||
|
'description': '東海地区の釣り場でフィッシングの魅力を余すところなくご紹介!!',
|
||||||
|
},
|
||||||
|
'playlist_mincount': 223,
|
||||||
|
}]
|
||||||
|
_PAGE_SIZE = 100
|
||||||
|
|
||||||
|
def _fetch_page(self, path, playlist_id, page):
|
||||||
|
creatives = self._download_json(
|
||||||
|
f'{self._API_BASE}/{path}/{playlist_id}/creatives',
|
||||||
|
playlist_id, f'Downloading page {page + 1}', query={
|
||||||
|
'premium': False,
|
||||||
|
'live': False,
|
||||||
|
'limit': self._PAGE_SIZE,
|
||||||
|
'offset': page * self._PAGE_SIZE,
|
||||||
|
})
|
||||||
|
|
||||||
|
for video_id in traverse_obj(creatives, ('items', ..., 'id', {str})):
|
||||||
|
yield self.url_result(f'{self._BASE_URL}/creative/{video_id}', LocipoIE)
|
||||||
|
|
||||||
|
def _real_extract(self, url):
|
||||||
|
playlist_type, playlist_id = self._match_valid_url(url).group('type', 'id')
|
||||||
|
if urlh := self._request_webpage(HEADRequest(url), playlist_id, fatal=False):
|
||||||
|
playlist_type, playlist_id = self._match_valid_url(urlh.url).group('type', 'id')
|
||||||
|
|
||||||
|
path = 'playlists' if playlist_type == 'playlist' else 'series'
|
||||||
|
creatives = self._call_api(
|
||||||
|
f'{path}/{playlist_id}/creatives', playlist_id, path.capitalize())
|
||||||
|
|
||||||
|
entries = InAdvancePagedList(
|
||||||
|
functools.partial(self._fetch_page, path, playlist_id),
|
||||||
|
math.ceil(int(creatives['total']) / self._PAGE_SIZE), self._PAGE_SIZE)
|
||||||
|
|
||||||
|
return self.playlist_result(
|
||||||
|
entries, playlist_id,
|
||||||
|
**traverse_obj(creatives, ('items', ..., playlist_type, {
|
||||||
|
'title': ('name', {clean_html}, filter),
|
||||||
|
'description': ('description', {clean_html}, filter),
|
||||||
|
}, any)))
|
||||||
38
yt_dlp/extractor/matchitv.py
Normal file
38
yt_dlp/extractor/matchitv.py
Normal file
@ -0,0 +1,38 @@
|
|||||||
|
from .common import InfoExtractor
|
||||||
|
from ..utils import join_nonempty, unified_strdate
|
||||||
|
from ..utils.traversal import traverse_obj
|
||||||
|
|
||||||
|
|
||||||
|
class MatchiTVIE(InfoExtractor):
|
||||||
|
_VALID_URL = r'https?://(?:www\.)?matchi\.tv/watch/?\?(?:[^#]+&)?s=(?P<id>[0-9a-zA-Z]+)'
|
||||||
|
_TESTS = [{
|
||||||
|
'url': 'https://matchi.tv/watch?s=0euhjzrxsjm',
|
||||||
|
'info_dict': {
|
||||||
|
'id': '0euhjzrxsjm',
|
||||||
|
'ext': 'mp4',
|
||||||
|
'title': 'Court 2 at Stratford Padel Club 2024-07-13T18:32:24',
|
||||||
|
'thumbnail': 'https://thumbnails.padelgo.tv/0euhjzrxsjm.jpg',
|
||||||
|
'upload_date': '20240713',
|
||||||
|
},
|
||||||
|
}, {
|
||||||
|
'url': 'https://matchi.tv/watch?s=FkKDJ9SvAx1',
|
||||||
|
'only_matching': True,
|
||||||
|
}]
|
||||||
|
|
||||||
|
def _real_extract(self, url):
|
||||||
|
video_id = self._match_id(url)
|
||||||
|
webpage = self._download_webpage(url, video_id)
|
||||||
|
loaded_media = traverse_obj(
|
||||||
|
self._search_nextjs_data(webpage, video_id, fatal=False),
|
||||||
|
('props', 'pageProps', 'loadedMedia', {dict})) or {}
|
||||||
|
start_date_time = traverse_obj(loaded_media, ('startDateTime', {str}))
|
||||||
|
|
||||||
|
return {
|
||||||
|
'id': video_id,
|
||||||
|
'title': join_nonempty(loaded_media.get('courtDescription'), start_date_time, delim=' '),
|
||||||
|
'thumbnail': f'https://thumbnails.padelgo.tv/{video_id}.jpg',
|
||||||
|
'upload_date': unified_strdate(start_date_time),
|
||||||
|
'formats': self._extract_m3u8_formats(
|
||||||
|
f'https://streams.padelgo.tv/v2/streams/m3u8/{video_id}/anonymous/playlist.m3u8',
|
||||||
|
video_id, 'mp4', m3u8_id='hls'),
|
||||||
|
}
|
||||||
@ -25,7 +25,7 @@ class MixcloudBaseIE(InfoExtractor):
|
|||||||
%s
|
%s
|
||||||
}
|
}
|
||||||
}''' % (lookup_key, username, f', slug: "{slug}"' if slug else '', object_fields), # noqa: UP031
|
}''' % (lookup_key, username, f', slug: "{slug}"' if slug else '', object_fields), # noqa: UP031
|
||||||
})['data'][lookup_key]
|
}, impersonate=True)['data'][lookup_key]
|
||||||
|
|
||||||
|
|
||||||
class MixcloudIE(MixcloudBaseIE):
|
class MixcloudIE(MixcloudBaseIE):
|
||||||
|
|||||||
@ -9,13 +9,13 @@ from ..utils import (
|
|||||||
int_or_none,
|
int_or_none,
|
||||||
qualities,
|
qualities,
|
||||||
smuggle_url,
|
smuggle_url,
|
||||||
traverse_obj,
|
|
||||||
unescapeHTML,
|
unescapeHTML,
|
||||||
unified_strdate,
|
unified_strdate,
|
||||||
unsmuggle_url,
|
unsmuggle_url,
|
||||||
url_or_none,
|
url_or_none,
|
||||||
urlencode_postdata,
|
urlencode_postdata,
|
||||||
)
|
)
|
||||||
|
from ..utils.traversal import find_element, traverse_obj
|
||||||
|
|
||||||
|
|
||||||
class OdnoklassnikiIE(InfoExtractor):
|
class OdnoklassnikiIE(InfoExtractor):
|
||||||
@ -264,9 +264,7 @@ class OdnoklassnikiIE(InfoExtractor):
|
|||||||
note='Downloading desktop webpage',
|
note='Downloading desktop webpage',
|
||||||
headers={'Referer': smuggled['referrer']} if smuggled.get('referrer') else {})
|
headers={'Referer': smuggled['referrer']} if smuggled.get('referrer') else {})
|
||||||
|
|
||||||
error = self._search_regex(
|
error = traverse_obj(webpage, {find_element(cls='vp_video_stub_txt')})
|
||||||
r'[^>]+class="vp_video_stub_txt"[^>]*>([^<]+)<',
|
|
||||||
webpage, 'error', default=None)
|
|
||||||
# Direct link from boosty
|
# Direct link from boosty
|
||||||
if (error == 'The author of this video has not been found or is blocked'
|
if (error == 'The author of this video has not been found or is blocked'
|
||||||
and not smuggled.get('referrer') and mode == 'videoembed'):
|
and not smuggled.get('referrer') and mode == 'videoembed'):
|
||||||
|
|||||||
@ -33,7 +33,8 @@ class OpencastBaseIE(InfoExtractor):
|
|||||||
vid\.igb\.illinois\.edu|
|
vid\.igb\.illinois\.edu|
|
||||||
cursosabertos\.c3sl\.ufpr\.br|
|
cursosabertos\.c3sl\.ufpr\.br|
|
||||||
mcmedia\.missioncollege\.org|
|
mcmedia\.missioncollege\.org|
|
||||||
clases\.odon\.edu\.uy
|
clases\.odon\.edu\.uy|
|
||||||
|
oc-p\.uni-jena\.de
|
||||||
)'''
|
)'''
|
||||||
_UUID_RE = r'[\da-fA-F]{8}-[\da-fA-F]{4}-[\da-fA-F]{4}-[\da-fA-F]{4}-[\da-fA-F]{12}'
|
_UUID_RE = r'[\da-fA-F]{8}-[\da-fA-F]{4}-[\da-fA-F]{4}-[\da-fA-F]{4}-[\da-fA-F]{12}'
|
||||||
|
|
||||||
@ -106,7 +107,7 @@ class OpencastBaseIE(InfoExtractor):
|
|||||||
|
|
||||||
class OpencastIE(OpencastBaseIE):
|
class OpencastIE(OpencastBaseIE):
|
||||||
_VALID_URL = rf'''(?x)
|
_VALID_URL = rf'''(?x)
|
||||||
https?://(?P<host>{OpencastBaseIE._INSTANCES_RE})/paella/ui/watch\.html\?
|
https?://(?P<host>{OpencastBaseIE._INSTANCES_RE})/paella[0-9]*/ui/watch\.html\?
|
||||||
(?:[^#]+&)?id=(?P<id>{OpencastBaseIE._UUID_RE})'''
|
(?:[^#]+&)?id=(?P<id>{OpencastBaseIE._UUID_RE})'''
|
||||||
|
|
||||||
_API_BASE = 'https://%s/search/episode.json?id=%s'
|
_API_BASE = 'https://%s/search/episode.json?id=%s'
|
||||||
@ -131,8 +132,12 @@ class OpencastIE(OpencastBaseIE):
|
|||||||
|
|
||||||
def _real_extract(self, url):
|
def _real_extract(self, url):
|
||||||
host, video_id = self._match_valid_url(url).group('host', 'id')
|
host, video_id = self._match_valid_url(url).group('host', 'id')
|
||||||
return self._parse_mediapackage(
|
response = self._call_api(host, video_id)
|
||||||
self._call_api(host, video_id)['search-results']['result']['mediapackage'])
|
package = traverse_obj(response, (
|
||||||
|
('search-results', 'result'),
|
||||||
|
('result', ...), # Path needed for oc-p.uni-jena.de
|
||||||
|
'mediapackage', {dict}, any)) or {}
|
||||||
|
return self._parse_mediapackage(package)
|
||||||
|
|
||||||
|
|
||||||
class OpencastPlaylistIE(OpencastBaseIE):
|
class OpencastPlaylistIE(OpencastBaseIE):
|
||||||
|
|||||||
@ -25,6 +25,7 @@ from ..utils.traversal import (
|
|||||||
find_elements,
|
find_elements,
|
||||||
require,
|
require,
|
||||||
traverse_obj,
|
traverse_obj,
|
||||||
|
trim_str,
|
||||||
value,
|
value,
|
||||||
)
|
)
|
||||||
|
|
||||||
@ -32,16 +33,15 @@ from ..utils.traversal import (
|
|||||||
class PatreonBaseIE(InfoExtractor):
|
class PatreonBaseIE(InfoExtractor):
|
||||||
@functools.cached_property
|
@functools.cached_property
|
||||||
def patreon_user_agent(self):
|
def patreon_user_agent(self):
|
||||||
# Patreon mobile UA is needed to avoid triggering Cloudflare anti-bot protection.
|
# Patreon mobile UA yields higher res m3u8 for locked posts, but gives 401 if not logged-in
|
||||||
# Newer UA yields higher res m3u8 formats for locked posts, but gives 401 if not logged-in
|
|
||||||
if self._get_cookies('https://www.patreon.com/').get('session_id'):
|
if self._get_cookies('https://www.patreon.com/').get('session_id'):
|
||||||
return 'Patreon/72.2.28 (Android; Android 14; Scale/2.10)'
|
return 'Patreon/126.9.0.15 (Android; Android 14; Scale/2.10)'
|
||||||
return 'Patreon/7.6.28 (Android; Android 11; Scale/2.10)'
|
return None
|
||||||
|
|
||||||
def _call_api(self, ep, item_id, query=None, headers=None, fatal=True, note=None):
|
def _call_api(self, ep, item_id, query=None, headers=None, fatal=True, note=None):
|
||||||
if headers is None:
|
if headers is None:
|
||||||
headers = {}
|
headers = {}
|
||||||
if 'User-Agent' not in headers:
|
if 'User-Agent' not in headers and self.patreon_user_agent:
|
||||||
headers['User-Agent'] = self.patreon_user_agent
|
headers['User-Agent'] = self.patreon_user_agent
|
||||||
if query:
|
if query:
|
||||||
query.update({'json-api-version': 1.0})
|
query.update({'json-api-version': 1.0})
|
||||||
@ -50,7 +50,9 @@ class PatreonBaseIE(InfoExtractor):
|
|||||||
return self._download_json(
|
return self._download_json(
|
||||||
f'https://www.patreon.com/api/{ep}',
|
f'https://www.patreon.com/api/{ep}',
|
||||||
item_id, note=note if note else 'Downloading API JSON',
|
item_id, note=note if note else 'Downloading API JSON',
|
||||||
query=query, fatal=fatal, headers=headers)
|
query=query, fatal=fatal, headers=headers,
|
||||||
|
# If not using Patreon mobile UA, we need impersonation due to Cloudflare
|
||||||
|
impersonate=not self.patreon_user_agent)
|
||||||
except ExtractorError as e:
|
except ExtractorError as e:
|
||||||
if not isinstance(e.cause, HTTPError) or mimetype2ext(e.cause.response.headers.get('Content-Type')) != 'json':
|
if not isinstance(e.cause, HTTPError) or mimetype2ext(e.cause.response.headers.get('Content-Type')) != 'json':
|
||||||
raise
|
raise
|
||||||
@ -623,14 +625,13 @@ class PatreonCampaignIE(PatreonBaseIE):
|
|||||||
'info_dict': {
|
'info_dict': {
|
||||||
'id': '9631148',
|
'id': '9631148',
|
||||||
'title': 'Anything Else?',
|
'title': 'Anything Else?',
|
||||||
'description': 'md5:2ee1db4aed2f9460c2b295825a24aa08',
|
'description': 'md5:b2f20eec4cb5520d9a4be4971f28add5',
|
||||||
'uploader': 'dan ',
|
'uploader': 'dan ',
|
||||||
'uploader_id': '13852412',
|
'uploader_id': '13852412',
|
||||||
'uploader_url': 'https://www.patreon.com/anythingelse',
|
'uploader_url': 'https://www.patreon.com/anythingelse',
|
||||||
'channel': 'Anything Else?',
|
'channel': 'Anything Else?',
|
||||||
'channel_id': '9631148',
|
'channel_id': '9631148',
|
||||||
'channel_url': 'https://www.patreon.com/anythingelse',
|
'channel_url': 'https://www.patreon.com/anythingelse',
|
||||||
'channel_follower_count': int,
|
|
||||||
'age_limit': 0,
|
'age_limit': 0,
|
||||||
'thumbnail': r're:https?://.+/.+',
|
'thumbnail': r're:https?://.+/.+',
|
||||||
},
|
},
|
||||||
@ -675,16 +676,15 @@ class PatreonCampaignIE(PatreonBaseIE):
|
|||||||
break
|
break
|
||||||
|
|
||||||
def _real_extract(self, url):
|
def _real_extract(self, url):
|
||||||
|
|
||||||
campaign_id, vanity = self._match_valid_url(url).group('campaign_id', 'vanity')
|
campaign_id, vanity = self._match_valid_url(url).group('campaign_id', 'vanity')
|
||||||
if campaign_id is None:
|
if campaign_id is None:
|
||||||
webpage = self._download_webpage(url, vanity, headers={'User-Agent': self.patreon_user_agent})
|
results = self._call_api('search', vanity, query={
|
||||||
campaign_id = traverse_obj(self._search_nextjs_data(webpage, vanity, default=None), (
|
'q': vanity,
|
||||||
'props', 'pageProps', 'bootstrapEnvelope', 'pageBootstrap', 'campaign', 'data', 'id', {str}))
|
'page[size]': '5',
|
||||||
if not campaign_id:
|
})['data']
|
||||||
campaign_id = traverse_obj(self._search_nextjs_v13_data(webpage, vanity), (
|
campaign_id = traverse_obj(results, (
|
||||||
((..., 'value', 'campaign', 'data'), lambda _, v: v['type'] == 'campaign'),
|
lambda _, v: v['type'] == 'campaign-document' and v['attributes']['url'].lower().endswith(f'/{vanity.lower()}'),
|
||||||
'id', {str}, any, {require('campaign ID')}))
|
'id', {trim_str(start='campaign_')}, filter, any, {require('campaign ID')}))
|
||||||
|
|
||||||
params = {
|
params = {
|
||||||
'json-api-use-default-includes': 'false',
|
'json-api-use-default-includes': 'false',
|
||||||
|
|||||||
@ -128,7 +128,7 @@ class PornHubIE(PornHubBaseIE):
|
|||||||
_VALID_URL = rf'''(?x)
|
_VALID_URL = rf'''(?x)
|
||||||
https?://
|
https?://
|
||||||
(?:
|
(?:
|
||||||
(?:[^/]+\.)?
|
(?:[a-zA-Z0-9.-]+\.)?
|
||||||
{PornHubBaseIE._PORNHUB_HOST_RE}
|
{PornHubBaseIE._PORNHUB_HOST_RE}
|
||||||
/(?:(?:view_video\.php|video/show)\?viewkey=|embed/)|
|
/(?:(?:view_video\.php|video/show)\?viewkey=|embed/)|
|
||||||
(?:www\.)?thumbzilla\.com/video/
|
(?:www\.)?thumbzilla\.com/video/
|
||||||
@ -506,6 +506,7 @@ class PornHubIE(PornHubBaseIE):
|
|||||||
'cast': ({find_elements(attr='data-label', value='pornstar')}, ..., {clean_html}),
|
'cast': ({find_elements(attr='data-label', value='pornstar')}, ..., {clean_html}),
|
||||||
}),
|
}),
|
||||||
'subtitles': subtitles,
|
'subtitles': subtitles,
|
||||||
|
'http_headers': {'Referer': f'https://www.{host}/'},
|
||||||
}, info)
|
}, info)
|
||||||
|
|
||||||
|
|
||||||
@ -533,7 +534,7 @@ class PornHubPlaylistBaseIE(PornHubBaseIE):
|
|||||||
|
|
||||||
|
|
||||||
class PornHubUserIE(PornHubPlaylistBaseIE):
|
class PornHubUserIE(PornHubPlaylistBaseIE):
|
||||||
_VALID_URL = rf'(?P<url>https?://(?:[^/]+\.)?{PornHubBaseIE._PORNHUB_HOST_RE}/(?:(?:user|channel)s|model|pornstar)/(?P<id>[^/?#&]+))(?:[?#&]|/(?!videos)|$)'
|
_VALID_URL = rf'(?P<url>https?://(?:[a-zA-Z0-9.-]+\.)?{PornHubBaseIE._PORNHUB_HOST_RE}/(?:(?:user|channel)s|model|pornstar)/(?P<id>[^/?#&]+))(?:[?#&]|/(?!videos)|$)'
|
||||||
_TESTS = [{
|
_TESTS = [{
|
||||||
'url': 'https://www.pornhub.com/model/zoe_ph',
|
'url': 'https://www.pornhub.com/model/zoe_ph',
|
||||||
'playlist_mincount': 118,
|
'playlist_mincount': 118,
|
||||||
|
|||||||
@ -8,6 +8,7 @@ from ..utils import (
|
|||||||
determine_ext,
|
determine_ext,
|
||||||
int_or_none,
|
int_or_none,
|
||||||
js_to_json,
|
js_to_json,
|
||||||
|
make_archive_id,
|
||||||
parse_duration,
|
parse_duration,
|
||||||
parse_iso8601,
|
parse_iso8601,
|
||||||
url_or_none,
|
url_or_none,
|
||||||
@ -16,12 +17,12 @@ from ..utils.traversal import traverse_obj
|
|||||||
|
|
||||||
|
|
||||||
class RTPIE(InfoExtractor):
|
class RTPIE(InfoExtractor):
|
||||||
_VALID_URL = r'https?://(?:www\.)?rtp\.pt/play/(?:[^/#?]+/)?p(?P<program_id>\d+)/(?P<id>e\d+)'
|
_VALID_URL = r'https?://(?:www\.)?rtp\.pt/play/(?:[^/#?]+/)?(?P<program_id>p\d+)/(?P<episode_id>e\d+)(?:/[^/#?]+/(?P<asset_id>\d+))?'
|
||||||
_TESTS = [{
|
_TESTS = [{
|
||||||
'url': 'http://www.rtp.pt/play/p405/e174042/paixoes-cruzadas',
|
'url': 'http://www.rtp.pt/play/p405/e174042/paixoes-cruzadas',
|
||||||
'md5': 'e736ce0c665e459ddb818546220b4ef8',
|
'md5': 'e736ce0c665e459ddb818546220b4ef8',
|
||||||
'info_dict': {
|
'info_dict': {
|
||||||
'id': 'e174042',
|
'id': '395769',
|
||||||
'ext': 'mp3',
|
'ext': 'mp3',
|
||||||
'title': 'Paixões Cruzadas',
|
'title': 'Paixões Cruzadas',
|
||||||
'description': 'md5:af979e58ba0ab73f78435fc943fdb070',
|
'description': 'md5:af979e58ba0ab73f78435fc943fdb070',
|
||||||
@ -32,12 +33,15 @@ class RTPIE(InfoExtractor):
|
|||||||
'modified_date': '20190327',
|
'modified_date': '20190327',
|
||||||
'timestamp': 1417219200,
|
'timestamp': 1417219200,
|
||||||
'upload_date': '20141129',
|
'upload_date': '20141129',
|
||||||
|
'episode_id': 'e174042',
|
||||||
|
'series_id': 'p405',
|
||||||
|
'_old_archive_ids': ['rtp e174042'],
|
||||||
},
|
},
|
||||||
}, {
|
}, {
|
||||||
'url': 'https://www.rtp.pt/play/zigzag/p13166/e757904/25-curiosidades-25-de-abril',
|
'url': 'https://www.rtp.pt/play/zigzag/p13166/e757904/25-curiosidades-25-de-abril',
|
||||||
'md5': '5b4859940e3adef61247a77dfb76046a',
|
'md5': '5b4859940e3adef61247a77dfb76046a',
|
||||||
'info_dict': {
|
'info_dict': {
|
||||||
'id': 'e757904',
|
'id': '1226642',
|
||||||
'ext': 'mp4',
|
'ext': 'mp4',
|
||||||
'title': 'Estudar ou não estudar',
|
'title': 'Estudar ou não estudar',
|
||||||
'description': 'md5:3bfd7eb8bebfd5711a08df69c9c14c35',
|
'description': 'md5:3bfd7eb8bebfd5711a08df69c9c14c35',
|
||||||
@ -50,13 +54,16 @@ class RTPIE(InfoExtractor):
|
|||||||
'episode_number': 2,
|
'episode_number': 2,
|
||||||
'episode': 'Estudar ou não estudar',
|
'episode': 'Estudar ou não estudar',
|
||||||
'modified_date': '20240404',
|
'modified_date': '20240404',
|
||||||
|
'episode_id': 'e757904',
|
||||||
|
'series_id': 'p13166',
|
||||||
|
'_old_archive_ids': ['rtp e757904'],
|
||||||
},
|
},
|
||||||
}, {
|
}, {
|
||||||
# Episode not accessible through API
|
# Episode not accessible through API
|
||||||
'url': 'https://www.rtp.pt/play/estudoemcasa/p7776/e500050/portugues-1-ano',
|
'url': 'https://www.rtp.pt/play/estudoemcasa/p7776/e500050/portugues-1-ano',
|
||||||
'md5': '57660c0b46db9f22118c52cbd65975e4',
|
'md5': '57660c0b46db9f22118c52cbd65975e4',
|
||||||
'info_dict': {
|
'info_dict': {
|
||||||
'id': 'e500050',
|
'id': '871639',
|
||||||
'ext': 'mp4',
|
'ext': 'mp4',
|
||||||
'title': 'Português - 1.º ano',
|
'title': 'Português - 1.º ano',
|
||||||
'duration': 1669.0,
|
'duration': 1669.0,
|
||||||
@ -64,6 +71,67 @@ class RTPIE(InfoExtractor):
|
|||||||
'upload_date': '20201020',
|
'upload_date': '20201020',
|
||||||
'timestamp': 1603180799,
|
'timestamp': 1603180799,
|
||||||
'thumbnail': 'https://cdn-images.rtp.pt/EPG/imagens/39482_59449_64850.png?v=3&w=860',
|
'thumbnail': 'https://cdn-images.rtp.pt/EPG/imagens/39482_59449_64850.png?v=3&w=860',
|
||||||
|
'episode_id': 'e500050',
|
||||||
|
'series_id': 'p7776',
|
||||||
|
'_old_archive_ids': ['rtp e500050'],
|
||||||
|
},
|
||||||
|
'expected_warnings': ['Episode data not found in API response; falling back to web extraction'],
|
||||||
|
}, {
|
||||||
|
# Ambiguous URL for 1st part of a multi-part episode without --no-playlist
|
||||||
|
'url': 'https://www.rtp.pt/play/p14335/e877072/a-nossa-tarde',
|
||||||
|
'info_dict': {
|
||||||
|
'id': 'e877072',
|
||||||
|
'title': 'A Nossa Tarde',
|
||||||
|
'duration': 6545.0,
|
||||||
|
'series': 'A Nossa Tarde',
|
||||||
|
'series_id': 'p14335',
|
||||||
|
'season': '2025',
|
||||||
|
'episode_id': 'e877072',
|
||||||
|
'timestamp': 1758560188,
|
||||||
|
'upload_date': '20250922',
|
||||||
|
'modified_timestamp': 1758563110,
|
||||||
|
'modified_date': '20250922',
|
||||||
|
},
|
||||||
|
'playlist_count': 3,
|
||||||
|
}, {
|
||||||
|
# Ambiguous URL for 1st part of a multi-part episode with --no-playlist
|
||||||
|
'url': 'https://www.rtp.pt/play/p14335/e877072/a-nossa-tarde',
|
||||||
|
'md5': '2aa3c89c95e852d6f04168b95d0d0632',
|
||||||
|
'info_dict': {
|
||||||
|
'id': '1364711',
|
||||||
|
'ext': 'mp4',
|
||||||
|
'title': 'A Nossa Tarde',
|
||||||
|
'duration': 1292.0,
|
||||||
|
'thumbnail': r're:https://cdn-images\.rtp\.pt/multimedia/screenshots/p14335/p14335_1_20250922155118e161t0312\.jpg',
|
||||||
|
'series': 'A Nossa Tarde',
|
||||||
|
'series_id': 'p14335',
|
||||||
|
'season': '2025',
|
||||||
|
'episode_id': 'e877072',
|
||||||
|
'timestamp': 1758560188,
|
||||||
|
'upload_date': '20250922',
|
||||||
|
'modified_timestamp': 1758563110,
|
||||||
|
'modified_date': '20250922',
|
||||||
|
'_old_archive_ids': ['rtp e877072'],
|
||||||
|
},
|
||||||
|
'params': {'noplaylist': True},
|
||||||
|
}, {
|
||||||
|
# Unambiguous URL for 2nd part of a multi-part episode
|
||||||
|
'url': 'https://www.rtp.pt/play/p14335/e877072/a-nossa-tarde/1364744',
|
||||||
|
'md5': 'b624767af558a557372a6fcd1dcdfa17',
|
||||||
|
'info_dict': {
|
||||||
|
'id': '1364744',
|
||||||
|
'ext': 'mp4',
|
||||||
|
'title': 'A Nossa Tarde',
|
||||||
|
'duration': 3270.0,
|
||||||
|
'thumbnail': r're:https://cdn-images\.rtp\.pt/multimedia/screenshots/p14335/p14335_2_20250922165718e161t0412\.jpg',
|
||||||
|
'series': 'A Nossa Tarde',
|
||||||
|
'series_id': 'p14335',
|
||||||
|
'season': '2025',
|
||||||
|
'episode_id': 'e877072',
|
||||||
|
'timestamp': 1758560188,
|
||||||
|
'upload_date': '20250922',
|
||||||
|
'modified_timestamp': 1758563110,
|
||||||
|
'modified_date': '20250922',
|
||||||
},
|
},
|
||||||
}]
|
}]
|
||||||
|
|
||||||
@ -92,19 +160,19 @@ class RTPIE(InfoExtractor):
|
|||||||
return None
|
return None
|
||||||
return url.replace('/drm-fps/', '/hls/').replace('/drm-dash/', '/dash/')
|
return url.replace('/drm-fps/', '/hls/').replace('/drm-dash/', '/dash/')
|
||||||
|
|
||||||
def _extract_formats(self, media_urls, episode_id):
|
def _extract_formats(self, media_urls, display_id):
|
||||||
formats = []
|
formats = []
|
||||||
subtitles = {}
|
subtitles = {}
|
||||||
for media_url in set(traverse_obj(media_urls, (..., {url_or_none}, {self._cleanup_media_url}))):
|
for media_url in set(traverse_obj(media_urls, (..., {url_or_none}, {self._cleanup_media_url}))):
|
||||||
ext = determine_ext(media_url)
|
ext = determine_ext(media_url)
|
||||||
if ext == 'm3u8':
|
if ext == 'm3u8':
|
||||||
fmts, subs = self._extract_m3u8_formats_and_subtitles(
|
fmts, subs = self._extract_m3u8_formats_and_subtitles(
|
||||||
media_url, episode_id, m3u8_id='hls', fatal=False)
|
media_url, display_id, m3u8_id='hls', fatal=False)
|
||||||
formats.extend(fmts)
|
formats.extend(fmts)
|
||||||
self._merge_subtitles(subs, target=subtitles)
|
self._merge_subtitles(subs, target=subtitles)
|
||||||
elif ext == 'mpd':
|
elif ext == 'mpd':
|
||||||
fmts, subs = self._extract_mpd_formats_and_subtitles(
|
fmts, subs = self._extract_mpd_formats_and_subtitles(
|
||||||
media_url, episode_id, mpd_id='dash', fatal=False)
|
media_url, display_id, mpd_id='dash', fatal=False)
|
||||||
formats.extend(fmts)
|
formats.extend(fmts)
|
||||||
self._merge_subtitles(subs, target=subtitles)
|
self._merge_subtitles(subs, target=subtitles)
|
||||||
else:
|
else:
|
||||||
@ -114,24 +182,12 @@ class RTPIE(InfoExtractor):
|
|||||||
})
|
})
|
||||||
return formats, subtitles
|
return formats, subtitles
|
||||||
|
|
||||||
def _extract_from_api(self, program_id, episode_id):
|
def _extract_asset(self, asset_data, episode_id, episode_info, archive_compat=False):
|
||||||
auth_token = self._fetch_auth_token()
|
asset_id = asset_data['asset_id']
|
||||||
if not auth_token:
|
asset_urls = traverse_obj(asset_data, ('asset_url', {dict}))
|
||||||
return
|
|
||||||
episode_data = traverse_obj(self._download_json(
|
|
||||||
f'https://www.rtp.pt/play/api/1/get-episode/{program_id}/{episode_id[1:]}', episode_id,
|
|
||||||
query={'include_assets': 'true', 'include_webparams': 'true'},
|
|
||||||
headers={
|
|
||||||
'Accept': '*/*',
|
|
||||||
'Authorization': f'Bearer {auth_token}',
|
|
||||||
'User-Agent': self._USER_AGENT,
|
|
||||||
}, fatal=False), 'result', {dict})
|
|
||||||
if not episode_data:
|
|
||||||
return
|
|
||||||
asset_urls = traverse_obj(episode_data, ('assets', 0, 'asset_url', {dict}))
|
|
||||||
media_urls = traverse_obj(asset_urls, (
|
media_urls = traverse_obj(asset_urls, (
|
||||||
((('hls', 'dash'), 'stream_url'), ('multibitrate', ('url_hls', 'url_dash'))),))
|
((('hls', 'dash'), 'stream_url'), ('multibitrate', ('url_hls', 'url_dash'))),))
|
||||||
formats, subtitles = self._extract_formats(media_urls, episode_id)
|
formats, subtitles = self._extract_formats(media_urls, asset_id)
|
||||||
|
|
||||||
for sub_data in traverse_obj(asset_urls, ('subtitles', 'vtt_list', lambda _, v: url_or_none(v['file']))):
|
for sub_data in traverse_obj(asset_urls, ('subtitles', 'vtt_list', lambda _, v: url_or_none(v['file']))):
|
||||||
subtitles.setdefault(sub_data.get('code') or 'pt', []).append({
|
subtitles.setdefault(sub_data.get('code') or 'pt', []).append({
|
||||||
@ -140,17 +196,63 @@ class RTPIE(InfoExtractor):
|
|||||||
})
|
})
|
||||||
|
|
||||||
return {
|
return {
|
||||||
'id': episode_id,
|
**episode_info,
|
||||||
|
'id': asset_id,
|
||||||
|
'episode_id': episode_id,
|
||||||
|
# asset_id is a unique identifier for all RTP videos, while episode_id is duplicated
|
||||||
|
# across all parts of a multi-part episode. Older versions of this IE returned
|
||||||
|
# episode_id as the video id and would only download the first part of multi-part eps.
|
||||||
|
# For download archive compat, we should return the episode_id as the old archive id
|
||||||
|
# *only* when extracting single-part episodes OR the *first* part of a multi-part ep.
|
||||||
|
'_old_archive_ids': [make_archive_id(self, episode_id)] if archive_compat else None,
|
||||||
'formats': formats,
|
'formats': formats,
|
||||||
'subtitles': subtitles,
|
'subtitles': subtitles,
|
||||||
'thumbnail': traverse_obj(episode_data, ('assets', 0, 'asset_thumbnail', {url_or_none})),
|
**traverse_obj(asset_data, {
|
||||||
|
'thumbnail': ('asset_thumbnail', {url_or_none}),
|
||||||
|
'duration': ('asset_duration', {parse_duration}),
|
||||||
|
'webpage_url': ('web', 'url', {url_or_none}),
|
||||||
|
}),
|
||||||
|
}
|
||||||
|
|
||||||
|
def _report_fallback_warning(self, missing_info_name='required info', display_id=None):
|
||||||
|
self.report_warning(
|
||||||
|
f'{missing_info_name.capitalize()} not found in API response; falling back to web extraction',
|
||||||
|
video_id=display_id)
|
||||||
|
|
||||||
|
def _entries(self, assets, episode_id, episode_info):
|
||||||
|
# Only pass archive_compat=True for the first entry without an asset_id in its webpage_url
|
||||||
|
for idx, asset_data in enumerate(assets):
|
||||||
|
yield self._extract_asset(asset_data, episode_id, episode_info, archive_compat=not idx)
|
||||||
|
|
||||||
|
def _extract_from_api(self, program_id, episode_id, asset_id):
|
||||||
|
auth_token = self._fetch_auth_token()
|
||||||
|
if not auth_token:
|
||||||
|
self._report_fallback_warning('auth token', episode_id)
|
||||||
|
return None
|
||||||
|
|
||||||
|
episode_data = traverse_obj(self._download_json(
|
||||||
|
f'https://www.rtp.pt/play/api/1/get-episode/{program_id[1:]}/{episode_id[1:]}',
|
||||||
|
asset_id or episode_id, query={'include_assets': 'true', 'include_webparams': 'true'},
|
||||||
|
headers={
|
||||||
|
'Accept': '*/*',
|
||||||
|
'Authorization': f'Bearer {auth_token}',
|
||||||
|
'User-Agent': self._USER_AGENT,
|
||||||
|
}, fatal=False), 'result', {dict})
|
||||||
|
if not episode_data:
|
||||||
|
self._report_fallback_warning('episode data', episode_id)
|
||||||
|
return None
|
||||||
|
|
||||||
|
episode_info = {
|
||||||
|
'id': episode_id, # playlist id
|
||||||
|
'episode_id': episode_id,
|
||||||
|
'series_id': program_id,
|
||||||
**traverse_obj(episode_data, ('episode', {
|
**traverse_obj(episode_data, ('episode', {
|
||||||
'title': (('episode_title', 'program_title'), {str}, filter, any),
|
'title': (('episode_title', 'program_title'), {str}, filter, any),
|
||||||
'alt_title': ('episode_subtitle', {str}, filter),
|
'alt_title': ('episode_subtitle', {str}, filter),
|
||||||
'description': (('episode_description', 'episode_summary'), {str}, filter, any),
|
'description': (('episode_description', 'episode_summary'), {str}, filter, any),
|
||||||
'timestamp': ('episode_air_date', {parse_iso8601(delimiter=' ')}),
|
'timestamp': ('episode_air_date', {parse_iso8601(delimiter=' ')}),
|
||||||
'modified_timestamp': ('episode_lastchanged', {parse_iso8601(delimiter=' ')}),
|
'modified_timestamp': ('episode_lastchanged', {parse_iso8601(delimiter=' ')}),
|
||||||
'duration': ('episode_duration_complete', {parse_duration}),
|
'duration': ('episode_duration_complete', {parse_duration}), # playlist duration
|
||||||
'episode': ('episode_title', {str}, filter),
|
'episode': ('episode_title', {str}, filter),
|
||||||
'episode_number': ('episode_number', {int_or_none}),
|
'episode_number': ('episode_number', {int_or_none}),
|
||||||
'season': ('program_season', {str}, filter),
|
'season': ('program_season', {str}, filter),
|
||||||
@ -158,6 +260,30 @@ class RTPIE(InfoExtractor):
|
|||||||
})),
|
})),
|
||||||
}
|
}
|
||||||
|
|
||||||
|
assets = traverse_obj(episode_data, ('assets', lambda _, v: v['asset_id']))
|
||||||
|
if not assets:
|
||||||
|
self._report_fallback_warning('asset IDs', episode_id)
|
||||||
|
return None
|
||||||
|
|
||||||
|
if asset_id:
|
||||||
|
asset_data = traverse_obj(assets, (lambda _, v: v['asset_id'] == asset_id, any))
|
||||||
|
if not asset_data:
|
||||||
|
self._report_fallback_warning(f'asset {asset_id}', episode_id)
|
||||||
|
return None
|
||||||
|
return self._extract_asset(asset_data, episode_id, episode_info)
|
||||||
|
|
||||||
|
asset_data = assets[0]
|
||||||
|
|
||||||
|
if self._yes_playlist(
|
||||||
|
len(assets) > 1 and episode_id, asset_data['asset_id'],
|
||||||
|
playlist_label='multi-part episode', video_label='individual part',
|
||||||
|
):
|
||||||
|
return self.playlist_result(
|
||||||
|
self._entries(assets, episode_id, episode_info), **episode_info)
|
||||||
|
|
||||||
|
# Pass archive_compat=True so we return _old_archive_ids for URLs without an asset_id
|
||||||
|
return self._extract_asset(asset_data, episode_id, episode_info, archive_compat=True)
|
||||||
|
|
||||||
_RX_OBFUSCATION = re.compile(r'''(?xs)
|
_RX_OBFUSCATION = re.compile(r'''(?xs)
|
||||||
atob\s*\(\s*decodeURIComponent\s*\(\s*
|
atob\s*\(\s*decodeURIComponent\s*\(\s*
|
||||||
(\[[0-9A-Za-z%,'"]*\])
|
(\[[0-9A-Za-z%,'"]*\])
|
||||||
@ -172,25 +298,35 @@ class RTPIE(InfoExtractor):
|
|||||||
)).decode('iso-8859-1')),
|
)).decode('iso-8859-1')),
|
||||||
data)
|
data)
|
||||||
|
|
||||||
def _extract_from_html(self, url, episode_id):
|
def _extract_from_html(self, url, program_id, episode_id, asset_id):
|
||||||
webpage = self._download_webpage(url, episode_id)
|
webpage = self._download_webpage(url, asset_id or episode_id)
|
||||||
|
if not asset_id:
|
||||||
|
asset_id = self._search_regex(r'\basset_id\s*:\s*"(\d+)"', webpage, 'asset ID')
|
||||||
|
old_archive_ids = [make_archive_id(self, episode_id)]
|
||||||
|
else:
|
||||||
|
old_archive_ids = None
|
||||||
|
|
||||||
formats = []
|
formats = []
|
||||||
subtitles = {}
|
subtitles = {}
|
||||||
media_urls = traverse_obj(re.findall(r'(?:var\s+f\s*=|RTPPlayer\({[^}]+file:)\s*({[^}]+}|"[^"]+")', webpage), (
|
media_urls = traverse_obj(re.findall(r'(?:var\s+f\s*=|RTPPlayer\({[^}]+file:)\s*({[^}]+}|"[^"]+")', webpage), (
|
||||||
-1, (({self.__unobfuscate}, {js_to_json}, {json.loads}, {dict.values}, ...), {json.loads})))
|
-1, (({self.__unobfuscate}, {js_to_json}, {json.loads}, {dict.values}, ...), {json.loads})))
|
||||||
formats, subtitles = self._extract_formats(media_urls, episode_id)
|
formats, subtitles = self._extract_formats(media_urls, asset_id)
|
||||||
|
|
||||||
return {
|
return {
|
||||||
'id': episode_id,
|
'id': asset_id,
|
||||||
|
'episode_id': episode_id,
|
||||||
|
'series_id': program_id,
|
||||||
'formats': formats,
|
'formats': formats,
|
||||||
'subtitles': subtitles,
|
'subtitles': subtitles,
|
||||||
'description': self._html_search_meta(['og:description', 'twitter:description'], webpage, default=None),
|
'description': self._html_search_meta(['og:description', 'twitter:description'], webpage, default=None),
|
||||||
'thumbnail': self._html_search_meta(['og:image', 'twitter:image'], webpage, default=None),
|
'thumbnail': self._html_search_meta(['og:image', 'twitter:image'], webpage, default=None),
|
||||||
**self._search_json_ld(webpage, episode_id, default={}),
|
**self._search_json_ld(webpage, asset_id, default={}),
|
||||||
'title': self._html_search_meta(['og:title', 'twitter:title'], webpage, default=None),
|
'title': self._html_search_meta(['og:title', 'twitter:title'], webpage, default=None),
|
||||||
|
'_old_archive_ids': old_archive_ids,
|
||||||
}
|
}
|
||||||
|
|
||||||
def _real_extract(self, url):
|
def _real_extract(self, url):
|
||||||
program_id, episode_id = self._match_valid_url(url).group('program_id', 'id')
|
program_id, episode_id, asset_id = self._match_valid_url(url).group('program_id', 'episode_id', 'asset_id')
|
||||||
return self._extract_from_api(program_id, episode_id) or self._extract_from_html(url, episode_id)
|
return (
|
||||||
|
self._extract_from_api(program_id, episode_id, asset_id)
|
||||||
|
or self._extract_from_html(url, program_id, episode_id, asset_id))
|
||||||
|
|||||||
@ -1,4 +1,4 @@
|
|||||||
from .floatplane import FloatplaneBaseIE
|
from .floatplane import FloatplaneBaseIE, FloatplaneChannelBaseIE
|
||||||
|
|
||||||
|
|
||||||
class SaucePlusIE(FloatplaneBaseIE):
|
class SaucePlusIE(FloatplaneBaseIE):
|
||||||
@ -39,3 +39,19 @@ class SaucePlusIE(FloatplaneBaseIE):
|
|||||||
def _real_initialize(self):
|
def _real_initialize(self):
|
||||||
if not self._get_cookies(self._BASE_URL).get('__Host-sp-sess'):
|
if not self._get_cookies(self._BASE_URL).get('__Host-sp-sess'):
|
||||||
self.raise_login_required()
|
self.raise_login_required()
|
||||||
|
|
||||||
|
|
||||||
|
class SaucePlusChannelIE(FloatplaneChannelBaseIE):
|
||||||
|
_VALID_URL = r'https?://(?:(?:www|beta)\.)?sauceplus\.com/channel/(?P<id>[\w-]+)/home(?:/(?P<channel>[\w-]+))?'
|
||||||
|
_BASE_URL = 'https://www.sauceplus.com'
|
||||||
|
_RESULT_IE = SaucePlusIE
|
||||||
|
_PAGE_SIZE = 20
|
||||||
|
_TESTS = [{
|
||||||
|
'url': 'https://www.sauceplus.com/channel/williamosman/home',
|
||||||
|
'info_dict': {
|
||||||
|
'id': 'williamosman',
|
||||||
|
'title': 'William Osman',
|
||||||
|
'description': 'md5:a67bc961d23c293b2c5308d84f34f26c',
|
||||||
|
},
|
||||||
|
'playlist_mincount': 158,
|
||||||
|
}]
|
||||||
|
|||||||
@ -146,8 +146,8 @@ class SBSIE(InfoExtractor):
|
|||||||
'release_year': ('releaseYear', {int_or_none}),
|
'release_year': ('releaseYear', {int_or_none}),
|
||||||
'duration': ('duration', ({float_or_none}, {parse_duration})),
|
'duration': ('duration', ({float_or_none}, {parse_duration})),
|
||||||
'is_live': ('liveStream', {bool}),
|
'is_live': ('liveStream', {bool}),
|
||||||
'age_limit': (('classificationID', 'contentRating'), {str.upper}, {
|
'age_limit': (
|
||||||
lambda x: self._AUS_TV_PARENTAL_GUIDELINES.get(x)}), # dict.get is unhashable in py3.7
|
('classificationID', 'contentRating'), {str.upper}, {self._AUS_TV_PARENTAL_GUIDELINES.get}),
|
||||||
}, get_all=False),
|
}, get_all=False),
|
||||||
**traverse_obj(media, {
|
**traverse_obj(media, {
|
||||||
'categories': (('genres', ...), ('taxonomy', ('genre', 'subgenre'), 'name'), {str}),
|
'categories': (('genres', ...), ('taxonomy', ('genre', 'subgenre'), 'name'), {str}),
|
||||||
|
|||||||
@ -6,6 +6,7 @@ import re
|
|||||||
from .common import InfoExtractor, SearchInfoExtractor
|
from .common import InfoExtractor, SearchInfoExtractor
|
||||||
from ..networking import HEADRequest
|
from ..networking import HEADRequest
|
||||||
from ..networking.exceptions import HTTPError
|
from ..networking.exceptions import HTTPError
|
||||||
|
from ..networking.impersonate import ImpersonateTarget
|
||||||
from ..utils import (
|
from ..utils import (
|
||||||
ExtractorError,
|
ExtractorError,
|
||||||
float_or_none,
|
float_or_none,
|
||||||
@ -118,9 +119,9 @@ class SoundcloudBaseIE(InfoExtractor):
|
|||||||
self.cache.store('soundcloud', 'client_id', client_id)
|
self.cache.store('soundcloud', 'client_id', client_id)
|
||||||
|
|
||||||
def _update_client_id(self):
|
def _update_client_id(self):
|
||||||
webpage = self._download_webpage('https://soundcloud.com/', None)
|
webpage = self._download_webpage('https://soundcloud.com/', None, 'Downloading main page')
|
||||||
for src in reversed(re.findall(r'<script[^>]+src="([^"]+)"', webpage)):
|
for src in reversed(re.findall(r'<script[^>]+src="([^"]+)"', webpage)):
|
||||||
script = self._download_webpage(src, None, fatal=False)
|
script = self._download_webpage(src, None, 'Downloading JS asset', fatal=False)
|
||||||
if script:
|
if script:
|
||||||
client_id = self._search_regex(
|
client_id = self._search_regex(
|
||||||
r'client_id\s*:\s*"([0-9a-zA-Z]{32})"',
|
r'client_id\s*:\s*"([0-9a-zA-Z]{32})"',
|
||||||
@ -136,13 +137,13 @@ class SoundcloudBaseIE(InfoExtractor):
|
|||||||
if non_fatal:
|
if non_fatal:
|
||||||
del kwargs['fatal']
|
del kwargs['fatal']
|
||||||
query = kwargs.get('query', {}).copy()
|
query = kwargs.get('query', {}).copy()
|
||||||
for _ in range(2):
|
for is_first_attempt in (True, False):
|
||||||
query['client_id'] = self._CLIENT_ID
|
query['client_id'] = self._CLIENT_ID
|
||||||
kwargs['query'] = query
|
kwargs['query'] = query
|
||||||
try:
|
try:
|
||||||
return self._download_json(*args, **kwargs)
|
return self._download_json(*args, **kwargs)
|
||||||
except ExtractorError as e:
|
except ExtractorError as e:
|
||||||
if isinstance(e.cause, HTTPError) and e.cause.status in (401, 403):
|
if is_first_attempt and isinstance(e.cause, HTTPError) and e.cause.status in (401, 403):
|
||||||
self._store_client_id(None)
|
self._store_client_id(None)
|
||||||
self._update_client_id()
|
self._update_client_id()
|
||||||
continue
|
continue
|
||||||
@ -152,7 +153,10 @@ class SoundcloudBaseIE(InfoExtractor):
|
|||||||
raise
|
raise
|
||||||
|
|
||||||
def _initialize_pre_login(self):
|
def _initialize_pre_login(self):
|
||||||
self._CLIENT_ID = self.cache.load('soundcloud', 'client_id') or 'a3e059563d7fd3372b49b37f00a00bcf'
|
self._CLIENT_ID = self.cache.load('soundcloud', 'client_id')
|
||||||
|
if self._CLIENT_ID:
|
||||||
|
return
|
||||||
|
self._update_client_id()
|
||||||
|
|
||||||
def _verify_oauth_token(self, token):
|
def _verify_oauth_token(self, token):
|
||||||
if self._request_webpage(
|
if self._request_webpage(
|
||||||
@ -830,6 +834,30 @@ class SoundcloudPagedPlaylistBaseIE(SoundcloudBaseIE):
|
|||||||
'entries': self._entries(base_url, playlist_id),
|
'entries': self._entries(base_url, playlist_id),
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@functools.cached_property
|
||||||
|
def _browser_impersonate_target(self):
|
||||||
|
available_targets = self._downloader._get_available_impersonate_targets()
|
||||||
|
if not available_targets:
|
||||||
|
# impersonate=True gives a generic warning when no impersonation targets are available
|
||||||
|
return True
|
||||||
|
|
||||||
|
# Any browser target older than chrome-116 is 403'd by Datadome
|
||||||
|
MIN_SUPPORTED_TARGET = ImpersonateTarget('chrome', '116', 'windows', '10')
|
||||||
|
version_as_float = lambda x: float(x.version) if x.version else 0
|
||||||
|
|
||||||
|
# Always try to use the newest Chrome target available
|
||||||
|
filtered = sorted([
|
||||||
|
target[0] for target in available_targets
|
||||||
|
if target[0].client == 'chrome' and target[0].os in ('windows', 'macos')
|
||||||
|
], key=version_as_float)
|
||||||
|
|
||||||
|
if not filtered or version_as_float(filtered[-1]) < version_as_float(MIN_SUPPORTED_TARGET):
|
||||||
|
# All available targets are inadequate or newest available Chrome target is too old, so
|
||||||
|
# warn the user to upgrade their dependency to a version with the minimum supported target
|
||||||
|
return MIN_SUPPORTED_TARGET
|
||||||
|
|
||||||
|
return filtered[-1]
|
||||||
|
|
||||||
def _entries(self, url, playlist_id):
|
def _entries(self, url, playlist_id):
|
||||||
# Per the SoundCloud documentation, the maximum limit for a linked partitioning query is 200.
|
# Per the SoundCloud documentation, the maximum limit for a linked partitioning query is 200.
|
||||||
# https://developers.soundcloud.com/blog/offset-pagination-deprecated
|
# https://developers.soundcloud.com/blog/offset-pagination-deprecated
|
||||||
@ -844,7 +872,9 @@ class SoundcloudPagedPlaylistBaseIE(SoundcloudBaseIE):
|
|||||||
try:
|
try:
|
||||||
response = self._call_api(
|
response = self._call_api(
|
||||||
url, playlist_id, query=query, headers=self._HEADERS,
|
url, playlist_id, query=query, headers=self._HEADERS,
|
||||||
note=f'Downloading track page {i + 1}')
|
note=f'Downloading track page {i + 1}',
|
||||||
|
# See: https://github.com/yt-dlp/yt-dlp/issues/15660
|
||||||
|
impersonate=self._browser_impersonate_target)
|
||||||
break
|
break
|
||||||
except ExtractorError as e:
|
except ExtractorError as e:
|
||||||
# Downloading page may result in intermittent 502 HTTP error
|
# Downloading page may result in intermittent 502 HTTP error
|
||||||
|
|||||||
@ -3,6 +3,7 @@ import re
|
|||||||
from .common import InfoExtractor
|
from .common import InfoExtractor
|
||||||
from ..utils import (
|
from ..utils import (
|
||||||
ExtractorError,
|
ExtractorError,
|
||||||
|
clean_html,
|
||||||
determine_ext,
|
determine_ext,
|
||||||
merge_dicts,
|
merge_dicts,
|
||||||
parse_duration,
|
parse_duration,
|
||||||
@ -12,6 +13,7 @@ from ..utils import (
|
|||||||
urlencode_postdata,
|
urlencode_postdata,
|
||||||
urljoin,
|
urljoin,
|
||||||
)
|
)
|
||||||
|
from ..utils.traversal import find_element, traverse_obj, trim_str
|
||||||
|
|
||||||
|
|
||||||
class SpankBangIE(InfoExtractor):
|
class SpankBangIE(InfoExtractor):
|
||||||
@ -122,7 +124,7 @@ class SpankBangIE(InfoExtractor):
|
|||||||
}), headers={
|
}), headers={
|
||||||
'Referer': url,
|
'Referer': url,
|
||||||
'X-Requested-With': 'XMLHttpRequest',
|
'X-Requested-With': 'XMLHttpRequest',
|
||||||
})
|
}, impersonate=True)
|
||||||
|
|
||||||
for format_id, format_url in stream.items():
|
for format_id, format_url in stream.items():
|
||||||
if format_url and isinstance(format_url, list):
|
if format_url and isinstance(format_url, list):
|
||||||
@ -178,9 +180,9 @@ class SpankBangPlaylistIE(InfoExtractor):
|
|||||||
def _real_extract(self, url):
|
def _real_extract(self, url):
|
||||||
mobj = self._match_valid_url(url)
|
mobj = self._match_valid_url(url)
|
||||||
playlist_id = mobj.group('id')
|
playlist_id = mobj.group('id')
|
||||||
|
country = self.get_param('geo_bypass_country') or 'US'
|
||||||
webpage = self._download_webpage(
|
self._set_cookie('.spankbang.com', 'country', country.upper())
|
||||||
url, playlist_id, headers={'Cookie': 'country=US; mobile=on'})
|
webpage = self._download_webpage(url, playlist_id, impersonate=True)
|
||||||
|
|
||||||
entries = [self.url_result(
|
entries = [self.url_result(
|
||||||
urljoin(url, mobj.group('path')),
|
urljoin(url, mobj.group('path')),
|
||||||
@ -189,8 +191,8 @@ class SpankBangPlaylistIE(InfoExtractor):
|
|||||||
r'<a[^>]+\bhref=(["\'])(?P<path>/?[\da-z]+-(?P<id>[\da-z]+)/playlist/[^"\'](?:(?!\1).)*)\1',
|
r'<a[^>]+\bhref=(["\'])(?P<path>/?[\da-z]+-(?P<id>[\da-z]+)/playlist/[^"\'](?:(?!\1).)*)\1',
|
||||||
webpage)]
|
webpage)]
|
||||||
|
|
||||||
title = self._html_search_regex(
|
title = traverse_obj(webpage, (
|
||||||
r'<em>([^<]+)</em>\s+playlist\s*<', webpage, 'playlist title',
|
{find_element(tag='h1', attr='data-testid', value='playlist-title')},
|
||||||
fatal=False)
|
{clean_html}, {trim_str(end=' Playlist')}))
|
||||||
|
|
||||||
return self.playlist_result(entries, playlist_id, title)
|
return self.playlist_result(entries, playlist_id, title)
|
||||||
|
|||||||
@ -8,15 +8,12 @@ from ..utils import (
|
|||||||
extract_attributes,
|
extract_attributes,
|
||||||
join_nonempty,
|
join_nonempty,
|
||||||
js_to_json,
|
js_to_json,
|
||||||
|
parse_resolution,
|
||||||
str_or_none,
|
str_or_none,
|
||||||
|
url_basename,
|
||||||
url_or_none,
|
url_or_none,
|
||||||
)
|
)
|
||||||
from ..utils.traversal import (
|
from ..utils.traversal import find_element, traverse_obj
|
||||||
find_element,
|
|
||||||
find_elements,
|
|
||||||
traverse_obj,
|
|
||||||
trim_str,
|
|
||||||
)
|
|
||||||
|
|
||||||
|
|
||||||
class SteamIE(InfoExtractor):
|
class SteamIE(InfoExtractor):
|
||||||
@ -27,7 +24,7 @@ class SteamIE(InfoExtractor):
|
|||||||
'id': '105600',
|
'id': '105600',
|
||||||
'title': 'Terraria',
|
'title': 'Terraria',
|
||||||
},
|
},
|
||||||
'playlist_mincount': 3,
|
'playlist_mincount': 5,
|
||||||
}, {
|
}, {
|
||||||
'url': 'https://store.steampowered.com/app/271590/Grand_Theft_Auto_V/',
|
'url': 'https://store.steampowered.com/app/271590/Grand_Theft_Auto_V/',
|
||||||
'info_dict': {
|
'info_dict': {
|
||||||
@ -37,6 +34,39 @@ class SteamIE(InfoExtractor):
|
|||||||
'playlist_mincount': 26,
|
'playlist_mincount': 26,
|
||||||
}]
|
}]
|
||||||
|
|
||||||
|
def _entries(self, app_id, app_name, data_props):
|
||||||
|
for trailer in traverse_obj(data_props, (
|
||||||
|
'trailers', lambda _, v: str_or_none(v['id']),
|
||||||
|
)):
|
||||||
|
movie_id = str_or_none(trailer['id'])
|
||||||
|
|
||||||
|
thumbnails = []
|
||||||
|
for thumbnail_url in traverse_obj(trailer, (
|
||||||
|
('poster', 'thumbnail'), {url_or_none},
|
||||||
|
)):
|
||||||
|
thumbnails.append({
|
||||||
|
'url': thumbnail_url,
|
||||||
|
**parse_resolution(url_basename(thumbnail_url)),
|
||||||
|
})
|
||||||
|
|
||||||
|
formats = []
|
||||||
|
if hls_manifest := traverse_obj(trailer, ('hlsManifest', {url_or_none})):
|
||||||
|
formats.extend(self._extract_m3u8_formats(
|
||||||
|
hls_manifest, app_id, 'mp4', m3u8_id='hls', fatal=False))
|
||||||
|
for dash_manifest in traverse_obj(trailer, ('dashManifests', ..., {url_or_none})):
|
||||||
|
formats.extend(self._extract_mpd_formats(
|
||||||
|
dash_manifest, app_id, mpd_id='dash', fatal=False))
|
||||||
|
self._remove_duplicate_formats(formats)
|
||||||
|
|
||||||
|
yield {
|
||||||
|
'id': join_nonempty(app_id, movie_id),
|
||||||
|
'title': join_nonempty(app_name, 'video', movie_id, delim=' '),
|
||||||
|
'formats': formats,
|
||||||
|
'series': app_name,
|
||||||
|
'series_id': app_id,
|
||||||
|
'thumbnails': thumbnails,
|
||||||
|
}
|
||||||
|
|
||||||
def _real_extract(self, url):
|
def _real_extract(self, url):
|
||||||
app_id = self._match_id(url)
|
app_id = self._match_id(url)
|
||||||
|
|
||||||
@ -45,32 +75,13 @@ class SteamIE(InfoExtractor):
|
|||||||
self._set_cookie('store.steampowered.com', 'lastagecheckage', '1-January-2000')
|
self._set_cookie('store.steampowered.com', 'lastagecheckage', '1-January-2000')
|
||||||
|
|
||||||
webpage = self._download_webpage(url, app_id)
|
webpage = self._download_webpage(url, app_id)
|
||||||
app_name = traverse_obj(webpage, ({find_element(cls='apphub_AppName')}, {clean_html}))
|
data_props = traverse_obj(webpage, (
|
||||||
|
{find_element(cls='gamehighlight_desktopcarousel', html=True)},
|
||||||
|
{extract_attributes}, 'data-props', {json.loads}, {dict}))
|
||||||
|
app_name = traverse_obj(data_props, ('appName', {clean_html}))
|
||||||
|
|
||||||
entries = []
|
return self.playlist_result(
|
||||||
for data_prop in traverse_obj(webpage, (
|
self._entries(app_id, app_name, data_props), app_id, app_name)
|
||||||
{find_elements(cls='highlight_player_item highlight_movie', html=True)},
|
|
||||||
..., {extract_attributes}, 'data-props', {json.loads}, {dict},
|
|
||||||
)):
|
|
||||||
formats = []
|
|
||||||
if hls_manifest := traverse_obj(data_prop, ('hlsManifest', {url_or_none})):
|
|
||||||
formats.extend(self._extract_m3u8_formats(
|
|
||||||
hls_manifest, app_id, 'mp4', m3u8_id='hls', fatal=False))
|
|
||||||
for dash_manifest in traverse_obj(data_prop, ('dashManifests', ..., {url_or_none})):
|
|
||||||
formats.extend(self._extract_mpd_formats(
|
|
||||||
dash_manifest, app_id, mpd_id='dash', fatal=False))
|
|
||||||
|
|
||||||
movie_id = traverse_obj(data_prop, ('id', {trim_str(start='highlight_movie_')}))
|
|
||||||
entries.append({
|
|
||||||
'id': movie_id,
|
|
||||||
'title': join_nonempty(app_name, 'video', movie_id, delim=' '),
|
|
||||||
'formats': formats,
|
|
||||||
'series': app_name,
|
|
||||||
'series_id': app_id,
|
|
||||||
'thumbnail': traverse_obj(data_prop, ('screenshot', {url_or_none})),
|
|
||||||
})
|
|
||||||
|
|
||||||
return self.playlist_result(entries, app_id, app_name)
|
|
||||||
|
|
||||||
|
|
||||||
class SteamCommunityIE(InfoExtractor):
|
class SteamCommunityIE(InfoExtractor):
|
||||||
|
|||||||
@ -22,7 +22,7 @@ class StreaksBaseIE(InfoExtractor):
|
|||||||
_GEO_BYPASS = False
|
_GEO_BYPASS = False
|
||||||
_GEO_COUNTRIES = ['JP']
|
_GEO_COUNTRIES = ['JP']
|
||||||
|
|
||||||
def _extract_from_streaks_api(self, project_id, media_id, headers=None, query=None, ssai=False):
|
def _extract_from_streaks_api(self, project_id, media_id, headers=None, query=None, ssai=False, live_from_start=False):
|
||||||
try:
|
try:
|
||||||
response = self._download_json(
|
response = self._download_json(
|
||||||
self._API_URL_TEMPLATE.format('playback', project_id, media_id, ''),
|
self._API_URL_TEMPLATE.format('playback', project_id, media_id, ''),
|
||||||
@ -83,6 +83,10 @@ class StreaksBaseIE(InfoExtractor):
|
|||||||
|
|
||||||
fmts, subs = self._extract_m3u8_formats_and_subtitles(
|
fmts, subs = self._extract_m3u8_formats_and_subtitles(
|
||||||
src_url, media_id, 'mp4', m3u8_id='hls', fatal=False, live=is_live, query=query)
|
src_url, media_id, 'mp4', m3u8_id='hls', fatal=False, live=is_live, query=query)
|
||||||
|
for fmt in fmts:
|
||||||
|
if live_from_start:
|
||||||
|
fmt.setdefault('downloader_options', {}).update({'ffmpeg_args': ['-live_start_index', '0']})
|
||||||
|
fmt['is_from_start'] = True
|
||||||
formats.extend(fmts)
|
formats.extend(fmts)
|
||||||
self._merge_subtitles(subs, target=subtitles)
|
self._merge_subtitles(subs, target=subtitles)
|
||||||
|
|
||||||
|
|||||||
@ -102,7 +102,7 @@ class TeachableIE(TeachableBaseIE):
|
|||||||
_WORKING = False
|
_WORKING = False
|
||||||
_VALID_URL = r'''(?x)
|
_VALID_URL = r'''(?x)
|
||||||
(?:
|
(?:
|
||||||
{}https?://(?P<site_t>[^/]+)|
|
{}https?://(?P<site_t>[a-zA-Z0-9.-]+)|
|
||||||
https?://(?:www\.)?(?P<site>{})
|
https?://(?:www\.)?(?P<site>{})
|
||||||
)
|
)
|
||||||
/courses/[^/]+/lectures/(?P<id>\d+)
|
/courses/[^/]+/lectures/(?P<id>\d+)
|
||||||
@ -211,7 +211,7 @@ class TeachableIE(TeachableBaseIE):
|
|||||||
class TeachableCourseIE(TeachableBaseIE):
|
class TeachableCourseIE(TeachableBaseIE):
|
||||||
_VALID_URL = r'''(?x)
|
_VALID_URL = r'''(?x)
|
||||||
(?:
|
(?:
|
||||||
{}https?://(?P<site_t>[^/]+)|
|
{}https?://(?P<site_t>[a-zA-Z0-9.-]+)|
|
||||||
https?://(?:www\.)?(?P<site>{})
|
https?://(?:www\.)?(?P<site>{})
|
||||||
)
|
)
|
||||||
/(?:courses|p)/(?:enrolled/)?(?P<id>[^/?#&]+)
|
/(?:courses|p)/(?:enrolled/)?(?P<id>[^/?#&]+)
|
||||||
|
|||||||
@ -9,39 +9,39 @@ class Tele5IE(DiscoveryPlusBaseIE):
|
|||||||
_VALID_URL = r'https?://(?:www\.)?tele5\.de/(?P<parent_slug>[\w-]+)/(?P<slug_a>[\w-]+)(?:/(?P<slug_b>[\w-]+))?'
|
_VALID_URL = r'https?://(?:www\.)?tele5\.de/(?P<parent_slug>[\w-]+)/(?P<slug_a>[\w-]+)(?:/(?P<slug_b>[\w-]+))?'
|
||||||
_TESTS = [{
|
_TESTS = [{
|
||||||
# slug_a and slug_b
|
# slug_a and slug_b
|
||||||
'url': 'https://tele5.de/mediathek/stargate-atlantis/quarantane',
|
'url': 'https://tele5.de/mediathek/star-trek-enterprise/vox-sola',
|
||||||
'info_dict': {
|
'info_dict': {
|
||||||
'id': '6852024',
|
'id': '4140114',
|
||||||
'ext': 'mp4',
|
'ext': 'mp4',
|
||||||
'title': 'Quarantäne',
|
'title': 'Vox Sola',
|
||||||
'description': 'md5:6af0373bd0fcc4f13e5d47701903d675',
|
'description': 'md5:329d115f74324d4364efc1a11c4ea7c9',
|
||||||
'episode': 'Episode 73',
|
'duration': 2542.76,
|
||||||
'episode_number': 73,
|
'thumbnail': r're:https://[^/.]+\.disco-api\.com/.+\.jpe?g',
|
||||||
'season': 'Season 4',
|
|
||||||
'season_number': 4,
|
|
||||||
'series': 'Stargate Atlantis',
|
|
||||||
'upload_date': '20240525',
|
|
||||||
'timestamp': 1716643200,
|
|
||||||
'duration': 2503.2,
|
|
||||||
'thumbnail': 'https://eu1-prod-images.disco-api.com/2024/05/21/c81fcb45-8902-309b-badb-4e6d546b575d.jpeg',
|
|
||||||
'creators': ['Tele5'],
|
|
||||||
'tags': [],
|
'tags': [],
|
||||||
|
'creators': ['Tele5'],
|
||||||
|
'series': 'Star Trek - Enterprise',
|
||||||
|
'season': 'Season 1',
|
||||||
|
'season_number': 1,
|
||||||
|
'episode': 'Episode 22',
|
||||||
|
'episode_number': 22,
|
||||||
|
'timestamp': 1770491100,
|
||||||
|
'upload_date': '20260207',
|
||||||
},
|
},
|
||||||
}, {
|
}, {
|
||||||
# only slug_a
|
# only slug_a
|
||||||
'url': 'https://tele5.de/mediathek/inside-out',
|
'url': 'https://tele5.de/mediathek/30-miles-from-nowhere-im-wald-hoert-dich-niemand-schreien',
|
||||||
'info_dict': {
|
'info_dict': {
|
||||||
'id': '6819502',
|
'id': '4102641',
|
||||||
'ext': 'mp4',
|
'ext': 'mp4',
|
||||||
'title': 'Inside out',
|
'title': '30 Miles from Nowhere - Im Wald hört dich niemand schreien',
|
||||||
'description': 'md5:7e5f32ed0be5ddbd27713a34b9293bfd',
|
'description': 'md5:0b731539f39ee186ebcd9dd444a86fc2',
|
||||||
'series': 'Inside out',
|
'duration': 4849.96,
|
||||||
'upload_date': '20240523',
|
'thumbnail': r're:https://[^/.]+\.disco-api\.com/.+\.jpe?g',
|
||||||
'timestamp': 1716494400,
|
|
||||||
'duration': 5343.4,
|
|
||||||
'thumbnail': 'https://eu1-prod-images.disco-api.com/2024/05/15/181eba3c-f9f0-3faf-b14d-0097050a3aa4.jpeg',
|
|
||||||
'creators': ['Tele5'],
|
|
||||||
'tags': [],
|
'tags': [],
|
||||||
|
'creators': ['Tele5'],
|
||||||
|
'series': '30 Miles from Nowhere - Im Wald hört dich niemand schreien',
|
||||||
|
'timestamp': 1770417300,
|
||||||
|
'upload_date': '20260206',
|
||||||
},
|
},
|
||||||
}, {
|
}, {
|
||||||
# playlist
|
# playlist
|
||||||
@ -50,20 +50,27 @@ class Tele5IE(DiscoveryPlusBaseIE):
|
|||||||
'id': 'mediathek-schlefaz',
|
'id': 'mediathek-schlefaz',
|
||||||
},
|
},
|
||||||
'playlist_mincount': 3,
|
'playlist_mincount': 3,
|
||||||
|
'skip': 'Dead link',
|
||||||
}]
|
}]
|
||||||
|
|
||||||
def _real_extract(self, url):
|
def _real_extract(self, url):
|
||||||
parent_slug, slug_a, slug_b = self._match_valid_url(url).group('parent_slug', 'slug_a', 'slug_b')
|
parent_slug, slug_a, slug_b = self._match_valid_url(url).group('parent_slug', 'slug_a', 'slug_b')
|
||||||
playlist_id = join_nonempty(parent_slug, slug_a, slug_b, delim='-')
|
playlist_id = join_nonempty(parent_slug, slug_a, slug_b, delim='-')
|
||||||
|
|
||||||
query = {'environment': 'tele5', 'v': '2'}
|
query = {
|
||||||
|
'include': 'default',
|
||||||
|
'filter[environment]': 'tele5',
|
||||||
|
'v': '2',
|
||||||
|
}
|
||||||
|
|
||||||
if not slug_b:
|
if not slug_b:
|
||||||
endpoint = f'page/{slug_a}'
|
endpoint = f'page/{slug_a}'
|
||||||
query['parent_slug'] = parent_slug
|
query['parent_slug'] = parent_slug
|
||||||
else:
|
else:
|
||||||
endpoint = f'videos/{slug_b}'
|
endpoint = f'shows/{slug_a}'
|
||||||
query['filter[show.slug]'] = slug_a
|
query['filter[video.slug]'] = slug_b
|
||||||
cms_data = self._download_json(f'https://de-api.loma-cms.com/feloma/{endpoint}/', playlist_id, query=query)
|
|
||||||
|
cms_data = self._download_json(f'https://public.aurora.enhanced.live/site/{endpoint}/', playlist_id, query=query)
|
||||||
|
|
||||||
return self.playlist_result(map(
|
return self.playlist_result(map(
|
||||||
functools.partial(self._get_disco_api_info, url, disco_host='eu1-prod.disco-api.com', realm='dmaxde', country='DE'),
|
functools.partial(self._get_disco_api_info, url, disco_host='eu1-prod.disco-api.com', realm='dmaxde', country='DE'),
|
||||||
|
|||||||
118
yt_dlp/extractor/thechosen.py
Normal file
118
yt_dlp/extractor/thechosen.py
Normal file
@ -0,0 +1,118 @@
|
|||||||
|
from .common import InfoExtractor
|
||||||
|
from .frontro import FrontroGroupBaseIE
|
||||||
|
from ..utils import (
|
||||||
|
determine_ext,
|
||||||
|
int_or_none,
|
||||||
|
url_or_none,
|
||||||
|
)
|
||||||
|
from ..utils.traversal import traverse_obj
|
||||||
|
|
||||||
|
|
||||||
|
class TheChosenIE(InfoExtractor):
|
||||||
|
_VALID_URL = r'https?://(?:www\.)?watch\.thechosen\.tv/(?:video|watch)/(?P<id>[0-9]+)'
|
||||||
|
_TESTS = [{
|
||||||
|
'url': 'https://watch.thechosen.tv/video/184683594325',
|
||||||
|
'md5': '3f878b689588c71b38ec9943c54ff5b0',
|
||||||
|
'info_dict': {
|
||||||
|
'id': '184683594325',
|
||||||
|
'ext': 'mp4',
|
||||||
|
'title': 'Season 3 Episode 2: Two by Two',
|
||||||
|
'description': 'md5:174c373756ecc8df46b403f4fcfbaf8c',
|
||||||
|
'duration': 4212,
|
||||||
|
'thumbnail': 'https://cas.global.ssl.fastly.net/hls-10-4/184683594325/thumbnail.png',
|
||||||
|
},
|
||||||
|
'params': {'skip_download': 'm3u8'},
|
||||||
|
}, {
|
||||||
|
'url': 'https://watch.thechosen.tv/video/184683596189',
|
||||||
|
'md5': 'd581562f9d29ce82f5b7770415334151',
|
||||||
|
'info_dict': {
|
||||||
|
'id': '184683596189',
|
||||||
|
'ext': 'mp4',
|
||||||
|
'title': 'Season 4 Episode 8: Humble',
|
||||||
|
'description': 'md5:20a57bead43da1cf77cd5b0fe29bbc76',
|
||||||
|
'duration': 5092,
|
||||||
|
'thumbnail': 'https://cdn.thechosen.media/videos/cmkvu7nn500nhfm0wpgmm6180/thumbnail.jpg',
|
||||||
|
},
|
||||||
|
'params': {'skip_download': 'm3u8'},
|
||||||
|
}, {
|
||||||
|
'url': 'https://watch.thechosen.tv/video/184683621748',
|
||||||
|
'info_dict': {
|
||||||
|
'id': '184683621748',
|
||||||
|
'ext': 'mp4',
|
||||||
|
'title': 'Season 5 Episode 2: House of Cards',
|
||||||
|
'description': 'md5:55b389cbb4b7a01d8c2d837102905617',
|
||||||
|
'duration': 3086,
|
||||||
|
'thumbnail': 'https://cdn.thechosen.media/videos/cmkolt4el000afd5zd6x0aeph/thumbnail.jpg',
|
||||||
|
},
|
||||||
|
'params': {'skip_download': 'm3u8'},
|
||||||
|
}, {
|
||||||
|
'url': 'https://watch.thechosen.tv/video/184683621750',
|
||||||
|
'info_dict': {
|
||||||
|
'id': '184683621750',
|
||||||
|
'ext': 'mp4',
|
||||||
|
'title': 'Season 5 Episode 3: Woes',
|
||||||
|
'description': 'md5:90ca3cc41316a965fd1cd3d5b3458784',
|
||||||
|
'duration': 3519,
|
||||||
|
'thumbnail': 'https://cdn.thechosen.media/videos/cmkoltsl8000dfd5z3luid3mg/thumbnail.jpg',
|
||||||
|
},
|
||||||
|
'params': {'skip_download': 'm3u8'},
|
||||||
|
}]
|
||||||
|
|
||||||
|
def _real_extract(self, url):
|
||||||
|
video_id = self._match_id(url)
|
||||||
|
metadata = self._download_json(f'https://api.watch.thechosen.tv/v1/videos/{video_id}', video_id)
|
||||||
|
|
||||||
|
formats, subtitles = [], {}
|
||||||
|
for fmt_url in traverse_obj(metadata, ('details', 'video', ..., 'url', {url_or_none})):
|
||||||
|
ext = determine_ext(fmt_url)
|
||||||
|
if ext == 'm3u8':
|
||||||
|
fmts, subs = self._extract_m3u8_formats_and_subtitles(fmt_url, video_id, 'mp4', fatal=False)
|
||||||
|
elif ext == 'mpd':
|
||||||
|
fmts, subs = self._extract_mpd_formats_and_subtitles(fmt_url, video_id, fatal=False)
|
||||||
|
else:
|
||||||
|
self.report_warning(f'Skipping unsupported format extension "{ext}"', video_id=video_id)
|
||||||
|
continue
|
||||||
|
formats.extend(fmts)
|
||||||
|
self._merge_subtitles(subs, target=subtitles)
|
||||||
|
|
||||||
|
thumbnails = []
|
||||||
|
for thumb_id, thumb_url in traverse_obj(metadata, (
|
||||||
|
('thumbs', 'thumbnails'), {dict.items}, lambda _, v: url_or_none(v[1]),
|
||||||
|
)):
|
||||||
|
thumbnails.append({
|
||||||
|
'id': thumb_id,
|
||||||
|
'url': thumb_url,
|
||||||
|
})
|
||||||
|
|
||||||
|
return {
|
||||||
|
'id': video_id,
|
||||||
|
**traverse_obj(metadata, ({
|
||||||
|
'title': ('title', {str}),
|
||||||
|
'description': ('description', {str}),
|
||||||
|
'duration': ('duration', {int_or_none}),
|
||||||
|
})),
|
||||||
|
'thumbnails': thumbnails,
|
||||||
|
'formats': formats,
|
||||||
|
'subtitles': subtitles,
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
class TheChosenGroupIE(FrontroGroupBaseIE):
|
||||||
|
_WORKING = False
|
||||||
|
_CHANNEL_ID = '12884901895'
|
||||||
|
_VIDEO_EXTRACTOR = TheChosenIE
|
||||||
|
_VIDEO_URL_TMPL = 'https://watch.thechosen.tv/watch/%s'
|
||||||
|
|
||||||
|
_VALID_URL = r'https?://(?:www\.)?watch\.thechosen\.tv/group/(?P<id>[0-9]+)'
|
||||||
|
_TESTS = [{
|
||||||
|
'url': 'https://watch.thechosen.tv/group/309237658592',
|
||||||
|
'info_dict': {
|
||||||
|
'id': '309237658592',
|
||||||
|
'title': 'Season 3',
|
||||||
|
'timestamp': 1746203969,
|
||||||
|
'upload_date': '20250502',
|
||||||
|
'modified_timestamp': int,
|
||||||
|
'modified_date': str,
|
||||||
|
},
|
||||||
|
'playlist_count': 8,
|
||||||
|
}]
|
||||||
@ -220,7 +220,7 @@ class TikTokBaseIE(InfoExtractor):
|
|||||||
raise ExtractorError('Unable to extract aweme detail info', video_id=aweme_id)
|
raise ExtractorError('Unable to extract aweme detail info', video_id=aweme_id)
|
||||||
return self._parse_aweme_video_app(aweme_detail)
|
return self._parse_aweme_video_app(aweme_detail)
|
||||||
|
|
||||||
def _solve_challenge_and_set_cookie(self, webpage):
|
def _solve_challenge_and_set_cookies(self, webpage):
|
||||||
challenge_data = traverse_obj(webpage, (
|
challenge_data = traverse_obj(webpage, (
|
||||||
{find_element(id='cs', html=True)}, {extract_attributes}, 'class',
|
{find_element(id='cs', html=True)}, {extract_attributes}, 'class',
|
||||||
filter, {lambda x: f'{x}==='}, {base64.b64decode}, {json.loads}))
|
filter, {lambda x: f'{x}==='}, {base64.b64decode}, {json.loads}))
|
||||||
@ -250,17 +250,27 @@ class TikTokBaseIE(InfoExtractor):
|
|||||||
else:
|
else:
|
||||||
raise ExtractorError('Unable to solve JS challenge')
|
raise ExtractorError('Unable to solve JS challenge')
|
||||||
|
|
||||||
cookie_value = base64.b64encode(
|
wci_cookie_value = base64.b64encode(
|
||||||
json.dumps(challenge_data, separators=(',', ':')).encode()).decode()
|
json.dumps(challenge_data, separators=(',', ':')).encode()).decode()
|
||||||
|
|
||||||
# At time of writing, the cookie name was _wafchallengeid
|
# At time of writing, the wci cookie name was `_wafchallengeid`
|
||||||
cookie_name = traverse_obj(webpage, (
|
wci_cookie_name = traverse_obj(webpage, (
|
||||||
{find_element(id='wci', html=True)}, {extract_attributes},
|
{find_element(id='wci', html=True)}, {extract_attributes},
|
||||||
'class', {require('challenge cookie name')}))
|
'class', {require('challenge cookie name')}))
|
||||||
|
|
||||||
# Actual JS sets Max-Age=1, but we need to adjust for --sleep-requests and Python slowness
|
# At time of writing, the **optional** rci cookie name was `waforiginalreid`
|
||||||
expire_time = int(time.time()) + (self.get_param('sleep_interval_requests') or 0) + 2
|
rci_cookie_name = traverse_obj(webpage, (
|
||||||
self._set_cookie('.tiktok.com', cookie_name, cookie_value, expire_time=expire_time)
|
{find_element(id='rci', html=True)}, {extract_attributes}, 'class'))
|
||||||
|
rci_cookie_value = traverse_obj(webpage, (
|
||||||
|
{find_element(id='rs', html=True)}, {extract_attributes}, 'class'))
|
||||||
|
|
||||||
|
# Actual JS sets Max-Age=1 for the cookies, but we'll manually clear them later instead
|
||||||
|
expire_time = int(time.time()) + (self.get_param('sleep_interval_requests') or 0) + 120
|
||||||
|
self._set_cookie('.tiktok.com', wci_cookie_name, wci_cookie_value, expire_time=expire_time)
|
||||||
|
if rci_cookie_name and rci_cookie_value:
|
||||||
|
self._set_cookie('.tiktok.com', rci_cookie_name, rci_cookie_value, expire_time=expire_time)
|
||||||
|
|
||||||
|
return wci_cookie_name, rci_cookie_name
|
||||||
|
|
||||||
def _extract_web_data_and_status(self, url, video_id, fatal=True):
|
def _extract_web_data_and_status(self, url, video_id, fatal=True):
|
||||||
video_data, status = {}, -1
|
video_data, status = {}, -1
|
||||||
@ -287,7 +297,7 @@ class TikTokBaseIE(InfoExtractor):
|
|||||||
universal_data = self._get_universal_data(webpage, video_id)
|
universal_data = self._get_universal_data(webpage, video_id)
|
||||||
if not universal_data:
|
if not universal_data:
|
||||||
try:
|
try:
|
||||||
self._solve_challenge_and_set_cookie(webpage)
|
cookie_names = self._solve_challenge_and_set_cookies(webpage)
|
||||||
except ExtractorError as e:
|
except ExtractorError as e:
|
||||||
if fatal:
|
if fatal:
|
||||||
raise
|
raise
|
||||||
@ -295,6 +305,9 @@ class TikTokBaseIE(InfoExtractor):
|
|||||||
return video_data, status
|
return video_data, status
|
||||||
|
|
||||||
webpage = get_webpage(note='Downloading webpage with challenge cookie')
|
webpage = get_webpage(note='Downloading webpage with challenge cookie')
|
||||||
|
# Manually clear challenge cookies that should expire immediately after webpage request
|
||||||
|
for cookie_name in filter(None, cookie_names):
|
||||||
|
self.cookiejar.clear(domain='.tiktok.com', path='/', name=cookie_name)
|
||||||
if webpage is False:
|
if webpage is False:
|
||||||
return video_data, status
|
return video_data, status
|
||||||
universal_data = self._get_universal_data(webpage, video_id)
|
universal_data = self._get_universal_data(webpage, video_id)
|
||||||
|
|||||||
@ -51,7 +51,8 @@ class TruthIE(InfoExtractor):
|
|||||||
|
|
||||||
def _real_extract(self, url):
|
def _real_extract(self, url):
|
||||||
video_id = self._match_id(url)
|
video_id = self._match_id(url)
|
||||||
status = self._download_json(f'https://truthsocial.com/api/v1/statuses/{video_id}', video_id)
|
status = self._download_json(
|
||||||
|
f'https://truthsocial.com/api/v1/statuses/{video_id}', video_id, impersonate=True)
|
||||||
uploader_id = strip_or_none(traverse_obj(status, ('account', 'username')))
|
uploader_id = strip_or_none(traverse_obj(status, ('account', 'username')))
|
||||||
return {
|
return {
|
||||||
'id': video_id,
|
'id': video_id,
|
||||||
|
|||||||
@ -4,6 +4,7 @@ from .streaks import StreaksBaseIE
|
|||||||
from ..utils import (
|
from ..utils import (
|
||||||
ExtractorError,
|
ExtractorError,
|
||||||
GeoRestrictedError,
|
GeoRestrictedError,
|
||||||
|
clean_html,
|
||||||
int_or_none,
|
int_or_none,
|
||||||
join_nonempty,
|
join_nonempty,
|
||||||
make_archive_id,
|
make_archive_id,
|
||||||
@ -11,7 +12,9 @@ from ..utils import (
|
|||||||
str_or_none,
|
str_or_none,
|
||||||
strip_or_none,
|
strip_or_none,
|
||||||
time_seconds,
|
time_seconds,
|
||||||
|
unified_timestamp,
|
||||||
update_url_query,
|
update_url_query,
|
||||||
|
url_or_none,
|
||||||
)
|
)
|
||||||
from ..utils.traversal import require, traverse_obj
|
from ..utils.traversal import require, traverse_obj
|
||||||
|
|
||||||
@ -257,3 +260,113 @@ class TVerIE(StreaksBaseIE):
|
|||||||
'id': video_id,
|
'id': video_id,
|
||||||
'_old_archive_ids': [make_archive_id('BrightcoveNew', brightcove_id)] if brightcove_id else None,
|
'_old_archive_ids': [make_archive_id('BrightcoveNew', brightcove_id)] if brightcove_id else None,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
class TVerOlympicIE(StreaksBaseIE):
|
||||||
|
IE_NAME = 'tver:olympic'
|
||||||
|
|
||||||
|
_API_BASE = 'https://olympic-data.tver.jp/api'
|
||||||
|
_VALID_URL = r'https?://(?:www\.)?tver\.jp/olympic/milanocortina2026/(?P<type>live|video)/play/(?P<id>\w+)'
|
||||||
|
_TESTS = [{
|
||||||
|
'url': 'https://tver.jp/olympic/milanocortina2026/video/play/3b1d4462150b42558d9cc8aabb5238d0/',
|
||||||
|
'info_dict': {
|
||||||
|
'id': '3b1d4462150b42558d9cc8aabb5238d0',
|
||||||
|
'ext': 'mp4',
|
||||||
|
'title': '【開会式】ぎゅっと凝縮ハイライト',
|
||||||
|
'display_id': 'ref:3b1d4462150b42558d9cc8aabb5238d0',
|
||||||
|
'duration': 712.045,
|
||||||
|
'live_status': 'not_live',
|
||||||
|
'modified_date': r're:\d{8}',
|
||||||
|
'modified_timestamp': int,
|
||||||
|
'tags': 'count:1',
|
||||||
|
'thumbnail': r're:https://.+\.(?:jpg|png)',
|
||||||
|
'timestamp': 1770420187,
|
||||||
|
'upload_date': '20260206',
|
||||||
|
'uploader_id': 'tver-olympic',
|
||||||
|
},
|
||||||
|
}, {
|
||||||
|
'url': 'https://tver.jp/olympic/milanocortina2026/live/play/glts313itwvj/',
|
||||||
|
'info_dict': {
|
||||||
|
'id': 'glts313itwvj',
|
||||||
|
'ext': 'mp4',
|
||||||
|
'title': '開会式ハイライト',
|
||||||
|
'channel_id': 'ntv',
|
||||||
|
'display_id': 'ref:sp_260207_spc_01_dvr',
|
||||||
|
'duration': 7680,
|
||||||
|
'live_status': 'was_live',
|
||||||
|
'modified_date': r're:\d{8}',
|
||||||
|
'modified_timestamp': int,
|
||||||
|
'thumbnail': r're:https://.+\.(?:jpg|png)',
|
||||||
|
'timestamp': 1770420300,
|
||||||
|
'upload_date': '20260206',
|
||||||
|
'uploader_id': 'tver-olympic-live',
|
||||||
|
},
|
||||||
|
}]
|
||||||
|
|
||||||
|
def _real_extract(self, url):
|
||||||
|
video_type, video_id = self._match_valid_url(url).group('type', 'id')
|
||||||
|
live_from_start = self.get_param('live_from_start')
|
||||||
|
|
||||||
|
if video_type == 'live':
|
||||||
|
project_id = 'tver-olympic-live'
|
||||||
|
api_key = 'a35ebb1ca7d443758dc7fcc5d99b1f72'
|
||||||
|
olympic_data = traverse_obj(self._download_json(
|
||||||
|
f'{self._API_BASE}/live/{video_id}', video_id), ('contents', 'live', {dict}))
|
||||||
|
media_id = traverse_obj(olympic_data, ('video_id', {str}))
|
||||||
|
|
||||||
|
now = time_seconds()
|
||||||
|
start_timestamp_str = traverse_obj(olympic_data, ('onair_start_date', {str}))
|
||||||
|
start_timestamp = unified_timestamp(start_timestamp_str, tz_offset=9)
|
||||||
|
if not start_timestamp:
|
||||||
|
raise ExtractorError('Unable to extract on-air start time')
|
||||||
|
end_timestamp = traverse_obj(olympic_data, (
|
||||||
|
'onair_end_date', {unified_timestamp(tz_offset=9)}, {require('on-air end time')}))
|
||||||
|
|
||||||
|
if now < start_timestamp:
|
||||||
|
self.raise_no_formats(
|
||||||
|
f'This program is scheduled to start at {start_timestamp_str} JST', expected=True)
|
||||||
|
|
||||||
|
return {
|
||||||
|
'id': video_id,
|
||||||
|
'live_status': 'is_upcoming',
|
||||||
|
'release_timestamp': start_timestamp,
|
||||||
|
}
|
||||||
|
elif start_timestamp <= now < end_timestamp:
|
||||||
|
live_status = 'is_live'
|
||||||
|
if live_from_start:
|
||||||
|
media_id += '_dvr'
|
||||||
|
elif end_timestamp <= now:
|
||||||
|
dvr_end_timestamp = traverse_obj(olympic_data, (
|
||||||
|
'dvr_end_date', {unified_timestamp(tz_offset=9)}))
|
||||||
|
if dvr_end_timestamp and now < dvr_end_timestamp:
|
||||||
|
live_status = 'was_live'
|
||||||
|
media_id += '_dvr'
|
||||||
|
else:
|
||||||
|
raise ExtractorError(
|
||||||
|
'This program is no longer available', expected=True)
|
||||||
|
else:
|
||||||
|
project_id = 'tver-olympic'
|
||||||
|
api_key = '4b55a4db3cce4ad38df6dd8543e3e46a'
|
||||||
|
media_id = video_id
|
||||||
|
live_status = 'not_live'
|
||||||
|
olympic_data = traverse_obj(self._download_json(
|
||||||
|
f'{self._API_BASE}/video/{video_id}', video_id), ('contents', 'video', {dict}))
|
||||||
|
|
||||||
|
return {
|
||||||
|
**self._extract_from_streaks_api(project_id, f'ref:{media_id}', {
|
||||||
|
'Origin': 'https://tver.jp',
|
||||||
|
'Referer': 'https://tver.jp/',
|
||||||
|
'X-Streaks-Api-Key': api_key,
|
||||||
|
}, live_from_start=live_from_start),
|
||||||
|
**traverse_obj(olympic_data, {
|
||||||
|
'title': ('title', {clean_html}, filter),
|
||||||
|
'alt_title': ('sub_title', {clean_html}, filter),
|
||||||
|
'channel': ('channel', {clean_html}, filter),
|
||||||
|
'channel_id': ('channel_id', {clean_html}, filter),
|
||||||
|
'description': (('description', 'description_l', 'description_s'), {clean_html}, filter, any),
|
||||||
|
'timestamp': ('onair_start_date', {unified_timestamp(tz_offset=9)}),
|
||||||
|
'thumbnail': (('picture_l_url', 'picture_m_url', 'picture_s_url'), {url_or_none}, any),
|
||||||
|
}),
|
||||||
|
'id': video_id,
|
||||||
|
'live_status': live_status,
|
||||||
|
}
|
||||||
|
|||||||
152
yt_dlp/extractor/tvo.py
Normal file
152
yt_dlp/extractor/tvo.py
Normal file
@ -0,0 +1,152 @@
|
|||||||
|
import json
|
||||||
|
import urllib.parse
|
||||||
|
|
||||||
|
from .brightcove import BrightcoveNewIE
|
||||||
|
from .common import InfoExtractor
|
||||||
|
from ..utils import (
|
||||||
|
clean_html,
|
||||||
|
int_or_none,
|
||||||
|
parse_duration,
|
||||||
|
parse_iso8601,
|
||||||
|
smuggle_url,
|
||||||
|
str_or_none,
|
||||||
|
url_or_none,
|
||||||
|
)
|
||||||
|
from ..utils.traversal import (
|
||||||
|
require,
|
||||||
|
traverse_obj,
|
||||||
|
trim_str,
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
|
class TvoIE(InfoExtractor):
|
||||||
|
IE_NAME = 'TVO'
|
||||||
|
_VALID_URL = r'https?://(?:www\.)?tvo\.org/video(?:/documentaries)?/(?P<id>[\w-]+)'
|
||||||
|
_TESTS = [{
|
||||||
|
'url': 'https://www.tvo.org/video/how-can-ontario-survive-the-trade-war',
|
||||||
|
'info_dict': {
|
||||||
|
'id': '6377531034112',
|
||||||
|
'ext': 'mp4',
|
||||||
|
'title': 'How Can Ontario Survive the Trade War?',
|
||||||
|
'description': 'md5:e7455d9cd4b6b1270141922044161457',
|
||||||
|
'display_id': 'how-can-ontario-survive-the-trade-war',
|
||||||
|
'duration': 3531,
|
||||||
|
'episode': 'How Can Ontario Survive the Trade War?',
|
||||||
|
'episode_id': 'how-can-ontario-survive-the-trade-war',
|
||||||
|
'episode_number': 1,
|
||||||
|
'season': 'Season 1',
|
||||||
|
'season_number': 1,
|
||||||
|
'series': 'TVO at AMO',
|
||||||
|
'series_id': 'tvo-at-amo',
|
||||||
|
'tags': 'count:17',
|
||||||
|
'thumbnail': r're:https?://.+',
|
||||||
|
'timestamp': 1756944016,
|
||||||
|
'upload_date': '20250904',
|
||||||
|
'uploader_id': '18140038001',
|
||||||
|
},
|
||||||
|
}, {
|
||||||
|
'url': 'https://www.tvo.org/video/documentaries/the-pitch',
|
||||||
|
'info_dict': {
|
||||||
|
'id': '6382500333112',
|
||||||
|
'ext': 'mp4',
|
||||||
|
'title': 'The Pitch',
|
||||||
|
'categories': ['Documentaries'],
|
||||||
|
'description': 'md5:9d4246b70dce772a3a396c4bd84c8506',
|
||||||
|
'display_id': 'the-pitch',
|
||||||
|
'duration': 5923,
|
||||||
|
'episode': 'The Pitch',
|
||||||
|
'episode_id': 'the-pitch',
|
||||||
|
'episode_number': 1,
|
||||||
|
'season': 'Season 1',
|
||||||
|
'season_number': 1,
|
||||||
|
'series': 'The Pitch',
|
||||||
|
'series_id': 'the-pitch',
|
||||||
|
'tags': 'count:8',
|
||||||
|
'thumbnail': r're:https?://.+',
|
||||||
|
'timestamp': 1762693216,
|
||||||
|
'upload_date': '20251109',
|
||||||
|
'uploader_id': '18140038001',
|
||||||
|
},
|
||||||
|
}, {
|
||||||
|
'url': 'https://www.tvo.org/video/documentaries/valentines-day',
|
||||||
|
'info_dict': {
|
||||||
|
'id': '6387298331112',
|
||||||
|
'ext': 'mp4',
|
||||||
|
'title': 'Valentine\'s Day',
|
||||||
|
'categories': ['Documentaries'],
|
||||||
|
'description': 'md5:b142149beb2d3a855244816c50cd2f14',
|
||||||
|
'display_id': 'valentines-day',
|
||||||
|
'duration': 3121,
|
||||||
|
'episode': 'Valentine\'s Day',
|
||||||
|
'episode_id': 'valentines-day',
|
||||||
|
'episode_number': 2,
|
||||||
|
'season': 'Season 1',
|
||||||
|
'season_number': 1,
|
||||||
|
'series': 'How We Celebrate',
|
||||||
|
'series_id': 'how-we-celebrate',
|
||||||
|
'tags': 'count:6',
|
||||||
|
'thumbnail': r're:https?://.+',
|
||||||
|
'timestamp': 1770386416,
|
||||||
|
'upload_date': '20260206',
|
||||||
|
'uploader_id': '18140038001',
|
||||||
|
},
|
||||||
|
}]
|
||||||
|
BRIGHTCOVE_URL_TEMPLATE = 'https://players.brightcove.net/18140038001/default_default/index.html?videoId=%s'
|
||||||
|
|
||||||
|
def _real_extract(self, url):
|
||||||
|
display_id = self._match_id(url)
|
||||||
|
video_data = self._download_json(
|
||||||
|
'https://hmy0rc1bo2.execute-api.ca-central-1.amazonaws.com/graphql',
|
||||||
|
display_id, headers={'Content-Type': 'application/json'},
|
||||||
|
data=json.dumps({
|
||||||
|
'operationName': 'getVideo',
|
||||||
|
'variables': {'slug': urllib.parse.urlparse(url).path.rstrip('/')},
|
||||||
|
'query': '''query getVideo($slug: String) {
|
||||||
|
getTVOOrgVideo(slug: $slug) {
|
||||||
|
contentCategory
|
||||||
|
description
|
||||||
|
length
|
||||||
|
program {
|
||||||
|
nodeUrl
|
||||||
|
title
|
||||||
|
}
|
||||||
|
programOrder
|
||||||
|
publishedAt
|
||||||
|
season
|
||||||
|
tags
|
||||||
|
thumbnail
|
||||||
|
title
|
||||||
|
videoSource {
|
||||||
|
brightcoveRefId
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}''',
|
||||||
|
}, separators=(',', ':')).encode(),
|
||||||
|
)['data']['getTVOOrgVideo']
|
||||||
|
|
||||||
|
brightcove_id = traverse_obj(video_data, (
|
||||||
|
'videoSource', 'brightcoveRefId', {str_or_none}, {require('Brightcove ID')}))
|
||||||
|
|
||||||
|
return {
|
||||||
|
'_type': 'url_transparent',
|
||||||
|
'ie_key': BrightcoveNewIE.ie_key(),
|
||||||
|
'url': smuggle_url(self.BRIGHTCOVE_URL_TEMPLATE % brightcove_id, {'geo_countries': ['CA']}),
|
||||||
|
'display_id': display_id,
|
||||||
|
'episode_id': display_id,
|
||||||
|
**traverse_obj(video_data, {
|
||||||
|
'title': ('title', {clean_html}, filter),
|
||||||
|
'categories': ('contentCategory', {clean_html}, filter, all, filter),
|
||||||
|
'description': ('description', {clean_html}, filter),
|
||||||
|
'duration': ('length', {parse_duration}),
|
||||||
|
'episode': ('title', {clean_html}, filter),
|
||||||
|
'episode_number': ('programOrder', {int_or_none}),
|
||||||
|
'season_number': ('season', {int_or_none}),
|
||||||
|
'tags': ('tags', ..., {clean_html}, filter),
|
||||||
|
'thumbnail': ('thumbnail', {url_or_none}),
|
||||||
|
'timestamp': ('publishedAt', {parse_iso8601}),
|
||||||
|
}),
|
||||||
|
**traverse_obj(video_data, ('program', {
|
||||||
|
'series': ('title', {clean_html}, filter),
|
||||||
|
'series_id': ('nodeUrl', {clean_html}, {trim_str(start='/programs/')}, filter),
|
||||||
|
})),
|
||||||
|
}
|
||||||
@ -131,11 +131,15 @@ class TwitterBaseIE(InfoExtractor):
|
|||||||
video_id, headers=headers, query=query, expected_status=allowed_status,
|
video_id, headers=headers, query=query, expected_status=allowed_status,
|
||||||
note=f'Downloading {"GraphQL" if graphql else "legacy API"} JSON')
|
note=f'Downloading {"GraphQL" if graphql else "legacy API"} JSON')
|
||||||
|
|
||||||
if result.get('errors'):
|
if error_msg := ', '.join(set(traverse_obj(result, ('errors', ..., 'message', {str})))):
|
||||||
errors = ', '.join(set(traverse_obj(result, ('errors', ..., 'message', {str}))))
|
# Errors with the message 'Dependency: Unspecified' are a false positive
|
||||||
if errors and 'not authorized' in errors:
|
# See https://github.com/yt-dlp/yt-dlp/issues/15963
|
||||||
self.raise_login_required(remove_end(errors, '.'))
|
if error_msg.lower() == 'dependency: unspecified':
|
||||||
raise ExtractorError(f'Error(s) while querying API: {errors or "Unknown error"}')
|
self.write_debug(f'Ignoring Twitter API error: "{error_msg}"')
|
||||||
|
elif 'not authorized' in error_msg.lower():
|
||||||
|
self.raise_login_required(remove_end(error_msg, '.'))
|
||||||
|
else:
|
||||||
|
raise ExtractorError(f'Error(s) while querying API: {error_msg or "Unknown error"}')
|
||||||
|
|
||||||
return result
|
return result
|
||||||
|
|
||||||
@ -1078,7 +1082,7 @@ class TwitterIE(TwitterBaseIE):
|
|||||||
raise ExtractorError(f'Twitter API says: {cause or "Unknown error"}', expected=True)
|
raise ExtractorError(f'Twitter API says: {cause or "Unknown error"}', expected=True)
|
||||||
elif typename == 'TweetUnavailable':
|
elif typename == 'TweetUnavailable':
|
||||||
reason = result.get('reason')
|
reason = result.get('reason')
|
||||||
if reason == 'NsfwLoggedOut':
|
if reason in ('NsfwLoggedOut', 'NsfwViewerHasNoStatedAge'):
|
||||||
self.raise_login_required('NSFW tweet requires authentication')
|
self.raise_login_required('NSFW tweet requires authentication')
|
||||||
elif reason == 'Protected':
|
elif reason == 'Protected':
|
||||||
self.raise_login_required('You are not authorized to view this protected tweet')
|
self.raise_login_required('You are not authorized to view this protected tweet')
|
||||||
|
|||||||
116
yt_dlp/extractor/visir.py
Normal file
116
yt_dlp/extractor/visir.py
Normal file
@ -0,0 +1,116 @@
|
|||||||
|
import re
|
||||||
|
|
||||||
|
from .common import InfoExtractor
|
||||||
|
from ..utils import (
|
||||||
|
UnsupportedError,
|
||||||
|
clean_html,
|
||||||
|
int_or_none,
|
||||||
|
js_to_json,
|
||||||
|
month_by_name,
|
||||||
|
url_or_none,
|
||||||
|
urljoin,
|
||||||
|
)
|
||||||
|
from ..utils.traversal import find_element, traverse_obj
|
||||||
|
|
||||||
|
|
||||||
|
class VisirIE(InfoExtractor):
|
||||||
|
IE_DESC = 'Vísir'
|
||||||
|
|
||||||
|
_VALID_URL = r'https?://(?:www\.)?visir\.is/(?P<type>k|player)/(?P<id>[\da-f-]+)(?:/(?P<slug>[\w.-]+))?'
|
||||||
|
_EMBED_REGEX = [rf'<iframe[^>]+src=["\'](?P<url>{_VALID_URL})']
|
||||||
|
_TESTS = [{
|
||||||
|
'url': 'https://www.visir.is/k/eabb8f7f-ad87-46fb-9469-a0f1dc0fc4bc-1769022963988',
|
||||||
|
'info_dict': {
|
||||||
|
'id': 'eabb8f7f-ad87-46fb-9469-a0f1dc0fc4bc-1769022963988',
|
||||||
|
'ext': 'mp4',
|
||||||
|
'title': 'Sveppi og Siggi Þór mestu skaphundarnir',
|
||||||
|
'categories': ['island-i-dag'],
|
||||||
|
'description': 'md5:e06bd6a0cd8bdde328ad8cf00d3d4df6',
|
||||||
|
'duration': 792,
|
||||||
|
'thumbnail': r're:https?://www\.visir\.is/.+',
|
||||||
|
'upload_date': '20260121',
|
||||||
|
'view_count': int,
|
||||||
|
},
|
||||||
|
}, {
|
||||||
|
'url': 'https://www.visir.is/k/b0a88e02-eceb-4270-855c-8328b76b9d81-1763979306704/tonlistarborgin-reykjavik',
|
||||||
|
'info_dict': {
|
||||||
|
'id': 'b0a88e02-eceb-4270-855c-8328b76b9d81-1763979306704',
|
||||||
|
'ext': 'mp4',
|
||||||
|
'title': 'Tónlistarborgin Reykjavík',
|
||||||
|
'categories': ['tonlist'],
|
||||||
|
'description': 'md5:47237589dc95dbde55dfbb163396f88a',
|
||||||
|
'display_id': 'tonlistarborgin-reykjavik',
|
||||||
|
'duration': 81,
|
||||||
|
'thumbnail': r're:https?://www\.visir\.is/.+',
|
||||||
|
'upload_date': '20251124',
|
||||||
|
'view_count': int,
|
||||||
|
},
|
||||||
|
}, {
|
||||||
|
'url': 'https://www.visir.is/player/0cd5709e-6870-46d0-aaaf-0ae637de94f1-1770060083580',
|
||||||
|
'info_dict': {
|
||||||
|
'id': '0cd5709e-6870-46d0-aaaf-0ae637de94f1-1770060083580',
|
||||||
|
'ext': 'mp4',
|
||||||
|
'title': 'Sportpakkinn 2. febrúar 2026',
|
||||||
|
'categories': ['sportpakkinn'],
|
||||||
|
'display_id': 'sportpakkinn-2.-februar-2026',
|
||||||
|
'duration': 293,
|
||||||
|
'thumbnail': r're:https?://www\.visir\.is/.+',
|
||||||
|
'upload_date': '20260202',
|
||||||
|
'view_count': int,
|
||||||
|
},
|
||||||
|
}]
|
||||||
|
_WEBPAGE_TESTS = [{
|
||||||
|
'url': 'https://www.visir.is/g/20262837896d/segir-von-brigdin-med-prinsessuna-rista-djupt',
|
||||||
|
'info_dict': {
|
||||||
|
'id': '9ad5e58a-f26f-49f7-8b1d-68f0629485b7-1770059257365',
|
||||||
|
'ext': 'mp4',
|
||||||
|
'title': 'Norðmenn tala ekki um annað en prinsessuna',
|
||||||
|
'categories': ['frettir'],
|
||||||
|
'description': 'md5:53e2623ae79e1355778c14f5b557a0cd',
|
||||||
|
'display_id': 'nordmenn-tala-ekki-um-annad-en-prinsessuna',
|
||||||
|
'duration': 138,
|
||||||
|
'thumbnail': r're:https?://www\.visir\.is/.+',
|
||||||
|
'upload_date': '20260202',
|
||||||
|
'view_count': int,
|
||||||
|
},
|
||||||
|
}]
|
||||||
|
|
||||||
|
def _real_extract(self, url):
|
||||||
|
video_type, video_id, display_id = self._match_valid_url(url).group('type', 'id', 'slug')
|
||||||
|
webpage = self._download_webpage(url, video_id)
|
||||||
|
if video_type == 'player':
|
||||||
|
real_url = self._og_search_url(webpage)
|
||||||
|
if not self.suitable(real_url) or self._match_valid_url(real_url).group('type') == 'player':
|
||||||
|
raise UnsupportedError(real_url)
|
||||||
|
return self.url_result(real_url, self.ie_key())
|
||||||
|
|
||||||
|
upload_date = None
|
||||||
|
date_elements = traverse_obj(webpage, (
|
||||||
|
{find_element(cls='article-item__date')}, {clean_html}, filter, {str.split}))
|
||||||
|
if date_elements and len(date_elements) == 3:
|
||||||
|
day, month, year = date_elements
|
||||||
|
day = int_or_none(day.rstrip('.'))
|
||||||
|
month = month_by_name(month, 'is')
|
||||||
|
if day and month and re.fullmatch(r'[0-9]{4}', year):
|
||||||
|
upload_date = f'{year}{month:02d}{day:02d}'
|
||||||
|
|
||||||
|
player = self._search_json(
|
||||||
|
r'App\.Player\.Init\(', webpage, video_id, 'player', transform_source=js_to_json)
|
||||||
|
m3u8_url = traverse_obj(player, ('File', {urljoin('https://vod.visir.is/')}))
|
||||||
|
|
||||||
|
return {
|
||||||
|
'id': video_id,
|
||||||
|
'display_id': display_id,
|
||||||
|
'formats': self._extract_m3u8_formats(m3u8_url, video_id, 'mp4'),
|
||||||
|
'upload_date': upload_date,
|
||||||
|
**traverse_obj(webpage, ({find_element(cls='article-item press-ads')}, {
|
||||||
|
'description': ({find_element(cls='-large')}, {clean_html}, filter),
|
||||||
|
'view_count': ({find_element(cls='article-item__viewcount')}, {clean_html}, {int_or_none}),
|
||||||
|
})),
|
||||||
|
**traverse_obj(player, {
|
||||||
|
'title': ('Title', {clean_html}),
|
||||||
|
'categories': ('Categoryname', {clean_html}, filter, all, filter),
|
||||||
|
'duration': ('MediaDuration', {int_or_none}),
|
||||||
|
'thumbnail': ('Image', {url_or_none}),
|
||||||
|
}),
|
||||||
|
}
|
||||||
@ -1,6 +1,7 @@
|
|||||||
import collections
|
import collections
|
||||||
import hashlib
|
import hashlib
|
||||||
import re
|
import re
|
||||||
|
import urllib.parse
|
||||||
|
|
||||||
from .common import InfoExtractor
|
from .common import InfoExtractor
|
||||||
from .dailymotion import DailymotionIE
|
from .dailymotion import DailymotionIE
|
||||||
@ -8,6 +9,7 @@ from .odnoklassniki import OdnoklassnikiIE
|
|||||||
from .sibnet import SibnetEmbedIE
|
from .sibnet import SibnetEmbedIE
|
||||||
from .vimeo import VimeoIE
|
from .vimeo import VimeoIE
|
||||||
from .youtube import YoutubeIE
|
from .youtube import YoutubeIE
|
||||||
|
from ..jsinterp import JSInterpreter
|
||||||
from ..utils import (
|
from ..utils import (
|
||||||
ExtractorError,
|
ExtractorError,
|
||||||
UserNotLive,
|
UserNotLive,
|
||||||
@ -36,16 +38,38 @@ class VKBaseIE(InfoExtractor):
|
|||||||
|
|
||||||
def _download_webpage_handle(self, url_or_request, video_id, *args, fatal=True, **kwargs):
|
def _download_webpage_handle(self, url_or_request, video_id, *args, fatal=True, **kwargs):
|
||||||
response = super()._download_webpage_handle(url_or_request, video_id, *args, fatal=fatal, **kwargs)
|
response = super()._download_webpage_handle(url_or_request, video_id, *args, fatal=fatal, **kwargs)
|
||||||
challenge_url, cookie = response[1].url if response else '', None
|
if response is False:
|
||||||
if challenge_url.startswith('https://vk.com/429.html?'):
|
|
||||||
cookie = self._get_cookies(challenge_url).get('hash429')
|
|
||||||
if not cookie:
|
|
||||||
return response
|
return response
|
||||||
|
|
||||||
hash429 = hashlib.md5(cookie.value.encode('ascii')).hexdigest()
|
webpage, urlh = response
|
||||||
|
challenge_url = urlh.url
|
||||||
|
if urllib.parse.urlparse(challenge_url).path != '/challenge.html':
|
||||||
|
return response
|
||||||
|
|
||||||
|
self.to_screen(join_nonempty(
|
||||||
|
video_id and f'[{video_id}]',
|
||||||
|
'Received a JS challenge response',
|
||||||
|
delim=' '))
|
||||||
|
|
||||||
|
challenge_hash = traverse_obj(challenge_url, (
|
||||||
|
{parse_qs}, 'hash429', -1, {require('challenge hash')}))
|
||||||
|
|
||||||
|
func_code = self._search_regex(
|
||||||
|
r'(?s)var\s+salt\s*=\s*\(\s*function\s*\(\)\s*(\{.+?\})\s*\)\(\);\s*var\s+hash',
|
||||||
|
webpage, 'JS challenge salt function')
|
||||||
|
|
||||||
|
jsi = JSInterpreter(f'function salt() {func_code}')
|
||||||
|
salt = jsi.extract_function('salt')([])
|
||||||
|
self.write_debug(f'Generated salt with native JS interpreter: {salt}')
|
||||||
|
|
||||||
|
key_hash = hashlib.md5(f'{challenge_hash}:{salt}'.encode()).hexdigest()
|
||||||
|
self.write_debug(f'JS challenge key hash: {key_hash}')
|
||||||
|
|
||||||
|
# Request with the challenge key and the response should set a 'solution429' cookie
|
||||||
self._request_webpage(
|
self._request_webpage(
|
||||||
update_url_query(challenge_url, {'key': hash429}), video_id, fatal=fatal,
|
update_url_query(challenge_url, {'key': key_hash}), video_id,
|
||||||
note='Resolving WAF challenge', errnote='Failed to bypass WAF challenge')
|
'Submitting JS challenge solution', 'Unable to solve JS challenge', fatal=True)
|
||||||
|
|
||||||
return super()._download_webpage_handle(url_or_request, video_id, *args, fatal=True, **kwargs)
|
return super()._download_webpage_handle(url_or_request, video_id, *args, fatal=True, **kwargs)
|
||||||
|
|
||||||
def _perform_login(self, username, password):
|
def _perform_login(self, username, password):
|
||||||
|
|||||||
@ -3,6 +3,7 @@ import re
|
|||||||
import urllib.parse
|
import urllib.parse
|
||||||
|
|
||||||
from .common import InfoExtractor
|
from .common import InfoExtractor
|
||||||
|
from ..jsinterp import int_to_int32
|
||||||
from ..utils import (
|
from ..utils import (
|
||||||
ExtractorError,
|
ExtractorError,
|
||||||
clean_html,
|
clean_html,
|
||||||
@ -20,73 +21,69 @@ from ..utils import (
|
|||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
def to_signed_32(n):
|
|
||||||
return n % ((-1 if n < 0 else 1) * 2**32)
|
|
||||||
|
|
||||||
|
|
||||||
class _ByteGenerator:
|
class _ByteGenerator:
|
||||||
def __init__(self, algo_id, seed):
|
def __init__(self, algo_id, seed):
|
||||||
try:
|
try:
|
||||||
self._algorithm = getattr(self, f'_algo{algo_id}')
|
self._algorithm = getattr(self, f'_algo{algo_id}')
|
||||||
except AttributeError:
|
except AttributeError:
|
||||||
raise ExtractorError(f'Unknown algorithm ID "{algo_id}"')
|
raise ExtractorError(f'Unknown algorithm ID "{algo_id}"')
|
||||||
self._s = to_signed_32(seed)
|
self._s = int_to_int32(seed)
|
||||||
|
|
||||||
def _algo1(self, s):
|
def _algo1(self, s):
|
||||||
# LCG (a=1664525, c=1013904223, m=2^32)
|
# LCG (a=1664525, c=1013904223, m=2^32)
|
||||||
# Ref: https://en.wikipedia.org/wiki/Linear_congruential_generator
|
# Ref: https://en.wikipedia.org/wiki/Linear_congruential_generator
|
||||||
s = self._s = to_signed_32(s * 1664525 + 1013904223)
|
s = self._s = int_to_int32(s * 1664525 + 1013904223)
|
||||||
return s
|
return s
|
||||||
|
|
||||||
def _algo2(self, s):
|
def _algo2(self, s):
|
||||||
# xorshift32
|
# xorshift32
|
||||||
# Ref: https://en.wikipedia.org/wiki/Xorshift
|
# Ref: https://en.wikipedia.org/wiki/Xorshift
|
||||||
s = to_signed_32(s ^ (s << 13))
|
s = int_to_int32(s ^ (s << 13))
|
||||||
s = to_signed_32(s ^ ((s & 0xFFFFFFFF) >> 17))
|
s = int_to_int32(s ^ ((s & 0xFFFFFFFF) >> 17))
|
||||||
s = self._s = to_signed_32(s ^ (s << 5))
|
s = self._s = int_to_int32(s ^ (s << 5))
|
||||||
return s
|
return s
|
||||||
|
|
||||||
def _algo3(self, s):
|
def _algo3(self, s):
|
||||||
# Weyl Sequence (k≈2^32*φ, m=2^32) + MurmurHash3 (fmix32)
|
# Weyl Sequence (k≈2^32*φ, m=2^32) + MurmurHash3 (fmix32)
|
||||||
# Ref: https://en.wikipedia.org/wiki/Weyl_sequence
|
# Ref: https://en.wikipedia.org/wiki/Weyl_sequence
|
||||||
# https://commons.apache.org/proper/commons-codec/jacoco/org.apache.commons.codec.digest/MurmurHash3.java.html
|
# https://commons.apache.org/proper/commons-codec/jacoco/org.apache.commons.codec.digest/MurmurHash3.java.html
|
||||||
s = self._s = to_signed_32(s + 0x9e3779b9)
|
s = self._s = int_to_int32(s + 0x9e3779b9)
|
||||||
s = to_signed_32(s ^ ((s & 0xFFFFFFFF) >> 16))
|
s = int_to_int32(s ^ ((s & 0xFFFFFFFF) >> 16))
|
||||||
s = to_signed_32(s * to_signed_32(0x85ebca77))
|
s = int_to_int32(s * int_to_int32(0x85ebca77))
|
||||||
s = to_signed_32(s ^ ((s & 0xFFFFFFFF) >> 13))
|
s = int_to_int32(s ^ ((s & 0xFFFFFFFF) >> 13))
|
||||||
s = to_signed_32(s * to_signed_32(0xc2b2ae3d))
|
s = int_to_int32(s * int_to_int32(0xc2b2ae3d))
|
||||||
return to_signed_32(s ^ ((s & 0xFFFFFFFF) >> 16))
|
return int_to_int32(s ^ ((s & 0xFFFFFFFF) >> 16))
|
||||||
|
|
||||||
def _algo4(self, s):
|
def _algo4(self, s):
|
||||||
# Custom scrambling function involving a left rotation (ROL)
|
# Custom scrambling function involving a left rotation (ROL)
|
||||||
s = self._s = to_signed_32(s + 0x6d2b79f5)
|
s = self._s = int_to_int32(s + 0x6d2b79f5)
|
||||||
s = to_signed_32((s << 7) | ((s & 0xFFFFFFFF) >> 25)) # ROL 7
|
s = int_to_int32((s << 7) | ((s & 0xFFFFFFFF) >> 25)) # ROL 7
|
||||||
s = to_signed_32(s + 0x9e3779b9)
|
s = int_to_int32(s + 0x9e3779b9)
|
||||||
s = to_signed_32(s ^ ((s & 0xFFFFFFFF) >> 11))
|
s = int_to_int32(s ^ ((s & 0xFFFFFFFF) >> 11))
|
||||||
return to_signed_32(s * 0x27d4eb2d)
|
return int_to_int32(s * 0x27d4eb2d)
|
||||||
|
|
||||||
def _algo5(self, s):
|
def _algo5(self, s):
|
||||||
# xorshift variant with a final addition
|
# xorshift variant with a final addition
|
||||||
s = to_signed_32(s ^ (s << 7))
|
s = int_to_int32(s ^ (s << 7))
|
||||||
s = to_signed_32(s ^ ((s & 0xFFFFFFFF) >> 9))
|
s = int_to_int32(s ^ ((s & 0xFFFFFFFF) >> 9))
|
||||||
s = to_signed_32(s ^ (s << 8))
|
s = int_to_int32(s ^ (s << 8))
|
||||||
s = self._s = to_signed_32(s + 0xa5a5a5a5)
|
s = self._s = int_to_int32(s + 0xa5a5a5a5)
|
||||||
return s
|
return s
|
||||||
|
|
||||||
def _algo6(self, s):
|
def _algo6(self, s):
|
||||||
# LCG (a=0x2c9277b5, c=0xac564b05) with a variable right shift scrambler
|
# LCG (a=0x2c9277b5, c=0xac564b05) with a variable right shift scrambler
|
||||||
s = self._s = to_signed_32(s * to_signed_32(0x2c9277b5) + to_signed_32(0xac564b05))
|
s = self._s = int_to_int32(s * int_to_int32(0x2c9277b5) + int_to_int32(0xac564b05))
|
||||||
s2 = to_signed_32(s ^ ((s & 0xFFFFFFFF) >> 18))
|
s2 = int_to_int32(s ^ ((s & 0xFFFFFFFF) >> 18))
|
||||||
shift = (s & 0xFFFFFFFF) >> 27 & 31
|
shift = (s & 0xFFFFFFFF) >> 27 & 31
|
||||||
return to_signed_32((s2 & 0xFFFFFFFF) >> shift)
|
return int_to_int32((s2 & 0xFFFFFFFF) >> shift)
|
||||||
|
|
||||||
def _algo7(self, s):
|
def _algo7(self, s):
|
||||||
# Weyl Sequence (k=0x9e3779b9) + custom multiply-xor-shift mixing function
|
# Weyl Sequence (k=0x9e3779b9) + custom multiply-xor-shift mixing function
|
||||||
s = self._s = to_signed_32(s + to_signed_32(0x9e3779b9))
|
s = self._s = int_to_int32(s + int_to_int32(0x9e3779b9))
|
||||||
e = to_signed_32(s ^ (s << 5))
|
e = int_to_int32(s ^ (s << 5))
|
||||||
e = to_signed_32(e * to_signed_32(0x7feb352d))
|
e = int_to_int32(e * int_to_int32(0x7feb352d))
|
||||||
e = to_signed_32(e ^ ((e & 0xFFFFFFFF) >> 15))
|
e = int_to_int32(e ^ ((e & 0xFFFFFFFF) >> 15))
|
||||||
return to_signed_32(e * to_signed_32(0x846ca68b))
|
return int_to_int32(e * int_to_int32(0x846ca68b))
|
||||||
|
|
||||||
def __next__(self):
|
def __next__(self):
|
||||||
return self._algorithm(self._s) & 0xFF
|
return self._algorithm(self._s) & 0xFF
|
||||||
@ -213,16 +210,9 @@ class XHamsterIE(InfoExtractor):
|
|||||||
'only_matching': True,
|
'only_matching': True,
|
||||||
}]
|
}]
|
||||||
|
|
||||||
def _decipher_format_url(self, format_url, format_id):
|
_VALID_HEX_RE = r'[0-9a-fA-F]{12,}'
|
||||||
parsed_url = urllib.parse.urlparse(format_url)
|
|
||||||
|
|
||||||
hex_string, path_remainder = self._search_regex(
|
|
||||||
r'^/(?P<hex>[0-9a-fA-F]{12,})(?P<rem>[/,].+)$', parsed_url.path, 'url components',
|
|
||||||
default=(None, None), group=('hex', 'rem'))
|
|
||||||
if not hex_string:
|
|
||||||
self.report_warning(f'Skipping format "{format_id}": unsupported URL format')
|
|
||||||
return None
|
|
||||||
|
|
||||||
|
def _decipher_hex_string(self, hex_string, format_id):
|
||||||
byte_data = bytes.fromhex(hex_string)
|
byte_data = bytes.fromhex(hex_string)
|
||||||
seed = int.from_bytes(byte_data[1:5], byteorder='little', signed=True)
|
seed = int.from_bytes(byte_data[1:5], byteorder='little', signed=True)
|
||||||
|
|
||||||
@ -232,7 +222,33 @@ class XHamsterIE(InfoExtractor):
|
|||||||
self.report_warning(f'Skipping format "{format_id}": {e.msg}')
|
self.report_warning(f'Skipping format "{format_id}": {e.msg}')
|
||||||
return None
|
return None
|
||||||
|
|
||||||
deciphered = bytearray(byte ^ next(byte_gen) for byte in byte_data[5:]).decode('latin-1')
|
return bytearray(byte ^ next(byte_gen) for byte in byte_data[5:]).decode('latin-1')
|
||||||
|
|
||||||
|
def _decipher_format_url(self, format_url, format_id):
|
||||||
|
# format_url can be hex ciphertext or a URL with a hex ciphertext segment
|
||||||
|
if re.fullmatch(self._VALID_HEX_RE, format_url):
|
||||||
|
return self._decipher_hex_string(format_url, format_id)
|
||||||
|
elif not url_or_none(format_url):
|
||||||
|
if re.fullmatch(r'[0-9a-fA-F]+', format_url):
|
||||||
|
# Hex strings that are too short are expected, so we don't want to warn
|
||||||
|
self.write_debug(f'Skipping dummy ciphertext for "{format_id}": {format_url}')
|
||||||
|
else:
|
||||||
|
# Something has likely changed on the site's end, so we need to warn
|
||||||
|
self.report_warning(f'Skipping format "{format_id}": invalid ciphertext')
|
||||||
|
return None
|
||||||
|
|
||||||
|
parsed_url = urllib.parse.urlparse(format_url)
|
||||||
|
|
||||||
|
hex_string, path_remainder = self._search_regex(
|
||||||
|
rf'^/(?P<hex>{self._VALID_HEX_RE})(?P<rem>[/,].+)$', parsed_url.path, 'url components',
|
||||||
|
default=(None, None), group=('hex', 'rem'))
|
||||||
|
if not hex_string:
|
||||||
|
self.report_warning(f'Skipping format "{format_id}": unsupported URL format')
|
||||||
|
return None
|
||||||
|
|
||||||
|
deciphered = self._decipher_hex_string(hex_string, format_id)
|
||||||
|
if not deciphered:
|
||||||
|
return None
|
||||||
|
|
||||||
return parsed_url._replace(path=f'/{deciphered}{path_remainder}').geturl()
|
return parsed_url._replace(path=f'/{deciphered}{path_remainder}').geturl()
|
||||||
|
|
||||||
@ -252,7 +268,7 @@ class XHamsterIE(InfoExtractor):
|
|||||||
display_id = mobj.group('display_id') or mobj.group('display_id_2')
|
display_id = mobj.group('display_id') or mobj.group('display_id_2')
|
||||||
|
|
||||||
desktop_url = re.sub(r'^(https?://(?:.+?\.)?)m\.', r'\1', url)
|
desktop_url = re.sub(r'^(https?://(?:.+?\.)?)m\.', r'\1', url)
|
||||||
webpage, urlh = self._download_webpage_handle(desktop_url, video_id)
|
webpage, urlh = self._download_webpage_handle(desktop_url, video_id, impersonate=True)
|
||||||
|
|
||||||
error = self._html_search_regex(
|
error = self._html_search_regex(
|
||||||
r'<div[^>]+id=["\']videoClosed["\'][^>]*>(.+?)</div>',
|
r'<div[^>]+id=["\']videoClosed["\'][^>]*>(.+?)</div>',
|
||||||
|
|||||||
@ -16,7 +16,7 @@ from ._redirect import (
|
|||||||
YoutubeYtBeIE,
|
YoutubeYtBeIE,
|
||||||
YoutubeYtUserIE,
|
YoutubeYtUserIE,
|
||||||
)
|
)
|
||||||
from ._search import YoutubeMusicSearchURLIE, YoutubeSearchDateIE, YoutubeSearchIE, YoutubeSearchURLIE
|
from ._search import YoutubeMusicSearchURLIE, YoutubeSearchIE, YoutubeSearchURLIE
|
||||||
from ._tab import YoutubePlaylistIE, YoutubeTabBaseInfoExtractor, YoutubeTabIE
|
from ._tab import YoutubePlaylistIE, YoutubeTabBaseInfoExtractor, YoutubeTabIE
|
||||||
from ._video import YoutubeIE
|
from ._video import YoutubeIE
|
||||||
|
|
||||||
@ -39,7 +39,6 @@ for _cls in [
|
|||||||
YoutubeYtBeIE,
|
YoutubeYtBeIE,
|
||||||
YoutubeYtUserIE,
|
YoutubeYtUserIE,
|
||||||
YoutubeMusicSearchURLIE,
|
YoutubeMusicSearchURLIE,
|
||||||
YoutubeSearchDateIE,
|
|
||||||
YoutubeSearchIE,
|
YoutubeSearchIE,
|
||||||
YoutubeSearchURLIE,
|
YoutubeSearchURLIE,
|
||||||
YoutubePlaylistIE,
|
YoutubePlaylistIE,
|
||||||
|
|||||||
@ -104,7 +104,6 @@ INNERTUBE_CLIENTS = {
|
|||||||
},
|
},
|
||||||
'INNERTUBE_CONTEXT_CLIENT_NAME': 1,
|
'INNERTUBE_CONTEXT_CLIENT_NAME': 1,
|
||||||
'SUPPORTS_COOKIES': True,
|
'SUPPORTS_COOKIES': True,
|
||||||
'SUPPORTS_AD_PLAYBACK_CONTEXT': True,
|
|
||||||
**WEB_PO_TOKEN_POLICIES,
|
**WEB_PO_TOKEN_POLICIES,
|
||||||
},
|
},
|
||||||
# Safari UA returns pre-merged video+audio 144p/240p/360p/720p/1080p HLS formats
|
# Safari UA returns pre-merged video+audio 144p/240p/360p/720p/1080p HLS formats
|
||||||
@ -118,7 +117,6 @@ INNERTUBE_CLIENTS = {
|
|||||||
},
|
},
|
||||||
'INNERTUBE_CONTEXT_CLIENT_NAME': 1,
|
'INNERTUBE_CONTEXT_CLIENT_NAME': 1,
|
||||||
'SUPPORTS_COOKIES': True,
|
'SUPPORTS_COOKIES': True,
|
||||||
'SUPPORTS_AD_PLAYBACK_CONTEXT': True,
|
|
||||||
**WEB_PO_TOKEN_POLICIES,
|
**WEB_PO_TOKEN_POLICIES,
|
||||||
},
|
},
|
||||||
'web_embedded': {
|
'web_embedded': {
|
||||||
@ -223,16 +221,17 @@ INNERTUBE_CLIENTS = {
|
|||||||
},
|
},
|
||||||
'PLAYER_PO_TOKEN_POLICY': PlayerPoTokenPolicy(required=False, recommended=True),
|
'PLAYER_PO_TOKEN_POLICY': PlayerPoTokenPolicy(required=False, recommended=True),
|
||||||
},
|
},
|
||||||
# YouTube Kids videos aren't returned on this client for some reason
|
# "Made for kids" videos aren't available with this client
|
||||||
|
# Using a clientVersion>1.65 may return SABR streams only
|
||||||
'android_vr': {
|
'android_vr': {
|
||||||
'INNERTUBE_CONTEXT': {
|
'INNERTUBE_CONTEXT': {
|
||||||
'client': {
|
'client': {
|
||||||
'clientName': 'ANDROID_VR',
|
'clientName': 'ANDROID_VR',
|
||||||
'clientVersion': '1.71.26',
|
'clientVersion': '1.65.10',
|
||||||
'deviceMake': 'Oculus',
|
'deviceMake': 'Oculus',
|
||||||
'deviceModel': 'Quest 3',
|
'deviceModel': 'Quest 3',
|
||||||
'androidSdkVersion': 32,
|
'androidSdkVersion': 32,
|
||||||
'userAgent': 'com.google.android.apps.youtube.vr.oculus/1.71.26 (Linux; U; Android 12L; eureka-user Build/SQ3A.220605.009.A1) gzip',
|
'userAgent': 'com.google.android.apps.youtube.vr.oculus/1.65.10 (Linux; U; Android 12L; eureka-user Build/SQ3A.220605.009.A1) gzip',
|
||||||
'osName': 'Android',
|
'osName': 'Android',
|
||||||
'osVersion': '12L',
|
'osVersion': '12L',
|
||||||
},
|
},
|
||||||
@ -369,7 +368,7 @@ def short_client_name(client_name):
|
|||||||
|
|
||||||
def _fix_embedded_ytcfg(ytcfg):
|
def _fix_embedded_ytcfg(ytcfg):
|
||||||
ytcfg['INNERTUBE_CONTEXT'].setdefault('thirdParty', {}).update({
|
ytcfg['INNERTUBE_CONTEXT'].setdefault('thirdParty', {}).update({
|
||||||
'embedUrl': 'https://www.youtube.com/', # Can be any valid URL
|
'embedUrl': 'https://www.reddit.com/', # Can be any valid non-YouTube URL
|
||||||
})
|
})
|
||||||
|
|
||||||
|
|
||||||
@ -958,16 +957,25 @@ class YoutubeBaseInfoExtractor(InfoExtractor):
|
|||||||
url = {
|
url = {
|
||||||
'mweb': 'https://m.youtube.com',
|
'mweb': 'https://m.youtube.com',
|
||||||
'web': 'https://www.youtube.com',
|
'web': 'https://www.youtube.com',
|
||||||
|
'web_safari': 'https://www.youtube.com',
|
||||||
'web_music': 'https://music.youtube.com',
|
'web_music': 'https://music.youtube.com',
|
||||||
|
'web_creator': 'https://studio.youtube.com',
|
||||||
'web_embedded': f'https://www.youtube.com/embed/{video_id}?html5=1',
|
'web_embedded': f'https://www.youtube.com/embed/{video_id}?html5=1',
|
||||||
'tv': 'https://www.youtube.com/tv',
|
'tv': 'https://www.youtube.com/tv',
|
||||||
}.get(client)
|
}.get(client)
|
||||||
if not url:
|
if not url:
|
||||||
return {}
|
return {}
|
||||||
|
|
||||||
|
default_ytcfg = self._get_default_ytcfg(client)
|
||||||
|
|
||||||
|
if default_ytcfg['REQUIRE_AUTH'] and not self.is_authenticated:
|
||||||
|
return {}
|
||||||
|
|
||||||
webpage = self._download_webpage_with_retries(
|
webpage = self._download_webpage_with_retries(
|
||||||
url, video_id, note=f'Downloading {client.replace("_", " ").strip()} client config',
|
url, video_id, note=f'Downloading {client.replace("_", " ").strip()} client config',
|
||||||
headers=traverse_obj(self._get_default_ytcfg(client), {
|
headers=traverse_obj(default_ytcfg, {
|
||||||
'User-Agent': ('INNERTUBE_CONTEXT', 'client', 'userAgent', {str}),
|
'User-Agent': ('INNERTUBE_CONTEXT', 'client', 'userAgent', {str}),
|
||||||
|
'Referer': ('INNERTUBE_CONTEXT', 'thirdParty', 'embedUrl', {str}),
|
||||||
}))
|
}))
|
||||||
|
|
||||||
ytcfg = self.extract_ytcfg(video_id, webpage) or {}
|
ytcfg = self.extract_ytcfg(video_id, webpage) or {}
|
||||||
|
|||||||
@ -28,21 +28,6 @@ class YoutubeSearchIE(YoutubeTabBaseInfoExtractor, SearchInfoExtractor):
|
|||||||
}]
|
}]
|
||||||
|
|
||||||
|
|
||||||
class YoutubeSearchDateIE(YoutubeTabBaseInfoExtractor, SearchInfoExtractor):
|
|
||||||
IE_NAME = YoutubeSearchIE.IE_NAME + ':date'
|
|
||||||
_SEARCH_KEY = 'ytsearchdate'
|
|
||||||
IE_DESC = 'YouTube search, newest videos first'
|
|
||||||
_SEARCH_PARAMS = 'CAISAhAB8AEB' # Videos only, sorted by date
|
|
||||||
_TESTS = [{
|
|
||||||
'url': 'ytsearchdate5:youtube-dl test video',
|
|
||||||
'playlist_count': 5,
|
|
||||||
'info_dict': {
|
|
||||||
'id': 'youtube-dl test video',
|
|
||||||
'title': 'youtube-dl test video',
|
|
||||||
},
|
|
||||||
}]
|
|
||||||
|
|
||||||
|
|
||||||
class YoutubeSearchURLIE(YoutubeTabBaseInfoExtractor):
|
class YoutubeSearchURLIE(YoutubeTabBaseInfoExtractor):
|
||||||
IE_DESC = 'YouTube search URLs with sorting and filter support'
|
IE_DESC = 'YouTube search URLs with sorting and filter support'
|
||||||
IE_NAME = YoutubeSearchIE.IE_NAME + '_url'
|
IE_NAME = YoutubeSearchIE.IE_NAME + '_url'
|
||||||
|
|||||||
@ -81,7 +81,7 @@ class YoutubeTabBaseInfoExtractor(YoutubeBaseInfoExtractor):
|
|||||||
'reelPlayerHeaderSupportedRenderers', 'reelPlayerHeaderRenderer'))
|
'reelPlayerHeaderSupportedRenderers', 'reelPlayerHeaderRenderer'))
|
||||||
|
|
||||||
title = self._get_text(renderer, 'title', 'headline') or self._get_text(reel_header_renderer, 'reelTitleText')
|
title = self._get_text(renderer, 'title', 'headline') or self._get_text(reel_header_renderer, 'reelTitleText')
|
||||||
description = self._get_text(renderer, 'descriptionSnippet')
|
description = self._get_text(renderer, 'descriptionSnippet', ('detailedMetadataSnippets', ..., 'snippetText'))
|
||||||
|
|
||||||
duration = int_or_none(renderer.get('lengthSeconds'))
|
duration = int_or_none(renderer.get('lengthSeconds'))
|
||||||
if duration is None:
|
if duration is None:
|
||||||
@ -2148,7 +2148,7 @@ class YoutubeTabIE(YoutubeTabBaseInfoExtractor):
|
|||||||
f'https://music.youtube.com/playlist?list={item_id[2:]}', YoutubeTabIE, item_id[2:])
|
f'https://music.youtube.com/playlist?list={item_id[2:]}', YoutubeTabIE, item_id[2:])
|
||||||
elif item_id[:2] == 'MP': # Resolve albums (/[channel/browse]/MP...) to their equivalent playlist
|
elif item_id[:2] == 'MP': # Resolve albums (/[channel/browse]/MP...) to their equivalent playlist
|
||||||
mdata = self._extract_tab_endpoint(
|
mdata = self._extract_tab_endpoint(
|
||||||
f'https://music.youtube.com/channel/{item_id}', item_id, default_client='web_music')
|
f'https://music.youtube.com/browse/{item_id}', item_id, default_client='web_music')
|
||||||
murl = traverse_obj(mdata, ('microformat', 'microformatDataRenderer', 'urlCanonical'),
|
murl = traverse_obj(mdata, ('microformat', 'microformatDataRenderer', 'urlCanonical'),
|
||||||
get_all=False, expected_type=str)
|
get_all=False, expected_type=str)
|
||||||
if not murl:
|
if not murl:
|
||||||
|
|||||||
@ -139,17 +139,14 @@ class YoutubeIE(YoutubeBaseInfoExtractor):
|
|||||||
]
|
]
|
||||||
_RETURN_TYPE = 'video' # XXX: How to handle multifeed?
|
_RETURN_TYPE = 'video' # XXX: How to handle multifeed?
|
||||||
|
|
||||||
_PLAYER_INFO_RE = (
|
|
||||||
r'/s/player/(?P<id>[a-zA-Z0-9_-]{8,})/(?:tv-)?player',
|
|
||||||
r'/(?P<id>[a-zA-Z0-9_-]{8,})/player(?:_ias\.vflset(?:/[a-zA-Z]{2,3}_[a-zA-Z]{2,3})?|-plasma-ias-(?:phone|tablet)-[a-z]{2}_[A-Z]{2}\.vflset)/base\.js$',
|
|
||||||
r'\b(?P<id>vfl[a-zA-Z0-9_-]+)\b.*?\.js$',
|
|
||||||
)
|
|
||||||
_SUBTITLE_FORMATS = ('json3', 'srv1', 'srv2', 'srv3', 'ttml', 'srt', 'vtt')
|
_SUBTITLE_FORMATS = ('json3', 'srv1', 'srv2', 'srv3', 'ttml', 'srt', 'vtt')
|
||||||
_DEFAULT_CLIENTS = ('android_vr', 'web', 'web_safari')
|
_DEFAULT_CLIENTS = ('android_vr', 'web_safari')
|
||||||
_DEFAULT_JSLESS_CLIENTS = ('android_vr',)
|
_DEFAULT_JSLESS_CLIENTS = ('android_vr',)
|
||||||
_DEFAULT_AUTHED_CLIENTS = ('tv_downgraded', 'web', 'web_safari')
|
_DEFAULT_AUTHED_CLIENTS = ('tv_downgraded', 'web_safari')
|
||||||
# Premium does not require POT (except for subtitles)
|
# Premium does not require POT (except for subtitles)
|
||||||
_DEFAULT_PREMIUM_CLIENTS = ('tv_downgraded', 'web_creator', 'web')
|
_DEFAULT_PREMIUM_CLIENTS = ('tv_downgraded', 'web_creator')
|
||||||
|
_WEBPAGE_CLIENTS = ('web', 'web_safari')
|
||||||
|
_DEFAULT_WEBPAGE_CLIENT = 'web_safari'
|
||||||
|
|
||||||
_GEO_BYPASS = False
|
_GEO_BYPASS = False
|
||||||
|
|
||||||
@ -1879,20 +1876,44 @@ class YoutubeIE(YoutubeBaseInfoExtractor):
|
|||||||
}]
|
}]
|
||||||
|
|
||||||
_DEFAULT_PLAYER_JS_VERSION = 'actual'
|
_DEFAULT_PLAYER_JS_VERSION = 'actual'
|
||||||
_DEFAULT_PLAYER_JS_VARIANT = 'tv'
|
_DEFAULT_PLAYER_JS_VARIANT = 'main'
|
||||||
_PLAYER_JS_VARIANT_MAP = {
|
_PLAYER_JS_VARIANT_MAP = {
|
||||||
'main': 'player_ias.vflset/en_US/base.js',
|
'main': 'player_ias.vflset/en_US/base.js',
|
||||||
'tcc': 'player_ias_tcc.vflset/en_US/base.js',
|
'tcc': 'player_ias_tcc.vflset/en_US/base.js',
|
||||||
'tce': 'player_ias_tce.vflset/en_US/base.js',
|
'tce': 'player_ias_tce.vflset/en_US/base.js',
|
||||||
'es5': 'player_es5.vflset/en_US/base.js',
|
'es5': 'player_es5.vflset/en_US/base.js',
|
||||||
'es6': 'player_es6.vflset/en_US/base.js',
|
'es6': 'player_es6.vflset/en_US/base.js',
|
||||||
|
'es6_tcc': 'player_es6_tcc.vflset/en_US/base.js',
|
||||||
|
'es6_tce': 'player_es6_tce.vflset/en_US/base.js',
|
||||||
'tv': 'tv-player-ias.vflset/tv-player-ias.js',
|
'tv': 'tv-player-ias.vflset/tv-player-ias.js',
|
||||||
'tv_es6': 'tv-player-es6.vflset/tv-player-es6.js',
|
'tv_es6': 'tv-player-es6.vflset/tv-player-es6.js',
|
||||||
'phone': 'player-plasma-ias-phone-en_US.vflset/base.js',
|
'phone': 'player-plasma-ias-phone-en_US.vflset/base.js',
|
||||||
'tablet': 'player-plasma-ias-tablet-en_US.vflset/base.js', # Dead since 19712d96 (2025.11.06)
|
'house': 'house_brand_player.vflset/en_US/base.js', # Used by Google Drive
|
||||||
}
|
}
|
||||||
_INVERSE_PLAYER_JS_VARIANT_MAP = {v: k for k, v in _PLAYER_JS_VARIANT_MAP.items()}
|
_INVERSE_PLAYER_JS_VARIANT_MAP = {v: k for k, v in _PLAYER_JS_VARIANT_MAP.items()}
|
||||||
|
|
||||||
|
@functools.cached_property
|
||||||
|
def _player_js_version(self):
|
||||||
|
return self._configuration_arg('player_js_version', [None])[0] or self._DEFAULT_PLAYER_JS_VERSION
|
||||||
|
|
||||||
|
@functools.cached_property
|
||||||
|
def _webpage_client(self):
|
||||||
|
webpage_client = self._configuration_arg('webpage_client', [self._DEFAULT_WEBPAGE_CLIENT])[0]
|
||||||
|
if webpage_client not in self._WEBPAGE_CLIENTS:
|
||||||
|
self.report_warning(
|
||||||
|
f'Invalid webpage_client "{webpage_client}" requested; '
|
||||||
|
f'falling back to {self._DEFAULT_WEBPAGE_CLIENT}', only_once=True)
|
||||||
|
webpage_client = self._DEFAULT_WEBPAGE_CLIENT
|
||||||
|
return webpage_client
|
||||||
|
|
||||||
|
@functools.cached_property
|
||||||
|
def _skipped_webpage_data(self):
|
||||||
|
skipped = set(self._configuration_arg('webpage_skip'))
|
||||||
|
# If forcing a player version, the webpage player response must be skipped
|
||||||
|
if self._player_js_version != 'actual':
|
||||||
|
skipped.add('player_response')
|
||||||
|
return skipped
|
||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
def suitable(cls, url):
|
def suitable(cls, url):
|
||||||
from yt_dlp.utils import parse_qs
|
from yt_dlp.utils import parse_qs
|
||||||
@ -1918,13 +1939,13 @@ class YoutubeIE(YoutubeBaseInfoExtractor):
|
|||||||
start_time = time.time()
|
start_time = time.time()
|
||||||
formats = [f for f in formats if f.get('is_from_start')]
|
formats = [f for f in formats if f.get('is_from_start')]
|
||||||
|
|
||||||
def refetch_manifest(format_id, delay):
|
def refetch_manifest(itag, client_name, delay):
|
||||||
nonlocal formats, start_time, is_live
|
nonlocal formats, start_time, is_live
|
||||||
if time.time() <= start_time + delay:
|
if time.time() <= start_time + delay:
|
||||||
return
|
return
|
||||||
|
|
||||||
_, _, _, _, prs, player_url = self._initial_extract(
|
_, _, _, _, prs, player_url = self._initial_extract(
|
||||||
url, smuggled_data, webpage_url, 'web', video_id)
|
url, smuggled_data, webpage_url, self._webpage_client, video_id)
|
||||||
video_details = traverse_obj(prs, (..., 'videoDetails'), expected_type=dict)
|
video_details = traverse_obj(prs, (..., 'videoDetails'), expected_type=dict)
|
||||||
microformats = traverse_obj(
|
microformats = traverse_obj(
|
||||||
prs, (..., 'microformat', 'playerMicroformatRenderer'),
|
prs, (..., 'microformat', 'playerMicroformatRenderer'),
|
||||||
@ -1933,20 +1954,20 @@ class YoutubeIE(YoutubeBaseInfoExtractor):
|
|||||||
is_live = live_status == 'is_live'
|
is_live = live_status == 'is_live'
|
||||||
start_time = time.time()
|
start_time = time.time()
|
||||||
|
|
||||||
def mpd_feed(format_id, delay):
|
def mpd_feed(itag, client_name, delay):
|
||||||
"""
|
"""
|
||||||
@returns (manifest_url, manifest_stream_number, is_live) or None
|
@returns (manifest_url, manifest_stream_number, is_live) or None
|
||||||
"""
|
"""
|
||||||
for retry in self.RetryManager(fatal=False):
|
for retry in self.RetryManager(fatal=False):
|
||||||
with lock:
|
with lock:
|
||||||
refetch_manifest(format_id, delay)
|
refetch_manifest(itag, client_name, delay)
|
||||||
|
|
||||||
f = next((f for f in formats if f['format_id'] == format_id), None)
|
f = next((f for f in formats if f.get('_itag') == itag and f.get('_client') == client_name), None)
|
||||||
if not f:
|
if not f:
|
||||||
if not is_live:
|
if not is_live:
|
||||||
retry.error = f'{video_id}: Video is no longer live'
|
retry.error = f'{video_id}: Video is no longer live'
|
||||||
else:
|
else:
|
||||||
retry.error = f'Cannot find refreshed manifest for format {format_id}{bug_reports_message()}'
|
retry.error = f'Cannot find refreshed manifest for format {itag}{bug_reports_message()}'
|
||||||
continue
|
continue
|
||||||
|
|
||||||
# Formats from ended premieres will be missing a manifest_url
|
# Formats from ended premieres will be missing a manifest_url
|
||||||
@ -1959,7 +1980,7 @@ class YoutubeIE(YoutubeBaseInfoExtractor):
|
|||||||
|
|
||||||
for f in formats:
|
for f in formats:
|
||||||
f['is_live'] = is_live
|
f['is_live'] = is_live
|
||||||
gen = functools.partial(self._live_dash_fragments, video_id, f['format_id'],
|
gen = functools.partial(self._live_dash_fragments, video_id, f['_itag'], f['_client'],
|
||||||
live_start_time, mpd_feed, not is_live and f.copy())
|
live_start_time, mpd_feed, not is_live and f.copy())
|
||||||
if is_live:
|
if is_live:
|
||||||
f['fragments'] = gen
|
f['fragments'] = gen
|
||||||
@ -1968,7 +1989,7 @@ class YoutubeIE(YoutubeBaseInfoExtractor):
|
|||||||
f['fragments'] = LazyList(gen({}))
|
f['fragments'] = LazyList(gen({}))
|
||||||
del f['is_from_start']
|
del f['is_from_start']
|
||||||
|
|
||||||
def _live_dash_fragments(self, video_id, format_id, live_start_time, mpd_feed, manifestless_orig_fmt, ctx):
|
def _live_dash_fragments(self, video_id, itag, client_name, live_start_time, mpd_feed, manifestless_orig_fmt, ctx):
|
||||||
FETCH_SPAN, MAX_DURATION = 5, 432000
|
FETCH_SPAN, MAX_DURATION = 5, 432000
|
||||||
|
|
||||||
mpd_url, stream_number, is_live = None, None, True
|
mpd_url, stream_number, is_live = None, None, True
|
||||||
@ -1992,7 +2013,7 @@ class YoutubeIE(YoutubeBaseInfoExtractor):
|
|||||||
old_mpd_url = mpd_url
|
old_mpd_url = mpd_url
|
||||||
last_error = ctx.pop('last_error', None)
|
last_error = ctx.pop('last_error', None)
|
||||||
expire_fast = immediate or (last_error and isinstance(last_error, HTTPError) and last_error.status == 403)
|
expire_fast = immediate or (last_error and isinstance(last_error, HTTPError) and last_error.status == 403)
|
||||||
mpd_url, stream_number, is_live = (mpd_feed(format_id, 5 if expire_fast else 18000)
|
mpd_url, stream_number, is_live = (mpd_feed(itag, client_name, 5 if expire_fast else 18000)
|
||||||
or (mpd_url, stream_number, False))
|
or (mpd_url, stream_number, False))
|
||||||
if not refresh_sequence:
|
if not refresh_sequence:
|
||||||
if expire_fast and not is_live:
|
if expire_fast and not is_live:
|
||||||
@ -2018,7 +2039,7 @@ class YoutubeIE(YoutubeBaseInfoExtractor):
|
|||||||
_last_seq = int(re.search(r'(?:/|^)sq/(\d+)', fragments[-1]['path']).group(1))
|
_last_seq = int(re.search(r'(?:/|^)sq/(\d+)', fragments[-1]['path']).group(1))
|
||||||
return True, _last_seq
|
return True, _last_seq
|
||||||
|
|
||||||
self.write_debug(f'[{video_id}] Generating fragments for format {format_id}')
|
self.write_debug(f'[{video_id}] Generating fragments for format {itag}')
|
||||||
while is_live:
|
while is_live:
|
||||||
fetch_time = time.time()
|
fetch_time = time.time()
|
||||||
if no_fragment_score > 30:
|
if no_fragment_score > 30:
|
||||||
@ -2080,15 +2101,14 @@ class YoutubeIE(YoutubeBaseInfoExtractor):
|
|||||||
time.sleep(max(0, FETCH_SPAN + fetch_time - time.time()))
|
time.sleep(max(0, FETCH_SPAN + fetch_time - time.time()))
|
||||||
|
|
||||||
def _get_player_js_version(self):
|
def _get_player_js_version(self):
|
||||||
player_js_version = self._configuration_arg('player_js_version', [''])[0] or self._DEFAULT_PLAYER_JS_VERSION
|
if self._player_js_version == 'actual':
|
||||||
if player_js_version == 'actual':
|
|
||||||
return None, None
|
return None, None
|
||||||
if not re.fullmatch(r'[0-9]{5,}@[0-9a-f]{8,}', player_js_version):
|
if not re.fullmatch(r'[0-9]{5,}@[0-9a-f]{8,}', self._player_js_version):
|
||||||
self.report_warning(
|
self.report_warning(
|
||||||
f'Invalid player JS version "{player_js_version}" specified. '
|
f'Invalid player JS version "{self._player_js_version}" specified. '
|
||||||
f'It should be "actual" or in the format of STS@HASH', only_once=True)
|
f'It should be "actual" or in the format of STS@HASH', only_once=True)
|
||||||
return None, None
|
return None, None
|
||||||
return player_js_version.split('@')
|
return self._player_js_version.split('@')
|
||||||
|
|
||||||
def _construct_player_url(self, *, player_id=None, player_url=None):
|
def _construct_player_url(self, *, player_id=None, player_url=None):
|
||||||
assert player_id or player_url, '_construct_player_url must take one of player_id or player_url'
|
assert player_id or player_url, '_construct_player_url must take one of player_id or player_url'
|
||||||
@ -2179,13 +2199,9 @@ class YoutubeIE(YoutubeBaseInfoExtractor):
|
|||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
def _extract_player_info(cls, player_url):
|
def _extract_player_info(cls, player_url):
|
||||||
for player_re in cls._PLAYER_INFO_RE:
|
if m := re.search(r'/s/player/(?P<id>[a-fA-F0-9]{8,})/', player_url):
|
||||||
id_m = re.search(player_re, player_url)
|
return m.group('id')
|
||||||
if id_m:
|
raise ExtractorError(f'Cannot identify player {player_url!r}')
|
||||||
break
|
|
||||||
else:
|
|
||||||
raise ExtractorError(f'Cannot identify player {player_url!r}')
|
|
||||||
return id_m.group('id')
|
|
||||||
|
|
||||||
def _load_player(self, video_id, player_url, fatal=True):
|
def _load_player(self, video_id, player_url, fatal=True):
|
||||||
player_js_key = self._player_js_cache_key(player_url)
|
player_js_key = self._player_js_cache_key(player_url)
|
||||||
@ -2682,12 +2698,14 @@ class YoutubeIE(YoutubeBaseInfoExtractor):
|
|||||||
return {'contentCheckOk': True, 'racyCheckOk': True}
|
return {'contentCheckOk': True, 'racyCheckOk': True}
|
||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
def _generate_player_context(cls, sts=None, use_ad_playback_context=False):
|
def _generate_player_context(cls, sts=None, use_ad_playback_context=False, encrypted_context=None):
|
||||||
context = {
|
context = {
|
||||||
'html5Preference': 'HTML5_PREF_WANTS',
|
'html5Preference': 'HTML5_PREF_WANTS',
|
||||||
}
|
}
|
||||||
if sts is not None:
|
if sts is not None:
|
||||||
context['signatureTimestamp'] = sts
|
context['signatureTimestamp'] = sts
|
||||||
|
if encrypted_context:
|
||||||
|
context['encryptedHostFlags'] = encrypted_context
|
||||||
|
|
||||||
playback_context = {
|
playback_context = {
|
||||||
'contentPlaybackContext': context,
|
'contentPlaybackContext': context,
|
||||||
@ -2932,7 +2950,19 @@ class YoutubeIE(YoutubeBaseInfoExtractor):
|
|||||||
self._configuration_arg('use_ad_playback_context', ['false'])[0] != 'false'
|
self._configuration_arg('use_ad_playback_context', ['false'])[0] != 'false'
|
||||||
and traverse_obj(INNERTUBE_CLIENTS, (client, 'SUPPORTS_AD_PLAYBACK_CONTEXT', {bool})))
|
and traverse_obj(INNERTUBE_CLIENTS, (client, 'SUPPORTS_AD_PLAYBACK_CONTEXT', {bool})))
|
||||||
|
|
||||||
yt_query.update(self._generate_player_context(sts, use_ad_playback_context))
|
# web_embedded player requests may need to include encryptedHostFlags in its contentPlaybackContext.
|
||||||
|
# This can be detected with the embeds_enable_encrypted_host_flags_enforcement experiemnt flag,
|
||||||
|
# but there is no harm in including encryptedHostFlags with all web_embedded player requests.
|
||||||
|
encrypted_context = None
|
||||||
|
if _split_innertube_client(client)[2] == 'embedded':
|
||||||
|
encrypted_context = traverse_obj(player_ytcfg, (
|
||||||
|
'WEB_PLAYER_CONTEXT_CONFIGS', 'WEB_PLAYER_CONTEXT_CONFIG_ID_EMBEDDED_PLAYER', 'encryptedHostFlags'))
|
||||||
|
|
||||||
|
yt_query.update(
|
||||||
|
self._generate_player_context(
|
||||||
|
sts=sts,
|
||||||
|
use_ad_playback_context=use_ad_playback_context,
|
||||||
|
encrypted_context=encrypted_context))
|
||||||
|
|
||||||
return self._extract_response(
|
return self._extract_response(
|
||||||
item_id=video_id, ep='player', query=yt_query,
|
item_id=video_id, ep='player', query=yt_query,
|
||||||
@ -3051,7 +3081,7 @@ class YoutubeIE(YoutubeBaseInfoExtractor):
|
|||||||
tried_iframe_fallback = True
|
tried_iframe_fallback = True
|
||||||
|
|
||||||
pr = None
|
pr = None
|
||||||
if client == webpage_client and 'player_response' not in self._configuration_arg('webpage_skip'):
|
if client == webpage_client and 'player_response' not in self._skipped_webpage_data:
|
||||||
pr = initial_pr
|
pr = initial_pr
|
||||||
|
|
||||||
visitor_data = visitor_data or self._extract_visitor_data(webpage_ytcfg, initial_pr, player_ytcfg)
|
visitor_data = visitor_data or self._extract_visitor_data(webpage_ytcfg, initial_pr, player_ytcfg)
|
||||||
@ -3219,6 +3249,7 @@ class YoutubeIE(YoutubeBaseInfoExtractor):
|
|||||||
])
|
])
|
||||||
skip_player_js = 'js' in self._configuration_arg('player_skip')
|
skip_player_js = 'js' in self._configuration_arg('player_skip')
|
||||||
format_types = self._configuration_arg('formats')
|
format_types = self._configuration_arg('formats')
|
||||||
|
skip_bad_formats = 'incomplete' not in format_types
|
||||||
all_formats = 'duplicate' in format_types
|
all_formats = 'duplicate' in format_types
|
||||||
if self._configuration_arg('include_duplicate_formats'):
|
if self._configuration_arg('include_duplicate_formats'):
|
||||||
all_formats = True
|
all_formats = True
|
||||||
@ -3464,7 +3495,8 @@ class YoutubeIE(YoutubeBaseInfoExtractor):
|
|||||||
https_fmts = []
|
https_fmts = []
|
||||||
|
|
||||||
for fmt_stream in streaming_formats:
|
for fmt_stream in streaming_formats:
|
||||||
if fmt_stream.get('targetDurationSec'):
|
# Live adaptive https formats are not supported: skip unless extractor-arg given
|
||||||
|
if fmt_stream.get('targetDurationSec') and skip_bad_formats:
|
||||||
continue
|
continue
|
||||||
|
|
||||||
# FORMAT_STREAM_TYPE_OTF(otf=1) requires downloading the init fragment
|
# FORMAT_STREAM_TYPE_OTF(otf=1) requires downloading the init fragment
|
||||||
@ -3576,7 +3608,6 @@ class YoutubeIE(YoutubeBaseInfoExtractor):
|
|||||||
yield from process_https_formats()
|
yield from process_https_formats()
|
||||||
|
|
||||||
needs_live_processing = self._needs_live_processing(live_status, duration)
|
needs_live_processing = self._needs_live_processing(live_status, duration)
|
||||||
skip_bad_formats = 'incomplete' not in format_types
|
|
||||||
|
|
||||||
skip_manifests = set(self._configuration_arg('skip'))
|
skip_manifests = set(self._configuration_arg('skip'))
|
||||||
if (needs_live_processing == 'is_live' # These will be filtered out by YoutubeDL anyway
|
if (needs_live_processing == 'is_live' # These will be filtered out by YoutubeDL anyway
|
||||||
@ -3716,11 +3747,15 @@ class YoutubeIE(YoutubeBaseInfoExtractor):
|
|||||||
sub[STREAMING_DATA_CLIENT_NAME] = client_name
|
sub[STREAMING_DATA_CLIENT_NAME] = client_name
|
||||||
subtitles = self._merge_subtitles(subs, subtitles) # Prioritize HLS subs over DASH
|
subtitles = self._merge_subtitles(subs, subtitles) # Prioritize HLS subs over DASH
|
||||||
for f in formats:
|
for f in formats:
|
||||||
if process_manifest_format(f, 'dash', client_name, f['format_id'], require_po_token and not po_token):
|
# Save original itag value as format_id because process_manifest_format mutates f
|
||||||
|
format_id = f['format_id']
|
||||||
|
if process_manifest_format(f, 'dash', client_name, format_id, require_po_token and not po_token):
|
||||||
f['filesize'] = int_or_none(self._search_regex(
|
f['filesize'] = int_or_none(self._search_regex(
|
||||||
r'/clen/(\d+)', f.get('fragment_base_url') or f['url'], 'file size', default=None))
|
r'/clen/(\d+)', f.get('fragment_base_url') or f['url'], 'file size', default=None))
|
||||||
if needs_live_processing:
|
if needs_live_processing:
|
||||||
f['is_from_start'] = True
|
f['is_from_start'] = True
|
||||||
|
f['_itag'] = format_id
|
||||||
|
f['_client'] = client_name
|
||||||
yield f
|
yield f
|
||||||
yield subtitles
|
yield subtitles
|
||||||
|
|
||||||
@ -3833,7 +3868,7 @@ class YoutubeIE(YoutubeBaseInfoExtractor):
|
|||||||
|
|
||||||
def _download_initial_data(self, video_id, webpage, webpage_client, webpage_ytcfg):
|
def _download_initial_data(self, video_id, webpage, webpage_client, webpage_ytcfg):
|
||||||
initial_data = None
|
initial_data = None
|
||||||
if webpage and 'initial_data' not in self._configuration_arg('webpage_skip'):
|
if webpage and 'initial_data' not in self._skipped_webpage_data:
|
||||||
initial_data = self.extract_yt_initial_data(video_id, webpage, fatal=False)
|
initial_data = self.extract_yt_initial_data(video_id, webpage, fatal=False)
|
||||||
if not traverse_obj(initial_data, 'contents'):
|
if not traverse_obj(initial_data, 'contents'):
|
||||||
self.report_warning('Incomplete data received in embedded initial data; re-fetching using API.')
|
self.report_warning('Incomplete data received in embedded initial data; re-fetching using API.')
|
||||||
@ -3881,10 +3916,9 @@ class YoutubeIE(YoutubeBaseInfoExtractor):
|
|||||||
|
|
||||||
base_url = self.http_scheme() + '//www.youtube.com/'
|
base_url = self.http_scheme() + '//www.youtube.com/'
|
||||||
webpage_url = base_url + 'watch?v=' + video_id
|
webpage_url = base_url + 'watch?v=' + video_id
|
||||||
webpage_client = 'web'
|
|
||||||
|
|
||||||
webpage, webpage_ytcfg, initial_data, is_premium_subscriber, player_responses, player_url = self._initial_extract(
|
webpage, webpage_ytcfg, initial_data, is_premium_subscriber, player_responses, player_url = self._initial_extract(
|
||||||
url, smuggled_data, webpage_url, webpage_client, video_id)
|
url, smuggled_data, webpage_url, self._webpage_client, video_id)
|
||||||
|
|
||||||
playability_statuses = traverse_obj(
|
playability_statuses = traverse_obj(
|
||||||
player_responses, (..., 'playabilityStatus'), expected_type=dict)
|
player_responses, (..., 'playabilityStatus'), expected_type=dict)
|
||||||
@ -4086,16 +4120,33 @@ class YoutubeIE(YoutubeBaseInfoExtractor):
|
|||||||
|
|
||||||
needs_live_processing = self._needs_live_processing(live_status, duration)
|
needs_live_processing = self._needs_live_processing(live_status, duration)
|
||||||
|
|
||||||
def is_bad_format(fmt):
|
def adjust_incomplete_format(fmt, note_suffix='(Last 2 hours)', pref_adjustment=-10):
|
||||||
if needs_live_processing and not fmt.get('is_from_start'):
|
fmt['preference'] = (fmt.get('preference') or -1) + pref_adjustment
|
||||||
return True
|
fmt['format_note'] = join_nonempty(fmt.get('format_note'), note_suffix, delim=' ')
|
||||||
elif (live_status == 'is_live' and needs_live_processing != 'is_live'
|
|
||||||
and fmt.get('protocol') == 'http_dash_segments'):
|
|
||||||
return True
|
|
||||||
|
|
||||||
for fmt in filter(is_bad_format, formats):
|
# Adjust preference and format note for incomplete live/post-live formats
|
||||||
fmt['preference'] = (fmt.get('preference') or -1) - 10
|
if live_status in ('is_live', 'post_live'):
|
||||||
fmt['format_note'] = join_nonempty(fmt.get('format_note'), '(Last 2 hours)', delim=' ')
|
for fmt in formats:
|
||||||
|
protocol = fmt.get('protocol')
|
||||||
|
# Currently, protocol isn't set for adaptive https formats, but this could change
|
||||||
|
is_adaptive = protocol in (None, 'http', 'https')
|
||||||
|
if live_status == 'post_live' and is_adaptive:
|
||||||
|
# Post-live adaptive formats cause HttpFD to raise "Did not get any data blocks"
|
||||||
|
# These formats are *only* useful to external applications, so we can hide them
|
||||||
|
# Set their preference <= -1000 so that FormatSorter flags them as 'hidden'
|
||||||
|
adjust_incomplete_format(fmt, note_suffix='(ended)', pref_adjustment=-5000)
|
||||||
|
# Is it live with --live-from-start? Or is it post-live and its duration is >2hrs?
|
||||||
|
elif needs_live_processing:
|
||||||
|
if not fmt.get('is_from_start'):
|
||||||
|
# Post-live m3u8 formats for >2hr streams
|
||||||
|
adjust_incomplete_format(fmt)
|
||||||
|
elif live_status == 'is_live':
|
||||||
|
if protocol == 'http_dash_segments':
|
||||||
|
# Live DASH formats without --live-from-start
|
||||||
|
adjust_incomplete_format(fmt)
|
||||||
|
elif is_adaptive:
|
||||||
|
# Incomplete live adaptive https formats
|
||||||
|
adjust_incomplete_format(fmt, note_suffix='(incomplete)', pref_adjustment=-20)
|
||||||
|
|
||||||
if needs_live_processing:
|
if needs_live_processing:
|
||||||
self._prepare_live_from_start_formats(
|
self._prepare_live_from_start_formats(
|
||||||
|
|||||||
@ -21,12 +21,20 @@ from yt_dlp.utils import Popen
|
|||||||
class QuickJSJCP(EJSBaseJCP, BuiltinIEContentProvider):
|
class QuickJSJCP(EJSBaseJCP, BuiltinIEContentProvider):
|
||||||
PROVIDER_NAME = 'quickjs'
|
PROVIDER_NAME = 'quickjs'
|
||||||
JS_RUNTIME_NAME = 'quickjs'
|
JS_RUNTIME_NAME = 'quickjs'
|
||||||
|
_QJS_MIN_RECOMMENDED = {
|
||||||
|
'quickjs': (2025, 4, 26),
|
||||||
|
'quickjs-ng': (0, 12, 0),
|
||||||
|
}
|
||||||
|
_QJS_WARNING_TMPL = (
|
||||||
|
'{name} versions older than {version} are missing important optimizations '
|
||||||
|
'and will solve the JS challenges very slowly. Consider upgrading.')
|
||||||
|
|
||||||
def _run_js_runtime(self, stdin: str, /) -> str:
|
def _run_js_runtime(self, stdin: str, /) -> str:
|
||||||
if self.runtime_info.name == 'quickjs-ng':
|
min_recommended_version = self._QJS_MIN_RECOMMENDED[self.runtime_info.name]
|
||||||
self.logger.warning('QuickJS-NG is missing some optimizations making this very slow. Consider using upstream QuickJS instead.')
|
if self.runtime_info.version_tuple < min_recommended_version:
|
||||||
elif self.runtime_info.version_tuple < (2025, 4, 26):
|
self.logger.warning(self._QJS_WARNING_TMPL.format(
|
||||||
self.logger.warning('Older QuickJS versions are missing optimizations making this very slow. Consider upgrading.')
|
name=self.runtime_info.name,
|
||||||
|
version='.'.join(map(str, min_recommended_version))))
|
||||||
|
|
||||||
# QuickJS does not support reading from stdin, so we have to use a temp file
|
# QuickJS does not support reading from stdin, so we have to use a temp file
|
||||||
temp_file = tempfile.NamedTemporaryFile(mode='w', suffix='.js', delete=False, encoding='utf-8')
|
temp_file = tempfile.NamedTemporaryFile(mode='w', suffix='.js', delete=False, encoding='utf-8')
|
||||||
|
|||||||
Some files were not shown because too many files have changed in this diff Show More
Loading…
x
Reference in New Issue
Block a user