Configuration

All settings, keys, paths, and security reference for Plexarr V2.1.

Config.json

All settings live in config.json next to app.py. The web UI Settings tab exposes all fields live.

KeyDefaultDescription
server.host0.0.0.0Bind address
server.port8080HTTP port
server.debugfalseDebug mode
server.verbosefalseVerbose logging
paths.tv/media/plex/TV ShowsTV library root
paths.movies/media/plex/MoviesMovie library root
paths.anime/media/plex/AnimeAnime library root
paths.music/media/plex/MusicMusic library root
qbittorrent.hosthttp://localhost:8080qBittorrent Web UI URL
qbittorrent.usernameadminqBittorrent login
qbittorrent.passwordadminadminqBittorrent password
tmdb.api_key""TMDB API key
tmdb.fetch_cover_arttrueFetch movie/show posters
tvdb.api_key""TVDB API key (optional)
discord.webhook_url""Discord webhook for notifications
screen_stream.enabledfalseEnable screen capture
remote_control.enabledfalseEnable mouse/keyboard remote
vpn.enabledfalseEnable VPN integration
vpn.providerwindscribeVPN provider
vpn.cli_path/usr/bin/windscribeVPN CLI path
cloudflare_solver.enabledfalseEnable Cloudflare bypass
ffmpeg.enabledtrueEnable FFmpeg post-processing
ffmpeg.default_audio_langengDefault audio language
ffmpeg.default_subtitle_langengDefault subtitle language
ffmpeg.post_process_downloadstrueAuto-process after download
url_downloader.rapidgator.premiumfalseRapidgator premium mode
url_downloader.rapidgator.api_key""Rapidgator API key
batch_download.max_queue50Max batch queue size
naming.variations[...]Custom naming groups to detect
watch_folder.enabledfalseEnable background watch folder
watch_folder.dir""Folder to monitor (default uses downloads)
watch_folder.interval5Poll interval in seconds
watch_folder.auto_starttrueStart watcher on server boot
sabnzbd.enabledfalseEnable SABnzbd integration
sabnzbd.hosthttp://localhost:8080SABnzbd API URL
sabnzbd.api_key""SABnzbd API key
sabnzbd.categories_map{}Category to Plex path mapping
nzbgeek.enabledfalseEnable NZBGeek search
nzbgeek.api_key""NZBGeek API key

Plex Paths

Plexarr expects your media folders to follow standard Plex directory structure. The auto-renamer outputs:

TV Shows/Show Name/Season 01/Show Name - S01E02 - Episode Title.mkv
Movies/Movie Name (Year)/Movie Name (Year).mkv
Anime/Anime Name/Season 01/Anime Name - S01E02.mkv
Music/Artist Name/Album Name/Track Title.mp3

Torrent Providers

Plexarr ships with six built-in search providers. Cloudflare-protected sites are NOT listed by default.

ProviderTypeCloudflareAnime-Only
Nyaa.siAnimeNoYes
AnimeToshoAnimeNoYes
YTS.mxMoviesNoNo
EZTVTVNoNo
TorrentGalaxyGeneralYesNo
1337x.toGeneralYesNo

Enable the Cloudflare solver (cloudflare_solver.enabled) to access protected sites. Requires cloudscraper package.

To add a custom provider, subclass BaseProvider in modules/torrent_search.py and implement search(query, category, limit).

Naming Variations Detector

Plexarr automatically detects and strips 100+ known naming variations and release tags. Built-in groups include:

MediaHub, Pahe.in, HorribleSubs, Erai-raws, SubsPlease, Judas
YTS, YIFY, RARBG, AMZN, NF, Hulu, CR, Funimation, HIDIVE, VRV
Dual Audio, Multi-Sub, ESub, HC, KORSUB, REPACK, PROPER
Extended, UNCUT, Directors Cut, IMAX, Atmos, DV, DoVi, HDR10
1080p, 720p, 4K, UHD, x264, x265, HEVC, AVC, BluRay, WEB-DL
WEBRip, DVDRip, BDRip, HDTV, 10-bit, 8-bit, Lossless

Add custom variations in config.json under naming.variations. The detector handles non-standard formats like MediaHub - eng, Pahe.in, etc.

Security

warning Warning

Plexarr is designed for trusted LAN environments. It does not include authentication out of the box.

  • VPN / Tailscale: Do not expose port 8080 to the internet. Use a VPN for remote access.
  • Reverse Proxy: If exposing, use nginx or Caddy with HTTPS and basic auth.
  • Remote Control: Keep remote_control.enabled off unless needed. It allows full mouse/keyboard access.
  • CORS Proxy: The /proxy endpoint can fetch arbitrary URLs. Restrict access to trusted clients.
  • qBittorrent: Change the default password immediately. Use localhost binding if possible.