Skip to content

Configuration Templates

Ready-to-use configurations for common scenarios. Copy, paste, and customize.


Docker Compose Examples

Single container with integrated scheduling:

version: "3.9"
services:
  deleterr:
    image: ghcr.io/rfsbraz/deleterr:latest
    container_name: deleterr
    environment:
      LOG_LEVEL: INFO
      TZ: America/New_York
    volumes:
      - ./config:/config
      - ./logs:/config/logs
    restart: unless-stopped

Add to your settings.yaml:

scheduler:
  enabled: true
  schedule: "weekly"
  timezone: "America/New_York"

For advanced scheduling with Docker socket access:

version: "3.9"
services:
  deleterr:
    image: ghcr.io/rfsbraz/deleterr:latest
    container_name: deleterr
    environment:
      LOG_LEVEL: INFO
    volumes:
      - ./config:/config
      - ./logs:/config/logs
    restart: no

  scheduler:
    image: mcuadros/ofelia:latest
    container_name: scheduler
    depends_on:
      - deleterr
    command: daemon --docker
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock:ro
    restart: unless-stopped
    labels:
      ofelia.job-run.deleterr.schedule: "@weekly"
      ofelia.job-run.deleterr.container: "deleterr"

1. Minimal Movies

Basic single-library setup with sensible defaults.

dry_run: true

plex:
  url: "http://localhost:32400"
  token: "YOUR_PLEX_TOKEN"

tautulli:
  url: "http://localhost:8181"
  api_key: "YOUR_TAUTULLI_API_KEY"

radarr:
  - name: "Radarr"
    url: "http://localhost:7878"
    api_key: "YOUR_RADARR_API_KEY"

libraries:
  - name: "Movies"
    radarr: "Radarr"
    action_mode: "delete"
    last_watched_threshold: 90
    added_at_threshold: 180
    max_actions_per_run: 10

What it does: Deletes movies watched more than 90 days ago, if they were added more than 180 days ago. Limits to 10 deletions per run.


2. 4K Multi-Instance

Separate management for standard and 4K libraries.

dry_run: true

plex:
  url: "http://localhost:32400"
  token: "YOUR_PLEX_TOKEN"

tautulli:
  url: "http://localhost:8181"
  api_key: "YOUR_TAUTULLI_API_KEY"

radarr:
  - name: "Radarr"
    url: "http://localhost:7878"
    api_key: "YOUR_RADARR_API_KEY"
  - name: "Radarr 4K"
    url: "http://localhost:7879"
    api_key: "YOUR_RADARR_4K_API_KEY"

sonarr:
  - name: "Sonarr"
    url: "http://localhost:8989"
    api_key: "YOUR_SONARR_API_KEY"
  - name: "Sonarr 4K"
    url: "http://localhost:8990"
    api_key: "YOUR_SONARR_4K_API_KEY"

libraries:
  # Standard quality - more aggressive
  - name: "Movies"
    radarr: "Radarr"
    action_mode: "delete"
    last_watched_threshold: 60
    added_at_threshold: 90
    max_actions_per_run: 50

  # 4K - more conservative
  - name: "Movies 4K"
    radarr: "Radarr 4K"
    action_mode: "delete"
    last_watched_threshold: 180
    added_at_threshold: 365
    max_actions_per_run: 10

  - name: "TV Shows"
    sonarr: "Sonarr"
    series_type: "standard"
    action_mode: "delete"
    last_watched_threshold: 90
    added_at_threshold: 180
    max_actions_per_run: 20

  - name: "TV Shows 4K"
    sonarr: "Sonarr 4K"
    series_type: "standard"
    action_mode: "delete"
    last_watched_threshold: 365
    added_at_threshold: 365
    max_actions_per_run: 5

What it does: Manages 4 libraries with different retention policies. 4K content has longer thresholds and lower deletion limits.


3. Aggressive Disk Management

Size-based sorting with disk thresholds for space-constrained systems.

dry_run: true
action_delay: 5

