Giter Site home page Giter Site logo

xxcodianxx / youtube-dl-web Goto Github PK

View Code? Open in Web Editor NEW
241.0 6.0 54.0 637 KB

A good web interface for youtube-dl that allows you to download arbitrary mixes of audio and video, including up to the highest quality such as 8K.

License: Mozilla Public License 2.0

HTML 2.84% TypeScript 70.67% Python 23.20% Dockerfile 1.51% Shell 1.79%
youtube youtube-dl-gui youtube-dl yt-dlp gui react typescript downloader fastapi docker

youtube-dl-web's Introduction

πŸš€ youtube-dl-web

A good web interface for youtube-dl that allows you to download arbitrary mixes of audio and video, including up to the highest quality such as 8K.

Sadly, the public hosted website has been shut down. You are free to host this tool yourself!

Screenshot of the Webpage

Motive

There is no user-friendly method to download the highest quality of a YouTube video, without errors, and without installing software on your computer.

The web application, youtube-dl-web aims to create a user-friendly interface for downloading such videos.

Features

  • ⏩ Quick Download of pre-encoded YouTube Videos

    Most YouTube downloaders would only provide the sources that youtube-dl-web provides in its Quick Download category. Although preservation of quality is important, the Quick Download option is for users who simply just want an mp4, of a decent quality, downloaded fast.

  • ✨ Quality Selection

    The most powerful feature of this interface is the ability to select any pair of audio and video for a resulting matroska video file. Unfortunately, due to the differing nature of the video and audio containers, matroska is the only option that can be used in order to preserve fast download speeds, and original quality. Again, the Quick Download section exists.

  • πŸ“‘ Direct Download Streaming

    Youtube-dl-web never saves a file on the server disk, or makes you wait to start receiving data. As soon as a stream is received from YouTube, it immediately starts streaming over to your browser, for a direct download. This also works for the "pick your own" section, ensuring download speeds essentially limited only by your network connection.

  • 🎞️ Unlimited Video Length

    Given that the video data is streamed directly, there is no limit to the size of a video you can download using the website, unlike some other alternative download sites. Videos that were previously live are supported, alongside their full Live Chat JSON.

  • πŸ“’ Subtitle Download

    Download videos with their subtitles in all supported languages, with options to embed directly into the video (experimental) or to export separately as either a .srt, .ass or .vtt file!

  • πŸ‘ User Friendly UI

    The UI is modern, easy to use and informative. Arguably the biggest limitation of youtube-dl is the command line interface, as most users do not know how to use it, and would often go back to subpar websites for downloading videos, at a lower quality.

  • πŸ”— Direct Substitution

    You can simply replace "www.youtube.com" with the tool's URL (keeping the watch?v= part), and it will automatically pick up the video URL you are trying to use.

Hosting Yourself

Architecture

Youtube-dl-web relies on three main components:

  • The built frontend files, which are served to the user
  • The backend API server, which does the downloading
  • The NGINX Proxy, which routes requests to the API server, and serves the frontend files

The API server and the NGINX Proxy can most easily be deployed using Docker Compose. The frontend can be built manually with yarn, although a build script which accomplishes this in a platform independent way (using a temporary Docker container) is included.

Getting Started

For the hosting experience to be smooth for everyone, youtube-dl-web can be easily deployed using Docker Compose in a secure manner, secluded from your host operating system and without you having to install any dependencies.

Step 1: Install Docker and Docker Compose

Verify you have them installed with:

$ docker --version
Docker version 20.10.12

$ docker-compose --version
Docker Compose version 2.2.3

The actual versions don't matter much, just about anything should do!

If you're on an ARM system, such as a Raspberry Pi (untested) you can install Docker Compose as so:

$ sudo curl -L --fail https://raw.githubusercontent.com/linuxserver/docker-docker-compose/master/run.sh -o /usr/local/bin/docker-compose
$ sudo chmod +x /usr/local/bin/docker-compose

Step 3: Clone this repo

$ git clone https://github.com/xxcodianxx/youtube-dl-web

⚠️ This tutorial assumes you are running the following commands as UID 1000. Make sure the folders are owned by UID 1000 & GID 1000, as the automatic containerized build process depends on it.

$ chown -R 1000:1000 youtube-dl-web

Step 2: Build Frontend Static Files

This makes sure that all of the HTML is compiled ready for the webserver to serve.

$ cd frontend
$ bash ./build.sh

Step 3: Start the Docker Compose cluster

This will start all the necessary containers in their environments.

$ cd ..
$ docker-compose up -d --build

That's it!

You can look at your running containers with:

$ docker-compose ps

And view their logs with:

$ docker-compose logs -f

SSL

The steps above describe running youtube-dl-web without SSL, meaning that all traffic sent to and from your webserver is over the internet in the clear!

It's not like there's that much sensitive data being sent over, but it's nice to have HTTPS support.

For home hosting, this is not required at all.

Obtaining SSL Certificates

The NGINX config is set up for Let's Encrypt certificates.

