musicdlp/README.md

1.7 KiB

musicdlp

Web UI for yt-dlp intended to be hosted on a music server. Downloads playlists and separate tracks from YouTube, YT Music and Yandex Music, converts to MP3, adds ID3 tags, searches for lyrics on Genius and writes to ID3.

Written in Python, because creating an interpreter process on each yt-dlp invoke is unreasonable.

Example configs

/home/mdlp/src contains cloned git repo, /home/mdlp/venv is a python venv.

Tip: to add track number to filenames, set TRACK_FILE_TMPL="%(track_number)d %(track)S.%(ext)s"

nginx

server {
    listen 443 ssl;
    listen [::]:443 ssl;

    server_name mdlp.domain.tld;
    root /home/mdlp/src/frontend;

    # https://ssl-config.mozilla.org/#server=nginx&version=1.26.0&config=modern&openssl=1.1.1k&guideline=5.7
    #ssl_certificate         /etc/letsencrypt/live/domain.tld/fullchain.pem
    #ssl_certificate_key     /etc/letsencrypt/live/domain.tld/privkey.pem
    #ssl_trusted_certificate /etc/letsencrypt/live/domain.tld/chain.pem
    #...

    location /ws {
        proxy_pass http://127.0.0.1:4009;
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "Upgrade";
        proxy_set_header Host $host;
    }
}

openrc

#!/sbin/openrc-run

export HOST=127.0.0.1
export PORT=4009
export YT_PROXY="http://user:pass@host:port"

name=$RC_SVCNAME
command="/home/mdlp/venv/bin/python3"
command_args="/home/mdlp/src/backend/main.py"
command_user="mdlp"
directory="/home/mdlp"

error_log="/var/log/$RC_SVCNAME/error.log"

pidfile="/run/$RC_SVCNAME/$RC_SVCNAME.pid"
command_background="yes"

depend() {
    need net
}

start_pre() {
    checkpath --directory --owner $command_user:$command_user --mode 0775 \
        /run/$RC_SVCNAME /var/log/$RC_SVCNAME
}