plex:
  url: "http://localhost:32400"
  token: "YOUR_PLEX_TOKEN"

tautulli:
  url: "http://localhost:8181"
  api_key: "YOUR_TAUTULLI_API_KEY"

radarr:
  - name: "Radarr"
    url: "http://localhost:7878"
    api_key: "YOUR_RADARR_API_KEY"

sonarr:
  - name: "Sonarr"
    url: "http://localhost:8989"
    api_key: "YOUR_SONARR_API_KEY"

libraries:
  - name: "Movies"
    radarr: "Radarr"
    action_mode: "delete"
    last_watched_threshold: 30
    added_at_threshold: 60
    max_actions_per_run: 100
    disk_size_threshold:
      - path: "/data/media"
        threshold: 500GB
    sort:
      field: "size"
      order: "desc"  # Delete largest files first
    exclude:
      release_years: 1  # Keep movies from last year

  - name: "TV Shows"
    sonarr: "Sonarr"
    series_type: "standard"
    action_mode: "delete"
    last_watched_threshold: 30
    added_at_threshold: 60
    max_actions_per_run: 50
    disk_size_threshold:
      - path: "/data/media"
        threshold: 500GB
    sort:
      field: "size"
      order: "desc"

What it does: Only deletes when disk space falls below 500GB. Prioritizes largest files first. Short retention periods with high deletion limits.


4. Preservation Focus

Heavy exclusions to protect valuable content.

dry_run: true
action_delay: 10

plex:
  url: "http://localhost:32400"
  token: "YOUR_PLEX_TOKEN"

tautulli:
  url: "http://localhost:8181"
  api_key: "YOUR_TAUTULLI_API_KEY"

radarr:
  - name: "Radarr"
    url: "http://localhost:7878"
    api_key: "YOUR_RADARR_API_KEY"

trakt:
  client_id: "YOUR_TRAKT_CLIENT_ID"
  client_secret: "YOUR_TRAKT_CLIENT_SECRET"

libraries:
  - name: "Movies"
    radarr: "Radarr"
    action_mode: "delete"
    add_list_exclusion_on_delete: true
    last_watched_threshold: 365
    added_at_threshold: 365
    apply_last_watch_threshold_to_collections: true
    max_actions_per_run: 5
    sort:
      field: "rating"
      order: "asc"  # Delete lowest rated first
    exclude:
      # Metadata exclusions
      plex_labels: ["favorite", "keep", "classic"]
      genres: ["documentary"]
      release_years: 3
      collections:
        - "Marvel Cinematic Universe"
        - "Star Wars Collection"
        - "The Lord of the Rings Collection"
        - "Harry Potter Collection"
        - "DC Extended Universe"
      actors:
        - "Christopher Nolan"
        - "Denis Villeneuve"
      directors:
        - "Christopher Nolan"
        - "Denis Villeneuve"
        - "Quentin Tarantino"
      studios:
        - "Studio Ghibli"
        - "A24"
        - "Pixar"
      # Trakt exclusions
      trakt:
        max_items_per_list: 200
        lists:
          - "https://trakt.tv/movies/trending"
          - "https://trakt.tv/movies/popular"
          - "https://trakt.tv/movies/watched/yearly"
          - "https://trakt.tv/users/justin/lists/imdb-top-rated-movies"
      # Radarr exclusions
      radarr:
        tags: ["keep", "4k", "hdr"]
        quality_profiles: ["Remux-2160p"]
        monitored: true  # Keep monitored movies

What it does: Extremely conservative deletion with 1-year thresholds, extensive exclusions by metadata/Trakt/Radarr tags, and only 5 deletions per run.


5. Streaming-Aware

JustWatch integration to keep locally what's not streaming.

dry_run: true

plex:
  url: "http://localhost:32400"
  token: "YOUR_PLEX_TOKEN"

tautulli:
  url: "http://localhost:8181"
  api_key: "YOUR_TAUTULLI_API_KEY"

