Skip to main content

Search torrents from multiple websites via the CLI

Project description

Torrent Hound

CI PyPI version Python versions License

A terminal-first torrent search CLI. Type a query, get ranked results from multiple trackers in one table, then copy a magnet link or open the torrent page with a single keystroke.

$ torrent-hound ubuntu
                                          PirateBay
┏━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━┳━━━━┳━━━━┳━━━━━━┓
┃ No ┃ Torrent Name                                         ┃      Size ┃  S ┃  L ┃  S/L ┃
┡━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━╇━━━━╇━━━━╇━━━━━━┩
│ 1  │ ubuntu-24.04.1-desktop-amd64.iso                     │  5.78 GiB │ 40 │  2 │ 20.0 │
│ 2  │ Ubuntu 22.04 LTS                                     │   3.4 GiB │ 32 │  1 │ 32.0 │
│ …  │                                                      │           │    │    │      │
└────┴──────────────────────────────────────────────────────┴───────────┴────┴────┴──────┘

Enter command : c1
Magnet link copied to clipboard!

Sources

Source Content Method
The Pirate Bay General HTML scrape, mirror fallback
YTS Movies JSON API, mirror fallback
EZTV TV shows JSON API via IMDB lookup

All sources are searched in parallel.

Requirements

  • Python 3.9+
  • Runtime dependencies: beautifulsoup4, requests, pyperclip, rich, platformdirs, tomli_w, argcomplete

Install

pipx install torrent-hound          # recommended — isolated venv, auto-PATH
pip install torrent-hound           # or plain pip

Pre-built standalone binaries (no Python required) for Linux / macOS / Windows are on the Releases page.

From source:

git clone https://github.com/baddymaster/torrent-hound.git
cd torrent-hound
pip install -e ".[dev]"             # installs deps + pytest + ruff

Shell completion

Torrent Hound uses argcomplete for tab-completion of top-level flags. To enable, add one line to your shell config:

bash (~/.bashrc):

eval "$(torrent-hound --print-completion bash)"

zsh (~/.zshrc):

autoload -U compinit && compinit
eval "$(torrent-hound --print-completion zsh)"

Restart your shell, then torrent-hound --<TAB> cycles through flags.

Note: Completion only works when installed via pip / pipx. The standalone binary from the GitHub Releases page doesn't expose the Python entry point that argcomplete hooks into.

Usage

torrent-hound ubuntu

Results render as a table; enter a command at the prompt.

Command Action
m<n> Print the magnet link for result <n>
c<n> Copy the magnet link to clipboard
cs<n> Copy the magnet and open Seedr.cc
rd<n> Debrid via Real-Debrid and dispatch via configured action (requires token)
d<n> Hand the magnet to your default torrent client
o<n> Open the torrent page in your default browser
p Re-print the results table
s Enter a new query and search again
r Repeat the last search (cached sources reused; failed sources retry)
u Show the source URLs used for the current results
h Show the help menu
q Quit

Scripting mode

torrent-hound --json ubuntu | jq '.tpb.results["0"].magnet'

--json emits a single valid JSON document to stdout and exits.

Development

pip install -e ".[dev]"
pytest tests/

Tests run fully offline — parser fixtures are captured HTML, network calls are mocked.

Real-Debrid integration

Torrent Hound can send a selected torrent to Real-Debrid and hand the resulting direct link to your download manager.

Setup

One-command interactive setup:

torrent-hound --configure-rd

Prompts for your API token (get one at real-debrid.com/apitoken) and the action to run against returned direct links, then writes them to the config file with restrictive permissions.

Alternatively, set RD_TOKEN as an env var for ad-hoc use without saving anything:

export RD_TOKEN="..."

Action modes

Mode What happens with the direct link(s)
clipboard (default) Copied to clipboard. Multiple links are joined with newlines.
print Printed to stdout.
browser Opened in your default browser (works without a separate download manager).
downie Sent to Downie 4 via its downie:// URL scheme (macOS).

