All apps · 0 apps
PlexHarvester
Docker app from grtgbln's Repository
Overview
Readme
View on GitHubPlexHarvester
PlexHarvester is a self-hosted web application that compares your local Plex library against shared remote servers, indexes FTP sources for automatic downloading, and manages MKV audio tracks — all from a clean web interface.
Features
- Library Comparison — Compare movies and TV shows between your local Plex server and any shared remote server, with smart cross-language title matching (e.g. EN vs FR titles)
- FTP Integration — Index multiple FTP servers, queue downloads automatically, and route content to the right Plex library folder
- MKV Processing — Remux video files with MKVToolNix to set the correct default audio track and fix language metadata per track
- Snapshots — Save library snapshots and diff them over time to track additions and removals
- Multilingual — Full French and English interface
- Real-time Logs — Live log viewer with SSE streaming and configurable retention
- Auto-download scheduling — Time-windowed automatic FTP downloads with daily limits and skip days
Quick Start
Docker Compose
services:
plexharvester:
image: misterkqc/plexharvester:latest
container_name: plexharvester
ports:
- "5000:5000"
volumes:
- /mnt/user/appdata/plexharvester:/config
environment:
TZ: America/Montreal
SECRET_KEY: "your-random-secret-key"
restart: unless-stopped
Then open http://YOUR_IP:5000 in your browser.
Docker Run
docker run -d \
--name plexharvester \
-p 5000:5000 \
-e SECRET_KEY="your-random-secret-key" \
-e TZ="America/Montreal" \
-v /mnt/user/appdata/plexharvester:/config \
--restart unless-stopped \
misterkqc/plexharvester:latest
Unraid Installation
Option 1 — Community Applications (recommended)
- In Unraid, open Apps (Community Applications)
- Search for PlexHarvester
- Click Install — all fields are pre-filled, just enter your
SECRET_KEY
Option 2 — Template URL
- In Unraid → Docker → Add Container
- At the very top of the page, find the "Template URL" field
- Paste the URL below and click the arrow button next to it:
https://raw.githubusercontent.com/MisterK-Qc/plexharvester/main/unraid-template/plexharvester.xml - All fields pre-fill automatically — enter your
SECRET_KEYand click Apply
Option 3 — Via SSH (saves template permanently)
Run this once in your Unraid terminal:
wget -O /boot/config/plugins/dockerMan/templates-user/plexharvester.xml \
https://raw.githubusercontent.com/MisterK-Qc/plexharvester/main/unraid-template/plexharvester.xml
Then: Docker → Add Container → select PlexHarvester under User Templates
Environment Variables
| Variable | Required | Default | Description |
|---|---|---|---|
SECRET_KEY |
No | (auto-generated) | Flask secret key used to sign and encrypt session cookies. If not set, a key is auto-generated on first start and saved to /config/secret_key.txt. |
TZ |
No | America/Montreal |
Container timezone |
PLEX_COMPARE_CONFIG_DIR |
No | /config |
Internal config directory (do not change) |
Volumes
| Container path | Description |
|---|---|
/config |
Required. Persistent storage for config, cache, and logs. |
First Launch
- Open http://YOUR_IP:5000
- Log in with your Plex account — the token is retrieved automatically
- Select the remote server to compare against
- Go to Config (⚙️) to set up:
- TMDB API key (optional)
- FTP servers (optional)
- Default audio language for MKV processing
- Interface language (French / English)
Configuration
All settings are managed through the web interface under Config. The configuration is stored in /config/config.json.
See config.example.json for a reference of all available options.
MKV Processing
MKVToolNix is included in the Docker image — no separate installation required. The default binary path is /usr/bin.
Features:
- Auto-detect audio track languages from file metadata
- Set default audio track based on your preferred language
- Override language per track directly from the UI
- Add custom language codes to the dropdown list
Architecture
Built with:
- Python 3.12 + Flask — Web framework
- PlexAPI — Plex server communication
- Gunicorn — WSGI server (1 worker, 4 threads)
- MKVToolNix — MKV remuxing and metadata editing
app/
routes/ Flask blueprints (dashboard, config, FTP, MKV, auth)
services/ Business logic (Plex, FTP, MKV, cache, config)
templates/ Jinja2 HTML templates
languages/ i18n files (fr.json, en.json)
static/ CSS, favicon
Building from Source
git clone https://github.com/MisterK-Qc/plexharvester.git
cd plexharvester
docker build -t plexharvester:latest .
Code changes in
app/andrun.pyonly require a container restart when using bind mounts — no rebuild needed.
License
MIT — see LICENSE
Categories
Download Statistics
Related apps
Explore more like this
Explore allDetails
misterkqc/plexharvester:latestRuntime arguments
- Web UI
http://[IP]:[PORT:5000]/- Network
bridge- Shell
bash- Privileged
- false
Template configuration
Port for the PlexHarvester web interface.
- Target
- 5000
- Default
- 5000
- Value
- 5000
Persistent storage for configuration, cache, and logs.
- Target
- /config
- Default
- /mnt/user/appdata/plexharvester
- Value
- /mnt/user/appdata/plexharvester
Flask secret key for session security. If left empty, a key is auto-generated and saved to /config/secret_key.txt on first start.
Internal path for configuration files. Do not change unless you have a specific reason.
- Target
- PLEX_COMPARE_CONFIG_DIR
- Default
- /config
- Value
- /config