All apps · 0 apps
Prunerr
Docker app from helliott20's Repository
Overview
Prunerr is a media library cleanup and management tool designed to work with Plex, Jellyfin or Emby, plus Sonarr and Radarr. Automatically reclaim disk space by identifying and removing unwanted media based on customizable rules.
Features:
- Smart rules engine: Create flexible rules based on watch status, age, file size, resolution, and more
- Automatic cleanup: Schedule scans to automatically flag and remove unwatched media
- Plex, Jellyfin and Emby: Pulls library data and watch history directly from whichever you use
- Tautulli and Tracearr integration: Advanced watch history analysis for accurate play tracking (Plex only)
- Sonarr and Radarr integration: Intelligently removes media through your *arr stack
- Seerr integration: Tracks who requested content and optionally resets requests
- Grace periods: Configurable retention periods before items are deleted
- Deletion queue: Review and approve flagged items before removal
- Discord notifications: Get notified about cleanup actions
- Storage trends: Track your library size and space reclaimed over time
- Modern dashboard: Real-time overview of your library with stats and recommendations
All service connections are configured through the web UI — no config files needed.
Readme
View on GitHub
Intelligent media library cleanup for Plex, Sonarr, and Radarr
Wiki • Install • API • Unraid Forum
If you run a media server, you know the pain. Your library keeps growing, nobody watches half of it, and you're constantly running out of disk space. Prunerr sits between your media server and your *arr apps and figures out what's worth keeping.
Works with Plex, Jellyfin and Emby.
You set up rules like "delete movies nobody's watched in 6 months that are over 20GB" and Prunerr handles the rest. Everything goes through a deletion queue first, so nothing gets removed without you knowing about it.
▶ 20-second overview: a full disk, a rule in plain English, a queue with a grace period, and the space coming back.
Features
Rules Engine — 28 condition fields across quality, ratings, watch history, collections, and metadata. Three ways to build rules: templates, natural language, or a full nested condition editor with live preview. More →
Collections — Syncs movie collections from Radarr. Protect entire collections to prevent cleanup, or queue them for bulk deletion. More →
Smart Deletion — Grace periods, four deletion actions (unmonitor, delete files, full removal, etc.), Seerr request resets, and a review queue. Nothing gets deleted without your say-so. More →
Dashboard — Library stats, storage trends, service health monitoring, upcoming deletions, and recommendations at a glance.
Plex, Jellyfin or Emby — Pick your media server in Settings, or set
MEDIA_SERVER_TYPE. Rules, scanning and deletion work the same whichever you use. More →Per-User Watch History — Read directly from your media server, or integrate Tautulli or Tracearr (both Plex-only) to track who watched what. Build rules around specific users' watching habits.
API — Full REST API with key authentication for scripts, automation, and mobile apps like nzb360. More →
Quick Start
docker run -d \
--name prunerr \
-p 3000:3000 \
-v /path/to/data:/app/data \
-e PLEX_URL=http://your-plex-server:32400 \
-e PLEX_TOKEN=your-plex-token \
-e SONARR_URL=http://your-sonarr:8989 \
-e SONARR_API_KEY=your-sonarr-api-key \
-e RADARR_URL=http://your-radarr:7878 \
-e RADARR_API_KEY=your-radarr-api-key \
helliott20/prunerr:latest
For Jellyfin or Emby, swap the two Plex variables for:
-e MEDIA_SERVER_TYPE=jellyfin \
-e JELLYFIN_URL=http://your-server:8096 \
-e JELLYFIN_API_KEY=your-api-key \
Use MEDIA_SERVER_TYPE=emby for Emby; both share the JELLYFIN_* variables. On Jellyfin, install the
Playback Reporting plugin for full watch history — without it Jellyfin only keeps the most recent play
per item, so repeat views collapse into one.
Prunerr is also packaged for the places self-hosters actually install things:
| Platform | How |
|---|---|
| Docker Compose | docker-compose.yml in this repo |
| Unraid | Community Applications store — search "Prunerr" |
| CasaOS | App Store, or import packaging/casaos via Custom Install |
| TrueNAS | Apps → Install via YAML, using packaging/truenas |
| Portainer | App template — see packaging/portainer |
See the Installation guide for full details.
Beta channel
helliott20/prunerr:beta is rebuilt from the beta branch as changes land, if
you want to try features before they are released. On Unraid, pick Beta from
the template's branch list; elsewhere, point the image at :beta instead of
:latest. Back up your database first — beta builds can include schema
migrations, and downgrading is not supported.
Integrations
| Service | Purpose | Required |
|---|---|---|
| Plex / Jellyfin / Emby | Media server — library data, watch status | One required |
| Sonarr | TV show management | Recommended |
| Radarr | Movie management, collections | Recommended |
| Tautulli / Tracearr | Per-user watch history (Plex only) | Optional |
| Seerr | Request management | Optional |
| Unraid | Server monitoring | Optional |
| Discord | Notifications | Optional |
Mobile
Prunerr works as a custom web app in nzb360 on Android, or in any mobile browser. The UI is fully responsive. See the Mobile Access guide.
Documentation
Full docs are in the Wiki:
- Installation — Docker, Compose, Unraid
- Configuration — Environment variables and service connections
- Rules Engine — Building and managing rules
- Collections — Protection and bulk actions
- Deletion Management — Queue, grace periods, actions
- API Reference — Endpoints and authentication
- Troubleshooting — Common issues
Privacy
Prunerr sends one thing outside your network: once a day, a random ID and its version number, so there's some idea of how many installs are out there. That's it — no library data, no settings, no credentials, no hostname, and no IP address is stored.
Turn it off in Settings → System → Privacy, or set
TELEMETRY_ENABLED=false. Turning it off deletes the random ID.
The exact payload is shown in the UI, and the server that receives it is open
source in packaging/telemetry. Details:
docs/telemetry.md.
Support
- Unraid Forum: Support Thread
- GitHub Issues: Report a Bug
- Docker Hub: helliott20/prunerr
License
MIT License. See LICENSE.
Categories
Download Statistics
Total Downloads Over Time
Related apps
Explore more like this
Explore allLinks
Details
helliott20/prunerr:latestRuntime arguments
- Web UI
http://[IP]:[PORT:3000]/- Network
bridge- Shell
sh- Privileged
- false
Template configuration
Port for the Prunerr web interface
- Target
- 3000
- Default
- 3000
- Value
- 3000
Path to store Prunerr database and configuration
- Target
- /app/data
- Default
- /mnt/user/appdata/prunerr
- Value
- /mnt/user/appdata/prunerr
User ID for file permissions
- Default
- 99
- Value
- 99
Group ID for file permissions
- Default
- 100
- Value
- 100
Once a day Prunerr sends a random ID and its version number, so there is some idea of how many installs are running. Nothing else is sent: no library data, no settings, no credentials, no hostname, and no IP address is stored. Set to false to disable it completely.
- Target
- TELEMETRY_ENABLED
- Default
- true
- Value
- true