Reclaim disk space from your media library — safely.
Point it at the same movie and TV folders Plex, Jellyfin, or Emby already use. Reclaim ranks files by predicted HEVC savings and lets you manually queue overnight ffmpeg re-encodes — replacing files in place only after verification.
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.
Rank by savings
Sorts candidates by predicted HEVC savings. After enough completed jobs, estimates switch from seed values to your observed results.
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. 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.
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.
Scan
Reclaim walks MOVIES_PATH and TV_PATH, probes each video file, and records codec, resolution, bitrate, size, and fingerprint.
Rank
Files are sorted by predicted HEVC savings. Filter by codec, resolution, library type, or search by path.
Queue
Select candidates, pick a profile, and confirm. Jobs are created but won't run until the encode window opens.
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.
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 estimated savings
- Replaces files in-place after verification
- Runs encodes in a configurable overnight window
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 — edit media paths 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
TZ: America/New_York
volumes:
reclaim-data:1. Pull and start
docker compose up --build -d2. Open the UI
Navigate to http://<nas-ip>:8080, create your login, and let the first scan run.
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.
| Preset | Typical speed | 1-hour HD file |
|---|---|---|
medium | ~0.5–1× realtime | 1–2 hours |
fast | ~2–3× realtime | 20–30 min |
ultrafast | ~8–10× realtime | 6–8 min |
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.