Microservizio proxy che permette a Prowlarr di utilizzare l'indexer mircrew-releases.org tramite API Torznab.
MIRCrew è protetto da Cloudflare Turnstile, che blocca qualsiasi client automatizzato (requests, cloudscraper, browser headless, ecc.). L'indexer ufficiale Cardigann di Prowlarr fallisce con errori di login anche usando FlareSolverr/Byparr, perché non gestisce correttamente il flusso di autenticazione phpBB (CSRF token).
Questo proxy risolve entrambi i problemi:
- Usa Byparr (o qualsiasi servizio compatibile FlareSolverr) per superare il challenge Cloudflare
- Gestisce correttamente il login phpBB con CSRF token, session ID e cookie persistence
Requisito: È necessario un servizio Byparr (o FlareSolverr) funzionante. Il proxy non può bypassare Cloudflare da solo.
- Pannello Admin web — interfaccia completa per gestire siti, configurazione e log in tempo reale
- Architettura multi-sito a plugin — supporto per più siti tramite sistema a manifest
- Configurazione persistente — salvata su file JSON, modificabile dall'admin panel
- Bypass Cloudflare tramite Byparr/FlareSolverr (servizio esterno)
- API Torznab completa per Prowlarr/Sonarr/Radarr
- Gestione intelligente del Thanks — click solo al download, non durante la ricerca
- Espansione episodi per serie TV già ringraziate
- Risultati sintetici per serie non ancora ringraziate
- Riconoscimento season pack con attributi Torznab corretti per Sonarr
- Cache cookie CF su disco (12h TTL) — richieste veloci dopo il primo bypass
- Log streaming in tempo reale via Server-Sent Events
- Multi-platform Docker (amd64, arm64)
cp .env.example .env
nano .envContenuto .env:
MIRCREW_USERNAME=tuo_username
MIRCREW_PASSWORD=tua_password
MIRCREW_API_KEY=una-chiave-a-tua-sceltadocker compose up -dQuesto avvia sia il proxy che Byparr. Il proxy sarà disponibile su http://localhost:9696.
Apri http://localhost:9696/admin nel browser per gestire siti, configurazione e visualizzare i log in tempo reale.
Se hai configurato le variabili d'ambiente, il sito mircrew viene creato automaticamente al primo avvio.
- Vai su Prowlarr → Indexers → Add Indexer
- Seleziona Generic Torznab
- Configura:
- Name:
MIRCrew - URL:
http://<IP_SERVER>:9696/mircrew - API Path:
/api - API Key: la chiave configurata in
.envo nel pannello admin - Categories:
2000,5000,5070,3000,7000
- Name:
- Clicca Test e poi Save
Nota: L'URL include il nome del sito (es.
/mircrew). Se aggiungi più siti dal pannello admin, ognuno avrà il suo endpoint dedicato:/{nome_sito}/api.
Nota: Non serve configurare tag FlareSolverr/Byparr in Prowlarr. Il bypass CF è gestito internamente dal proxy.
Accessibile su http://localhost:9696/admin, il pannello offre quattro sezioni:
Panoramica dello stato del sistema: siti attivi, stato del bypass Cloudflare, stato login, cache thanks e uptime.
Gestione completa dei siti e plugin:
- Nuovo Plugin — crea un nuovo plugin con template minimale (manifest.json + site.py stub), pronto per essere personalizzato dall'editor codice integrato
- Aggiungi sito — seleziona un plugin disponibile (es.
mircrew), configura URL, credenziali e parametri custom - Modifica sito — modifica connessione, mappature categorie, selettori CSS, parametri di ricerca e capabilities XML
- Editor codice — modifica i file Python del plugin (site.py, constants.py) direttamente dal browser con syntax highlighting
- Abilita/Disabilita — attiva o disattiva un sito senza eliminarlo
- Elimina sito — rimuove completamente la configurazione
La configurazione di ogni sito è organizzata in tab:
| Tab | Contenuto |
|---|---|
| Connessione | URL base, username, password |
| Mappature | Mappatura Forum ID → Categoria Torznab, Forum IDs per serie TV |
| Scraping | Selettori CSS per il parsing delle pagine, parametri di ricerca |
| Avanzate | Capabilities XML (editabile con syntax highlighting) |
Impostazioni globali del proxy:
- API Key — chiave di autenticazione per gli endpoint Torznab
- CF Bypass URL — URL del servizio Byparr/FlareSolverr
- CF Bypass Timeout — timeout in millisecondi
- Log Level — livello di log (DEBUG, INFO, WARNING, ERROR)
Visualizzazione log in tempo reale via Server-Sent Events, con filtro per livello e funzionalità pausa/ripresa.
services:
mircrew-proxy:
image: ghcr.io/easly1989/mircrewrr:latest
container_name: mircrew-proxy
restart: unless-stopped
ports:
- "9696:9696"
volumes:
- ./mircrew-data:/app/data
environment:
- MIRCREW_USERNAME=your_username
- MIRCREW_PASSWORD=your_password
- MIRCREW_API_KEY=your_api_key
- FLARESOLVERR_URL=http://byparr:8191
depends_on:
- byparr
byparr:
image: ghcr.io/thephaseless/byparr:latest
container_name: byparr
restart: unless-stoppedSe hai già Byparr nel tuo docker-compose (es. per altri indexer), aggiungi solo il proxy e puntalo al Byparr esistente:
mircrew-proxy:
image: ghcr.io/easly1989/mircrewrr:latest
container_name: mircrew-proxy
restart: unless-stopped
ports:
- "9696:9696"
volumes:
- ./mircrew-data:/app/data
environment:
- MIRCREW_USERNAME=your_username
- MIRCREW_PASSWORD=your_password
- MIRCREW_API_KEY=your_api_key
- FLARESOLVERR_URL=http://byparr:8191Assicurati che mircrew-proxy e byparr siano sulla stessa rete Docker.
Byparr è un container separato: il proxy lo raggiunge solo via FLARESOLVERR_URL,
quindi puoi aggiornarlo, gestirlo e condividerlo senza toccare il proxy.
Aggiornare Byparr indipendentemente:
# aggiorna solo il solver, senza ricostruire il proxy
docker compose pull byparr && docker compose up -d byparrIn alternativa, fissa una versione specifica (consigliato, evita aggiornamenti
automatici che possono rompere il bypass CF) tramite la variabile BYPARR_IMAGE
nel file .env, oppure punta FLARESOLVERR_URL a un Byparr gestito altrove
(altro stack o altro host, es. http://192.168.1.10:8191).
Riusare lo stesso solver per altri indexer:
Lo stesso Byparr può servire più indexer contemporaneamente. Essendo
FlareSolverr-compatibile, qualsiasi client compatibile può puntare allo stesso
http://byparr:8191:
- in Prowlarr, configura il tag FlareSolverr (Settings → Indexers → FlareSolverr) con l'URL del solver: gli altri indexer Cloudflare lo useranno automaticamente;
- altri proxy/strumenti possono usare lo stesso URL.
Solver intercambiabile: poiché l'integrazione è FlareSolverr-compatibile, il
solver può essere Byparr oppure FlareSolverr oppure un'altra immagine compatibile.
Si cambia solo BYPARR_IMAGE (o FLARESOLVERR_URL), senza modifiche al codice.
Nota: se le ricerche smettono improvvisamente di funzionare con errori 403, verifica che
MIRCREW_URLpunti al dominio MIRCrew attualmente attivo (i forum MIRCrew cambiano dominio periodicamente) e controlla i log del proxy per l'errore reale restituito da Byparr.
Prowlarr ──HTTP──▶ mircrew-proxy:9696 ──HTTP──▶ Byparr:8191 ──browser──▶ mircrew-releases.org
(Torznab API) (CF bypass) (Cloudflare + phpBB)
- Prowlarr chiama il proxy con una richiesta Torznab standard
- Il proxy prova a raggiungere MIRCrew con
requests(veloce) - Se Cloudflare blocca (403/503), il proxy chiede a Byparr di risolvere il challenge
- Byparr usa un browser reale per superare Turnstile e ritorna i cookie
- Il proxy salva i cookie e li riusa per le richieste successive (veloci)
- I cookie CF sono cachati su disco con TTL di 12 ore
| Variabile | Descrizione | Default |
|---|---|---|
MIRCREW_USERNAME |
Username MIRCrew | (obbligatorio) |
MIRCREW_PASSWORD |
Password MIRCrew | (obbligatorio) |
MIRCREW_API_KEY |
API key per Prowlarr | mircrew-api-key |
MIRCREW_URL |
URL base del sito | https://mircrew-releases.org |
FLARESOLVERR_URL |
URL di Byparr/FlareSolverr | http://byparr:8191 |
FLARESOLVERR_TIMEOUT |
Timeout per Byparr (ms) | 60000 |
PROXY_PORT |
Porta del proxy | 9696 |
ENABLED_SITES |
Siti da attivare all'avvio (separati da virgola) | mircrew |
LOG_LEVEL |
Livello log (DEBUG, INFO, WARNING, ERROR) |
INFO |
Nota: Le variabili d'ambiente vengono usate come configurazione iniziale. Una volta modificata la configurazione dal pannello admin, i valori salvati nel file
config.jsonhanno la precedenza sulle variabili d'ambiente.
Ogni sito registrato espone i propri endpoint sotto /{nome_sito}/:
| Endpoint | Descrizione |
|---|---|
GET /{nome_sito}/api?t=caps |
Capabilities Torznab |
GET /{nome_sito}/api?t=search&q=... |
Ricerca generale |
GET /{nome_sito}/api?t=tvsearch&q=...&season=X&ep=Y |
Ricerca serie TV |
GET /{nome_sito}/api?t=movie&q=... |
Ricerca film |
GET /{nome_sito}/download?topic_id=... |
Ottiene magnet link |
Esempio con il sito mircrew: GET /mircrew/api?t=search&q=avatar&apikey=YOUR_KEY
| Endpoint | Descrizione |
|---|---|
GET / |
Info servizio e lista siti attivi |
GET /health |
Health check con stato di tutti i siti |
GET /admin |
Pannello di amministrazione web |
| Endpoint | Descrizione |
|---|---|
GET /admin/api/status |
Stato del sistema (versione, uptime, siti) |
GET /admin/api/plugins |
Lista plugin disponibili |
POST /admin/api/plugins |
Crea un nuovo plugin con template |
GET /admin/api/config |
Configurazione globale |
PUT /admin/api/config |
Aggiorna configurazione globale |
GET /admin/api/sites |
Lista siti configurati |
POST /admin/api/sites |
Aggiungi un nuovo sito |
PUT /admin/api/sites/<name> |
Aggiorna configurazione sito |
DELETE /admin/api/sites/<name> |
Elimina sito |
POST /admin/api/sites/<name>/toggle |
Abilita/disabilita sito |
GET /admin/api/logs |
Stream log in tempo reale (SSE) |
Il sistema utilizza un'architettura a plugin basata su file manifest.json. Ogni plugin si trova in src/sites/<nome_plugin>/ e contiene:
src/sites/mircrew/
├── manifest.json # Definizione del plugin (schema config, file editabili)
├── site.py # Implementazione principale (sessione, ricerca, download)
├── parser.py # Parsing titoli, estrazione magnet, rilevamento episodi
└── constants.py # Mappature categorie e valori di default
Il manifest.json definisce:
- Metadati: id, nome, descrizione, versione
- Schema di connessione (
config_schema): campi necessari (URL, username, password) - Configurazione custom (
custom_config): mappature categorie, selettori CSS, parametri di ricerca, capabilities XML — tutti con valori di default - File editabili (
editable_files): file Python del plugin modificabili dall'admin panel
Nuovi plugin possono essere creati direttamente dal pannello admin con il pulsante New Plugin, che genera automaticamente tutti i file necessari con un template funzionante.
| Categoria | Torznab ID | Forum MIRCrew |
|---|---|---|
| Film | 2000 | 25, 26, 34, 36 |
| Serie TV | 5000 | 51, 52, 29, 30, 31 |
| Anime | 5070 | 33, 35, 37 |
| Musica | 3000 | 45, 46, 47 |
| Libri | 7000 | 39, 40, 41, 42, 43 |
# Avvia
docker compose up -d
# Vedi i log
docker compose logs -f mircrew-proxy
# Riavvia
docker compose restart mircrew-proxy
# Stop
docker compose down
# Test manuale (nota: endpoint multi-sito)
curl "http://localhost:9696/mircrew/api?t=search&q=avatar&apikey=YOUR_API_KEY"
# Health check
curl "http://localhost:9696/health"
# Pannello admin
# Apri http://localhost:9696/admin nel browser| Problema | Soluzione |
|---|---|
Cannot connect to Byparr |
Verifica che Byparr sia avviato e raggiungibile all'URL configurato |
CF challenge failed |
Byparr potrebbe non riuscire a risolvere il challenge — controlla i log di Byparr |
Login failed - check credentials |
Username/password MIRCrew errati |
Login form not found |
CF non è stato bypassato — Byparr non ha risolto il challenge |
Health check mostra cf_valid: false |
Nessun cookie CF valido — verrà risolto alla prima richiesta |
| Pannello admin: editor codice vuoto | Svuota la cache del browser e ricarica la pagina |
No sites loaded |
Configura almeno un sito dal pannello admin (/admin) o tramite variabili d'ambiente |
git clone https://github.com/easly1989/mircrewrr.git
cd mircrewrr
docker compose build
docker compose up -dQuesto progetto è stato sviluppato interamente con Claude Code, l'assistente AI di Anthropic per lo sviluppo software.
Se questo progetto ti è utile, considera una donazione: