Features

A complete breakdown of every module and integration in Plexarr V2.1.

Torrent Search

Query multiple providers simultaneously. Results merge, deduplicate, and sort by seed count. No CORS limits thanks to the built-in proxy.

graph LR A[Search Query] --> B{Nyaa.si} A --> C[AnimeTosho] A --> D[YTS.mx] A --> E[EZTV] A --> F{TorrentGalaxy} A --> G{1337x.to} B --> H[Results] C --> H D --> H E --> H F -->|CF Solver| H G -->|CF Solver| H style F fill:#333,stroke:#ff4444 style G fill:#333,stroke:#ff4444
ProviderTypeCategoriesCloudflare
Nyaa.siAnimeAll, Anime, Audio, Literature, Live Action, Pictures, Software, GamesNo
AnimeToshoAnimeAllNo
YTS.mxMovies720p, 1080p, 3D, 2160pNo
EZTVTVTV EpisodesNo
TorrentGalaxyGeneralMovies, TV, Anime, Apps, Games, Music, Books, OtherYes
1337x.toGeneralMovies, TV, Anime, Apps, Games, MusicYes

tips_and_updates Extensible

Subclass BaseProvider in modules/torrent_search.py and register your new scraper. The UI will auto-populate it. Cloudflare-protected providers are only listed when the solver is enabled.

Metadata & Enrichment

Torrent titles are messy. Plexarr queries TMDB, Jikan, and TVDB to resolve clean titles, years, seasons, and episode numbers before renaming.

SourcePurposeKey RequiredCover Art
TMDBMovies + TV showsFree API keyYes
Jikan v4Anime (MyAnimeList)NoneYes
TVDBSeason + episode metadataPaid subscriptionNo

Batch Download Queue

Select multiple results from search and add them all at once. The batch queue tracks status, supports up to 50 items, and auto-starts processing.

Auto Renamer & Sorter

guessit parses filenames. Regex strips 100+ release tags. Files land in Plex-friendly paths.

Input:  [HorribleSubs] Attack on Titan - 01 [1080p].mkv
Output: Anime/Attack on Titan/Season 01/Attack on Titan - S01E01.mkv

Input:  Movie.Name.2024.1080p.BluRay.x264-YTS.mp4
Output: Movies/Movie Name (2024)/Movie Name (2024).mp4

Supported outputs: TV Shows, Movies, Anime, Music, and an Other catch-all. Batch sort entire directories recursively.

Watch Folder Auto-Categorize

Drop files into a monitored folder and Plexarr will automatically detect the media type, strip release tags, and move them to the correct Plex library path.

How It Works

  1. Enable watch_folder.enabled in Settings or start the watcher via API.
  2. Drop media files into the configured watch folder (default: same as Downloads).
  3. Plexarr detects the type: TV (episode patterns), Movie (year in title), Anime (group tags, short episodes), Music (audio extensions).
  4. Files are renamed to Plex format and moved to the matching library root.

API

POST /api/categorize
Content-Type: application/x-www-form-urlencoded

path=/media/plex/Downloads/movie.mkv

POST /api/categorize/batch
Content-Type: application/json

{ "directory": "/media/plex/Downloads/dropbox" }

POST /api/watch/start
Content-Type: application/json

{ "watch_dir": "/media/plex/Downloads/dropbox", "interval": 5, "name": "main" }

POST /api/watch/stop
Content-Type: application/json

{ "name": "main" }

GET /api/watch/status?name=main
GET /api/watch/list

Supported Types

TypeDetectionDestination
TVEpisode patterns (S01E02, Season, Episode)TV Shows/Show/Season/Show - S01E02.ext
MovieYear in title, no episode markersMovies/Title (Year)/Title (Year).ext
AnimeAnime group tags, short episode formatAnime/Title/Season/Title - S01E02.ext
MusicAudio extensions (.mp3, .flac, .m4a, .ogg, .wav)Music/Artist/Album/Track.ext

tips_and_updates Tip

The watcher runs in a background thread. It checks the folder every N seconds (default 5) and processes only new files. Existing files at startup are ignored to avoid re-sorting.

Naming Variations Detector

Detects 100+ known naming group variations including non-standard formats like MediaHub - eng, Pahe.in, and custom variations configurable in settings.

FFmpeg Post-Processing

After downloading or uploading, Plexarr can run FFmpeg to set default English audio and subtitle tracks. Detects language metadata even in non-standard titles. Can strip unwanted languages and keep only configured tracks.

qBittorrent Integration

Full Web API control. Add magnets, pause, resume, delete, and monitor live progress. Categories are mapped to Plex paths automatically.

tv-plex      -> /media/plex/TV Shows
movies-plex  -> /media/plex/Movies
anime-plex   -> /media/plex/Anime

Usenet / SABnzbd / NZBGeek

Full Usenet integration via SABnzbd. Search NZBGeek, queue NZBs, and monitor download progress from the same web UI.

