Intelligent Duplicate Management for the *arr Stack
Deduparr is a Docker-based web application that finds and manages duplicate media files across your entire media stack. It seamlessly integrates with Plex, Radarr, Sonarr, and qBittorrent to provide intelligent, safe duplicate management with a modern web interface.
You use Radarr/Sonarr to automatically upgrade your media quality, but they keep both versions:
- Radarr downloads a movie in 1080p
- Two months later, it finds a 4K version and acquires that too
- Now you have duplicates eating up storage space
- The old files stay in media library, qBittorrent, Radarr, AND on disk
Deduparr finds these duplicates, scores them based on quality, and safely removes the lower-quality versions from:
- ✅ qBittorrent - Removes the library item
- ✅ Radarr/Sonarr - Deletes the file entry
- ✅ Filesystem - Removes the actual file
- ✅ Media Library - Refreshes the collection
All with a beautiful web UI and dry-run mode for safety!
- 🔍 Smart Duplicate Detection - Scan media libraries with Plex API or deep filesystem scans
- ✅ Safe Review System - Dry-run mode by default, preview before deletion
- 🗑️ Multi-Stage Deletion - Removes from qBittorrent, Radarr/Sonarr, disk, and refreshes media library
- 📊 Dashboard & Analytics - Track duplicates found, space reclaimed, and activity history
- ⚙️ Easy Setup - Setup wizard with OAuth authentication and connection testing
- 🔒 Secure - Enterprise-grade token encryption and type-safe code
Dashboard - Overview of your duplicate detection system
Scan Page - Find and manage duplicate media files
Settings - Configure Plex, Radarr, Sonarr, and qBittorrent connections
- Backend: Python 3.13 + FastAPI + SQLAlchemy
- Frontend: React + TypeScript + TailwindCSS + shadcn/ui
- Database: SQLite (default) / PostgreSQL (optional)
- Deployment: Docker + Docker Compose
- Docker and Docker Compose
- Plex Media Server
- Radarr and/or Sonarr
- qBittorrent
Create a docker-compose.yml:
services:
deduparr:
image: ghcr.io/deduparr-dev/deduparr:latest
container_name: deduparr
environment:
- PUID=1000
- PGID=1000
- TZ=Etc/UTC
- DATABASE_TYPE=sqlite # or 'postgres'
# Optional: Enable scheduled scans
- ENABLE_SCHEDULED_SCANS=false
- SCAN_INTERVAL_HOURS=24
volumes:
- ./config:/config
- ./data:/app/data
- /path/to/media:/media:rw # Use :ro for API-only deletion, :rw for full cleanup
ports:
- 8655:8655
restart: unless-stoppedMedia Mount: Use
:rw(recommended) for complete cleanup including associated files and empty directories. Use:roif you only want API-based deletion via Radarr/Sonarr/qBittorrent. See DEPLOYMENT.md for detailed configuration options.
- Start the container:
docker-compose up -d- Access the setup wizard:
http://127.0.0.1:8655/setup
The setup wizard will guide you through initial configuration.
On first run, the setup wizard guides you through configuration:
- Plex Authentication - OAuth sign-in
- Server Selection - Choose your Plex server
- Library Selection - Pick which libraries to scan
- Service Configuration - Connect qBittorrent, Radarr, and/or Sonarr
- Complete - Start using Deduparr!
All services work together to safely remove duplicates across your entire media stack.
- API Usage Examples - Complete guide to the duplicate detection and deletion API
- Docker Testing Guide - Docker development and deployment instructions
- Contributing Guidelines - How to contribute to the project
- Security Policy - Security practices and vulnerability reporting
Contributions are welcome! See CONTRIBUTING.md for development guidelines and docs/SECURITY.md for security policy.
Quick Start:
git clone https://github.com/deduparr-dev/deduparr.git
cd deduparr
docker-compose -f docker-compose.dev.yml upFrontend: http://localhost:3000 | Backend: http://localhost:3001
MIT License - see LICENSE for details.
- GitHub Discussions - Ask questions and share ideas
- Issues - Report bugs or request features
Made with ❤️ by the Deduparr community