Reclaim
Open source · self-hosted · single container

Reclaim disk space from your media library — safely.

Point it at the same movie and TV folders Plex, Jellyfin, or Emby already use. Reclaim audits every file by codec, bitrate, and size, then ranks what's worth re-encoding. Queue the wins as overnight ffmpeg jobs — and see the files better re-downloaded than re-encoded. Originals are replaced only after verification.

No database server·No Redis·No sidecars·Just Docker + your library
Estimated recoverableestimate
18.4TB
Library total
58.4 TB
Reclaimable · 18.4 TB · 31%After encode · 30.2 TB · 52%Already HEVC · 9.8 TB · 17%
Codec breakdown
h264
8,214 (68%) · 41.2 TB (71%)
hevc
3,110 (26%) · 9.8 TB (17%)
mpeg2
612 (5%) · 5.1 TB (9%)
vc1
204 (2%) · 2.3 TB (4%)

Features

Built for large homelab libraries

Mixed codecs, tens of terabytes, and a need to chip away safely — not batch-convert everything at once.

Scan your library

Walks your movie and TV folders with ffprobe. Skips unchanged files on rescans and detects renames via fingerprinting.

Savings that adapt

Ranks candidates by predicted HEVC savings. Reclaim starts with conservative defaults, then recalculates estimates from your own completed encodes.

Browse every file

The Library view shows all scanned files, including already-HEVC, skipped, and missing items, with a clear reason each one is or isn't a candidate.

Re-encode or re-download

Not every file is worth re-encoding. Per-file codec, bitrate, and resolution help you spot the bloated or low-quality rips better replaced from a cleaner source.

Queue manually

Select files, pick an encode profile, and confirm before anything runs. No surprise batch conversions.

Encode overnight

Jobs run inside a configurable time window — default midnight to 6 AM. Force individual queued jobs to run immediately when needed. A running job finishes even if the window closes.

Verify before swap

Every encode is checked (duration ±1 s, stream counts, resolution) before the original is touched.

TMDB artwork

Optional TMDB integration fetches poster and backdrop images for your library. Browse cards show artwork automatically — no manual tagging.

Single container

Go API + embedded web UI + ffmpeg/ffprobe. No database server, Redis, or sidecar services.

How it works

Scan → rank → queue → encode

A manual-first workflow. You stay in control at every step.

01

Scan

Reclaim walks MOVIES_PATH and TV_PATH, probes each video file, and records codec, resolution, bitrate, size, and fingerprint.

02

Rank & review

Files are sorted by predicted HEVC savings. As jobs complete, Reclaim recalculates estimates from your library's results so future rankings stay grounded in real outcomes.

03

Queue

Select candidates, pick a profile, and confirm. Jobs are created but won't run until the encode window opens.

04

Encode

ffmpeg writes a .reclaim-tmp file. On pass: atomic swap. On fail: original untouched, temp kept for inspection.

Safety model

Your originals are never deleted first

Reclaim encodes to a temporary file, verifies the output, then atomically swaps. A crash mid-swap is recovered on next boot.

Replace sequence
1.originaloriginal.reclaim-backup(rename, atomic)
2..reclaim-tmporiginal(rename, atomic)
3.delete original.reclaim-backup

On failure: job marked failed, temp kept for inspection, original untouched. On boot: orphaned temps cleaned, interrupted backups restored.

Scope

What Reclaim does — and doesn't

Does

  • Scans mounted library folders directly
  • Ranks candidates by savings estimates that improve over time
  • Library view for every file with clear eligibility reasons
  • Fetches TMDB poster art for movies and TV shows (optional)
  • Helps spot files better re-downloaded than re-encoded
  • Replaces files in-place after verification
  • Runs encodes in a configurable overnight window (or force individual jobs)
  • Persistent audit trail for scans, jobs, and recovery events

Does not

  • Integrate with Sonarr, Radarr, Plex, Jellyfin, or Emby APIs
  • Auto-encode your whole library
  • Use GPU/NVENC hardware encoding (CPU libx265 only)
  • Pause for active streams (time window only)

Install

Up and running in minutes

Single container. Mount your library read-write, open port 8080, create your login on first boot.

docker-compose.yml
# docker-compose.yml — edit media paths, PUID/PGID, and TZ first
services:
  reclaim:
    image: ghcr.io/reecerose/reclaim:latest
    ports:
      - "8080:8080"
    volumes:
      - /path/to/movies:/movies:rw
      - /path/to/tv:/tv:rw
      - reclaim-data:/data
    environment:
      MOVIES_PATH: /movies
      TV_PATH: /tv
      DB_PATH: /data/reclaim.db
      PUID: "1000"
      PGID: "1000"
      TZ: America/New_York

volumes:
  reclaim-data:

1. Pull and start

Set PUID and PGID to the user that owns your media library.

docker compose up -d

2. Open the UI

Navigate to http://<nas-ip>:8080, create your login, and let the first scan run.

3. Read the docs

Full deployment guide for Unraid, Synology, and standalone binary.

docs/DOCKER.md

Throughput

CPU x265 is slow by design

Reclaim is meant to chip away safely over weeks and months of overnight windows — not batch-convert a 20,000-file library in a weekend.

PresetTypical speed
medium~0.5–1× realtime
fast~2–3× realtime
ultrafast~8–10× realtime

Ready to reclaim some space?

Clone the repo, point it at your library, and see how much you could save — before encoding a single file.