SABnzbd Control

  • View queue and history
  • Add NZB by URL or raw NZB upload
  • Pause / resume individual downloads or the whole queue
  • Delete jobs and release files
  • Speed limit and status checks

NZBGeek Search

Search NZBGeek by query and category. Results include size, age, and group. One-click send to SABnzbd with category mapping.

ProviderTypeKey Required
NZBGeekGeneral / TV / Movies / AnimeAPI key
SABnzbdUsenet downloaderAPI key

tips_and_updates Categories

Map SABnzbd categories to Plex paths in config: sabnzbd.categories_map. Example: tv -> /media/plex/TV Shows, movies -> /media/plex/Movies.

URL / Rapidgator Downloader

Download from direct URLs or Rapidgator. Premium mode uses the Rapidgator API for fast downloads. Free mode is supported but may require captcha.

Windscribe VPN

Control Windscribe VPN from the web UI. Connect, disconnect, check status, and list server locations. Auto-connect on startup is supported.

Cloudflare Solver

Optional Cloudflare bypass for protected sites like TorrentGalaxy and 1337x. Requires cloudscraper package. Not enabled by default.

Discord Integration

Two layers: Webhook notifications and a Doplarr-style bot.

Webhooks

  • Torrent added (title, size, category)
  • Download completed (save path)
  • URL download completed (filename, path, size)
  • FFmpeg processed (audio tracks, subtitle tracks, defaults)
  • Error alerts
  • Upload confirmations
  • Progress summary every 60 seconds
  • Status ping every 5 minutes

Bot Slash Commands

CommandDescription
/statusServer health check
/torrentsList active downloads with progress bars
/requestSearch TMDB/Jikan and show metadata results
/searchDirect torrent search across providers
/libraryPlex activity via Tautulli

Remote View & Control

SocketIO JPEG stream from the server desktop. Click the image to move the mouse. Keyboard input panel for remote typing. Disabled by default.

warning Security

Remote control exposes your desktop. Only enable on trusted LANs. Never expose port 8080 to the internet without a VPN or reverse proxy.

Desktop Client (PyWebView)

A standalone cross-platform desktop application built with PyWebView. No browser required. Runs on Windows, macOS, and Linux.

Features

  • System Tray: Minimize to tray, restore from icon, quick-actions menu.
  • LAN Discovery: Auto-detect Plexarr servers on the local network.
  • Multi-Server Profiles: Save and switch between multiple server URLs.
  • Mini Mode: Compact floating window for quick status checks.
  • Debug Console: Built-in developer console for troubleshooting.
  • Keyboard Shortcuts: Global shortcuts for quick actions.
  • Portable Mode: Run from a USB drive without installation.

Build

cd client/
pip install -r requirements.txt
python main.py

Package with PyInstaller or Nuitka for distribution. See Packing.md for full build instructions.

Prometheus & Grafana

Custom metrics endpoint at /prometheus/metrics. Pre-built dashboard JSON included.

  • plexarr_active_torrents
  • plexarr_download_speed_bytes
  • plexarr_upload_speed_bytes
  • plexarr_torrent_added_total (by provider, category)
  • plexarr_torrent_completed_total (by category)
  • plexarr_uploaded_files_total (by destination)
  • plexarr_search_requests_total (by provider, query_type)
  • plexarr_api_request_duration_seconds (by endpoint, histogram)

CORS Proxy

/proxy?url=... forwards any HTTP request through the server. This allows the client web UI to fetch tracker pages and torrent files without browser CORS restrictions. Add ?cf_bypass=1 to use the Cloudflare solver for a single request.

File Upload & Browser

Drag and drop files from any client into the server. Browse directory trees. Download files back. Path traversal is blocked. Configurable file size limits and extension whitelists.

WiFi Auto-Categorize Upload

Upload files from any phone or laptop on the same WiFi network and Plexarr will automatically detect the media type, rename the file to Plex format, and place it in the correct library folder.

Two Upload Modes

  • Manual upload: Choose destination (TV, Movies, Anime, Music, Downloads) and optionally toggle auto-sort.
  • WiFi auto-categorize: POST to /api/upload/wifi with no destination parameter. The server detects type, strips release tags, renames, and moves the file to the correct Plex path.

Supported Detection

TypeDetectionOutput Path
TVEpisode patterns (S01E02, Season, Episode)TV Shows/Show/Season/Show - S01E02.ext
MovieYear in title, no episode markersMovies/Title (Year)/Title (Year).ext
AnimeAnime group tags, short episode formatAnime/Title/Season/Title - S01E02.ext
MusicAudio extensions (.mp3, .flac, .m4a, .ogg, .wav)Music/Artist/Album/Track.ext

API

POST /api/upload/wifi
Content-Type: multipart/form-data

file: [binary]  # multiple files supported
GET /api/upload/wifi/status

Verbose Logging & Debugger

Structured logging with verbosity levels, debug mode, file output, log rotation, JSON output mode, and performance timers. Enable verbose mode in the Settings tab for detailed console output.