Sign inSign up

sirjmann92/remuxcode

By sirjmann92

Updated 1 day ago

Sonarr/Radarr media converter and management

Image
1

10K+

sirjmann92/remuxcode repository overview

remuXcode

A self-hosted media maintenance tool that automatically converts, cleans, and optimizes your Plex/Jellyfin library — triggered by Sonarr and Radarr webhooks or kicked off manually from the built-in web UI.

When new content is imported, remuXcode receives a webhook, analyzes the file, and runs whichever conversions are needed: DTS/DTS-HD audio gets converted to AC3/EAC3/AAC for broad device compatibility, 10-bit H.264 (or legacy codecs like VC-1 and MPEG-2) gets re-encoded to HEVC or AV1, and foreign-language audio and subtitle tracks get stripped out. All of this runs in the background with no manual intervention.

The web UI lets you browse your entire Sonarr/Radarr library — movies and shows — with poster grids, episode tables, filters, and per-file analysis. Queue individual files, full series, or bulk selections, and monitor everything from the Jobs page.

Project: https://github.com/sirjmann92/remuXcode

Features

  • Audio conversion — DTS/DTS-HD → AC3 (5.1), EAC3 (7.1+), or AAC (stereo); configurable bitrate caps; optional keep-original; TrueHD passthrough
  • Video encoding — 10-bit H.264, 8-bit H.264 (optional), and legacy codecs (VC-1, MPEG-2, MPEG-4/XviD/DivX) → HEVC or AV1
  • Hardware acceleration — Intel QSV/VAAPI and NVIDIA NVENC auto-detected at startup; software fallback when no GPU is available
  • Stream cleanup — remove audio and subtitle tracks outside your keep-languages list; preserve forced subtitles, SDH, commentary, and audio description; always-keep-original option for anime and live-action
  • Anime support — per-worker anime-only mode, anime-optimized encoding presets, dual-audio preservation
  • Library browse — Movies and Shows pages backed by Radarr/Sonarr APIs with poster art, filters, sort, multi-select batch queue; deep links back to Radarr/Sonarr
  • Analyze modal — full stream detail (video, audio, subtitle streams) for any file via ffprobe
  • Job queue — persistent SQLite-backed queue, resumable after restart, drag-and-drop reordering, retry failed jobs
  • Webhook-driven — fire-and-forget automation; also fully usable in manual mode
  • Single container — FastAPI backend + SvelteKit frontend, port 7889

See docs/ for the full feature reference.


Screenshots

Dashboard - live job progress with poster art, phase badges, and ETA

Movies — Radarr library browse with poster grid, filters, and batch queue

Shows — Sonarr series and episode browser with per-file actions

Jobs — full job history with per-job log viewer and stream details

Settings — encoding, audio, cleanup, and integration config

Integrations — Sonarr and Radarr connection status


Quick Start

1. Create compose.yml

services:
  remuxcode:
    container_name: remuxcode
    image: ghcr.io/sirjmann92/remuxcode:latest
    ports:
      - "7889:7889"
    volumes:
      - ./config:/app/config         # config.yaml, jobs.db, API key
      - ./logs:/app/logs
      - /mnt/yournas:/share:rw       # match the path Sonarr/Radarr use internally
    devices:
      - /dev/dri:/dev/dri            # optional — Intel QSV/VAAPI GPU passthrough
    environment:
      - TZ=America/Chicago
    restart: unless-stopped

Mount your media at the same path Sonarr/Radarr use inside their containers so webhook file paths need no translation. Add additional volume mounts if your library spans multiple shares.

2. Start

docker compose up -d

config/config.yaml is created automatically on first run with sensible defaults. Open http://localhost:7889/config to configure your encoding, audio, and cleanup settings.

To connect Sonarr and Radarr, edit config/config.yaml and add your URLs and API keys (see Integrations).

Your API key is auto-generated on first start and stored in config/.api_key. It's also shown on the Settings page.


Option 2 — Build from Source
git clone https://github.com/sirjmann92/remuXcode.git
cd remuXcode

Create a compose.yml as above, but replace image: ghcr.io/... with:

build: .

Then:

docker compose up -d --build

Configure Sonarr and Radarr to prefer remux releases — full lossless Blu-ray remuxes with no re-encoding. A remux retains the original video bitrate and lossless audio (DTS-HD MA, TrueHD), giving remuXcode the best possible source to work from.

Re-encoding an already-compressed video introduces generation loss: the encoder makes a second round of approximations on top of the first, compounding artifacts that cannot be undone. Starting from a remux means any re-encoding remuXcode does happens exactly once, from a lossless source.

See docs/integrations.md for suggested quality profile tips and full setup instructions.


Webhook Setup

Sonarr

Settings → Connect → Add → Webhook:

FieldValue
URLhttp://<host>:7889/api/webhook
MethodPOST
TriggersOn Import Complete (recommended)
HeadersX-API-Key: <your key>

On Import Complete fires once after a full batch import (e.g. a whole season), delivering all file paths in a single payload — more efficient than per-episode triggers. You can also enable On File Import and/or On File Upgrade for per-file triggers.

Radarr

Settings → Connect → Add → Webhook:

FieldValue
URLhttp://<host>:7889/api/webhook
MethodPOST
TriggersOn Import, On Upgrade
HeadersX-API-Key: <your key>

API

Interactive API docs are available at http://localhost:7889/docs.

# Health check
curl http://localhost:7889/health

# Queue a single file for full conversion
curl -X POST http://localhost:7889/api/convert \
  -H "Content-Type: application/json" \
  -d '{"path": "/share/movies/Movie (2024)/movie.mkv", "type": "full"}'

# type options: full | audio | video | cleanup

# Queue all files in a Radarr library (by Radarr movie IDs)
curl -X POST http://localhost:7889/api/convert/movies \
  -H "Content-Type: application/json" \
  -d '{"movie_ids": [123, 456], "type": "full"}'

# Queue all episodes in a Sonarr series (by Sonarr series ID)
curl -X POST http://localhost:7889/api/convert/series \
  -H "Content-Type: application/json" \
  -d '{"series_ids": [42], "type": "audio"}'

# List jobs
curl http://localhost:7889/api/jobs

# Analyze a file
curl "http://localhost:7889/api/analyze?path=/share/movies/Movie/movie.mkv"

Documentation

PageDescription
DashboardLive stats, active jobs, queue management
MoviesBrowse and process your movie library
ShowsBrowse and process your TV library
JobsJob history, filtering, controls
SettingsComplete settings reference
IntegrationsSonarr/Radarr setup, webhooks, and recommended workflow

License

MIT

Tag summary

Content type

Image

Digest

sha256:ee5a7da53

Size

191.6 MB

Last updated

1 day ago

docker pull sirjmann92/remuxcode