Clone the repo and run the setup script from the project directory:
git clone <repo> ~/vidium
cd ~/vidium
sudo bash setup.shThe script:
- Installs Node.js 24, nginx, certbot, yt-dlp
- Creates
data/andmedia/directories with correct ownership - Sets up nginx config with static file serving and media proxy
- Creates systemd services (
vidium-server,vidium-worker) running as your user - Generates
.envtemplate with paths matching the project location
nano .envKey settings to change:
| Variable | Description |
|---|---|
INVITE_CODE |
Secret code for user registration (change from changeme) |
DOMAIN |
Your domain or localhost for local testing |
DEFAULT_LANG |
en or ru |
YTDLP_PROXY |
Optional SOCKS/HTTP proxy for yt-dlp |
YTDLP_COOKIES |
Optional path to cookies file for age-restricted content |
sudo systemctl enable --now vidium-server vidium-workerCheck status:
sudo systemctl status vidium-server vidium-workerView logs:
sudo journalctl -u vidium-server -f # server
sudo journalctl -u vidium-worker -f # worker (crawling, downloads)Open http://localhost in your browser. You'll be redirected to /login.
- Click the register link
- Enter the invite code from
.env - Pick a login and password
On the feed page, click "Add channel", paste a YouTube channel URL (https://www.youtube.com/@name), optionally add comma-separated tags, and submit. The worker starts crawling immediately.
Create a channels file — one channel per line, tab-separated fields:
# channels.txt
https://www.youtube.com/@lexfridman Lex Fridman podcast,interview
https://www.youtube.com/@ThePrimeTimeagen/streams ThePrimeTime streams,dev
Format: url<TAB>display name<TAB>tag1,tag2. Display name and tags are optional.
Run:
node --env-file=.env scripts/import-channels.tsWatch progress:
sudo journalctl -u vidium-worker -fAfter crawling finishes (1-3 minutes per channel), refresh the page — video cards with thumbnails will appear.
- Feed — shows all videos sorted by date, filterable by tags
- Download — click "Download video" or "Download audio" on any card; the worker downloads in the background
- Watch/Listen — once downloaded, buttons change to "Watch" / "Listen" for streaming through the browser
- Auto-update — RSS polling runs every 30 minutes to pick up new uploads
Point DNS to your server, then:
sudo certbot --nginx -d your-domain.comUpdate DOMAIN in .env and restart:
sudo systemctl restart vidium-serverServices won't start — check logs: sudo journalctl -u vidium-server -n 50
Crawling fails — YouTube may block requests. Set YTDLP_PROXY in .env or update yt-dlp: sudo yt-dlp -U
Downloads fail — check disk space. vidium auto-cleans old media when disk usage exceeds DISK_HIGH_WATERMARK.
Permission errors — ensure data/ and media/ are owned by your user: sudo chown -R $(whoami) data media