Simple K-pop video archiver — Lily manages the server, you talk to her via Discord
- Shell 100%
| laptop | ||
| scripts | ||
| .gitignore | ||
| archive.txt | ||
| artists.toml | ||
| config.toml | ||
| DESIGN.md | ||
| inactive_playlists.md | ||
| README.md | ||
YTArchive
K-pop video archiver. Lily runs everything on the Ubuntu Server, Isaac talks to her via Discord.
Setup
One-time server setup
# Install dependencies
pipx install yt-dlp
pipx ensurepath
pipx runpip yt-dlp install yt-dlp-ejs secretstorage
curl -fsSL https://deno.land/install.sh | sh
# Clone the repo
git clone https://forgejo.aizaku.ca/lily/ytarchive.git ~/projects/ytarchive
cd ~/projects/ytarchive
# Create download directory
sudo mkdir -p /mnt/downloads
sudo chown isaac:isaac /mnt/downloads
Laptop setup (Isaac)
# Install dependencies
pipx install yt-dlp
pipx ensurepath
pipx runpip yt-dlp install yt-dlp-ejs secretstorage
curl -fsSL https://deno.land/install.sh | sh
# Clone the repo
git clone https://forgejo.aizaku.ca/lily/ytarchive.git ~/projects/ytarchive
Adding Artists
# On the server (Lily runs this when Isaac says "add artist NMIXX ...")
./scripts/add_artist.sh nmixx "https://www.youtube.com/playlist?list=PL..."
# Multiple playlists
./scripts/add_artist.sh ive \
"https://www.youtube.com/playlist?list=PL02gvKTFGdu0cpM9YVcUFtEpSPQosg2iY" \
"https://www.youtube.com/playlist?list=PL...another..."
Running Downloads
# Run all artists (Lily does this when Isaac says "run all")
./scripts/run_all.sh
# Check status
./scripts/status.sh
# Check logs for a specific artist
./scripts/log.sh ive
# Health check
./scripts/health_check.sh
# Update tools (laptop and server both)
./scripts/update.sh
# Update tools (just check, don't install)
./scripts/update.sh --check
# Clean up old logs
./scripts/clean.sh
Syncing Cookies (Isaac's Laptop)
When cookies expire (YouTube won't download):
cd ~/projects/ytarchive/laptop
./sync_cookies.sh
Then tell Lily "cookies synced".
Updating Tools
Both laptop and server run the same update.sh:
./scripts/update.sh # install updates
./scripts/update.sh --check # just show current versions
Tools: yt-dlp (nightly), yt-dlp-ejs, secretstorage, deno.
File Structure
ytarchive/
├── scripts/ # Server scripts (Lily runs these)
│ ├── run_all.sh
│ ├── add_artist.sh
│ ├── log.sh
│ ├── status.sh
│ ├── health_check.sh
│ ├── update.sh
│ └── clean.sh
├── laptop/ # Laptop scripts (Isaac runs these)
│ └── sync_cookies.sh
├── config.toml # yt-dlp settings
├── artists.toml # Artist → playlist mappings
├── cookies.txt # YouTube auth (synced from laptop)
├── archive.txt # yt-dlp archive
├── logs/ # Run logs
└── DESIGN.md # Design document
Discord Commands
| Isaac says | Lily does |
|---|---|
| "run all artists" | ./scripts/run_all.sh |
| "add artist NMIXX ..." | ./scripts/add_artist.sh nmixx <url> |
| "check logs athena" | ./scripts/log.sh athena |
| "health check" | ./scripts/health_check.sh |
| "disk space" | ./scripts/status.sh |
| "clean up" | ./scripts/clean.sh |
| "sync cookies" | (Isaac runs ./laptop/sync_cookies.sh) |
| "update all" | (Isaac runs ./scripts/update.sh on laptop) |