Deduplarr

Deduplarr

Docker app from thedinz' Repository

Overview

Deduplarr is a Plex duplicate cleanup companion with an arr-style web UI for reviewing duplicate movie and episode versions before choosing what to keep.

Deduplarr

Deduplarr is a Docker Compose-first Plex duplicate cleanup companion with an interface shaped for the *arr ecosystem. It connects to Plex with a server URL and token, finds duplicate movie and episode versions, shows file paths and stream details, scores each version, and lets you make the keep/delete decision at a glance.

Plex Access Model

The first version is intentionally API-only. Plex already knows each library item, media version, media part, file path, video stream, audio stream, subtitle stream, and duplicate grouping, so Deduplarr does not need direct filesystem mounts for scanning or scoring.

Deletion is different: Deduplarr asks Plex to delete the selected media part. That requires Plex itself to have media deletion enabled and write access to the media path. If Plex cannot delete the file, a later filesystem-delete fallback can be added, but that would require a path mapping layer between Plex paths and Deduplarr container paths.

Docker Compose

Plex connection details are entered in the app Settings page, not in Compose environment variables.

services:
  deduplarr:
    image: ghcr.io/thedinz/deduplarr:dev
    container_name: deduplarr
    ports:
      - "7889:7889"
    environment:
      PORT: "7889"
      CONFIG_DIR: /config
    volumes:
      - ./config:/config
    restart: unless-stopped
docker compose up -d

Open http://localhost:7889, sign in with admin/admin, then add your Plex URL and token in Settings.

Authentication

Deduplarr starts with built-in auth enabled and the default login admin/admin. Change the username and password from Settings after first sign-in.

Settings also supports switching to external reverse-proxy auth. In that mode Deduplarr trusts a configured user header from your proxy. Default accepted headers are:

  • x-forwarded-user
  • x-auth-request-user
  • x-authentik-username
  • remote-user

Run Deduplarr behind HTTPS at your reverse proxy. The app sets trust proxy so forwarded protocol headers work correctly for cookies.

Environment

Variable Default Description
PORT 7889 HTTP port inside the container
CONFIG_DIR /config in Docker Stores local app config
SESSION_SECRET generated Optional stable session signing secret

Development

pnpm install
pnpm dev

The local app listens on http://localhost:7889.

Release Images

The repository workflow publishes Docker images to:

  • ghcr.io/thedinz/deduplarr:dev from the dev branch
  • ghcr.io/thedinz/deduplarr:latest from the main branch
  • ghcr.io/thedinz/deduplarr:vX.Y.Z from version tags

GitHub Releases are created from v* tags.

Install Deduplarr on Unraid in a few clicks.

Find Deduplarr in Community Apps on your Unraid server, review the template, and click Install. Unraid handles the Docker app or plugin setup from the published template.

Open the Apps tab on your Unraid server Search Community Apps for Deduplarr Review the template variables and paths Click Install

Related apps

Explore more like this

Explore all

Details

Repository
ghcr.io/thedinz/deduplarr:latest
Last Updated2026-07-10
First Seen2026-07-10

Runtime arguments

Web UI
http://[IP]:[PORT:7889]/
Network
bridge
Shell
sh
Privileged
false
Extra Params
--restart unless-stopped

Template configuration

Web PortPorttcp

Container 7889 - Host port for the Deduplarr web UI

Target
7889
Default
7889
Value
7889
Config FolderPathrw

Stores Deduplarr settings, saved Plex connection details, auth configuration, and keep preferences

Target
/config
Default
/mnt/user/appdata/deduplarr
Value
/mnt/user/appdata/deduplarr
Session SecretVariable

Optional long random value used to sign Deduplarr login sessions. Leave blank to generate one at startup; set it to keep sessions valid across container recreation.

Target
SESSION_SECRET
TimezoneVariable

Container timezone

Target
TZ
Default
America/New_York