Once generated with certbot, they can be found in /etc/letsencrypt/live/yourdomain.example.net/*.pem

Enabling SSL Support

Add your certificates (files fullchain.pem and privkey.pem) into the nginx/certs directory. You can obtain these from Let's Encrypt with certbot.

First, stop the cluster if you have it running:

$ docker-compose down

Then, go into the docker-compose.yml file and follow the commented directions.

After this, repeat step 3 again, and you should be good to go!

youtube-dl-web's People

Contributors

dependabot[bot] avatar kinnairdclan avatar merlinlewizard avatar xxcodianxx avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar

youtube-dl-web's Issues

Save theme state

I prefer a dark theme more, and when I reload the page, the theme becomes light again

I should probably rewrite this

This tool is outdated and sort of messily written (I'm looking at you DownloadPage.tsx). I hate React! The backend works, but it can be hacky at times (partially due to all the features people have contributed) and could be improved. I'm thinking of rewriting this sometime in the near future, but right now I don't have much time on my hands due to exams, so it will have to wait.

I still need to review PRs like #44 but right now I don't have time to think about the implications of supporting every platform that youtube-dl supports, and whether everything would work.

The new stack I'm thinking of for this app would probably be Svelte and either Python FastAPI or something in Rust (which could potentially end up being faster).

Thoughts?

Self hosting - building docker error

# docker-compose up -d --build
...
 => CANCELED [youtube-dl-web_nginx 1/4] FROM docker.io/library
...
 => CANCELED [youtube-dl-web_server  1/10] FROM docker.io/library/python:3.9-slim@sha256:2ed9cf48cf86eb638a9ceb555737161fbb20fa04  0.0s
 => CACHED [youtube-dl-web_server  2/10] RUN apt update && apt install -y ffmpeg libmagic-dev gcc g++                              0.0s
 => ERROR [youtube-dl-web_server  3/10] COPY server/requirements.txt /tmp/requirements.txt                                         0.0s
 => CACHED [youtube-dl-web_server  4/10] RUN pip3  --disable-pip-version-check --no-cache-dir install -r /tmp/requirements.txt     0.0s
 => CACHED [youtube-dl-web_server  5/10] RUN rm -v /tmp/requirements.txt                                                           0.0s
 => CACHED [youtube-dl-web_server  6/10] RUN pip3 install -U yt-dlp                                                                0.0s
 => CACHED [youtube-dl-web_server  7/10] RUN useradd user -m -s /usr/sbin/nologin                                                  0.0s
 => CACHED [youtube-dl-web_server  8/10] WORKDIR /home/user/app                                                                    0.0s
 => ERROR [youtube-dl-web_server  9/10] COPY server/src ./                                                                         0.0s
------
 > [youtube-dl-web_server  3/10] COPY server/requirements.txt /tmp/requirements.txt:
------
------
 > [youtube-dl-web_server  9/10] COPY server/src ./:
------
failed to solve: rpc error: code = Unknown desc = failed to compute cache key: failed to calculate checksum of ref 
moby::ma6vg5qn8wg616vl4hryxq8r1: failed to walk /var/lib/docker/tmp/buildkit-mount4157871416/server: lstat /var/lib/docker
/tmp/buildkit-mount4157871416/server: no such file or directory

errors

ERROR [youtube-dl-web_server  3/10] COPY server/requirements.txt /tmp/requirements.txt
ERROR [youtube-dl-web_server  9/10] COPY server/src ./   

build error while the container tries to install brotli (required by yt-dlp)

Hello, i tried installing this on my raspberry pi but when i do docker compose up -d --build it installs some packages and then fails while installing brotli

here is the error

[+] Building 16.2s (9/14)
 => [internal] load build definition from Dockerfile                                                                                                                          0.0s
 => => transferring dockerfile: 32B                                                                                                                                           0.0s
 => [internal] load .dockerignore                                                                                                                                             0.0s
 => => transferring context: 2B                                                                                                                                               0.0s
 => [internal] load metadata for docker.io/library/python:3.9-slim                                                                                                            0.6s
 => [ 1/10] FROM docker.io/library/python:3.9-slim@sha256:dcf2eafca55558d8b1aa73edd6aa41b7187c5bcb63e533a7b04a0673f81f37fe                                                    0.0s
 => [internal] load build context                                                                                                                                             0.0s
 => => transferring context: 230B                                                                                                                                             0.0s
 => CACHED [ 2/10] COPY ./requirements.txt /tmp/requirements.txt                                                                                                              0.0s
 => CACHED [ 3/10] RUN pip3  --disable-pip-version-check --no-cache-dir install -r /tmp/requirements.txt                                                                      0.0s
 => CACHED [ 4/10] RUN rm -v /tmp/requirements.txt                                                                                                                            0.0s
 => ERROR [ 5/10] RUN pip3 install -U yt-dlp                                                                                                                                 15.3s
------
 > [ 5/10] RUN pip3 install -U yt-dlp:
#0 2.309 Collecting yt-dlp
#0 2.474   Downloading yt_dlp-2022.8.19-py2.py3-none-any.whl (2.7 MB)
#0 2.870      ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 2.7/2.7 MB 6.9 MB/s eta 0:00:00
#0 3.632 Collecting pycryptodomex
#0 3.670   Downloading pycryptodomex-3.15.0.tar.gz (4.5 MB)
#0 4.286      ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 4.5/4.5 MB 7.6 MB/s eta 0:00:00
#0 5.096   Preparing metadata (setup.py): started
#0 6.308   Preparing metadata (setup.py): finished with status 'done'
#0 6.505 Collecting brotli
#0 6.549   Downloading Brotli-1.0.9.zip (510 kB)
#0 6.625      ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 510.2/510.2 KB 7.5 MB/s eta 0:00:00
#0 6.705   Preparing metadata (setup.py): started
#0 7.409   Preparing metadata (setup.py): finished with status 'done'
#0 7.720 Collecting websockets
#0 7.752   Downloading websockets-10.3.tar.gz (84 kB)
#0 7.778      ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 84.1/84.1 KB 4.2 MB/s eta 0:00:00
#0 7.829   Preparing metadata (setup.py): started
#0 8.448   Preparing metadata (setup.py): finished with status 'done'
#0 8.548 Collecting mutagen
#0 8.581   Downloading mutagen-1.45.1-py3-none-any.whl (218 kB)
#0 8.622      ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 218.7/218.7 KB 6.5 MB/s eta 0:00:00
#0 8.740 Collecting certifi
#0 8.772   Downloading certifi-2022.6.15-py3-none-any.whl (160 kB)
#0 8.805      ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 160.2/160.2 KB 6.0 MB/s eta 0:00:00
#0 8.832 Building wheels for collected packages: brotli, pycryptodomex, websockets
#0 8.835   Building wheel for brotli (setup.py): started
#0 9.582   Building wheel for brotli (setup.py): finished with status 'error'
#0 9.603   error: subprocess-exited-with-error
#0 9.603
#0 9.603   Γ— python setup.py bdist_wheel did not run successfully.
#0 9.603   β”‚ exit code: 1
#0 9.603   ╰─> [17 lines of output]
#0 9.603       /usr/local/lib/python3.9/site-packages/setuptools/dist.py:717: UserWarning: Usage of dash-separated 'build-base' will not be supported in future versions. Please use the underscore name 'build_base' instead
#0 9.603         warnings.warn(
#0 9.603       running bdist_wheel
#0 9.603       running build
#0 9.603       running build_py
#0 9.603       creating bin
#0 9.603       creating bin/lib.linux-armv7l-3.9
#0 9.603       copying python/brotli.py -> bin/lib.linux-armv7l-3.9
#0 9.603       running build_ext
#0 9.603       building '_brotli' extension
#0 9.603       creating bin/temp.linux-armv7l-3.9
#0 9.603       creating bin/temp.linux-armv7l-3.9/c
#0 9.603       creating bin/temp.linux-armv7l-3.9/c/common
#0 9.603       creating bin/temp.linux-armv7l-3.9/c/dec
#0 9.603       creating bin/temp.linux-armv7l-3.9/c/enc
#0 9.603       gcc -pthread -Wno-unused-result -Wsign-compare -DNDEBUG -g -fwrapv -O3 -Wall -fPIC -Ic/include -I/usr/local/include/python3.9 -c c/common/constants.c -o bin/temp.linux-armv7l-3.9/c/common/constants.o
#0 9.603       error: command 'gcc' failed: No such file or directory
#0 9.603       [end of output]
#0 9.603
#0 9.603   note: This error originates from a subprocess, and is likely not a problem with pip.
#0 9.604   ERROR: Failed building wheel for brotli
#0 9.605   Running setup.py clean for brotli
#0 10.21   Building wheel for pycryptodomex (setup.py): started
#0 11.16   Building wheel for pycryptodomex (setup.py): finished with status 'error'
#0 11.24   error: subprocess-exited-with-error
#0 11.24
#0 11.24   Γ— python setup.py bdist_wheel did not run successfully.
#0 11.24   β”‚ exit code: 1
#0 11.24   ╰─> [333 lines of output]
#0 11.24       Testing support for clang
#0 11.24       Target does not support clang
#0 11.24       Testing support for gcc
#0 11.24       Target does not support gcc
#0 11.24       Testing support for stdint.h header
#0 11.24       Target does not support stdint.h header
#0 11.24       Testing support for 128-bit integer
#0 11.24       Target does not support 128-bit integer
#0 11.24       Testing support for cpuid.h header
#0 11.24       Target does not support cpuid.h header
#0 11.24       Testing support for intrin.h header
#0 11.24       Target does not support intrin.h header
#0 11.24       Testing support for posix_memalign
#0 11.24       Target does not support posix_memalign
#0 11.24       Testing support for memalign
#0 11.24       Target does not support memalign
#0 11.24       Testing support for SSE2(intrin.h)
#0 11.24       Target does not support SSE2(intrin.h)
#0 11.24       Testing support for SSE2(x86intrin.h)
#0 11.24       Target does not support SSE2(x86intrin.h)
#0 11.24       Testing support for SSE2(emmintrin.h)
#0 11.24       Target does not support SSE2(emmintrin.h)
#0 11.24       Warning: compiler does not support AESNI instructions
#0 11.24       Warning: compiler does not support CLMUL instructions
#0 11.24       running bdist_wheel
#0 11.24       running build
#0 11.24       running build_py
#0 11.24       creating build/lib.linux-armv7l-3.9
#0 11.24       creating build/lib.linux-armv7l-3.9/Cryptodome
#0 11.24       copying lib/Cryptodome/__init__.py -> build/lib.linux-armv7l-3.9/Cryptodome
#0 11.24       creating build/lib.linux-armv7l-3.9/Cryptodome/Cipher
#0 11.24       copying lib/Cryptodome/Cipher/_mode_openpgp.py -> build/lib.linux-armv7l-3.9/Cryptodome/Cipher
#0 11.24       copying lib/Cryptodome/Cipher/ChaCha20.py -> build/lib.linux-armv7l-3.9/Cryptodome/Cipher
#0 11.24       copying lib/Cryptodome/Cipher/_mode_ctr.py -> build/lib.linux-armv7l-3.9/Cryptodome/Cipher
#0 11.24       copying lib/Cryptodome/Cipher/PKCS1_OAEP.py -> build/lib.linux-armv7l-3.9/Cryptodome/Cipher
#0 11.24       copying lib/Cryptodome/Cipher/_mode_siv.py -> build/lib.linux-armv7l-3.9/Cryptodome/Cipher
#0 11.24       copying lib/Cryptodome/Cipher/_mode_ofb.py -> build/lib.linux-armv7l-3.9/Cryptodome/Cipher
#0 11.24       copying lib/Cryptodome/Cipher/__init__.py -> build/lib.linux-armv7l-3.9/Cryptodome/Cipher
#0 11.24       copying lib/Cryptodome/Cipher/_mode_ccm.py -> build/lib.linux-armv7l-3.9/Cryptodome/Cipher
#0 11.24       copying lib/Cryptodome/Cipher/ARC4.py -> build/lib.linux-armv7l-3.9/Cryptodome/Cipher
#0 11.24       copying lib/Cryptodome/Cipher/CAST.py -> build/lib.linux-armv7l-3.9/Cryptodome/Cipher
#0 11.24       copying lib/Cryptodome/Cipher/ARC2.py -> build/lib.linux-armv7l-3.9/Cryptodome/Cipher
#0 11.24       copying lib/Cryptodome/Cipher/_mode_gcm.py -> build/lib.linux-armv7l-3.9/Cryptodome/Cipher
#0 11.24       copying lib/Cryptodome/Cipher/Salsa20.py -> build/lib.linux-armv7l-3.9/Cryptodome/Cipher
#0 11.24       copying lib/Cryptodome/Cipher/DES3.py -> build/lib.linux-armv7l-3.9/Cryptodome/Cipher
#0 11.24       copying lib/Cryptodome/Cipher/_mode_cfb.py -> build/lib.linux-armv7l-3.9/Cryptodome/Cipher
#0 11.24       copying lib/Cryptodome/Cipher/_mode_ecb.py -> build/lib.linux-armv7l-3.9/Cryptodome/Cipher
#0 11.24       copying lib/Cryptodome/Cipher/DES.py -> build/lib.linux-armv7l-3.9/Cryptodome/Cipher
#0 11.24       copying lib/Cryptodome/Cipher/_mode_cbc.py -> build/lib.linux-armv7l-3.9/Cryptodome/Cipher
#0 11.24       copying lib/Cryptodome/Cipher/_EKSBlowfish.py -> build/lib.linux-armv7l-3.9/Cryptodome/Cipher
#0 11.24       copying lib/Cryptodome/Cipher/_mode_ocb.py -> build/lib.linux-armv7l-3.9/Cryptodome/Cipher
#0 11.24       copying lib/Cryptodome/Cipher/ChaCha20_Poly1305.py -> build/lib.linux-armv7l-3.9/Cryptodome/Cipher
#0 11.24       copying lib/Cryptodome/Cipher/AES.py -> build/lib.linux-armv7l-3.9/Cryptodome/Cipher
#0 11.24       copying lib/Cryptodome/Cipher/PKCS1_v1_5.py -> build/lib.linux-armv7l-3.9/Cryptodome/Cipher
#0 11.24       copying lib/Cryptodome/Cipher/_mode_eax.py -> build/lib.linux-armv7l-3.9/Cryptodome/Cipher
#0 11.24       copying lib/Cryptodome/Cipher/Blowfish.py -> build/lib.linux-armv7l-3.9/Cryptodome/Cipher
#0 11.24       creating build/lib.linux-armv7l-3.9/Cryptodome/Hash
#0 11.24       copying lib/Cryptodome/Hash/SHA256.py -> build/lib.linux-armv7l-3.9/Cryptodome/Hash
#0 11.24       copying lib/Cryptodome/Hash/SHA3_224.py -> build/lib.linux-armv7l-3.9/Cryptodome/Hash
#0 11.24       copying lib/Cryptodome/Hash/SHA512.py -> build/lib.linux-armv7l-3.9/Cryptodome/Hash
#0 11.24       copying lib/Cryptodome/Hash/SHA3_384.py -> build/lib.linux-armv7l-3.9/Cryptodome/Hash
#0 11.24       copying lib/Cryptodome/Hash/SHA1.py -> build/lib.linux-armv7l-3.9/Cryptodome/Hash
#0 11.24       copying lib/Cryptodome/Hash/RIPEMD.py -> build/lib.linux-armv7l-3.9/Cryptodome/Hash
#0 11.24       copying lib/Cryptodome/Hash/CMAC.py -> build/lib.linux-armv7l-3.9/Cryptodome/Hash
#0 11.24       copying lib/Cryptodome/Hash/SHA384.py -> build/lib.linux-armv7l-3.9/Cryptodome/Hash
#0 11.24       copying lib/Cryptodome/Hash/SHA.py -> build/lib.linux-armv7l-3.9/Cryptodome/Hash
#0 11.24       copying lib/Cryptodome/Hash/BLAKE2b.py -> build/lib.linux-armv7l-3.9/Cryptodome/Hash
#0 11.24       copying lib/Cryptodome/Hash/SHA224.py -> build/lib.linux-armv7l-3.9/Cryptodome/Hash
#0 11.24       copying lib/Cryptodome/Hash/BLAKE2s.py -> build/lib.linux-armv7l-3.9/Cryptodome/Hash
#0 11.24       copying lib/Cryptodome/Hash/cSHAKE128.py -> build/lib.linux-armv7l-3.9/Cryptodome/Hash
#0 11.24       copying lib/Cryptodome/Hash/TupleHash256.py -> build/lib.linux-armv7l-3.9/Cryptodome/Hash
#0 11.24       copying lib/Cryptodome/Hash/__init__.py -> build/lib.linux-armv7l-3.9/Cryptodome/Hash
#0 11.24       copying lib/Cryptodome/Hash/cSHAKE256.py -> build/lib.linux-armv7l-3.9/Cryptodome/Hash
#0 11.24       copying lib/Cryptodome/Hash/KangarooTwelve.py -> build/lib.linux-armv7l-3.9/Cryptodome/Hash
#0 11.24       copying lib/Cryptodome/Hash/MD4.py -> build/lib.linux-armv7l-3.9/Cryptodome/Hash
#0 11.24       copying lib/Cryptodome/Hash/SHAKE128.py -> build/lib.linux-armv7l-3.9/Cryptodome/Hash
#0 11.24       copying lib/Cryptodome/Hash/keccak.py -> build/lib.linux-armv7l-3.9/Cryptodome/Hash
#0 11.24       copying lib/Cryptodome/Hash/HMAC.py -> build/lib.linux-armv7l-3.9/Cryptodome/Hash
#0 11.24       copying lib/Cryptodome/Hash/SHA3_512.py -> build/lib.linux-armv7l-3.9/Cryptodome/Hash
#0 11.24       copying lib/Cryptodome/Hash/MD2.py -> build/lib.linux-armv7l-3.9/Cryptodome/Hash
#0 11.24       copying lib/Cryptodome/Hash/MD5.py -> build/lib.linux-armv7l-3.9/Cryptodome/Hash
#0 11.24       copying lib/Cryptodome/Hash/TupleHash128.py -> build/lib.linux-armv7l-3.9/Cryptodome/Hash
#0 11.24       copying lib/Cryptodome/Hash/SHAKE256.py -> build/lib.linux-armv7l-3.9/Cryptodome/Hash
#0 11.24       copying lib/Cryptodome/Hash/Poly1305.py -> build/lib.linux-armv7l-3.9/Cryptodome/Hash
#0 11.24       copying lib/Cryptodome/Hash/RIPEMD160.py -> build/lib.linux-armv7l-3.9/Cryptodome/Hash
#0 11.24       copying lib/Cryptodome/Hash/KMAC128.py -> build/lib.linux-armv7l-3.9/Cryptodome/Hash
#0 11.24       copying lib/Cryptodome/Hash/KMAC256.py -> build/lib.linux-armv7l-3.9/Cryptodome/Hash
#0 11.24       copying lib/Cryptodome/Hash/SHA3_256.py -> build/lib.linux-armv7l-3.9/Cryptodome/Hash
#0 11.24       creating build/lib.linux-armv7l-3.9/Cryptodome/IO
#0 11.24       copying lib/Cryptodome/IO/__init__.py -> build/lib.linux-armv7l-3.9/Cryptodome/IO
#0 11.24       copying lib/Cryptodome/IO/_PBES.py -> build/lib.linux-armv7l-3.9/Cryptodome/IO
#0 11.24       copying lib/Cryptodome/IO/PEM.py -> build/lib.linux-armv7l-3.9/Cryptodome/IO
#0 11.24       copying lib/Cryptodome/IO/PKCS8.py -> build/lib.linux-armv7l-3.9/Cryptodome/IO
#0 11.24       creating build/lib.linux-armv7l-3.9/Cryptodome/PublicKey
#0 11.24       copying lib/Cryptodome/PublicKey/ElGamal.py -> build/lib.linux-armv7l-3.9/Cryptodome/PublicKey
#0 11.24       copying lib/Cryptodome/PublicKey/RSA.py -> build/lib.linux-armv7l-3.9/Cryptodome/PublicKey
#0 11.24       copying lib/Cryptodome/PublicKey/ECC.py -> build/lib.linux-armv7l-3.9/Cryptodome/PublicKey
#0 11.24       copying lib/Cryptodome/PublicKey/_openssh.py -> build/lib.linux-armv7l-3.9/Cryptodome/PublicKey
#0 11.24       copying lib/Cryptodome/PublicKey/__init__.py -> build/lib.linux-armv7l-3.9/Cryptodome/PublicKey
#0 11.24       copying lib/Cryptodome/PublicKey/DSA.py -> build/lib.linux-armv7l-3.9/Cryptodome/PublicKey
#0 11.24       creating build/lib.linux-armv7l-3.9/Cryptodome/Protocol
#0 11.24       copying lib/Cryptodome/Protocol/SecretSharing.py -> build/lib.linux-armv7l-3.9/Cryptodome/Protocol
#0 11.24       copying lib/Cryptodome/Protocol/__init__.py -> build/lib.linux-armv7l-3.9/Cryptodome/Protocol
#0 11.24       copying lib/Cryptodome/Protocol/KDF.py -> build/lib.linux-armv7l-3.9/Cryptodome/Protocol
#0 11.24       creating build/lib.linux-armv7l-3.9/Cryptodome/Random
#0 11.24       copying lib/Cryptodome/Random/__init__.py -> build/lib.linux-armv7l-3.9/Cryptodome/Random
#0 11.24       copying lib/Cryptodome/Random/random.py -> build/lib.linux-armv7l-3.9/Cryptodome/Random
#0 11.24       creating build/lib.linux-armv7l-3.9/Cryptodome/Signature
#0 11.24       copying lib/Cryptodome/Signature/DSS.py -> build/lib.linux-armv7l-3.9/Cryptodome/Signature
#0 11.24       copying lib/Cryptodome/Signature/pss.py -> build/lib.linux-armv7l-3.9/Cryptodome/Signature
#0 11.24       copying lib/Cryptodome/Signature/__init__.py -> build/lib.linux-armv7l-3.9/Cryptodome/Signature
#0 11.24       copying lib/Cryptodome/Signature/eddsa.py -> build/lib.linux-armv7l-3.9/Cryptodome/Signature
#0 11.24       copying lib/Cryptodome/Signature/pkcs1_15.py -> build/lib.linux-armv7l-3.9/Cryptodome/Signature
#0 11.24       copying lib/Cryptodome/Signature/PKCS1_PSS.py -> build/lib.linux-armv7l-3.9/Cryptodome/Signature
#0 11.24       copying lib/Cryptodome/Signature/PKCS1_v1_5.py -> build/lib.linux-armv7l-3.9/Cryptodome/Signature
#0 11.24       creating build/lib.linux-armv7l-3.9/Cryptodome/Util
#0 11.24       copying lib/Cryptodome/Util/_file_system.py -> build/lib.linux-armv7l-3.9/Cryptodome/Util
#0 11.24       copying lib/Cryptodome/Util/Padding.py -> build/lib.linux-armv7l-3.9/Cryptodome/Util
#0 11.24       copying lib/Cryptodome/Util/RFC1751.py -> build/lib.linux-armv7l-3.9/Cryptodome/Util
#0 11.24       copying lib/Cryptodome/Util/__init__.py -> build/lib.linux-armv7l-3.9/Cryptodome/Util
#0 11.24       copying lib/Cryptodome/Util/_cpu_features.py -> build/lib.linux-armv7l-3.9/Cryptodome/Util
#0 11.24       copying lib/Cryptodome/Util/asn1.py -> build/lib.linux-armv7l-3.9/Cryptodome/Util
#0 11.24       copying lib/Cryptodome/Util/_raw_api.py -> build/lib.linux-armv7l-3.9/Cryptodome/Util
#0 11.24       copying lib/Cryptodome/Util/py3compat.py -> build/lib.linux-armv7l-3.9/Cryptodome/Util
#0 11.24       copying lib/Cryptodome/Util/strxor.py -> build/lib.linux-armv7l-3.9/Cryptodome/Util
#0 11.24       copying lib/Cryptodome/Util/number.py -> build/lib.linux-armv7l-3.9/Cryptodome/Util
#0 11.24       copying lib/Cryptodome/Util/Counter.py -> build/lib.linux-armv7l-3.9/Cryptodome/Util
#0 11.24       creating build/lib.linux-armv7l-3.9/Cryptodome/Math
#0 11.24       copying lib/Cryptodome/Math/_IntegerBase.py -> build/lib.linux-armv7l-3.9/Cryptodome/Math
#0 11.24       copying lib/Cryptodome/Math/_IntegerGMP.py -> build/lib.linux-armv7l-3.9/Cryptodome/Math
#0 11.24       copying lib/Cryptodome/Math/__init__.py -> build/lib.linux-armv7l-3.9/Cryptodome/Math
#0 11.24       copying lib/Cryptodome/Math/_IntegerNative.py -> build/lib.linux-armv7l-3.9/Cryptodome/Math
#0 11.24       copying lib/Cryptodome/Math/_IntegerCustom.py -> build/lib.linux-armv7l-3.9/Cryptodome/Math
#0 11.24       copying lib/Cryptodome/Math/Numbers.py -> build/lib.linux-armv7l-3.9/Cryptodome/Math
#0 11.24       copying lib/Cryptodome/Math/Primality.py -> build/lib.linux-armv7l-3.9/Cryptodome/Math
#0 11.24       creating build/lib.linux-armv7l-3.9/Cryptodome/SelfTest
#0 11.24       copying lib/Cryptodome/SelfTest/st_common.py -> build/lib.linux-armv7l-3.9/Cryptodome/SelfTest
#0 11.24       copying lib/Cryptodome/SelfTest/__init__.py -> build/lib.linux-armv7l-3.9/Cryptodome/SelfTest
#0 11.24       copying lib/Cryptodome/SelfTest/loader.py -> build/lib.linux-armv7l-3.9/Cryptodome/SelfTest
#0 11.24       copying lib/Cryptodome/SelfTest/__main__.py -> build/lib.linux-armv7l-3.9/Cryptodome/SelfTest
#0 11.24       creating build/lib.linux-armv7l-3.9/Cryptodome/SelfTest/Cipher
#0 11.24       copying lib/Cryptodome/SelfTest/Cipher/test_OCB.py -> build/lib.linux-armv7l-3.9/Cryptodome/SelfTest/Cipher
#0 11.24       copying lib/Cryptodome/SelfTest/Cipher/test_pkcs1_15.py -> build/lib.linux-armv7l-3.9/Cryptodome/SelfTest/Cipher
#0 11.24       copying lib/Cryptodome/SelfTest/Cipher/test_CAST.py -> build/lib.linux-armv7l-3.9/Cryptodome/SelfTest/Cipher
#0 11.24       copying lib/Cryptodome/SelfTest/Cipher/test_CFB.py -> build/lib.linux-armv7l-3.9/Cryptodome/SelfTest/Cipher
#0 11.24       copying lib/Cryptodome/SelfTest/Cipher/test_DES.py -> build/lib.linux-armv7l-3.9/Cryptodome/SelfTest/Cipher
#0 11.24       copying lib/Cryptodome/SelfTest/Cipher/test_SIV.py -> build/lib.linux-armv7l-3.9/Cryptodome/SelfTest/Cipher
#0 11.24       copying lib/Cryptodome/SelfTest/Cipher/test_ARC4.py -> build/lib.linux-armv7l-3.9/Cryptodome/SelfTest/Cipher
#0 11.24       copying lib/Cryptodome/SelfTest/Cipher/__init__.py -> build/lib.linux-armv7l-3.9/Cryptodome/SelfTest/Cipher
#0 11.24       copying lib/Cryptodome/SelfTest/Cipher/test_Salsa20.py -> build/lib.linux-armv7l-3.9/Cryptodome/SelfTest/Cipher
#0 11.24       copying lib/Cryptodome/SelfTest/Cipher/test_ChaCha20_Poly1305.py -> build/lib.linux-armv7l-3.9/Cryptodome/SelfTest/Cipher
#0 11.24       copying lib/Cryptodome/SelfTest/Cipher/test_DES3.py -> build/lib.linux-armv7l-3.9/Cryptodome/SelfTest/Cipher
#0 11.24       copying lib/Cryptodome/SelfTest/Cipher/test_OpenPGP.py -> build/lib.linux-armv7l-3.9/Cryptodome/SelfTest/Cipher
#0 11.24       copying lib/Cryptodome/SelfTest/Cipher/common.py -> build/lib.linux-armv7l-3.9/Cryptodome/SelfTest/Cipher
#0 11.24       copying lib/Cryptodome/SelfTest/Cipher/test_ChaCha20.py -> build/lib.linux-armv7l-3.9/Cryptodome/SelfTest/Cipher
#0 11.24       copying lib/Cryptodome/SelfTest/Cipher/test_CTR.py -> build/lib.linux-armv7l-3.9/Cryptodome/SelfTest/Cipher
#0 11.24       copying lib/Cryptodome/SelfTest/Cipher/test_CBC.py -> build/lib.linux-armv7l-3.9/Cryptodome/SelfTest/Cipher
#0 11.24       copying lib/Cryptodome/SelfTest/Cipher/test_OFB.py -> build/lib.linux-armv7l-3.9/Cryptodome/SelfTest/Cipher
#0 11.24       copying lib/Cryptodome/SelfTest/Cipher/test_ARC2.py -> build/lib.linux-armv7l-3.9/Cryptodome/SelfTest/Cipher
#0 11.24       copying lib/Cryptodome/SelfTest/Cipher/test_EAX.py -> build/lib.linux-armv7l-3.9/Cryptodome/SelfTest/Cipher
#0 11.24       copying lib/Cryptodome/SelfTest/Cipher/test_CCM.py -> build/lib.linux-armv7l-3.9/Cryptodome/SelfTest/Cipher
#0 11.24       copying lib/Cryptodome/SelfTest/Cipher/test_pkcs1_oaep.py -> build/lib.linux-armv7l-3.9/Cryptodome/SelfTest/Cipher
#0 11.24       copying lib/Cryptodome/SelfTest/Cipher/test_GCM.py -> build/lib.linux-armv7l-3.9/Cryptodome/SelfTest/Cipher
#0 11.24       copying lib/Cryptodome/SelfTest/Cipher/test_Blowfish.py -> build/lib.linux-armv7l-3.9/Cryptodome/SelfTest/Cipher
#0 11.24       copying lib/Cryptodome/SelfTest/Cipher/test_AES.py -> build/lib.linux-armv7l-3.9/Cryptodome/SelfTest/Cipher
#0 11.24       creating build/lib.linux-armv7l-3.9/Cryptodome/SelfTest/Hash
#0 11.24       copying lib/Cryptodome/SelfTest/Hash/test_KMAC.py -> build/lib.linux-armv7l-3.9/Cryptodome/SelfTest/Hash
#0 11.24       copying lib/Cryptodome/SelfTest/Hash/test_SHA3_384.py -> build/lib.linux-armv7l-3.9/Cryptodome/SelfTest/Hash
#0 11.24       copying lib/Cryptodome/SelfTest/Hash/test_SHA224.py -> build/lib.linux-armv7l-3.9/Cryptodome/SelfTest/Hash
#0 11.24       copying lib/Cryptodome/SelfTest/Hash/test_BLAKE2.py -> build/lib.linux-armv7l-3.9/Cryptodome/SelfTest/Hash
#0 11.24       copying lib/Cryptodome/SelfTest/Hash/__init__.py -> build/lib.linux-armv7l-3.9/Cryptodome/SelfTest/Hash
#0 11.24       copying lib/Cryptodome/SelfTest/Hash/test_RIPEMD160.py -> build/lib.linux-armv7l-3.9/Cryptodome/SelfTest/Hash
#0 11.24       copying lib/Cryptodome/SelfTest/Hash/test_keccak.py -> build/lib.linux-armv7l-3.9/Cryptodome/SelfTest/Hash
#0 11.24       copying lib/Cryptodome/SelfTest/Hash/test_MD5.py -> build/lib.linux-armv7l-3.9/Cryptodome/SelfTest/Hash
#0 11.24       copying lib/Cryptodome/SelfTest/Hash/test_TupleHash.py -> build/lib.linux-armv7l-3.9/Cryptodome/SelfTest/Hash
#0 11.24       copying lib/Cryptodome/SelfTest/Hash/common.py -> build/lib.linux-armv7l-3.9/Cryptodome/SelfTest/Hash
#0 11.24       copying lib/Cryptodome/SelfTest/Hash/test_KangarooTwelve.py -> build/lib.linux-armv7l-3.9/Cryptodome/SelfTest/Hash
#0 11.24       copying lib/Cryptodome/SelfTest/Hash/test_SHA256.py -> build/lib.linux-armv7l-3.9/Cryptodome/SelfTest/Hash
#0 11.24       copying lib/Cryptodome/SelfTest/Hash/test_Poly1305.py -> build/lib.linux-armv7l-3.9/Cryptodome/SelfTest/Hash
#0 11.24       copying lib/Cryptodome/SelfTest/Hash/test_SHA1.py -> build/lib.linux-armv7l-3.9/Cryptodome/SelfTest/Hash
#0 11.24       copying lib/Cryptodome/SelfTest/Hash/test_cSHAKE.py -> build/lib.linux-armv7l-3.9/Cryptodome/SelfTest/Hash
#0 11.24       copying lib/Cryptodome/SelfTest/Hash/test_SHA512.py -> build/lib.linux-armv7l-3.9/Cryptodome/SelfTest/Hash
#0 11.24       copying lib/Cryptodome/SelfTest/Hash/test_SHA3_224.py -> build/lib.linux-armv7l-3.9/Cryptodome/SelfTest/Hash
#0 11.24       copying lib/Cryptodome/SelfTest/Hash/test_CMAC.py -> build/lib.linux-armv7l-3.9/Cryptodome/SelfTest/Hash
#0 11.24       copying lib/Cryptodome/SelfTest/Hash/test_SHA3_512.py -> build/lib.linux-armv7l-3.9/Cryptodome/SelfTest/Hash
#0 11.24       copying lib/Cryptodome/SelfTest/Hash/test_MD2.py -> build/lib.linux-armv7l-3.9/Cryptodome/SelfTest/Hash
#0 11.24       copying lib/Cryptodome/SelfTest/Hash/test_MD4.py -> build/lib.linux-armv7l-3.9/Cryptodome/SelfTest/Hash
#0 11.24       copying lib/Cryptodome/SelfTest/Hash/test_SHA3_256.py -> build/lib.linux-armv7l-3.9/Cryptodome/SelfTest/Hash
#0 11.24       copying lib/Cryptodome/SelfTest/Hash/test_SHAKE.py -> build/lib.linux-armv7l-3.9/Cryptodome/SelfTest/Hash
#0 11.24       copying lib/Cryptodome/SelfTest/Hash/test_HMAC.py -> build/lib.linux-armv7l-3.9/Cryptodome/SelfTest/Hash
#0 11.24       copying lib/Cryptodome/SelfTest/Hash/test_SHA384.py -> build/lib.linux-armv7l-3.9/Cryptodome/SelfTest/Hash
#0 11.24       creating build/lib.linux-armv7l-3.9/Cryptodome/SelfTest/IO
#0 11.24       copying lib/Cryptodome/SelfTest/IO/test_PKCS8.py -> build/lib.linux-armv7l-3.9/Cryptodome/SelfTest/IO
#0 11.24       copying lib/Cryptodome/SelfTest/IO/__init__.py -> build/lib.linux-armv7l-3.9/Cryptodome/SelfTest/IO
#0 11.24       copying lib/Cryptodome/SelfTest/IO/test_PBES.py -> build/lib.linux-armv7l-3.9/Cryptodome/SelfTest/IO
#0 11.24       creating build/lib.linux-armv7l-3.9/Cryptodome/SelfTest/Protocol
#0 11.24       copying lib/Cryptodome/SelfTest/Protocol/test_SecretSharing.py -> build/lib.linux-armv7l-3.9/Cryptodome/SelfTest/Protocol
#0 11.24       copying lib/Cryptodome/SelfTest/Protocol/test_KDF.py -> build/lib.linux-armv7l-3.9/Cryptodome/SelfTest/Protocol
#0 11.24       copying lib/Cryptodome/SelfTest/Protocol/test_rfc1751.py -> build/lib.linux-armv7l-3.9/Cryptodome/SelfTest/Protocol
#0 11.24       copying lib/Cryptodome/SelfTest/Protocol/__init__.py -> build/lib.linux-armv7l-3.9/Cryptodome/SelfTest/Protocol
#0 11.24       creating build/lib.linux-armv7l-3.9/Cryptodome/SelfTest/PublicKey
#0 11.24       copying lib/Cryptodome/SelfTest/PublicKey/test_ECC_25519.py -> build/lib.linux-armv7l-3.9/Cryptodome/SelfTest/PublicKey
#0 11.24       copying lib/Cryptodome/SelfTest/PublicKey/test_ElGamal.py -> build/lib.linux-armv7l-3.9/Cryptodome/SelfTest/PublicKey
#0 11.24       copying lib/Cryptodome/SelfTest/PublicKey/__init__.py -> build/lib.linux-armv7l-3.9/Cryptodome/SelfTest/PublicKey
#0 11.24       copying lib/Cryptodome/SelfTest/PublicKey/test_ECC_448.py -> build/lib.linux-armv7l-3.9/Cryptodome/SelfTest/PublicKey
#0 11.24       copying lib/Cryptodome/SelfTest/PublicKey/test_DSA.py -> build/lib.linux-armv7l-3.9/Cryptodome/SelfTest/PublicKey
#0 11.24       copying lib/Cryptodome/SelfTest/PublicKey/test_import_RSA.py -> build/lib.linux-armv7l-3.9/Cryptodome/SelfTest/PublicKey
#0 11.24       copying lib/Cryptodome/SelfTest/PublicKey/test_RSA.py -> build/lib.linux-armv7l-3.9/Cryptodome/SelfTest/PublicKey
#0 11.24       copying lib/Cryptodome/SelfTest/PublicKey/test_import_DSA.py -> build/lib.linux-armv7l-3.9/Cryptodome/SelfTest/PublicKey
#0 11.24       copying lib/Cryptodome/SelfTest/PublicKey/test_ECC_NIST.py -> build/lib.linux-armv7l-3.9/Cryptodome/SelfTest/PublicKey
#0 11.24       copying lib/Cryptodome/SelfTest/PublicKey/test_import_ECC.py -> build/lib.linux-armv7l-3.9/Cryptodome/SelfTest/PublicKey
#0 11.24       creating build/lib.linux-armv7l-3.9/Cryptodome/SelfTest/Random
#0 11.24       copying lib/Cryptodome/SelfTest/Random/test_random.py -> build/lib.linux-armv7l-3.9/Cryptodome/SelfTest/Random
#0 11.24       copying lib/Cryptodome/SelfTest/Random/__init__.py -> build/lib.linux-armv7l-3.9/Cryptodome/SelfTest/Random
#0 11.24       creating build/lib.linux-armv7l-3.9/Cryptodome/SelfTest/Signature
#0 11.24       copying lib/Cryptodome/SelfTest/Signature/test_pkcs1_15.py -> build/lib.linux-armv7l-3.9/Cryptodome/SelfTest/Signature
#0 11.24       copying lib/Cryptodome/SelfTest/Signature/test_eddsa.py -> build/lib.linux-armv7l-3.9/Cryptodome/SelfTest/Signature
#0 11.24       copying lib/Cryptodome/SelfTest/Signature/__init__.py -> build/lib.linux-armv7l-3.9/Cryptodome/SelfTest/Signature
#0 11.24       copying lib/Cryptodome/SelfTest/Signature/test_pss.py -> build/lib.linux-armv7l-3.9/Cryptodome/SelfTest/Signature
#0 11.24       copying lib/Cryptodome/SelfTest/Signature/test_dss.py -> build/lib.linux-armv7l-3.9/Cryptodome/SelfTest/Signature
#0 11.24       creating build/lib.linux-armv7l-3.9/Cryptodome/SelfTest/Util
#0 11.24       copying lib/Cryptodome/SelfTest/Util/test_number.py -> build/lib.linux-armv7l-3.9/Cryptodome/SelfTest/Util
#0 11.24       copying lib/Cryptodome/SelfTest/Util/test_rfc1751.py -> build/lib.linux-armv7l-3.9/Cryptodome/SelfTest/Util
#0 11.24       copying lib/Cryptodome/SelfTest/Util/test_asn1.py -> build/lib.linux-armv7l-3.9/Cryptodome/SelfTest/Util
#0 11.24       copying lib/Cryptodome/SelfTest/Util/__init__.py -> build/lib.linux-armv7l-3.9/Cryptodome/SelfTest/Util
#0 11.24       copying lib/Cryptodome/SelfTest/Util/test_strxor.py -> build/lib.linux-armv7l-3.9/Cryptodome/SelfTest/Util
#0 11.24       copying lib/Cryptodome/SelfTest/Util/test_Padding.py -> build/lib.linux-armv7l-3.9/Cryptodome/SelfTest/Util
#0 11.24       copying lib/Cryptodome/SelfTest/Util/test_Counter.py -> build/lib.linux-armv7l-3.9/Cryptodome/SelfTest/Util
#0 11.24       creating build/lib.linux-armv7l-3.9/Cryptodome/SelfTest/Math
#0 11.24       copying lib/Cryptodome/SelfTest/Math/test_Numbers.py -> build/lib.linux-armv7l-3.9/Cryptodome/SelfTest/Math
#0 11.24       copying lib/Cryptodome/SelfTest/Math/__init__.py -> build/lib.linux-armv7l-3.9/Cryptodome/SelfTest/Math
#0 11.24       copying lib/Cryptodome/SelfTest/Math/test_Primality.py -> build/lib.linux-armv7l-3.9/Cryptodome/SelfTest/Math
#0 11.24       copying lib/Cryptodome/SelfTest/Math/test_modexp.py -> build/lib.linux-armv7l-3.9/Cryptodome/SelfTest/Math
#0 11.24       copying lib/Cryptodome/py.typed -> build/lib.linux-armv7l-3.9/Cryptodome
#0 11.24       copying lib/Cryptodome/__init__.pyi -> build/lib.linux-armv7l-3.9/Cryptodome
#0 11.24       copying lib/Cryptodome/Cipher/ARC2.pyi -> build/lib.linux-armv7l-3.9/Cryptodome/Cipher
#0 11.24       copying lib/Cryptodome/Cipher/_EKSBlowfish.pyi -> build/lib.linux-armv7l-3.9/Cryptodome/Cipher
#0 11.24       copying lib/Cryptodome/Cipher/ChaCha20.pyi -> build/lib.linux-armv7l-3.9/Cryptodome/Cipher
#0 11.24       copying lib/Cryptodome/Cipher/_mode_ecb.pyi -> build/lib.linux-armv7l-3.9/Cryptodome/Cipher
#0 11.24       copying lib/Cryptodome/Cipher/CAST.pyi -> build/lib.linux-armv7l-3.9/Cryptodome/Cipher
#0 11.24       copying lib/Cryptodome/Cipher/_mode_eax.pyi -> build/lib.linux-armv7l-3.9/Cryptodome/Cipher
#0 11.24       copying lib/Cryptodome/Cipher/ChaCha20_Poly1305.pyi -> build/lib.linux-armv7l-3.9/Cryptodome/Cipher
#0 11.24       copying lib/Cryptodome/Cipher/ARC4.pyi -> build/lib.linux-armv7l-3.9/Cryptodome/Cipher
#0 11.24       copying lib/Cryptodome/Cipher/_mode_siv.pyi -> build/lib.linux-armv7l-3.9/Cryptodome/Cipher
#0 11.24       copying lib/Cryptodome/Cipher/_mode_openpgp.pyi -> build/lib.linux-armv7l-3.9/Cryptodome/Cipher
#0 11.24       copying lib/Cryptodome/Cipher/Blowfish.pyi -> build/lib.linux-armv7l-3.9/Cryptodome/Cipher
#0 11.24       copying lib/Cryptodome/Cipher/_mode_cbc.pyi -> build/lib.linux-armv7l-3.9/Cryptodome/Cipher
#0 11.24       copying lib/Cryptodome/Cipher/Salsa20.pyi -> build/lib.linux-armv7l-3.9/Cryptodome/Cipher
#0 11.24       copying lib/Cryptodome/Cipher/_mode_ccm.pyi -> build/lib.linux-armv7l-3.9/Cryptodome/Cipher
#0 11.24       copying lib/Cryptodome/Cipher/_mode_gcm.pyi -> build/lib.linux-armv7l-3.9/Cryptodome/Cipher
#0 11.24       copying lib/Cryptodome/Cipher/_mode_cfb.pyi -> build/lib.linux-armv7l-3.9/Cryptodome/Cipher
#0 11.24       copying lib/Cryptodome/Cipher/_mode_ofb.pyi -> build/lib.linux-armv7l-3.9/Cryptodome/Cipher
#0 11.24       copying lib/Cryptodome/Cipher/PKCS1_v1_5.pyi -> build/lib.linux-armv7l-3.9/Cryptodome/Cipher
#0 11.24       copying lib/Cryptodome/Cipher/DES3.pyi -> build/lib.linux-armv7l-3.9/Cryptodome/Cipher
#0 11.24       copying lib/Cryptodome/Cipher/_mode_ctr.pyi -> build/lib.linux-armv7l-3.9/Cryptodome/Cipher
#0 11.24       copying lib/Cryptodome/Cipher/PKCS1_OAEP.pyi -> build/lib.linux-armv7l-3.9/Cryptodome/Cipher
#0 11.24       copying lib/Cryptodome/Cipher/_mode_ocb.pyi -> build/lib.linux-armv7l-3.9/Cryptodome/Cipher
#0 11.24       copying lib/Cryptodome/Cipher/__init__.pyi -> build/lib.linux-armv7l-3.9/Cryptodome/Cipher
#0 11.24       copying lib/Cryptodome/Cipher/AES.pyi -> build/lib.linux-armv7l-3.9/Cryptodome/Cipher
#0 11.24       copying lib/Cryptodome/Cipher/DES.pyi -> build/lib.linux-armv7l-3.9/Cryptodome/Cipher
#0 11.24       copying lib/Cryptodome/Hash/RIPEMD.pyi -> build/lib.linux-armv7l-3.9/Cryptodome/Hash
#0 11.24       copying lib/Cryptodome/Hash/MD2.pyi -> build/lib.linux-armv7l-3.9/Cryptodome/Hash
#0 11.24       copying lib/Cryptodome/Hash/SHAKE256.pyi -> build/lib.linux-armv7l-3.9/Cryptodome/Hash
#0 11.24       copying lib/Cryptodome/Hash/MD5.pyi -> build/lib.linux-armv7l-3.9/Cryptodome/Hash
#0 11.24       copying lib/Cryptodome/Hash/KangarooTwelve.pyi -> build/lib.linux-armv7l-3.9/Cryptodome/Hash
#0 11.24       copying lib/Cryptodome/Hash/cSHAKE256.pyi -> build/lib.linux-armv7l-3.9/Cryptodome/Hash
#0 11.24       copying lib/Cryptodome/Hash/BLAKE2s.pyi -> build/lib.linux-armv7l-3.9/Cryptodome/Hash
#0 11.24       copying lib/Cryptodome/Hash/SHA.pyi -> build/lib.linux-armv7l-3.9/Cryptodome/Hash
#0 11.24       copying lib/Cryptodome/Hash/TupleHash256.pyi -> build/lib.linux-armv7l-3.9/Cryptodome/Hash
#0 11.24       copying lib/Cryptodome/Hash/SHA3_512.pyi -> build/lib.linux-armv7l-3.9/Cryptodome/Hash
#0 11.24       copying lib/Cryptodome/Hash/CMAC.pyi -> build/lib.linux-armv7l-3.9/Cryptodome/Hash
#0 11.24       copying lib/Cryptodome/Hash/KMAC128.pyi -> build/lib.linux-armv7l-3.9/Cryptodome/Hash
#0 11.24       copying lib/Cryptodome/Hash/SHA3_224.pyi -> build/lib.linux-armv7l-3.9/Cryptodome/Hash
#0 11.24       copying lib/Cryptodome/Hash/cSHAKE128.pyi -> build/lib.linux-armv7l-3.9/Cryptodome/Hash
#0 11.24       copying lib/Cryptodome/Hash/SHA512.pyi -> build/lib.linux-armv7l-3.9/Cryptodome/Hash
#0 11.24       copying lib/Cryptodome/Hash/BLAKE2b.pyi -> build/lib.linux-armv7l-3.9/Cryptodome/Hash
#0 11.24       copying lib/Cryptodome/Hash/SHAKE128.pyi -> build/lib.linux-armv7l-3.9/Cryptodome/Hash
#0 11.24       copying lib/Cryptodome/Hash/SHA384.pyi -> build/lib.linux-armv7l-3.9/Cryptodome/Hash
#0 11.24       copying lib/Cryptodome/Hash/SHA1.pyi -> build/lib.linux-armv7l-3.9/Cryptodome/Hash
#0 11.24       copying lib/Cryptodome/Hash/keccak.pyi -> build/lib.linux-armv7l-3.9/Cryptodome/Hash
#0 11.24       copying lib/Cryptodome/Hash/SHA256.pyi -> build/lib.linux-armv7l-3.9/Cryptodome/Hash
#0 11.24       copying lib/Cryptodome/Hash/HMAC.pyi -> build/lib.linux-armv7l-3.9/Cryptodome/Hash
#0 11.24       copying lib/Cryptodome/Hash/KMAC256.pyi -> build/lib.linux-armv7l-3.9/Cryptodome/Hash
#0 11.24       copying lib/Cryptodome/Hash/TupleHash128.pyi -> build/lib.linux-armv7l-3.9/Cryptodome/Hash
#0 11.24       copying lib/Cryptodome/Hash/SHA3_384.pyi -> build/lib.linux-armv7l-3.9/Cryptodome/Hash
#0 11.24       copying lib/Cryptodome/Hash/Poly1305.pyi -> build/lib.linux-armv7l-3.9/Cryptodome/Hash
#0 11.24       copying lib/Cryptodome/Hash/__init__.pyi -> build/lib.linux-armv7l-3.9/Cryptodome/Hash
#0 11.24       copying lib/Cryptodome/Hash/SHA3_256.pyi -> build/lib.linux-armv7l-3.9/Cryptodome/Hash
#0 11.24       copying lib/Cryptodome/Hash/SHA224.pyi -> build/lib.linux-armv7l-3.9/Cryptodome/Hash
#0 11.24       copying lib/Cryptodome/Hash/MD4.pyi -> build/lib.linux-armv7l-3.9/Cryptodome/Hash
#0 11.24       copying lib/Cryptodome/Hash/RIPEMD160.pyi -> build/lib.linux-armv7l-3.9/Cryptodome/Hash
#0 11.24       copying lib/Cryptodome/IO/_PBES.pyi -> build/lib.linux-armv7l-3.9/Cryptodome/IO
#0 11.24       copying lib/Cryptodome/IO/PEM.pyi -> build/lib.linux-armv7l-3.9/Cryptodome/IO
#0 11.24       copying lib/Cryptodome/IO/PKCS8.pyi -> build/lib.linux-armv7l-3.9/Cryptodome/IO
#0 11.24       copying lib/Cryptodome/PublicKey/ECC.pyi -> build/lib.linux-armv7l-3.9/Cryptodome/PublicKey
#0 11.24       copying lib/Cryptodome/PublicKey/RSA.pyi -> build/lib.linux-armv7l-3.9/Cryptodome/PublicKey
#0 11.24       copying lib/Cryptodome/PublicKey/_openssh.pyi -> build/lib.linux-armv7l-3.9/Cryptodome/PublicKey
#0 11.24       copying lib/Cryptodome/PublicKey/ElGamal.pyi -> build/lib.linux-armv7l-3.9/Cryptodome/PublicKey
#0 11.24       copying lib/Cryptodome/PublicKey/__init__.pyi -> build/lib.linux-armv7l-3.9/Cryptodome/PublicKey
#0 11.24       copying lib/Cryptodome/PublicKey/DSA.pyi -> build/lib.linux-armv7l-3.9/Cryptodome/PublicKey
#0 11.24       copying lib/Cryptodome/Protocol/KDF.pyi -> build/lib.linux-armv7l-3.9/Cryptodome/Protocol
#0 11.24       copying lib/Cryptodome/Protocol/SecretSharing.pyi -> build/lib.linux-armv7l-3.9/Cryptodome/Protocol
#0 11.24       copying lib/Cryptodome/Protocol/__init__.pyi -> build/lib.linux-armv7l-3.9/Cryptodome/Protocol
#0 11.24       copying lib/Cryptodome/Random/random.pyi -> build/lib.linux-armv7l-3.9/Cryptodome/Random
#0 11.24       copying lib/Cryptodome/Random/__init__.pyi -> build/lib.linux-armv7l-3.9/Cryptodome/Random
#0 11.24       copying lib/Cryptodome/Signature/PKCS1_PSS.pyi -> build/lib.linux-armv7l-3.9/Cryptodome/Signature
#0 11.24       copying lib/Cryptodome/Signature/pss.pyi -> build/lib.linux-armv7l-3.9/Cryptodome/Signature
#0 11.24       copying lib/Cryptodome/Signature/pkcs1_15.pyi -> build/lib.linux-armv7l-3.9/Cryptodome/Signature
#0 11.24       copying lib/Cryptodome/Signature/DSS.pyi -> build/lib.linux-armv7l-3.9/Cryptodome/Signature
#0 11.24       copying lib/Cryptodome/Signature/PKCS1_v1_5.pyi -> build/lib.linux-armv7l-3.9/Cryptodome/Signature
#0 11.24       copying lib/Cryptodome/Signature/eddsa.pyi -> build/lib.linux-armv7l-3.9/Cryptodome/Signature
#0 11.24       copying lib/Cryptodome/Util/number.pyi -> build/lib.linux-armv7l-3.9/Cryptodome/Util
#0 11.24       copying lib/Cryptodome/Util/py3compat.pyi -> build/lib.linux-armv7l-3.9/Cryptodome/Util
#0 11.24       copying lib/Cryptodome/Util/_raw_api.pyi -> build/lib.linux-armv7l-3.9/Cryptodome/Util
#0 11.24       copying lib/Cryptodome/Util/RFC1751.pyi -> build/lib.linux-armv7l-3.9/Cryptodome/Util
#0 11.24       copying lib/Cryptodome/Util/strxor.pyi -> build/lib.linux-armv7l-3.9/Cryptodome/Util
#0 11.24       copying lib/Cryptodome/Util/Padding.pyi -> build/lib.linux-armv7l-3.9/Cryptodome/Util
#0 11.24       copying lib/Cryptodome/Util/_cpu_features.pyi -> build/lib.linux-armv7l-3.9/Cryptodome/Util
#0 11.24       copying lib/Cryptodome/Util/_file_system.pyi -> build/lib.linux-armv7l-3.9/Cryptodome/Util
#0 11.24       copying lib/Cryptodome/Util/asn1.pyi -> build/lib.linux-armv7l-3.9/Cryptodome/Util
#0 11.24       copying lib/Cryptodome/Util/Counter.pyi -> build/lib.linux-armv7l-3.9/Cryptodome/Util
#0 11.24       copying lib/Cryptodome/Math/_IntegerCustom.pyi -> build/lib.linux-armv7l-3.9/Cryptodome/Math
#0 11.24       copying lib/Cryptodome/Math/Primality.pyi -> build/lib.linux-armv7l-3.9/Cryptodome/Math
#0 11.24       copying lib/Cryptodome/Math/_IntegerBase.pyi -> build/lib.linux-armv7l-3.9/Cryptodome/Math
#0 11.24       copying lib/Cryptodome/Math/_IntegerGMP.pyi -> build/lib.linux-armv7l-3.9/Cryptodome/Math
#0 11.24       copying lib/Cryptodome/Math/Numbers.pyi -> build/lib.linux-armv7l-3.9/Cryptodome/Math
#0 11.24       copying lib/Cryptodome/Math/_IntegerNative.pyi -> build/lib.linux-armv7l-3.9/Cryptodome/Math
#0 11.24       running build_ext
#0 11.24       building 'Cryptodome.Hash._MD2' extension
#0 11.24       creating build/temp.linux-armv7l-3.9
#0 11.24       creating build/temp.linux-armv7l-3.9/src
#0 11.24       gcc -pthread -Wno-unused-result -Wsign-compare -DNDEBUG -g -fwrapv -O3 -Wall -fPIC -DPYCRYPTO_LITTLE_ENDIAN -DSYS_BITS=32 -DLTC_NO_ASM -Isrc/ -I/usr/local/include/python3.9 -c src/MD2.c -o build/temp.linux-armv7l-3.9/src/MD2.o
#0 11.24       error: command 'gcc' failed: No such file or directory
#0 11.24       [end of output]
#0 11.24
#0 11.24   note: This error originates from a subprocess, and is likely not a problem with pip.
#0 11.24   Running setup.py clean for pycryptodomex
#0 11.25   ERROR: Failed building wheel for pycryptodomex
#0 11.97   Building wheel for websockets (setup.py): started
#0 12.95   Building wheel for websockets (setup.py): finished with status 'done'
#0 12.95   Created wheel for websockets: filename=websockets-10.3-cp39-cp39-linux_armv7l.whl size=94376 sha256=4b492e591e457ebfaea260881f14f727a7866931fc535c3155642843f5dfbb40
#0 12.95   Stored in directory: /root/.cache/pip/wheels/2f/1e/77/097069d35580f93f02355c49a0e7a8f78b7661566239e34bae
#0 12.96 Successfully built websockets
#0 12.96 Failed to build brotli pycryptodomex
#0 13.49 Installing collected packages: brotli, websockets, pycryptodomex, mutagen, certifi, yt-dlp
#0 13.50   Running setup.py install for brotli: started
#0 14.13   Running setup.py install for brotli: finished with status 'error'
#0 14.15   error: subprocess-exited-with-error
#0 14.15
#0 14.15   Γ— Running setup.py install for brotli did not run successfully.
#0 14.15   β”‚ exit code: 1
#0 14.15   ╰─> [17 lines of output]
#0 14.15       /usr/local/lib/python3.9/site-packages/setuptools/dist.py:717: UserWarning: Usage of dash-separated 'build-base' will not be supported in future versions. Please use the underscore name 'build_base' instead
#0 14.15         warnings.warn(
#0 14.15       running install
#0 14.15       running build
#0 14.15       running build_py
#0 14.15       creating bin
#0 14.15       creating bin/lib.linux-armv7l-3.9
#0 14.15       copying python/brotli.py -> bin/lib.linux-armv7l-3.9
#0 14.15       running build_ext
#0 14.15       building '_brotli' extension
#0 14.15       creating bin/temp.linux-armv7l-3.9
#0 14.15       creating bin/temp.linux-armv7l-3.9/c
#0 14.15       creating bin/temp.linux-armv7l-3.9/c/common
#0 14.15       creating bin/temp.linux-armv7l-3.9/c/dec
#0 14.15       creating bin/temp.linux-armv7l-3.9/c/enc
#0 14.15       gcc -pthread -Wno-unused-result -Wsign-compare -DNDEBUG -g -fwrapv -O3 -Wall -fPIC -Ic/include -I/usr/local/include/python3.9 -c c/common/constants.c -o bin/temp.linux-armv7l-3.9/c/common/constants.o
#0 14.15       error: command 'gcc' failed: No such file or directory
#0 14.15       [end of output]
#0 14.15
#0 14.15   note: This error originates from a subprocess, and is likely not a problem with pip.
#0 14.15 error: legacy-install-failure
#0 14.15
#0 14.15 Γ— Encountered error while trying to install package.
#0 14.15 ╰─> brotli
#0 14.15
#0 14.15 note: This is an issue with the package mentioned above, not pip.
#0 14.15 hint: See above for output from the failure.
#0 14.54 WARNING: You are using pip version 22.0.4; however, version 22.2.2 is available.
#0 14.54 You should consider upgrading via the '/usr/local/bin/python -m pip install --upgrade pip' command.
------
failed to solve: executor failed running [/bin/sh -c pip3 install -U yt-dlp]: exit code: 1

btw im also doing this over ssh

EDIT: i just realised that gcc is missing, but i have no idea how to install that in the container

frontend build.sh error

I have a error installing the frontend on debian 10/11

root@v-1:~# git clone https://github.com/xxcodianxx/youtube-dl-web
Cloning into 'youtube-dl-web'...
remote: Enumerating objects: 194, done.
remote: Counting objects: 100% (194/194), done.
remote: Compressing objects: 100% (143/143), done.
remote: Total 194 (delta 94), reused 127 (delta 45), pack-reused 0
Receiving objects: 100% (194/194), 598.44 KiB | 10.50 MiB/s, done.
Resolving deltas: 100% (94/94), done.
root@v-1:~# cd youtube-dl-web/frontend/
root@v-1:~/youtube-dl-web/frontend# bash ./build.sh
Unable to find image 'node:17' locally
17: Pulling from library/node
e756f3fdd6a3: Pull complete
bf168a674899: Pull complete
e604223835cc: Pull complete
6d5c91c4cd86: Pull complete
2cc8d8854262: Pull complete
b8798d556362: Pull complete
52af362cf952: Pull complete
3ee1c40b6f6b: Pull complete
600346d6347c: Pull complete
Digest: sha256:e44a474a494c84a059b50d81d93c4bc281cf66d27b1cab5210b1bb657c6750a5
Status: Downloaded newer image for node:17
yarn install v1.22.18
[1/4] Resolving packages...
[2/4] Fetching packages...
warning Pattern ["@types/react@latest"] is trying to unpack in the same destination "/home/node/.cache/yarn/v6/npm-@types-react-17.0.38-f24249fefd89357d5fa71f739a686b8d7c7202bd-integrity/node_modules/@types/react" as pattern ["@types/react@*","@types/react@*","@types/react@*"]. This could result in non-deterministic behavior, skipping.
info There appears to be trouble with your network connection. Retrying...
info There appears to be trouble with your network connection. Retrying...
info There appears to be trouble with your network connection. Retrying...
[3/4] Linking dependencies...
warning "@emotion/styled > @emotion/[email protected]" has unmet peer dependency "@babel/core@^7.0.0".
warning "@emotion/styled > @emotion/babel-plugin > @babel/[email protected]" has unmet peer dependency "@babel/core@^7.0.0-0".
warning "react-scripts > [email protected]" has unmet peer dependency "autoprefixer@^10.0.2".
warning "react-scripts > eslint-config-react-app > [email protected]" has unmet peer dependency "@babel/plugin-syntax-flow@^7.14.5".
warning "react-scripts > eslint-config-react-app > [email protected]" has unmet peer dependency "@babel/plugin-transform-react-jsx@^7.14.9".
warning "react-scripts > webpack-dev-server > [email protected]" has unmet peer dependency "@types/express@^4.17.13".
error Could not write file "/mnt/yarn-error.log": "EACCES: permission denied, open '/mnt/yarn-error.log'"
error An unexpected error occurred: "EACCES: permission denied, mkdir '/mnt/node_modules'".
info Visit https://yarnpkg.com/en/docs/cli/install for documentation about this command.

I have tried a clean install and have have even set /mnt to 777 still have the error
any help please
Thanks

Broken link

The link to the website returns connection refused when trying to access

Failure in downloading particular video

Video: https://www.youtube.com/watch?v=_ZI_FdTVXpU -- frontend reports failure to query metadata

Error:
INFO: 172.20.0.5:48704 - "GET /meta/_ZI_FdTVXpU HTTP/1.0" 500 Internal Server Error
ERROR: Exception in ASGI application
Traceback (most recent call last):
File "/usr/local/lib/python3.9/site-packages/uvicorn/protocols/http/h11_impl.py", line 377, in run_asgi
result = await app(self.scope, self.receive, self.send)
File "/usr/local/lib/python3.9/site-packages/uvicorn/middleware/proxy_headers.py", line 75, in call
return await self.app(scope, receive, send)
File "/usr/local/lib/python3.9/site-packages/fastapi/applications.py", line 212, in call
await super().call(scope, receive, send)
File "/usr/local/lib/python3.9/site-packages/starlette/applications.py", line 112, in call
await self.middleware_stack(scope, receive, send)
File "/usr/local/lib/python3.9/site-packages/starlette/middleware/errors.py", line 181, in call
raise exc
File "/usr/local/lib/python3.9/site-packages/starlette/middleware/errors.py", line 159, in call
await self.app(scope, receive, _send)
File "/usr/local/lib/python3.9/site-packages/starlette/exceptions.py", line 82, in call
raise exc
File "/usr/local/lib/python3.9/site-packages/starlette/exceptions.py", line 71, in call
await self.app(scope, receive, sender)
File "/usr/local/lib/python3.9/site-packages/starlette/routing.py", line 656, in call
await route.handle(scope, receive, send)
File "/usr/local/lib/python3.9/site-packages/starlette/routing.py", line 259, in handle
await self.app(scope, receive, send)
File "/usr/local/lib/python3.9/site-packages/starlette/routing.py", line 61, in app
response = await func(request)
File "/usr/local/lib/python3.9/site-packages/fastapi/routing.py", line 226, in app
raw_response = await run_endpoint_function(
File "/usr/local/lib/python3.9/site-packages/fastapi/routing.py", line 159, in run_endpoint_function
return await dependant.call(**values)
File "/home/user/app/./server.py", line 55, in api_meta
meta = query_meta(video_id)
File "/home/user/app/./util/meta.py", line 51, in query_meta
"likes": data["like_count"],
KeyError: 'like_count'

Please redirect me if this is a yt-dlp issue, thank you!

Slow download speeds when using pick your audio + video

It appears download speeds are affected when downloading any video using the pick your audio + video selection.
When downloading using quick download options I can max out my bandwidth, however if I download anything using the pick your audio + video I can't seem to get above 1 mbps.

I've tested this on a server located in the same country as me as well as one located quite far geographically, both seem to have the same issue with the pick your audio + video downloads, I have tested with both SSL & non SSL connections as well as most combinations of video & audio formats. Let me if you'd like a link to some of the instances I'm using to see if you can reproduce this for troubleshooting.

Endpoint used for downloading fails for video with ID awjBLm41xJI when using bestvideo+bestaudio.

I have found a scenario in which trying to use the endpoint for downloading a video using bestvideo+bestaudio fails.

To reproduce:

  1. Run youtube-dl-web.
  2. Browse directly to the following URL: http://localhost/api/dl/awjBLm41xJI?f=bestvideo%2Bbestaudio
  3. Instead of the download process beginning, you will receive the following error text: Internal Server Error
  4. Check the log of the youtube-dl-web-server container. The log will contain the following stack trace which was generated from the failed download attempt.
[awjBLm41xJI]: requested with format bestvideo+bestaudio and subs None, configuring...
[awjBLm41xJI]: sending stream
[awjBLm41xJI]: stream will be merged (bestvideo+bestaudio)
[awjBLm41xJI]: end of data (no error reported)
cleanup[awjBLm41xJI]: killing downloader process (PID: 62)
INFO:     172.19.0.2:55686 - "GET /dl/awjBLm41xJI?f=bestvideo%2Bbestaudio HTTP/1.0" 500 Internal Server Error
ERROR:    Exception in ASGI application
Traceback (most recent call last):
  File "/usr/local/lib/python3.9/site-packages/uvicorn/protocols/http/h11_impl.py", line 377, in run_asgi
    result = await app(self.scope, self.receive, self.send)
  File "/usr/local/lib/python3.9/site-packages/uvicorn/middleware/proxy_headers.py", line 75, in __call__
    return await self.app(scope, receive, send)
  File "/usr/local/lib/python3.9/site-packages/fastapi/applications.py", line 212, in __call__
    await super().__call__(scope, receive, send)
  File "/usr/local/lib/python3.9/site-packages/starlette/applications.py", line 112, in __call__
    await self.middleware_stack(scope, receive, send)
  File "/usr/local/lib/python3.9/site-packages/starlette/middleware/errors.py", line 181, in __call__
    raise exc
  File "/usr/local/lib/python3.9/site-packages/starlette/middleware/errors.py", line 159, in __call__
    await self.app(scope, receive, _send)
  File "/usr/local/lib/python3.9/site-packages/starlette/exceptions.py", line 82, in __call__
    raise exc
  File "/usr/local/lib/python3.9/site-packages/starlette/exceptions.py", line 71, in __call__
    await self.app(scope, receive, sender)
  File "/usr/local/lib/python3.9/site-packages/starlette/routing.py", line 656, in __call__
    await route.handle(scope, receive, send)
  File "/usr/local/lib/python3.9/site-packages/starlette/routing.py", line 259, in handle
    await self.app(scope, receive, send)
  File "/usr/local/lib/python3.9/site-packages/starlette/routing.py", line 61, in app
    response = await func(request)
  File "/usr/local/lib/python3.9/site-packages/fastapi/routing.py", line 226, in app
    raw_response = await run_endpoint_function(
  File "/usr/local/lib/python3.9/site-packages/fastapi/routing.py", line 159, in run_endpoint_function
    return await dependant.call(**values)
  File "/home/user/app/./server.py", line 23, in api_dl
    first_chunk = await stream.__anext__() # peek first chunk
StopAsyncIteration

I have found that this seems to happen for some audio and video combinations when using the web UI as well. For example, here is a screenshot showing the configuration I attempted to use for this video through the web UI.

image

Allow for wider selection of base URLs to be used

Currently, only base URLs of the form https://www.youtube.com and https://youtu.be work. The fix would be to allow base URLs such as:

https://youtube.com
www.youtube.com
youtube.com
youtu.be

This would also require changing the message that pops up:
image

irst_chunk = await stream.__anext__() # peek first chunk

Traceback (most recent call last):
File "/var/www/youtube-dl-api/venv/lib64/python3.9/site-packages/uvicorn/protocols/http/httptools_impl.py", line 419, in run_asgi
result = await app( # type: ignore[func-returns-value]
File "/var/www/youtube-dl-api/venv/lib64/python3.9/site-packages/uvicorn/middleware/proxy_headers.py", line 78, in call
return await self.app(scope, receive, send)
File "/var/www/youtube-dl-api/venv/lib64/python3.9/site-packages/fastapi/applications.py", line 212, in call
await super().call(scope, receive, send)
File "/var/www/youtube-dl-api/venv/lib64/python3.9/site-packages/starlette/applications.py", line 112, in call
await self.middleware_stack(scope, receive, send)
File "/var/www/youtube-dl-api/venv/lib64/python3.9/site-packages/starlette/middleware/errors.py", line 181, in call
raise exc
File "/var/www/youtube-dl-api/venv/lib64/python3.9/site-packages/starlette/middleware/errors.py", line 159, in call
await self.app(scope, receive, _send)
File "/var/www/youtube-dl-api/venv/lib64/python3.9/site-packages/starlette/exceptions.py", line 82, in call
raise exc
File "/var/www/youtube-dl-api/venv/lib64/python3.9/site-packages/starlette/exceptions.py", line 71, in call
await self.app(scope, receive, sender)
File "/var/www/youtube-dl-api/venv/lib64/python3.9/site-packages/starlette/routing.py", line 656, in call
await route.handle(scope, receive, send)
File "/var/www/youtube-dl-api/venv/lib64/python3.9/site-packages/starlette/routing.py", line 259, in handle
await self.app(scope, receive, send)
File "/var/www/youtube-dl-api/venv/lib64/python3.9/site-packages/starlette/routing.py", line 61, in app
response = await func(request)
File "/var/www/youtube-dl-api/venv/lib64/python3.9/site-packages/fastapi/routing.py", line 226, in app
raw_response = await run_endpoint_function(
File "/var/www/youtube-dl-api/venv/lib64/python3.9/site-packages/fastapi/routing.py", line 159, in run_endpoint_function
return await dependant.call(**values)
File "/var/www/youtube-dl-api/server.py", line 23, in api_dl
first_chunk = await stream.anext() # peek first chunk

PR_CONNECT_RESET_ERROR on your website https://yt-dlp.us.to/

https://yt-dlp.us.to/

Neither work I don't get a meaningful error from Firefox, Librewolf, Aurora, links

An error occurred during a connection to yt-dlp.us.to. PR_CONNECT_RESET_ERROR

The page you are trying to view cannot be shown because the authenticity of the received data could not be verified.
Please contact the website owners to inform them of this problem.

Permit downloading non-YouTube videos

Currently, only YouTube links are allowed. It’d be a nice touch to allow any link. If it’s supported by yt-dlp, it should output download links. If not, an error would pop up.

Subtitle

Hi, Thanks for creating youtube-dl-web
Please support the subtitle downloader.

Docker issue

Hi, I'm new to docker and I'm having some trouble with self-hosting. I'm using a Raspberry Pi Zero and when I try to build frontend files or start the docker container I get this message:

WARNING: The requested image's platform (linux/arm/v7) does not match the detected host platform (linux/arm/v6) and no specific platform was requested
failed to resize tty, using default size

I had no problems running everything the same way in VirualBox with Ubuntu. What should I do to make it work for Raspberry Pi?

Support for Live Videos

Would it be possible to add support for live videos? I am asking because I am interested in using this server for streaming audio from YouTube without downloading it via the http://localhost/api/dl/<VIDEO ID>?f=bestaudio endpoint. It works perfectly except for the lack of live video support!

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    πŸ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. πŸ“ŠπŸ“ˆπŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❀️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.