Giter Site home page Giter Site logo

xxcodianxx / youtube-dl-web Goto Github PK

View Code? Open in Web Editor NEW
242.0 6.0 56.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 Issues

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!

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!

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

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

Broken link

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

Save theme state

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

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.

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.

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?

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?

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 ./   

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

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.

Subtitle

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

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

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.