radarr:
  - name: "Radarr"
    url: "http://localhost:7878"
    api_key: "YOUR_RADARR_API_KEY"

justwatch:
  country: "US"
  language: "en"

libraries:
  - name: "Movies"
    radarr: "Radarr"
    action_mode: "delete"
    last_watched_threshold: 90
    added_at_threshold: 180
    max_actions_per_run: 20
    exclude:
      justwatch:
        # Keep movies NOT available on streaming (you can only watch them locally)
        not_available_on: ["any"]

  - name: "Streaming Copies"
    radarr: "Radarr"
    action_mode: "delete"
    last_watched_threshold: 30
    added_at_threshold: 90
    max_actions_per_run: 50
    exclude:
      justwatch:
        # Delete freely if available on your streaming services
        available_on: ["netflix", "disneyplus", "amazon", "hbomax", "hulu"]

What it does:

  • Main library: Preserves movies not available on any streaming service
  • Streaming copies: More aggressive deletion of content available on your subscribed services

6. Protect Seerr Requests

Keep content that users requested through Seerr/Overseerr.

dry_run: true

plex:
  url: "http://localhost:32400"
  token: "YOUR_PLEX_TOKEN"

tautulli:
  url: "http://localhost:8181"
  api_key: "YOUR_TAUTULLI_API_KEY"

radarr:
  - name: "Radarr"
    url: "http://localhost:7878"
    api_key: "YOUR_RADARR_API_KEY"

sonarr:
  - name: "Sonarr"
    url: "http://localhost:8989"
    api_key: "YOUR_SONARR_API_KEY"

seerr:
  url: "http://localhost:5055"
  api_key: "YOUR_SEERR_API_KEY"

libraries:
  - name: "Movies"
    radarr: "Radarr"
    action_mode: "delete"
    last_watched_threshold: 90
    added_at_threshold: 180
    max_actions_per_run: 20
    exclude:
      seerr:
        mode: "exclude"
        include_pending: true
        request_status: ["approved", "pending"]

  - name: "TV Shows"
    sonarr: "Sonarr"
    series_type: "standard"
    action_mode: "delete"
    last_watched_threshold: 90
    added_at_threshold: 180
    max_actions_per_run: 20
    exclude:
      seerr:
        mode: "exclude"
        include_pending: true
        request_status: ["approved", "pending"]

What it does: Protects all content that was requested through Seerr (approved or pending). Only deletes content that wasn't explicitly requested by a user. This ensures users don't lose content they asked for before they've had a chance to watch it.

Variations

Protect requests from specific users only:

exclude:
  seerr:
    mode: "exclude"
    users: ["admin", "family-member"]

Only protect recent requests (give users 30 days to watch):

exclude:
  seerr:
    mode: "exclude"
    min_request_age_days: 30  # Requests older than 30 days can be deleted


7. Per-User Requester Watch Protection

Protect content only until the person who requested it has actually watched it. Combines Seerr request data with Tautulli per-user watch history for precise, per-requester protection.

dry_run: true

plex:
  url: "http://localhost:32400"
  token: "YOUR_PLEX_TOKEN"

tautulli:
  url: "http://localhost:8181"
  api_key: "YOUR_TAUTULLI_API_KEY"

radarr:
  - name: "Radarr"
    url: "http://localhost:7878"
    api_key: "YOUR_RADARR_API_KEY"

sonarr:
  - name: "Sonarr"
    url: "http://localhost:8989"
    api_key: "YOUR_SONARR_API_KEY"

seerr:
  url: "http://localhost:5055"
  api_key: "YOUR_SEERR_API_KEY"

