meine
meine 🌒 - A CLI file manager and system utility built with Textual. It combines intuitive command parsing with rich t…
Intelligent media cleanup for Radarr/Sonarr using Tautulli watch history. Automated, safe, user-aware.
git clone https://github.com/haijeploeg/Prunarr.githaijeploeg/PrunarrAutomatically clean up your Radarr and Sonarr libraries based on what you've actually watched in Plex (via Tautulli).
Stop manually managing your media library. PrunArr removes watched content after a configurable period, checks streaming availability, and gives you complete control over what stays and what goes.
# 1. Install pip install prunarr # 2. Configure (create config.yaml with your API keys) curl -O https://raw.githubusercontent.com/haijeploeg/prunarr/main/config.example.yaml mv config.example.yaml config.yaml # Edit config.yaml with your API keys # 3. Preview what would be removed prunarr --config config.yaml movies remove --watched --days-watched 60 --dry-run # 4. Remove watched content after 60 days prunarr --config config.yaml movies remove --watched --days-watched 60 prunarr --config config.yaml series remove --watched --days-watched 60
The Problem:
The Solution: PrunArr automates media cleanup by:
Perfect for:
Integrates with Overseerr to automatically track who requested what. Content is only removed when watched by the original requester.
prunarr movies remove --username "alice" --days-watched 30
Control exactly how long to keep watched content:
prunarr movies remove --watched --days-watched 60 # Remove after 60 days prunarr series remove --watched --days-watched 90 # Keep series longer
Target large files to free up space quickly:
prunarr movies list --min-filesize "5GB" --sort-by filesize --desc prunarr movies remove --watched --min-filesize "5GB" --days-watched 60
Filter content by quality, genre, or any custom tags:
prunarr movies list --tag "4K" --tag "HDR" prunarr movies remove --tag "Kids" --days-watched 14 prunarr movies remove --exclude-tag "Favorites"
Check if content is available on your streaming services via JustWatch:
# Remove watched movies available on streaming prunarr movies remove --watched --on-streaming --days-watched 30 # Keep unique content longer (not on streaming) prunarr movies remove --watched --not-on-streaming --days-watched 180
📖 Streaming Integration Guide →
Multiple layers of protection:
--debugBeautiful, informative tables with:
# Preview and remove watched content prunarr movies remove --watched --days-watched 60 --dry-run prunarr movies remove --watched --days-watched 60 prunarr series remove --watched --days-watched 90
# Target large files first prunarr movies list --min-filesize "10GB" --sort-by filesize --desc prunarr movies remove --watched --min-filesize "5GB" --days-watched 30
# Remove watched movies you can re-stream prunarr movies remove --watched --on-streaming --days-watched 30 # Keep unique content longer prunarr movies remove --watched --not-on-streaming --days-watched 180
# List content by user prunarr movies list --username "alice" # User-specific cleanup prunarr movies remove --watched --username "bob" --days-watched 45
# Quick cleanup of kids content prunarr movies remove --watched --tag "Kids" --days-watched 14 prunarr series remove --watched --tag "Kids" --days-watched 14
Note: PrunArr currently supports Plex via Tautulli. Jellyfin/Emby support is planned for future releases.
pip install prunarr
Run PrunArr in a container for isolated, portable deployments:
# Pull from GitHub Container Registry docker pull ghcr.io/haijeploeg/prunarr:latest # Run with Docker docker run --rm \ -e RADARR_API_KEY="your-api-key" \ -e RADARR_URL="https://radarr.example.com" \ -e SONARR_API_KEY="your-api-key" \ -e SONARR_URL="https://sonarr.example.com" \ -e TAUTULLI_API_KEY="your-api-key" \ -e TAUTULLI_URL="https://tautulli.example.com" \ ghcr.io/haijeploeg/prunarr:latest movies list --limit 10 # Or use Docker Compose docker-compose run --rm prunarr movies remove --dry-run
Deploy to Kubernetes for automated, scheduled cleanups:
# Install from OCI registry helm install prunarr oci://ghcr.io/haijeploeg/charts/prunarr \ --version 1.0.0 \ --set config.radarr.apiKey="your-api-key" \ --set config.radarr.url="https://radarr.example.com" \ --set config.sonarr.apiKey="your-api-key" \ --set config.sonarr.url="https://sonarr.example.com" \ --set config.tautulli.apiKey="your-api-key" \ --set config.tautulli.url="https://tautulli.example.com" # Default: CronJob mode with daily cleanup at 2 AM (movies) and 3 AM (series)
Features:
📖 Kubernetes Deployment Guide →
pip install prunarr
git clone https://github.com/haijeploeg/prunarr cd prunarr pip install -e .
Create config file:
curl -O https://raw.githubusercontent.com/haijeploeg/prunarr/main/config.example.yaml mv config.example.yaml config.yaml
Add your API keys:
radarr_api_key: "your-radarr-api-key" radarr_url: "https://radarr.yourdomain.com" sonarr_api_key: "your-sonarr-api-key" sonarr_url: "https://sonarr.yourdomain.com" tautulli_api_key: "your-tautulli-api-key" tautulli_url: "https://tautulli.yourdomain.com"
Test your config:
prunarr --config config.yaml movies list --limit 5
PrunArr works seamlessly with Overseerr's "Tag Requests" feature:
When users request content through Overseerr:
"123 - john_doe")Movies:
prunarr movies list # List all movies prunarr movies remove --watched --dry-run # Preview removal prunarr movies remove --watched --days-watched 60 # Remove watched movies
Series:
prunarr series list # List all series prunarr series get "Breaking Bad" # Get detailed info prunarr series remove --watched --days-watched 90 # Remove watched series
History:
prunarr history list --limit 20 # View watch history
Streaming:
prunarr providers list # List streaming providers prunarr providers check "The Matrix" # Check availability
Cache:
prunarr cache init # Initialize cache prunarr cache status # View cache stats
📖 Complete Command Reference →
Contributions are welcome! Please:
git checkout -b feature/amazing-feature)make test)make format)git commit -m 'feat: add amazing feature')git push origin feature/amazing-feature)git clone https://github.com/haijeploeg/prunarr cd prunarr python -m venv env source env/bin/activate pip install -e ".[dev]" # Run tests make test # Format code make format # Run linting make lint
Apache-2.0 License - See LICENSE file for details.
Made with ❤️ for the Plex community
PrunArr is not affiliated with Radarr, Sonarr, Tautulli, Overseerr, or Plex.
more like this
meine 🌒 - A CLI file manager and system utility built with Textual. It combines intuitive command parsing with rich t…
A to-do list that runs your Claude Code agents — capture anywhere, dispatch in parallel, review from your phone.
A synchronized watch party application for Emby media servers. Watch videos together with friends in real-time, no matt…
search projects, people, and tags