Convenience flags

torrent-hound --configure-rd      # interactive setup (token + action)
torrent-hound --config-path       # print the resolved config file path
torrent-hound --user-status       # show RD account info (premium, expiration, points)
torrent-hound --revoke-rd-token   # invalidate the current token on RD

Config file

Path: ~/Library/Application Support/torrent-hound/config.toml (macOS) / ~/.config/torrent-hound/config.toml (Linux) / %APPDATA%\torrent-hound\config.toml (Windows). Managed by --configure-rd, but the format is plain TOML if you ever want to edit it directly:

[real_debrid]
token  = "XXXXXXXXXXXXXXXXXXXXXXXXXXXX"
action = "downie"

Usage

After a search, type rd<n> (e.g. rd3). The flow submits the torrent to RD, waits for the hoster links, then runs your configured action. Multi-file torrents open an interactive file picker on the first invocation so you can choose exactly what to debrid.

If RD is still processing (common for larger or uncached torrents), you'll see a short "run again in a moment" message — re-running rd<n> picks up where it left off without re-prompting the picker.

Troubleshooting

  • Real-Debrid rejected the token — run torrent-hound --configure-rd to enter a fresh one.
  • Connectivity errors (DNS lookup failed, block page, geo-block) — your ISP / network / proxy is filtering the RD API. Try a VPN or a DoH resolver (1.1.1.1, 8.8.8.8).
  • Anything else — run torrent-hound --user-status to check your account. Specific error messages reference RD's documented error_code values and link to what to do.

Troubleshooting

  • SSL handshake errors: see these Stack Overflow answers for common fixes.

  • [PirateBay] Error : All known mirrors returned no results or were unreachable: every TPB domain in the fallback chain is blocked or down. Add a known-working mirror to TPB_DOMAINS at the top of torrent-hound.py.

  • Blocked by Cloudflare captcha: some sources serve a CF challenge that requires a real browser.

Disclaimer

This software is provided as-is, with no warranty of any kind. It is intended for discovering legally-distributable content and is not intended to be used for downloading, distributing, or facilitating access to copyrighted material without authorisation. You are responsible for complying with the laws of your jurisdiction.

License

AGPL-3.0 — see LICENSE.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

torrent_hound-2.6.1.tar.gz (85.4 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

torrent_hound-2.6.1-py3-none-any.whl (36.0 kB view details)

Uploaded Python 3

File details

Details for the file torrent_hound-2.6.1.tar.gz.

File metadata

  • Download URL: torrent_hound-2.6.1.tar.gz
  • Upload date:
  • Size: 85.4 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for torrent_hound-2.6.1.tar.gz
Algorithm Hash digest
SHA256 3c9189320fcfbd6d7195a5a94f7c4e970502fb16ccf222555ebe62f0fe9ef906
MD5 4274bd1d259e90c712b2feb0931e1784
BLAKE2b-256 bf6eeb45f770af6ad86dce7f0725a98b433a7edf9933727634e2320888f4d923

See more details on using hashes here.

Provenance

The following attestation bundles were made for torrent_hound-2.6.1.tar.gz:

Publisher: publish.yml on baddymaster/torrent-hound

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file torrent_hound-2.6.1-py3-none-any.whl.

File metadata

  • Download URL: torrent_hound-2.6.1-py3-none-any.whl
  • Upload date:
  • Size: 36.0 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for torrent_hound-2.6.1-py3-none-any.whl
Algorithm Hash digest
SHA256 973388aacba60694c861b7f8f5a9f863f8ac992ecbc3b83e19dadc3ddedf9141
MD5 87cfe3f15b88ef3385423ebc90e62b8b
BLAKE2b-256 ad1b4cba8ee60f305736213a8237761ef67e263f544d346bfae5e2fe902b127d

See more details on using hashes here.

Provenance

The following attestation bundles were made for torrent_hound-2.6.1-py3-none-any.whl:

Publisher: publish.yml on baddymaster/torrent-hound

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page