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/AV1 · 9.8 TB · 17%
Codec breakdown
h264
8,214 (68%) · 41.2 TB (71%)
hevc
2,470 (20%) · 7.6 TB (13%)
av1
640 (5%) · 2.2 TB (4%)
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 or AV1 savings, starting conservative and recalculating from your own completed encodes. An Insights view tracks the bytes actually reclaimed — and how close the predictions came.

Browse every file

The Library view shows all scanned files, including already-HEVC/AV1, skipped, and missing items, with a clear reason each one is or isn't a candidate. Pick which columns you see and drag them into the order you want.

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, and that the video really is in the codec you asked for) before the original is touched.

HEVC or AV1

Each profile targets HEVC (libx265) or AV1 (SVT-AV1) — AV1 is roughly a fifth smaller at the same quality, though far fewer players can decode it, so check your clients first. Files already in either codec are never re-encoded.

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 savings for your profile's codec — HEVC or AV1. 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.original → original.reclaim-backup(rename, atomic)
2..reclaim-tmp → original(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
  • Measures bytes actually reclaimed and scores its own estimates
  • 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
  • Encodes to HEVC or AV1, chosen per profile
  • 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 and SVT-AV1 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 encoding 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

Figures are for x265 on a typical homelab CPU. SVT-AV1 has its own scale — presets 0 (slowest) to 13 — with the middle of the range landing in similar territory. Reclaim estimates each job from your own completed encodes, kept separately per codec.

Measured results

An estimate is a promise. This is the receipt.

Every completed encode is recorded permanently — bytes in, bytes out, how long it took, and what the source codec was before the file was replaced.

So Reclaim can show what it actually saved rather than what it hoped to, and grade its own predictions against the outcome. That history survives even if the original file is later deleted.

Storage reclaimed
last 90 days
3.8TB
across 41 encodes
Avg reduction
46%
By source codec
h264
2.1 TB
mpeg2video
912 GB
vc1
418 GB
unknown
394 GB
Actual reclaim ran at 103% of the estimate across 38 jobs.

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.