selfhost.directory

The index of self-hostable projects — ranked, categorized and served with live updates.
Own your data and stop giving it to big tech.

GitHub
ChannelHoarder logo

Self-host ChannelHoarder

YouTube channel archiver with Plex-ready output

BetaOpen SourceMIT
Updated4 months ago
LanguagePython
Setup difficultyModerate
ThemeDark mode
Stars
26
Storage
50 GB+ recommended
Port
8000 (Web UI and API)
Docker
ghcr.io/sworcery/channelhoarder
Install with Docker Compose

What is ChannelHoarder?

ChannelHoarder monitors channels on several video platforms and automatically grabs new uploads. It arranges files in a Plex TV Show layout with yearly seasons and numbered episodes, creates NFO metadata and artwork, and lets you set per-channel quality up to 4K plus keyword and duration filters. The downloader relies on yt-dlp with PO token authentication, adjustable delays, and live WebSocket progress. Everything — the web interface, download engine, PO token server, and scheduler — runs inside one Docker container. You get Sonarr-style episode controls, the ability to import existing videos, error codes with suggested fixes, and notifications via Telegram, Pushover, or Discord. Since there is no built-in login, keep it on a trusted network or add a reverse proxy in front that handles authentication.

Should you self-host ChannelHoarder?

ChannelHoarder scores 37/100 on selfhost.directory (how scoring works) and ranks #11 of 12 in Video. It has 26 GitHub stars.

There was no stable release in the past 12 months, so check the repository's recent activity before you rely on it.

Setup is moderate: expect some configuration beyond a single command. An official Docker image is available. It is MIT-licensed and written mostly in Python.

Its closest alternative on selfhost.directory is cap (79/100, 23 995 stars). It scores higher overall, so compare the two before you pick. See ChannelHoarder vs cap side by side.

Features

  • Anti-detection measures
  • Automatic scheduled scanning
  • Config import/export
  • Customizable naming template
  • Error classification and monitoring
  • Import existing videos
  • Max video duration filter
  • Multi-platform channel monitoring
  • Plex/Jellyfin/Emby compatible output
  • REST API and WebSocket
  • Robust download pipeline
  • Smart authentication with PO tokens
  • Sonarr-style episode management
  • Subtitle and chapter support
  • Telegram/Pushover/Discord notifications

ChannelHoarder README

How to install ChannelHoarder

Install ChannelHoarder with Docker Compose

Environment variables
PUID, PGID, TZ, LOG_LEVEL, YOUTUBE_API_KEY, POT_SERVER_ENABLED, POT_SERVER_URL, CONFIG_DIR, DOWNLOAD_DIR, EXTRA_DOWNLOAD_DIRS, COOKIE_WATCH_DIR, MAX_CONCURRENT_DOWNLOADS, MAX_RETRIES, DOWNLOAD_DELAY_MIN, DOWNLOAD_DELAY_MAX, JITTER_ENABLED, USER_AGENT_ROTATION

services: channelhoarder: image: ghcr.io/sworcery/channelhoarder:latest container_name: channelhoarder ports: - "8587:8000" volumes: - ./config:/config - /path/to/your/media/youtube:/downloads - ./cookies:/cookies environment: - PUID=1000 - PGID=1000 - TZ=America/New_York restart: unless-stopped

Set PUID/PGID to match your media server user. On Unraid, typically PUID=99 (nobody).

How to configure ChannelHoarder

  • CONFIG_DIR/configConfiguration and database storage path

    Configuration and database storage path

  • COOKIE_WATCH_DIR/cookiesDirectory watched for cookie file updates

    Directory watched for cookie file updates

  • DOWNLOAD_DELAY_MAX30Maximum delay between downloads (seconds)

    Maximum delay between downloads (seconds)

  • DOWNLOAD_DELAY_MIN10Minimum delay between downloads (seconds)

    Minimum delay between downloads (seconds)

  • DOWNLOAD_DIR/downloadsVideo output directory

    Video output directory

  • EXTRA_DOWNLOAD_DIRSComma-separated additional allowed download paths

    Comma-separated additional allowed download paths

  • JITTER_ENABLEDtrueAdd random 0–10s jitter between downloads

    Add random 0–10s jitter between downloads

    values: true, false

  • LOG_LEVELinfoLogging level

    Logging level

    values: debug, info, warning, error

  • MAX_CONCURRENT_DOWNLOADS1Maximum simultaneous downloads

    Maximum simultaneous downloads

  • MAX_RETRIES3Retry attempts for failed downloads

    Retry attempts for failed downloads

  • PGID1000Group ID for file permissions

    Group ID for file permissions

  • POT_SERVER_ENABLEDtrueEnable the built-in PO token server

    Enable the built-in PO token server

    values: true, false

  • POT_SERVER_URLhttp://127.0.0.1:4416PO token server address (internal to container)

    PO token server address (internal to container)

  • PUID1000User ID for file permissions

    User ID for file permissions

  • TZAmerica/New_YorkTimezone for scheduling

    Timezone for scheduling

  • USER_AGENT_ROTATIONtrueRotate browser user-agent strings

    Rotate browser user-agent strings

    values: true, false

  • YOUTUBE_API_KEYOptional YouTube Data API v3 key for reliable channel discovery

    Optional YouTube Data API v3 key for reliable channel discovery

More in Video

Rate this project

Click to rate — no account needed.

0 comments

Posting as guest
Loading comments…