libraries:
  - name: "Movies"
    radarr: "Radarr"
    action_mode: "delete"
    last_watched_threshold: 90
    added_at_threshold: 180
    max_actions_per_run: 20
    exclude:
      seerr:
        mode: "exclude"
        protect_unwatched_requesters:
          enabled: true
          min_request_age_days: 90   # Always protect requests younger than 90 days
          max_protection_days: 365   # Allow deletion after 1 year regardless

  - name: "TV Shows"
    sonarr: "Sonarr"
    series_type: "standard"
    action_mode: "delete"
    last_watched_threshold: 90
    added_at_threshold: 180
    max_actions_per_run: 20
    exclude:
      seerr:
        mode: "exclude"
        protect_unwatched_requesters:
          enabled: true
          min_request_age_days: 30

What it does: Instead of protecting all requested content indefinitely, this checks whether the requester has actually watched it. If they haven't, the content stays. Once they've watched it, normal deletion rules apply. This prevents the "requested but never watched" problem where content sits forever because someone requested it and forgot about it.

How it works:

  1. Deleterr checks if the item was requested via Seerr
  2. Looks up the requester's watch history in Tautulli
  3. If the requester hasn't watched it, the item is protected
  4. If the requester has watched it, normal deletion rules apply

Variations

With user mapping (when Seerr and Tautulli usernames differ):

exclude:
  seerr:
    mode: "exclude"
    protect_unwatched_requesters:
      enabled: true
      user_mapping:
        john_overseerr: john_plex    # Map Seerr username to Tautulli username
        jane_overseerr: jane_plex

No grace period, no expiry (protect until watched, forever):

exclude:
  seerr:
    mode: "exclude"
    protect_unwatched_requesters:
      enabled: true

Combined with basic Seerr exclusions (protect all pending, plus watch-check for approved):

exclude:
  seerr:
    mode: "exclude"
    request_status: ["pending"]       # Always protect pending requests
    protect_unwatched_requesters:
      enabled: true                   # For approved requests, protect until watched
      min_request_age_days: 14        # 2-week grace period for new requests
      max_protection_days: 180        # 6-month hard limit


Common Exclusion Patterns

Protect MCU and Major Franchises

exclude:
  collections:
    - "Marvel Cinematic Universe"
    - "DC Extended Universe"
    - "Star Wars Collection"
    - "The Lord of the Rings Collection"
    - "Harry Potter Collection"
    - "James Bond Collection"
    - "Fast & Furious Collection"
    - "Mission: Impossible Collection"
    - "Jurassic Park Collection"
    - "The Matrix Collection"

Protect by Plex Labels

Add labels in Plex, then exclude them:

exclude:
  plex_labels:
    - "favorite"
    - "keep"
    - "classic"
    - "family"
    - "rewatch"

Protect Trending/Popular Content

trakt:
  client_id: "YOUR_TRAKT_CLIENT_ID"
  client_secret: "YOUR_TRAKT_CLIENT_SECRET"

libraries:
  - name: "Movies"
    exclude:
      trakt:
        max_items_per_list: 100
        lists:
          - "https://trakt.tv/movies/trending"
          - "https://trakt.tv/movies/popular"
          - "https://trakt.tv/movies/watched/weekly"
          - "https://trakt.tv/movies/anticipated"

Protect by Quality (Radarr)

exclude:
  radarr:
    tags: ["4k", "hdr", "dolby-vision", "remux"]
    quality_profiles: ["Remux-2160p", "Bluray-2160p"]
    paths: ["/data/media/4k"]

Anime Library Configuration

libraries:
  - name: "Anime"
    sonarr: "Sonarr"
    series_type: "anime"  # Important: filters for anime type
    action_mode: "delete"
    last_watched_threshold: 365
    added_at_threshold: 180
    max_actions_per_run: 10
    sort:
      field: "episodes"
      order: "desc"  # Delete shows with most episodes first
    exclude:
      titles:
        - "Dragon Ball"
        - "Dragon Ball Z"
        - "Naruto"
        - "One Piece"
      studios:
        - "Studio Ghibli"
        - "Kyoto Animation"
        - "Madhouse"
      trakt:
        max_items_per_list: 100
        lists:
          - "https://trakt.tv/users/lwerndly/lists/anime-best-series-of-all-time"

Next Steps

Integration Guides