A self-hosted web app for managing YouTube content discovery. Monitor channels via RSS feeds, triage new videos in an inbox, and maintain a personal watch-later list.
- Channel Management - Track YouTube channels via RSS feeds (no API key needed)
- Video Inbox - Review new videos with save/discard options
- Saved Library - Filter, sort, and bulk-manage saved videos
- Play as Playlist - Generate a YouTube playlist from selected videos
- Import/Export - Backup and restore channels and saved videos
- Optional Authentication - Secure your instance with login or API keys
- PWA Support - Install as a Progressive Web App
Requires Docker, Docker Compose, and Git.
- Create
docker-compose.yml:
services:
app:
image: ghcr.io/thejudge22/youtube-watcher:latest
ports:
- "38000:8000"
volumes:
- ./data:/app/data
env_file:
- .env
user: "1000:1000"
restart: unless-stopped- Copy
.env.exampleto.env - Start:
docker compose up -d - Open http://localhost:38000
Data is persisted in ./data/youtube-watcher.db via the volume mount.
The
:latesttag builds from every commit. For a static version, use a release tag like:v2026-04-20.
git clone https://github.com/thejudge22/youtube-watcher.git
cd youtube-watcher
docker compose -f docker-compose-local.yml up --buildAuthentication is disabled by default. Enable it when exposing to public networks.
Generate a password hash and update your .env:
./scripts/generate-password-hash.shSet in .env:
AUTH_ENABLED=true
AUTH_USERNAME=admin
AUTH_PASSWORD_HASH=<hash from script>Sessions last 14 days by default (configurable via JWT_EXPIRE_HOURS).
For programmatic access to protected endpoints, generate an API key:
./scripts/generate-api-key.shSet in .env:
API_KEY=<key from script>Include the header on API requests:
curl http://localhost:38000/api/channels \
-H "X-API-Key: <your-api-key>"Adding Channels - Navigate to Channels, click Add Channel, and paste a YouTube URL. Supports @handle, channel ID, custom URLs, and direct video URLs.
Inbox - Review new videos, save or discard individually, or use Save All / Discard All.
Saved Videos - Filter by channel, sort by date, switch between Large/Compact/List views, select multiple for bulk operations, or play as a YouTube playlist.
Direct URL Save - Click the + button to add any YouTube URL directly to your saved list.
Settings - Configure HTTP timeout, import/export data, and manage recently deleted videos.
| Type | Example |
|---|---|
| Channel Handle | https://youtube.com/@JoshuaWeissman |
| Channel ID | https://youtube.com/channel/UC_x5XG1OV2P6uZZ5FSM9Ttw |
| Custom URL | https://youtube.com/c/SomeChannel |
| Video | https://youtube.com/watch?v=dQw4w9WgXcQ |
| Shorts | https://youtube.com/shorts/mccyHdidiG8 |
| Short URL | https://youtu.be/dQw4w9WgXcQ |
Interactive docs available at /docs when the app is running.
| Component | Technology |
|---|---|
| Backend | Python + FastAPI |
| Frontend | React + TypeScript + TailwindCSS |
| Database | SQLite |
| Deployment | Docker |
MIT