Prunerr
v1.4.7 — out now on Docker Hub

Reclaim disk space.
Keep what you watch.

Prunerr connects to Plex, Sonarr and Radarr and removes media nobody watches — using rules you control, with a queue, grace periods, and Discord notifications before anything is deleted.

  • Self-hosted & MIT licensed
  • Multi-arch Docker (amd64 / arm64)
  • Unraid Community App
prunerr.local — Dashboard
Prunerr dashboard with library stats, service health for Plex, Sonarr, Radarr and Tautulli, storage trends and scheduled scans

The problem

Your library keeps growing. Most of it goes unwatched.

If you run a Plex server you know the drill: disks fill up, request bots add more, and finding what to remove means digging through hundreds of folders. Manual cleanup is unwinnable. Existing tools either delete on a single condition or expect you to write code.

Prunerr sits between Plex and your *arr apps and answers "what should go?" with rules you can actually express — across watch history, ratings, file size, age and metadata.

Features

Everything you need to clean up safely

Built for self-hosted media servers. No cloud account, no vendor lock-in, no surprises.

Rules engine

28 condition fields across quality, ratings, watch history, collections and metadata. Build with templates, natural language, or a nested condition editor with live preview.

Deletion queue

Nothing leaves disk without a stop in the queue first. Grace periods, four deletion actions, and the ability to protect items individually or by collection.

Collections sync

Pulls movie collections from Radarr. Protect entire franchises with one click, or queue them for bulk deletion when you want a clean break.

Per-user watch history

Tautulli or Tracearr integration tracks who watched what. Build rules around individual users — "delete if nobody but the kids has watched it in 6 months".

Discord notifications

Batched embeds when items are queued, when grace periods expire, and when files are actually removed — with titles, sizes, and the rule that matched.

REST API

Key-authenticated REST API for scripts, automation, and mobile apps like nzb360. Drive Prunerr from anywhere you can make an HTTP request.

How it works

Nothing gets deleted without your say-so

  1. 01

    Connect your services

    Point Prunerr at your Plex, Sonarr and Radarr. Optionally Tautulli/Tracearr for per-user watch history, Overseerr for request resets, and Discord for notifications.

  2. 02

    Define a rule

    Pick a template ("delete movies nobody watched in 6 months over 20GB") or build from scratch. Live preview shows you exactly which items would match before you save.

  3. 03

    Review the queue

    Scheduled scans add matches to a queue. You get a Discord embed with everything that matched and what rule caught it. Protect anything you want to keep.

  4. 04

    Grace period expires

    After your grace period, Prunerr fires the deletion through Sonarr/Radarr — file removal, unmonitor, or full removal — and resets Overseerr requests if configured.

Integrations

Plays nice with the *arr stack

Plex Required

Media server & watch status

Sonarr Recommended

TV show management

Radarr Recommended

Movie management & collections

Tautulli One required

Per-user watch history

Tracearr One required

Per-user watch history (alt)

Overseerr Optional

Request management

Unraid Optional

Server monitoring

Discord Optional

Notifications

Install

Up and running in under five minutes

Single Docker container. Multi-arch image — runs on amd64 and arm64.

Docker
docker run -d \
  --name prunerr \
  -p 3000:3000 \
  -v /path/to/data:/app/data \
  -e PLEX_URL=http://your-plex: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
docker-compose.yml
services:
  prunerr:
    image: helliott20/prunerr:latest
    container_name: prunerr
    ports:
      - "3000:3000"
    volumes:
      - ./data:/app/data
    environment:
      PLEX_URL: http://plex:32400
      PLEX_TOKEN: ${PLEX_TOKEN}
      SONARR_URL: http://sonarr:8989
      SONARR_API_KEY: ${SONARR_API_KEY}
      RADARR_URL: http://radarr:7878
      RADARR_API_KEY: ${RADARR_API_KEY}
    restart: unless-stopped

Stop drowning in unwatched media.

Self-hosted, free, MIT licensed. One container, one config file, your rules.