Simple K-pop video archiver — Lily manages the server, you talk to her via Discord
Find a file
2026-05-26 17:09:13 -04:00
laptop Fix all code review issues: 2026-05-21 17:04:35 -04:00
scripts Remove archive backups — Isaac prefers single archive.txt only 2026-05-21 17:06:54 -04:00
.gitignore track archive.txt in git 2026-05-26 17:09:13 -04:00
archive.txt track archive.txt in git 2026-05-26 17:09:13 -04:00
artists.toml add 17 missing yujin playlists 2026-05-26 16:15:21 -04:00
config.toml Initial implementation: all scripts, config, README 2026-05-21 16:39:24 -04:00
DESIGN.md Remove archive backups — Isaac prefers single archive.txt only 2026-05-21 17:06:54 -04:00
inactive_playlists.md add inactive playlists tracking file 2026-05-26 15:44:19 -04:00
README.md Initial implementation: all scripts, config, README 2026-05-21 16:39:24 -04:00

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)