PlexHarvester

PlexHarvester

Docker app from grtgbln's Repository

Overview

PlexHarvester compares your local Plex library against shared remote servers, indexes FTP sources for automatic downloading, and provides MKV audio track management via MKVToolNix. Includes library snapshots, multilingual interface (FR/EN), and a real-time log viewer.

PlexHarvester

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.

Docker Pulls Docker Image Size GitHub release License: MIT


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)

  1. In Unraid, open Apps (Community Applications)
  2. Search for PlexHarvester
  3. Click Install — all fields are pre-filled, just enter your SECRET_KEY

Option 2 — Template URL

  1. In Unraid → DockerAdd Container
  2. At the very top of the page, find the "Template URL" field
  3. Paste the URL below and click the arrow button next to it:
    https://raw.githubusercontent.com/MisterK-Qc/plexharvester/main/unraid-template/plexharvester.xml
    
  4. All fields pre-fill automatically — enter your SECRET_KEY and 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

  1. Open http://YOUR_IP:5000
  2. Log in with your Plex account — the token is retrieved automatically
  3. Select the remote server to compare against
  4. 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/ and run.py only require a container restart when using bind mounts — no rebuild needed.


License

MIT — see LICENSE

Install PlexHarvester on Unraid in a few clicks.

Find PlexHarvester in Community Apps on your Unraid server, review the template, and click Install. Unraid handles the Docker app or plugin setup from the published template.

Open the Apps tab on your Unraid server Search Community Apps for PlexHarvester Review the template variables and paths Click Install

Download Statistics

1,025
Total Downloads

Related apps

Explore more like this

Explore all

Details

Repository
misterkqc/plexharvester:latest
Last Updated2026-04-12
First Seen2026-04-24

Runtime arguments

Web UI
http://[IP]:[PORT:5000]/
Network
bridge
Shell
bash
Privileged
false

Template configuration

Web UI PortPorttcp

Port for the PlexHarvester web interface.

Target
5000
Default
5000
Value
5000
Config DirectoryPathrw

Persistent storage for configuration, cache, and logs.

Target
/config
Default
/mnt/user/appdata/plexharvester
Value
/mnt/user/appdata/plexharvester
SECRET_KEYVariable

Flask secret key for session security. If left empty, a key is auto-generated and saved to /config/secret_key.txt on first start.

Config Path (internal)Variable

Internal path for configuration files. Do not change unless you have a specific reason.

Target
PLEX_COMPARE_CONFIG_DIR
Default
/config
Value
/config