An AI-powered torrent search filter for *arr apps (Radarr, Sonarr, Lidarr).
AI-Arr acts as a smart proxy between your *arr apps and Prowlarr/indexers. Instead of relying on basic regex matching to pick torrents, it uses a local LLM to analyze results like an experienced human would.
The AI filters out:
- Fake files (.txt, .iso, .exe extensions)
- Wrong languages (unless you want them)
- Dead torrents (no seeders)
- Suspicious file sizes (200MB "1080p BluRay" = fake)
- Cam/telesync releases mislabeled as BluRay
- Unknown/sketchy release groups
The AI prioritizes:
- Known reputable release groups
- Healthy seeder counts
- Appropriate file sizes for quality
- Correct language/region
- Best quality available
┌─────────────┐ ┌─────────────┐ ┌──────────────┐
│ Radarr │────▶│ AI-Arr │────▶│ Prowlarr │
│ Sonarr │◀────│ (proxy) │◀────│ Indexers │
│ Lidarr │ └──────┬──────┘ └──────────────┘
└─────────────┘ │
┌─────▼─────┐
│ Ollama │ (local LLM)
└───────────┘
docker run -d \
--name ai-arr \
-p 9696:9696 \
-e PROWLARR_URL=http://your-prowlarr:9696 \
-e PROWLARR_API_KEY=your-api-key \
-e OLLAMA_URL=http://your-ollama:11434 \
-e OLLAMA_MODEL=qwen2.5-coder:7b \
ghcr.io/your-username/ai-arr:latestgit clone https://github.com/your-username/ai-arr.git
cd ai-arr
pip install -r requirements.txt
cp config.example.yaml config.yaml
# Edit config.yaml with your settings
python -m src.mainEdit config.yaml:
server:
host: 0.0.0.0
port: 9696
prowlarr:
url: http://localhost:9696
api_key: your-prowlarr-api-key
ollama:
url: http://localhost:11434
model: qwen2.5-coder:7b
timeout: 30
filtering:
min_seeders: 1
max_results: 25
preferred_languages:
- english
blocked_extensions:
- .txt
- .iso
- .exe
- .scr
trusted_groups:
- SPARKS
- RARBG
- YTS
- YIFY
- FGT
- NTb
- FLUX- Install AI-Arr
- Point your *arr apps to AI-Arr instead of Prowlarr
- AI-Arr forwards requests to Prowlarr, filters results with AI, returns the best ones
In Radarr/Sonarr settings:
- Change indexer URL from
http://prowlarr:9696tohttp://ai-arr:9696 - Keep the same API key
For each search result, the AI considers:
-
Filename Analysis
- Is the extension valid? (.mkv, .mp4, .avi = good, .txt, .exe = bad)
- Does the quality tag match expectations?
- Is it the correct content (not a similarly-named different movie)?
-
Release Group Reputation
- Known groups (SPARKS, RARBG, etc.) get higher scores
- Unknown groups get scrutinized more
-
Size Validation
- A 1080p BluRay should be 4-15GB, not 200MB
- 4K remux should be 40-80GB
- Size mismatches indicate fake or low quality
-
Health Check
- Seeders > 0 required
- More seeders = better availability
- Very old torrents with few seeders may be dying
-
Quality Hierarchy
- Remux > BluRay > WEB-DL > WEBRip > HDTV > CAM
- Filters out CAM/telesync unless nothing else available
AI-Arr implements the Torznab API specification:
GET /api?t=caps- CapabilitiesGET /api?t=search&q=...- SearchGET /api?t=movie&q=...- Movie searchGET /api?t=tvsearch&q=...- TV searchGET /api?t=music&q=...- Music search
MIT