- Python 86.5%
- HTML 11%
- CSS 1.5%
- Shell 0.7%
- Dockerfile 0.3%
| .github | ||
| .vscode | ||
| bin | ||
| commands | ||
| config | ||
| media | ||
| musicbot | ||
| plugins | ||
| static | ||
| templates | ||
| .env.template | ||
| .gitignore | ||
| bot_tts.py | ||
| bot_tts_fake.py | ||
| db.py | ||
| default_image.png | ||
| default_video.png | ||
| discord_api.py | ||
| discord_bot.py | ||
| Dockerfile | ||
| downloaders.py | ||
| LICENSE | ||
| localai.py | ||
| manage_bot.py | ||
| README.md | ||
| requirements.txt | ||
| run.sh | ||
| SECURITY.md | ||
| simple_ytdl.py | ||
| simple_ytdl.service | ||
| thumbnailer.py | ||
| tiktok.py | ||
| util.py | ||
| ydl.service | ||
| youtube-dl-server.png | ||
| youtube-dl-server.py | ||
youtube-dl-server
Very spartan Web and REST interface for downloading youtube videos onto a server. starlette + yt-dlp.
Running
Docker CLI
This example uses the docker run command to create the container to run the app. Here we also use host networking for simplicity. Also note the -v argument. This directory will be used to output the resulting videos
docker run -d --net="host" --name youtube-dl -v /home/core/youtube-dl:/youtube-dl kmb32123/youtube-dl-server
Docker Compose
This is an example service definition that could be put in docker-compose.yml. This service uses a VPN client container for its networking.
youtube-dl:
image: "kmb32123/youtube-dl-server"
network_mode: "service:vpn"
volumes:
- /home/core/youtube-dl:/youtube-dl
restart: always
Python
If you have python ^3.6.0 installed in your PATH you can simply run like this, providing optional environment variable overrides inline.
YDL_UPDATE_TIME=False python3 -m uvicorn youtube-dl-server:app --port 8123
In this example, YDL_UPDATE_TIME=False is the same as the command line option --no-mtime.
Usage
Start a download remotely
Downloads can be triggered by supplying the {{url}} of the requested video through the Web UI or through the REST interface via curl, etc.
HTML
Just navigate to http://{{host}}:8080/youtube-dl and enter the requested {{url}}.
Curl
curl -X POST --data-urlencode "url={{url}}" http://{{host}}:8080/youtube-dl/q
Fetch
fetch(`http://${host}:8080/youtube-dl/q`, {
method: "POST",
body: new URLSearchParams({
url: url,
format: "bestvideo"
}),
});
Bookmarklet
Add the following bookmarklet to your bookmark bar so you can conviently send the current page url to your youtube-dl-server instance.
javascript:!function(){fetch("http://${host}:8080/youtube-dl/q",{body:new URLSearchParams({url:window.location.href,format:"bestvideo"}),method:"POST"})}();
Implementation
The server uses starlette for the web framework and youtube-dl to handle the downloading. The integration with youtube-dl makes use of their python api.
This docker image is based on python:alpine and consequently alpine:3.8.
