Initial commit: YouTube Sync Docker container

- Alpine-based Docker image with yt-dlp
- Configurable channel sync script
- Unraid template for Community Applications
- Automatic scheduling via cron
- Emby/Plex/Jellyfin compatible output structure
This commit is contained in:
2026-05-08 18:52:04 -04:00
commit 0ffb54e12e
7 changed files with 456 additions and 0 deletions

56
entrypoint.sh Normal file
View File

@@ -0,0 +1,56 @@
#!/bin/bash
# Entrypoint script for YouTube Sync Docker container
set -e
echo "=========================================="
echo "YouTube Channel Sync Docker"
echo "=========================================="
echo "Download Directory: $DOWNLOAD_DIR"
echo "Config Directory: $CONFIG_DIR"
echo "Sync Schedule: $SYNC_SCHEDULE"
echo "Max Quality: ${MAX_QUALITY}p"
echo "Sleep Interval: ${SLEEP_INTERVAL}s"
echo "Timezone: $TZ"
echo "=========================================="
# Create example channels file if it doesn't exist
if [ ! -f "$CONFIG_DIR/channels.txt" ]; then
echo "[INFO] Creating example channels.txt..."
cat > "$CONFIG_DIR/channels.txt" << 'EOF'
# YouTube Channel Configuration
# Format: CHANNEL_ID|Channel Name
# One channel per line. Lines starting with # are ignored.
#
# Examples:
# UCfDNi1aEljAQ17mUrfUjkvg|Alton Brown
# UCoq2qlWgvvKJzW_hBkLIE8w|Flavour Trip
#
# To find a channel ID:
# 1. Go to the channel's main page
# 2. View page source (Ctrl+U or Cmd+U)
# 3. Search for "channelId" or look in the URL
EOF
fi
# Set up cron job if SYNC_SCHEDULE is provided
if [ "$SYNC_SCHEDULE" != "manual" ]; then
echo "[INFO] Setting up cron schedule: $SYNC_SCHEDULE"
echo "$SYNC_SCHEDULE /app/sync.sh >> /var/log/youtube-sync.log 2>&1" > /etc/crontabs/root
# Start crond in the background
crond -f -l 2 &
CRON_PID=$!
echo "[INFO] Cron daemon started (PID: $CRON_PID)"
# Run initial sync
echo "[INFO] Running initial sync..."
/app/sync.sh || true
# Keep container running and monitor cron
echo "[INFO] Container ready. Watching for scheduled syncs..."
wait $CRON_PID
else
echo "[INFO] Manual mode enabled. Running sync once..."
/app/sync.sh
fi