Go to file
2022-07-29 22:24:42 -04:00
assets add bootstrap js. Not sure if it is useful for now 2022-07-21 16:23:42 -04:00
cmd/dummytdl Cleanup 2022-07-18 19:26:44 -04:00
db cleanup and add title 2022-07-14 16:13:27 -04:00
pubsub pt pubsub working 2022-06-28 23:02:53 -04:00
templates add bootstrap js. Not sure if it is useful for now 2022-07-21 16:23:42 -04:00
go.mod add target to update go.mod 2022-07-29 22:24:42 -04:00
go.sum add target to update go.mod 2022-07-29 22:24:42 -04:00
LICENSE Add LICENSE 2022-07-28 02:58:02 +00:00
main.go add bootstrap js. Not sure if it is useful for now 2022-07-21 16:23:42 -04:00
Makefile add target to update go.mod 2022-07-29 22:24:42 -04:00
README.md update README 2022-07-27 23:14:12 -04:00

YTUI - Front end for youtube-dl

Bare minimum zero dependency¹² single binary web app to download youtube videos using youtube-dl. Allows multiple downloads in parallel. Shows title and live download progress. Pull requests welcome. For a more feature full nicer looking app, checkout YoutubeDL-Material

¹Uses golang.org/x/net for websockets. It is strictly not part of go standard library, but still from official go. ²Uses bootstrap for front-end. Files are embedded in the binary, does not make external requests both in front-end and back-end. See CSP header in templates/index.html

Install

 go install gitlab.com/balki/ytui@latest
go: downloading gitlab.com/balki/ytui v0.0.0-...

If you don't have and don't want to install go tool-chain, use docker to get the binary

 docker run --rm -v "${PWD}:/op" golang:latest sh -c "go install gitlab.com/balki/ytui@latest && cp -v /go/bin/ytui /op/"
go: downloading gitlab.com/balki/ytui v0.0.0-...
go: downloading golang.org/x/net v0.0.0-...
'/go/bin/ytui' -> '/op/ytui'

Usage

 ~/go/bin/ytui -h
2022/06/30 10:53:46 Youtube UI
Usage of /home/balki/go/bin/ytui:
  -cachepath string
        Path where temporary download files are saved (default "./cache")
  -dbpath string
        Path where downloaded info is saved (default "./db.json")
  -port int
        Port to listen on (default 8080)
  -videospath string
        Path where videos are saved (default "./vids")
  -videosurl string
        Prefix of the url, i.e. https://domain.com/<this var>/<video filename> (default "/vids")
  -ytdlcmd string
        youtube-dl command seperated by spaces (default "youtube-dl")

My Deployment setup

File: /usr/local/lib/systemd/system/ytui.service

[Unit]
Description=Youtube UI

[Service]
User=ytui
Type=simple
StateDirectory=ytui
WorkingDirectory=/var/lib/ytui
ExecStart=/path/to/ytui -ytdlcmd "youtube-dl --proxy socks5://x.x.x.x:1080"

[Install]
WantedBy=multi-user.target

File: /usr/local/lib/sysusers.d/ytui.conf

# See sysusers.d(5) for details.

u ytui - "Youtube UI"

File: /etc/caddy/conf.d/ytui.conf

Make sure your main caddy file includes this

ytui.mydomain.com {
    root * /var/lib/ytui

    handle /vids/* {
        file_server
    }

    handle {
        reverse_proxy 127.0.0.1:8080
    }
}

Setup Commands

sudo systemctl daemon-reload
sudo systemctl restart systemd-sysusers
sudo systemctl start ytui.service
sudo systemctl restart caddy

Progress Tracker

Wrote a small go helper ProgressTracker, to watch for progress and update subscribers. Hope it is useful elsewhere too. It has full unit test coverage