Docker • Prowlarr • Torznab • FlareSolverr
Prowlarr, Radarr ve Sonarr ekosistemi için hazırlanan EXT Torznab Proxy; Generic Torznab API, FlareSolverr session yönetimi, dahili warm sistemi, search/magnet cache ve web arayüzü ile tek bir Docker servisi olarak çalışır.
Docker
Node.js
Prowlarr
Torznab
Prowlarr, Radarr ve Sonarr kullananların bildiği gibi bazı indexer’lar hazır listelerde bulunmayabiliyor. Böyle durumlarda çoğu zaman custom definition dosyalarıyla uğraşmak, HTML parse etmek, Cloudflare engellerini aşmak ve magnet linklerini düzgün şekilde yakalamak gerekiyor.
Benim ihtiyaç duyduğum senaryo da tam olarak buydu. EXT tarafındaki arama sonuçlarını Prowlarr’a Generic Torznab olarak göstermek, Sonarr/Radarr üzerinden arama yaptırmak ve seçilen sonuçların magnet linklerini otomatik olarak qBittorrent’e göndermek istiyordum. Bunun için EXT Torznab Proxy adında küçük ama iş gören bir Docker servisi hazırladım.
Buradaki asıl güzel taraflardan biri de şu: ext.to veya alternatif adres olan extranet.torrentbay.st, tek başına klasik bir torrent sitesi gibi davranmıyor. Kendi içerisinde yaklaşık 15 farklı torrent sitesini indeksleyen bir arama katmanı gibi çalışıyor. Yani Prowlarr üzerinden bu proxy’ye tek bir arama gönderdiğinizde, pratikte tek bir siteye değil, EXT’nin arkasında indekslenen birçok farklı kaynağa aynı anda arama yaptırmış oluyorsunuz. Bence projenin en büyük avantajlarından biri bu. Prowlarr tarafında tek bir Generic Torznab indexer tanımlıyorsunuz ama arka tarafta çok daha geniş bir sonuç havuzuna erişmiş oluyorsunuz.
Proje GitHub adresi:
https://github.com/huseyincig/extto-torznab-proxy
Docker image:
ghcr.io/huseyincig/extto-torznab-proxy:latestSabit sürüm kullanmak isteyenler için:
ghcr.io/huseyincig/extto-torznab-proxy:1.0.0Bu Proje Ne İşe Yarıyor?
EXT Torznab Proxy, EXT tarzı torrent arama sayfasını Prowlarr’ın anlayacağı Generic Torznab API formatına çeviren bir ara katmandır.
Kısaca akış şöyle çalışır:
Sonarr / Radarr
→ Prowlarr
→ Generic Torznab
→ EXT Torznab Proxy
→ FlareSolverr
→ EXT / ext.to
→ Magnet
→ qBittorrentYani Prowlarr tarafında özel YAML definition dosyası yazmak zorunda kalmadan, normal bir Generic Torznab indexer gibi kullanılabilir.
Bunun pratik faydası oldukça büyük. Normalde Prowlarr’da listede olmayan bir siteyi eklemek için custom indexer dosyaları, HTML selector ayarları, kategori eşlemeleri ve download link dönüşümleriyle uğraşmak gerekir. Üstelik site Cloudflare arkasındaysa, bu işlemler daha da zahmetli hale gelir. EXT Torznab Proxy bu işleri ayrı bir Docker servisi içinde çözer ve Prowlarr’a temiz bir Torznab API sunar.
En Büyük Avantaj: Tek Aramayla Birden Fazla Kaynak
Bu projenin en önemli avantajlarından biri EXT’nin yapısından geliyor. ext.to ve extranet.torrentbay.st adresleri, içeride yaklaşık 15 farklı torrent sitesini indeksleyen bir sistem gibi çalışıyor. Yani siz Prowlarr’dan tek bir arama gönderdiğinizde, aslında EXT’nin arka tarafta topladığı geniş bir kaynak havuzunda arama yapmış oluyorsunuz.
Bu, özellikle Sonarr ve Radarr tarafında çok işe yarıyor. Çünkü tek bir indexer üzerinden daha fazla sonuç dönebiliyor. Örneğin bir dizi sezonu veya film araması yaptığınızda, Prowlarr sadece tek bir kaynağa değil, EXT’nin indekslediği farklı sitelerden gelen birleşik sonuçlara erişebiliyor.
Bu yapı sayesinde:
Prowlarr’da tek indexer
EXT tarafında çoklu kaynak
Sonarr/Radarr tarafında daha geniş release havuzu
qBittorrent’e doğrudan magnet gönderimielde edilmiş oluyor.
Kısacası bu proxy sadece “bir siteyi Prowlarr’a ekleme” işi değil, aynı zamanda EXT’nin çoklu indeksleme avantajını Prowlarr/Radarr/Sonarr ekosistemine taşımak anlamına geliyor.
Öne Çıkan Özellikler
Projede şu özellikler var:
- Prowlarr uyumlu Generic Torznab API
- FlareSolverr ile Cloudflare/session yönetimi
- Web tabanlı ayar arayüzü
- Türkçe/İngilizce otomatik arayüz
- Search cache ve magnet cache
- Dahili warm sistemi
- API key üretme/kopyalama
- Session reset ve cache temizleme
- EXT alternatif domain seçimi
- Sonarr/Radarr sezon-bölüm arama normalizasyonu
- Docker healthcheck desteği
- GHCR üzerinden hazır Docker image
Desteklenen base URL seçenekleri:
https://ext.to
https://extranet.torrentbay.stVarsayılan olarak ext.to kullanılabilir. İstenirse web arayüzünden değiştirilebilir.
Neden Böyle Bir Proxy Gerekli?
EXT tarafındaki arama sayfasında doğrudan magnet linkleri bulunmuyor. Arama sonuçlarında torrent detay sayfasına giden linkler var. Magnet almak için kabaca şu adımlar gerekiyor:
Arama sayfası açılır
Sonuçlar parse edilir
Detay sayfası açılır
Sayfadaki token bilgileri alınır
AJAX isteği yapılır
Magnet linki alınırBuna bir de Cloudflare challenge ve session yönetimi eklenince, işi doğrudan Prowlarr custom definition içinde çözmek hem zahmetli hem de kararsız hale geliyor.
Bu proxy tam bu noktada devreye giriyor. Arama sonuçlarını Torznab RSS formatına çeviriyor, download isteği geldiğinde magneti çözüyor ve cache’e alıyor.
Warm Sistemi Ne İşe Yarıyor?
Cloudflare koruması nedeniyle ilk istek bazen uzun sürebiliyor. Örneğin ilk warm sırasında 60–80 saniyelik challenge süresi görülebiliyor. Ancak session sıcak kaldığında sonraki istekler 2–4 saniye civarına düşüyor.
EXT Torznab Proxy içinde dahili warm sistemi var. Varsayılan olarak belirli aralıklarla gerçek siteye istek atarak session’ı sıcak tutar.
Web arayüzünde iki farklı bilgi gösterilir:
Warm Süresi
Son başarılı warm’dan beri kaç saniye geçtiğini gösterir.
Son Warm / Challenge
Son warm işleminin kaç saniye sürdüğünü ve challenge’a düşüp düşmediğini gösterir.Örnek:
Warm Süresi: 317s WARM
Son Warm / Challenge: 2s WARMBu, sistemin sıcak olduğunu ve hızlı çalıştığını gösterir.
Warm sistemi sadece aramayı hızlandırmaz. Magnet çözme işlemi de detay sayfasına gitmek zorunda olduğu için, session sıcak kaldığında magnet alma işlemi de ciddi şekilde hızlanır. İlk challenge çözümünden sonra hem aramalar hem de magnet çözme akışı çok daha seri hale gelir.
Docker Compose ile Kurulum
Aşağıdaki örnek compose dosyası FlareSolverr ve EXT Torznab Proxy servislerini birlikte çalıştırır.
services:
flaresolverr:
image: ghcr.io/flaresolverr/flaresolverr:latest
container_name: flaresolverr
environment:
- TZ=Europe/Istanbul
shm_size: "1gb"
restart: unless-stopped
extto-torznab-proxy:
image: ghcr.io/huseyincig/extto-torznab-proxy:latest
container_name: extto-torznab-proxy
depends_on:
- flaresolverr
environment:
- TZ=Europe/Istanbul
- PORT=8998
- CONFIG_DIR=/config
ports:
- "8998:8998"
volumes:
- ./config:/config
healthcheck:
test: ["CMD-SHELL", "wget -qO- http://127.0.0.1:8998/health >/dev/null || exit 1"]
interval: 120s
timeout: 10s
retries: 3
start_period: 60s
restart: unless-stopped
logging:
driver: json-file
options:
max-size: "10m"
max-file: "3"Eğer mevcut bir servarr_net gibi ortak Docker network kullanıyorsanız, servisleri o ağa dahil ederek Prowlarr, Sonarr ve Radarr ile aynı ağda çalıştırabilirsiniz.
Örnek:
networks:
servarr_net:
external: trueServis tarafına da:
networks:
- servarr_netekleyebilirsiniz.
Servisi Başlatma
Compose dosyasının bulunduğu klasörde:
docker compose
Ardından web arayüzünü açın:
http://SUNUCU_IP:8998/Örneğin:
http://192.168.2.1:8998/Web Arayüzü
Web arayüzünden şu ayarlar yapılabilir:
- Base URL seçimi
- Public URL
- FlareSolverr URL
- API key
- Warm aralığı
- Cache süreleri
- Session reset
- Cache temizleme
- Manuel warm
- Otomatik sayfa yenileme
API key alanında kopyalama ve yeni key üretme butonları bulunur. Yeni API key üretildiğinde ayar dosyasına anında yazılır. Bu işlemden sonra Prowlarr tarafındaki API Key alanını da güncellemeniz gerekir.
Arayüz tarayıcı diline göre otomatik olarak Türkçe veya İngilizce açılır. Tarayıcı dili Türkçeyse Türkçe, diğer dillerde İngilizce arayüz gösterilir.
Prowlarr Ayarı
Prowlarr içinde yeni indexer ekleyin:
Add Indexer → Generic TorznabAyarları şu şekilde girin:
Name:
EXT Torznab Proxy
URL:
http://SUNUCU_IP:8998
API Path:
/api
API Key:
Web arayüzünde görünen API key
Redirect:
Kapalı
Tags:
İsteğe bağlı, örneğin exttoBu indexer’a Prowlarr içinden ayrıca FlareSolverr proxy etiketi vermeyin. FlareSolverr işini bu container kendi içinde halleder.
Bu sayede Prowlarr tarafında sadece tek bir Generic Torznab indexer görürsünüz. Ancak EXT’nin arka tarafta indekslediği çoklu kaynaklar sayesinde, tek indexer üzerinden oldukça geniş bir sonuç havuzuna ulaşabilirsiniz.
Test Etme
Önce health endpoint’i kontrol edilebilir:
health check
Örnek çıktı:
{
"ok": true,
"app": "extto-torznab-proxy",
"version": "1.0.0",
"sessionReady": true,
"warmEnabled": true,
"warmRunning": false
}Torznab caps testi:
health check
Arama testi:
health check
TV search örneği:
health check
Proxy bu sorguyu EXT tarafına şu şekilde normalize eder:
Squid Game S02Bölüm araması için:
Squid Game : S02E04şu hale çevrilir:
Squid Game S02E04Bu düzeltme özellikle Sonarr tarafındaki sezon/bölüm aramalarında daha doğru sonuç alınmasını sağlar.
Magnet Çözme Mantığı
Arama sonuçları listelenirken magnetler hemen çözülmez. Bu bilinçli bir tercih. Çünkü bir aramada 50 veya daha fazla sonuç dönebilir. Hepsinin magnetini önceden çözmeye çalışmak hem sistemi hem siteyi gereksiz yorar.
Bunun yerine akış şu şekildedir:
Arama yapılır
Sonuçlar Torznab RSS olarak döner
Sonarr/Radarr uygun sonucu seçer
Download linkine basılır
Proxy detay sayfasına gider
Magneti çözer
Magnet cache’e yazar
Sonraki aynı istek cache’den dönerBu sayede sistem hem hızlı hem de kontrollü çalışır.
EXT’nin birden fazla kaynağı indeksleyen yapısı burada da avantaj sağlar. Arama geniş bir havuzdan gelir, fakat magnet sadece gerçekten seçilen release için çözülür. Böylece hem sonuç sayısı yüksek olur hem de gereksiz yere onlarca detay sayfası gezilmez.
Cache Mantığı
Projede iki ayrı cache yapısı vardır:
Search cache
Arama sonuçlarını kısa süre saklar.
Magnet cache
Çözülen magnet linklerini daha uzun süre saklar.Search cache sayesinde aynı arama kısa süre içinde tekrarlandığında siteye yeniden gitmeye gerek kalmaz. Magnet cache sayesinde aynı release tekrar indirilmeye çalışıldığında magnet tekrar çözülmez.
Warm sistemi ise cache’den bağımsız çalışır. Yani warm isteği gerçek siteye gider ve session’ı sıcak tutar. Bu sayede sadece lokal cache’e güvenilmez; Cloudflare/session tarafı gerçekten canlı tutulur.
Loglardan Doğrulama
Sağlıklı bir arama logu şu şekilde görünür:
[query] built {"t":"tvsearch","q":"Squid Game S02","season":"2","ep":""}
[flaresolverr] browse fetch https://ext.to/browse/?q=Squid+Game+S02&with_adult=1
[cache] search stored /browse/?q=Squid+Game+S02&with_adult=1
[parser] rows= 51 items= 50Magnet çözme başarılıysa:
[flaresolverr] magnet fetch 17175383
[cache] magnet stored 17175383Warm başarılıysa:
[warm] query=warm duration=2s state=WARM cacheBypassed=trueİlk açılışta Cloudflare challenge varsa şu şekilde görülebilir:
[warm] query=warm duration=71s state=COLD_OR_CHALLENGE cacheBypassed=trueGerçek Kullanımda Sonarr Akışı
Gerçek testte Sonarr tarafında örneğin Squid Game için sezon aramaları yapıldığında Prowlarr üzerinden bu proxy’ye istek gönderildi. Sonarr loglarında arama şu şekilde görünebilir:
Searching indexers for [Squid Game : S02]
Searching indexers for [Squid Game : S02E04]Bu Sonarr’ın kendi iç gösterimidir. Proxy tarafında ise bu sorgular EXT’ye şu şekilde gönderilir:
Squid Game S02
Squid Game S02E04Bu sayede karakteri veya sezon/bölüm kalıbı yüzünden arama kalitesi bozulmaz. Sonarr uygun release’i seçtiğinde proxy magneti çözer ve qBittorrent’e gönderilmesini sağlar.
Örnek başarılı akış:
Sonarr arama yapar
Prowlarr Generic Torznab indexer’a gider
EXT Torznab Proxy EXT’de arama yapar
Sonuçlar Torznab RSS olarak döner
Sonarr release kararını verir
Magnet çözülür
qBittorrent’e gönderilirGüncelleme
Yeni image yayınlandığında güncellemek için:
docker compose
docker compose up -d –force-recreate
Sonra health kontrolü:
health check
Dikkat Edilmesi Gerekenler
Bu proje teknik olarak Prowlarr uyumlu bir Torznab proxy servisidir. Kullanım sorumluluğu kullanıcıya aittir. Bulunduğunuz ülkenin yasal düzenlemelerine ve telif haklarına uygun hareket etmeniz gerekir.
Ayrıca public internete açık şekilde yayınlamanızı önermem. Servisi yerel ağda, güvenilir ortamda çalıştırmak daha doğru olur. API key kullansa da bu tarz servisler mümkün olduğunca dış dünyaya kapalı tutulmalıdır.
Sonuç
EXT Torznab Proxy ile Prowlarr’a custom YAML dosyası eklemeden, web arayüzlü ve FlareSolverr destekli bir Generic Torznab indexer kazandırmış olduk.
Benim kullanım senaryomda Sonarr üzerinden yapılan aramalar Prowlarr’a gidiyor, Prowlarr Generic Torznab olarak bu proxy’ye bağlanıyor, proxy EXT tarafında aramayı yapıyor, sonuçları Torznab formatına çeviriyor ve seçilen release magnet olarak qBittorrent’e gönderiliyor.
Buradaki en büyük artılardan biri de EXT’nin arka tarafta yaklaşık 15 farklı torrent sitesini indeksleyen yapısı. Yani tek bir Prowlarr indexer tanımıyla çok daha geniş bir arama havuzuna erişmiş oluyorsunuz. Bu da özellikle Sonarr/Radarr gibi otomatik arama yapan sistemlerde ciddi avantaj sağlıyor.
Kısaca:
Custom YAML yok
Harici warm cron yok
Prowlarr FlareSolverr etiketi yok
Web arayüz var
Docker image hazır
Generic Torznab olarak çalışıyor
Tek aramayla EXT’nin çoklu indeks havuzundan sonuç geliyorProje bağlantısı:
https://github.com/huseyincig/extto-torznab-proxy
Docker image:
ghcr.io/huseyincig/extto-torznab-proxy:latest