Pyackett
A Python clean room implementation of a Torznab-compatible indexer proxy. Works as a standalone server (Sonarr/Radarr compatible) and as an importable Python library.
Loads Jackett's 550+ YAML indexer definitions directly. Includes browser-grade TLS fingerprinting and automatic Cloudflare Turnstile bypass.
Install
pip install pyackett
# With Cloudflare challenge support (adds Camoufox browser):
pip install pyackett[cloudflare]
Quick Start
As a server
# Download definitions from Jackett GitHub and start the server
pyackett --from-github jackett --port 9117
# With a SOCKS5 proxy
pyackett --from-github jackett --proxy socks5://user:pass@host:1080
# With local definitions
pyackett -d /path/to/definitions
Then point Sonarr/Radarr at http://localhost:9117/api/v2.0/indexers/{id}/results/torznab/ with the API key shown in the web UI.
As a Python library
import asyncio
from pyackett import Pyackett
async def main():
pk = Pyackett(proxy="socks5://user:pass@host:1080")
pk.load_definitions_from_github(source="jackett")
await pk.configure_indexer("1337x", {})
await pk.configure_indexer("therarbg", {})
results = await pk.search("breaking bad", categories=[5000])
for r in results:
print(f"{r.title} | S:{r.seeders} | {r.size}")
await pk.close()
asyncio.run(main())
# Synchronous wrapper for simple scripts
pk = Pyackett()
pk.load_definitions_from_github()
pk.configure_indexer("therarbg", {})
results = pk.search_sync("ubuntu")
Features
Torznab API
- Full Torznab XML API compatible with Sonarr, Radarr, Prowlarr, qBittorrent
- TorrentPotato JSON support
- Capabilities endpoint per indexer
- Multi-indexer search (
/indexers/all/results/torznab/)
Cardigann YAML Engine
- Loads all 550+ Jackett YAML indexer definitions
- Go-style template engine (
{{ if }},{{ range }},{{ eq }}, etc.) - CSS selector extraction (BeautifulSoup) and JSONPath
- 25+ filter functions (replace, dateparse, fuzzytime, regexp, etc.)
- 6 login methods (form, cookie, header/API key, GET, POST, captcha)
HTTP Client
- curl_cffi with Chrome/Firefox TLS fingerprint impersonation
- Built-in SOCKS5/SOCKS4/HTTP proxy support
- Request delay per indexer definition
- Automatic Cloudflare detection and bypass
Cloudflare Bypass (optional)
- Automatic detection of Cloudflare 403/503 challenges
- Camoufox (anti-detect Firefox) solves Turnstile challenges headlessly
- Local HTTP CONNECT proxy bridges SOCKS5 auth for browsers
- Firefox TLS fingerprint matching for cf_clearance cookie reuse
- Cookies cached per domain for the session
- Graceful fallback when Camoufox not installed (logs warning, skips CF sites)
Web UI
- Bootstrap 5 dashboard at
http://localhost:9117/ - Browse and filter all 550+ available indexers
- Dynamic configuration forms generated from YAML settings
- Manual search with results table
- Per-indexer Torznab URL copy, edit, test, delete
CLI Options
pyackett [OPTIONS]
--host HOST Bind address (default: 0.0.0.0)
-p, --port PORT Port (default: 9117)
--config-dir DIR Config/cache directory
-d, --definitions-dir DIR Local YAML definitions directory
--from-github {jackett,prowlarr}
Download definitions from GitHub
--branch BRANCH GitHub branch (default: master)
--update-definitions Force re-download definitions
--proxy URL Proxy (socks5://host:port, http://host:port)
--api-key KEY API key (auto-generated if not set)
--log-level {DEBUG,INFO,WARNING,ERROR}
Architecture
pyackett/
core/
models.py - ReleaseInfo, TorznabQuery, IndexerDefinition
manager.py - IndexerManager (load, configure, concurrent search)
http.py - curl_cffi client + Camoufox CF solver
cache.py - TTL result cache
categories.py - Torznab category mappings
definitions_fetcher.py - GitHub tarball downloader
engine/
cardigann.py - YAML definition interpreter
template.py - Go-style template engine
filters.py - 25+ data transformation filters
selectors.py - CSS + JSONPath extraction
api/
torznab.py - Torznab XML generation + query parsing
server/
app.py - FastAPI server + web UI
pyackett.py - Public library API
cli.py - CLI entry point
Development
git clone <repo>
cd pyackett
uv sync
uv run pytest tests/ -v
License
MIT
Metadata
Release files for pyackett 0.4.0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| pyackett-0.4.0.tar.gz | 183.4 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| pyackett-0.4.0-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 245.1 kB
Release files / pyackett-0.4.0.tar.gz
| Download URL | pyackett-0.4.0.tar.gz |
|---|---|
| Size | 183.4 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
1948cc13046380f6d04091e8bd51b8fe17b730bcada24397f2d71251d44b0ae8
|
|
BLAKE2b-256 checksum How to use checksums |
4366cbfa921919d6d0a532d4d3136de8c4343e01723039601b41a2f9590d8c90
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/6.1.0 CPython/3.13.12
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Jul 14, 2026.
Transparency logRelease files / pyackett-0.4.0-py3-none-any.whl
| Download URL | pyackett-0.4.0-py3-none-any.whl |
|---|---|
| Size | 61.8 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
1290839d56a1f7062aa6fa552c4d53bcb80d90276e5f197e91f2482cfbad515e
|
|
BLAKE2b-256 checksum How to use checksums |
763a34814a82dff4ad20167cd59005a170dd4fc9cdd65e82de570055f2a90fe6
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/6.1.0 CPython/3.13.12
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Jul 14, 2026.
Transparency log