# Sonarr Integration Guide This guide explains how to integrate Ohm Stream Downloader with Sonarr for automatic anime downloads. ## Overview The Sonarr integration allows you to automatically download anime episodes when Sonarr grabs new releases. This is done through webhooks that Sonarr sends when events occur. ## Features - **Automatic Downloads**: Trigger anime downloads when Sonarr grabs episodes - **Series Mapping**: Map Sonarr series to anime providers (Anime-Sama, Neko-Sama, etc.) - **Quality Selection**: Download specific qualities (1080p, 720p, etc.) - **Language Support**: Choose between VOSTFR and VF versions - **HMAC Security**: Optional webhook signature verification - **Manual Trigger**: Manually trigger downloads using Sonarr information ## Setup ### 1. Configure Sonarr Webhook 1. Open Sonarr web interface 2. Go to **Settings** > **Connect** > **+** 3. Select **Sonarr** as the type 4. Configure the webhook: - **Name**: Ohm Stream Downloader - **URL**: `http://your-server:3000/api/webhook/sonarr` - **Events**: Select which events to trigger (typically "Grab") 5. (Optional) Add a HMAC secret for security 6. Click **Test** to verify connectivity 7. Save the configuration ### 2. Configure Ohm Stream Downloader Use the API to configure Sonarr integration: ```bash # Enable webhooks and auto-download curl -X PUT http://localhost:3000/api/sonarr/config \ -H "Content-Type: application/json" \ -d '{ "webhook_enabled": true, "webhook_secret": "your-secret-key", "auto_download_enabled": true, "default_language": "vostfr", "default_quality": "1080p", "default_provider": "anime-sama", "verify_hmac": true, "log_webhooks": true }' ``` ### 3. Create Series Mappings For each series you want to auto-download, create a mapping between Sonarr and the anime provider: ```bash # Search for anime curl http://localhost:3000/api/sonarr/search?q=naruto&provider=anime-sama&lang=vostfr # Create mapping curl -X POST http://localhost:3000/api/sonarr/mappings \ -H "Content-Type: application/json" \ -d '{ "sonarr_series_id": 12345, "sonarr_title": "Naruto Shippuden", "anime_provider": "anime-sama", "anime_url": "https://anime-sama.si/catalogue/naruto-shippuden/saison1/vostfr/", "anime_title": "Naruto Shippuden", "lang": "vostfr", "quality_preference": "1080p", "auto_download": true }' ``` ## API Endpoints ### Configuration #### Get Configuration ```http GET /api/sonarr/config ``` Returns the current Sonarr configuration. #### Update Configuration ```http PUT /api/sonarr/config Content-Type: application/json { "webhook_enabled": true, "webhook_secret": "optional-secret", "auto_download_enabled": true, "default_language": "vostfr", "default_quality": "1080p", "default_provider": "anime-sama", "verify_hmac": false, "log_webhooks": true } ``` ### Mappings #### Get All Mappings ```http GET /api/sonarr/mappings ``` Returns all Sonarr to anime mappings. #### Get Specific Mapping ```http GET /api/sonarr/mappings/{series_id} ``` #### Create/Update Mapping ```http POST /api/sonarr/mappings Content-Type: application/json { "sonarr_series_id": 12345, "sonarr_title": "Series Name", "anime_provider": "anime-sama", "anime_url": "https://anime-sama.si/catalogue/anime/saison1/vostfr/", "anime_title": "Anime Title", "lang": "vostfr", "quality_preference": "1080p", "auto_download": true } ``` #### Delete Mapping ```http DELETE /api/sonarr/mappings/{series_id} ``` ### Search & Discovery #### Search Anime ```http GET /api/sonarr/search?q=naruto&provider=anime-sama&lang=vostfr ``` Search for anime on providers to find the correct URL for mapping. #### Get Episodes ```http GET /api/sonarr/episodes?url={anime_url}&provider=anime-sama&lang=vostfr ``` Get episode list for an anime. #### Suggest Mappings ```http GET /api/sonarr/suggest?sonarr_title=Naruto&provider=anime-sama&lang=vostfr ``` Get suggested anime matches based on Sonarr title with similarity scores. ### Webhooks #### Main Webhook Endpoint ```http POST /api/webhook/sonarr X-Sonarr-Event: sha256=signature ``` Receives webhooks from Sonarr. #### Test Webhook ```http POST /api/webhook/test/sonarr ``` Test endpoint for verifying webhook connectivity. ### Manual Download #### Trigger Download ```http POST /api/sonarr/download Content-Type: application/json { "sonarr_series_id": 12345, "sonarr_title": "Naruto Shippuden", "season_number": 1, "episode_number": 1, "quality": "1080p", "lang": "vostfr", "provider": "anime-sama" } ``` Manually trigger a download using Sonarr series information. ## Workflow ### Automatic Download Flow 1. Sonarr grabs a new episode 2. Sonarr sends webhook to Ohm Stream Downloader 3. Ohm Stream Downloader receives webhook and verifies HMAC (if enabled) 4. System looks up mapping for the series 5. If mapping exists and auto_download is enabled: - Finds the matching episode on the anime provider - Creates a download task - Starts the download 6. Returns response to Sonarr ### Manual Setup Flow 1. **Find Sonarr Series ID**: - Go to Sonarr web interface - Open series details - Find the TVDB ID in the series information 2. **Search for Anime**: ```bash curl "http://localhost:3000/api/sonarr/search?q=Series+Name&provider=anime-sama&lang=vostfr" ``` 3. **Get Episodes** (optional, to verify): ```bash curl "http://localhost:3000/api/sonarr/episodes?url={anime_url}&provider=anime-sama&lang=vostfr" ``` 4. **Create Mapping**: ```bash curl -X POST http://localhost:3000/api/sonarr/mappings \ -H "Content-Type: application/json" \ -d '{ "sonarr_series_id": 12345, "sonarr_title": "Series Name", "anime_provider": "anime-sama", "anime_url": "https://anime-sama.si/catalogue/series/saison1/vostfr/", "anime_title": "Anime Title", "lang": "vostfr" }' ``` 5. **Test with Manual Trigger**: ```bash curl -X POST http://localhost:3000/api/sonarr/download \ -H "Content-Type: application/json" \ -d '{ "sonarr_series_id": 12345, "season_number": 1, "episode_number": 1 }' ``` ## Supported Providers - **anime-sama**: Primary anime provider - **neko-sama**: Alternative anime provider - **anime-ultime**: French anime provider - **vostfree**: VOSTFR anime provider ## Event Types Sonarr sends different event types: - **Grab**: Triggered when Sonarr downloads a release (use this for auto-downloads) - **Download**: Triggered when download is completed - **Rename**: Triggered when files are renamed - **Delete**: Triggered when series/episodes are deleted - **Test**: Test webhook from Sonarr ## Security ### HMAC Verification For enhanced security, enable HMAC verification: 1. Generate a secret key: ```bash openssl rand -hex 32 ``` 2. Configure in both Sonarr and Ohm Stream Downloader: - Sonarr: Add the secret to webhook configuration - Ohm Stream Downloader: Set `webhook_secret` and `verify_hmac: true` 3. The webhook will verify all incoming requests using HMAC SHA256 ### Recommendations - Use HTTPS in production - Keep webhook secret secure - Monitor webhook logs - Use network restrictions to limit access ## Troubleshooting ### Webhook Not Received 1. Check Ohm Stream Downloader logs: ```bash tail -f logs/app.log | grep webhook ``` 2. Verify webhook is enabled: ```bash curl http://localhost:3000/api/sonarr/config ``` 3. Test webhook from Sonarr: - Use Sonarr's test button - Check `/api/webhook/test/sonarr` endpoint ### Mapping Not Found 1. Check mapping exists: ```bash curl http://localhost:3000/api/sonarr/mappings/{series_id} ``` 2. Verify series ID matches Sonarr TVDB ID 3. Check logs for error messages ### Episode Not Found 1. Verify anime URL is correct: ```bash curl "http://localhost:3000/api/sonarr/episodes?url={url}&provider=anime-sama&lang=vostfr" ``` 2. Check episode number matches 3. Verify season/episode format (Sonarr uses absolute numbering) ### Download Not Starting 1. Check download manager: ```bash curl http://localhost:3000/api/downloads ``` 2. Verify auto-download is enabled: ```bash curl http://localhost:3000/api/sonarr/config ``` 3. Check mapping has `auto_download: true` ## Examples ### Example 1: Setup Naruto Shippuden ```bash # 1. Search for Naruto Shippuden curl "http://localhost:3000/api/sonarr/search?q=naruto+shippuden&provider=anime-sama&lang=vostfr" # 2. Create mapping (using TVDB ID 79644) curl -X POST http://localhost:3000/api/sonarr/mappings \ -H "Content-Type: application/json" \ -d '{ "sonarr_series_id": 79644, "sonarr_title": "Naruto Shippuden", "anime_provider": "anime-sama", "anime_url": "https://anime-sama.si/catalogue/naruto-shippuden/saison1/vostfr/", "anime_title": "Naruto Shippuden", "lang": "vostfr", "quality_preference": "1080p", "auto_download": true }' # 3. Test with manual download curl -X POST http://localhost:3000/api/sonarr/download \ -H "Content-Type: application/json" \ -d '{ "sonarr_series_id": 79644, "season_number": 1, "episode_number": 1 }' ``` ### Example 2: Enable with Security ```bash # Generate secret SECRET=$(openssl rand -hex 32) # Configure Ohm Stream Downloader curl -X PUT http://localhost:3000/api/sonarr/config \ -H "Content-Type: application/json" \ -d "{ \"webhook_enabled\": true, \"webhook_secret\": \"$SECRET\", \"verify_hmac\": true, \"auto_download_enabled\": true, \"log_webhooks\": true }" # Use same secret in Sonarr webhook configuration ``` ## Advanced Configuration ### Custom Provider Configuration You can specify different providers per mapping: ```json { "sonarr_series_id": 12345, "sonarr_title": "One Piece", "anime_provider": "neko-sama", "anime_url": "https://neko-sama.fr/anime/one-piece", "anime_title": "One Piece", "lang": "vostfr", "quality_preference": "1080p" } ``` ### Multiple Languages Create separate mappings for different languages: ```bash # VOSTFR version curl -X POST http://localhost:3000/api/sonarr/mappings \ -H "Content-Type: application/json" \ -d '{ "sonarr_series_id": 12345, "sonarr_title": "Anime Name", "anime_provider": "anime-sama", "anime_url": "https://anime-sama.si/catalogue/anime/saison1/vostfr/", "anime_title": "Anime Name VOSTFR", "lang": "vostfr" }' # VF version curl -X POST http://localhost:3000/api/sonarr/mappings \ -H "Content-Type: application/json" \ -d '{ "sonarr_series_id": 12346, "sonarr_title": "Anime Name", "anime_provider": "anime-sama", "anime_url": "https://anime-sama.si/catalogue/anime/saison1/vf/", "anime_title": "Anime Name VF", "lang": "vf" }' ``` ## Configuration Files Configuration is stored in `config/sonarr.json`: ```json { "webhook_enabled": true, "webhook_secret": "your-secret-key", "auto_download_enabled": true, "default_language": "vostfr", "default_quality": "1080p", "default_provider": "anime-sama", "verify_hmac": true, "log_webhooks": true } ``` Mappings are stored in `config/sonarr_mappings.json`: ```json [ { "sonarr_series_id": 12345, "sonarr_title": "Naruto Shippuden", "anime_provider": "anime-sama", "anime_url": "https://anime-sama.si/catalogue/naruto-shippuden/saison1/vostfr/", "anime_title": "Naruto Shippuden", "lang": "vostfr", "quality_preference": "1080p", "auto_download": true, "created_at": "2024-01-01T00:00:00", "updated_at": "2024-01-01T00:00:00" } ] ```