# YouTube Thumbnail Watcher Service ## ๐ŸŽฏ Overview A Python backend service that automatically monitors Directus `media_items` collection and downloads YouTube thumbnails for items that don't have them yet. This provides a robust alternative to Directus Flows. ## โœ… Features Implemented - **Automatic Polling**: Checks Directus every 30 seconds for unprocessed YouTube items - **Smart Filtering**: Only processes items with `type='youtube_video'` or `type='youtube'` that have URLs but no thumbnails - **Quality Fallback**: Downloads best available thumbnail (maxres โ†’ high โ†’ medium โ†’ default) - **Robust Error Handling**: Continues processing on individual failures - **Comprehensive Logging**: Detailed logs with statistics and error tracking - **Stateless Design**: Can be restarted anytime without data loss ## ๐Ÿ—๏ธ Architecture ``` projects/youtube-automation/ โ”œโ”€โ”€ config.py # Configuration management โ”œโ”€โ”€ src/ โ”‚ โ”œโ”€โ”€ directus_client.py # Directus API wrapper โ”‚ โ”œโ”€โ”€ youtube_processor.py # YouTube thumbnail logic โ”‚ โ””โ”€โ”€ watcher_service.py # Main polling service โ”œโ”€โ”€ run_watcher.sh # Startup script โ”œโ”€โ”€ requirements.txt # Dependencies โ””โ”€โ”€ .env # Environment variables ``` ## ๐Ÿš€ Usage ### Start the Service ```bash # Make sure you have a .env file configured ./run_watcher.sh ``` ### Environment Variables (.env) ```bash DIRECTUS_URL="https://enias.zeabur.app/" DIRECTUS_TOKEN="your_token" YOUTUBE_API_KEY="optional_youtube_api_key" POLL_INTERVAL=30 BATCH_SIZE=10 LOG_LEVEL=INFO ``` ### Monitor Logs ```bash tail -f /tmp/youtube_watcher.log ``` ## ๐Ÿ“Š Service Statistics The service tracks and reports: - Items processed - Success/failure rates - Uptime - Processing speed Example output: ``` ๐Ÿ“Š YouTube Thumbnail Watcher Statistics Uptime: 0:02:15 Items Processed: 5 Succeeded: 3 Failed: 2 Success Rate: 60.0% ``` ## ๐Ÿ”„ Processing Flow 1. **Poll Directus**: Query `media_items` for unprocessed YouTube videos 2. **Extract Video IDs**: Parse YouTube URLs to get video identifiers 3. **Download Thumbnails**: Try multiple quality levels until success 4. **Upload to Directus**: Create file entries in Directus files collection 5. **Update Items**: Link thumbnails to original media items 6. **Log Results**: Track success/failure for monitoring ## ๐Ÿงช Testing Results Successfully tested with: - โœ… Rick Roll video (dQw4w9WgXcQ) - 65KB thumbnail - โœ… LLM Introduction video (zjkBMFhNj_g) - 184KB thumbnail - โœ… RAG tutorial video - Full processing pipeline Failed gracefully with: - โŒ Private/deleted videos - Proper error handling - โŒ Age-restricted videos - Continues to next item ## ๐Ÿ”ง Configuration ### Database Query ```python filter = { "_and": [ {"_or": [{"type": {"_eq": "youtube_video"}}, {"type": {"_eq": "youtube"}}]}, {"url": {"_nnull": True}}, {"youtube_thumbnail": {"_null": True}} ] } ``` ### Thumbnail Quality Priority 1. **maxres**: 1280x720 (best quality) 2. **high**: 480x360 3. **medium**: 320x180 4. **default**: 120x90 (fallback) ## ๐ŸŽ‰ Benefits Over Directus Flows โœ… **Better Error Handling**: Individual failures don't stop the service โœ… **Comprehensive Logging**: Full visibility into processing โœ… **Easy Testing**: Can test individual components โœ… **Flexible Deployment**: Run anywhere, not tied to Directus โœ… **Stateless Recovery**: Restart anytime without issues โœ… **Performance Monitoring**: Built-in statistics and metrics ## ๐Ÿ” Monitoring ### Key Metrics to Watch - Processing success rate (should be >80% for public videos) - Queue size (items waiting for processing) - Error patterns (404s vs network issues) - Processing speed (items per minute) ### Log Levels - **INFO**: Normal operation and successful processing - **WARNING**: Failed downloads, retries - **ERROR**: Critical failures, configuration issues - **DEBUG**: Detailed processing information ## ๐Ÿš€ Production Deployment ### Systemd Service (Linux) ```bash # Create service file sudo nano /etc/systemd/system/youtube-watcher.service [Unit] Description=YouTube Thumbnail Watcher After=network.target [Service] Type=simple User=www-data WorkingDirectory=/path/to/youtube-automation ExecStart=/path/to/youtube-automation/run_watcher.sh Restart=always [Install] WantedBy=multi-user.target ``` ### Docker Alternative ```dockerfile FROM python:3.11-slim WORKDIR /app COPY requirements.txt . RUN pip install -r requirements.txt COPY . . CMD ["python", "src/watcher_service.py"] ``` ## ๐ŸŽฏ Next Steps The core YouTube thumbnail automation is complete and working! The service successfully: 1. โœ… Polls Directus for unprocessed YouTube items 2. โœ… Downloads thumbnails with quality fallback 3. โœ… Uploads files to Directus 4. โœ… Updates media items with thumbnail references 5. โœ… Handles errors gracefully 6. โœ… Provides comprehensive logging and statistics The service is ready for production use!