Prunerr

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.

Prunerr — Prune what nobody watches. An intelligent media library cleanup tool for your homelab.

Intelligent media library cleanup for Plex, Sonarr, and Radarr

Docker Pulls License Release Unraid

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.

Prunerr — Reclaim disk space. Keep what you watch. Click to watch a 20-second overview.
▶ 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:

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

License

MIT License. See LICENSE.

Download Statistics

35,294
Total Downloads
12,942
This Month
7,028
Avg / Month

Total Downloads Over Time

Loading chart...

Related apps

Explore more like this

Explore all

Details

Repository
helliott20/prunerr:latest
Last Updated2026-10-05
First Seen2026-03-03

Runtime arguments

Web UI
http://[IP]:[PORT:3000]/
Network
bridge
Shell
sh
Privileged
false

Template configuration

Web UI PortPorttcp

Port for the Prunerr web interface

Target
3000
Default
3000
Value
3000
Data PathPathrw

Path to store Prunerr database and configuration

Target
/app/data
Default
/mnt/user/appdata/prunerr
Value
/mnt/user/appdata/prunerr
PUIDVariable

User ID for file permissions

Default
99
Value
99
PGIDVariable

Group ID for file permissions

Default
100
Value
100
Anonymous install countVariable

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