Simple, effective, automatic poster management for Plex https://github.com/primetime43/PosterPilot
1.6K
Automatic poster management for Plex. Scans your libraries, scores available poster options, and applies the best one — so you don't have to manually pick posters one by one.
I just wanted to fix broken and ugly posters across my Plex libraries without clicking through every single item. Most Plex metadata managers are way overcomplicated for this — they try to do everything, rely on local file scanning and matching, and most don't even set posters directly in Plex. PosterPilot does one thing well: it connects straight to your Plex server through the API, finds items with better poster options available, and lets you apply them. No external databases, no file matching, no YAML configs. Just sign in, scan, review, and apply.
git clone https://github.com/primetime43/PosterPilot.git
cd PosterPilot
python -m venv .venv
.venv\Scripts\activate # Windows
pip install -r requirements.txt
python run.py
Opens at http://127.0.0.1:8888. On Windows you can also just double-click start.bat.
Available on Docker Hub.
services:
posterpilot:
image: primetime43/posterpilot:latest
container_name: posterpilot
ports:
- "8888:8888"
volumes:
- ./data:/app/data
environment:
- PLEX_URL= # optional
- PLEX_TOKEN= # optional
restart: unless-stopped
Or build locally:
docker compose up -d
Access at http://localhost:8888.
Download the latest PosterPilot-x.x.x.exe from Releases. The EXE launches the web server and opens your browser automatically.
To build yourself, run build.bat or pyinstaller posterpilot.spec.
All settings are configurable from the Settings page in the UI, organized into tabs:
| Tab | What it controls |
|---|---|
| Connection | Plex server URL, token, timeout |
| General | Host, port, log level, dry run, skip locked, scan retention |
| Scoring | Weights, provider priority, aspect ratio, landscape penalty |
| Libraries | Whitelist and blacklist library filters |
| Cache | Thumbnail caching toggle and expiry |
| Ignore List | Items to permanently skip during scans |
Non-sensitive settings are saved to data/config.toml. Sensitive data (Plex token, server URL) is encrypted using Fernet (AES-128-CBC + HMAC-SHA256) and stored in data/config.enc. The encryption key is derived from your machine's identity — no key files to manage.
For Docker deployments, you can override settings with environment variables:
| Variable | Description | Default |
|---|---|---|
PLEX_URL | Plex server URL | (empty) |
PLEX_TOKEN | Plex token | (empty) |
PLEX_TIMEOUT | API timeout in seconds | 30 |
POSTERPILOT_HOST | Bind address | 0.0.0.0 |
POSTERPILOT_PORT | Web server port | 8888 |
POSTERPILOT_DRY_RUN | Dry run mode | true |
POSTERPILOT_LOG_LEVEL | Log level | INFO |
POSTERPILOT_DATA_DIR | Data directory path | ./data |
Posters are ranked automatically using:
A change is only recommended when the best candidate scores meaningfully higher than the current poster. All scoring weights are adjustable in Settings.
Content type
Image
Digest
sha256:a27807bdf…
Size
73 MB
Last updated
3 months ago
docker pull primetime43/posterpilot