# Plex Re-Encoder — Free GPU-Accelerated HEVC Batch Encoder with Dolby Vision Support

**URL:** https://forums.plex.tv/t/plex-re-encoder-free-gpu-accelerated-hevc-batch-encoder-with-dolby-vision-support/937134
**Category:** Apps & Creations
**Tags:** media-optimizer
**Created:** [March 15, 2026, 5:52pm UTC](https://forums.plex.tv/t/plex-re-encoder-free-gpu-accelerated-hevc-batch-encoder-with-dolby-vision-support/937134 "2026-03-15T17:52:25Z")
**Posts on this page:** 2
**Page:** 1

<div class="post-metadata">

### Author: ![TarquinDouglass](https://avatars.discourse-cdn.com/v4/letter/t/bbce88/32.png) [@TarquinDouglass](https://forums.plex.tv/u/TarquinDouglass)
#### Post date: [March 15, 2026, 5:52pm UTC](https://forums.plex.tv/t/plex-re-encoder-free-gpu-accelerated-hevc-batch-encoder-with-dolby-vision-support/937134/1 "2026-03-15T17:52:25Z")

</div>

# Recode

**GPU-accelerated H.265/H.264 re-encoding for Plex media libraries with Dolby Vision support.**

![Version](https://img.shields.io/badge/version-3.2.0-blue) ![License](https://img.shields.io/badge/license-GPL--3.0-green) ![Python](https://img.shields.io/badge/python-3.9+-yellow)

## Features

### Encoding

- **GPU Encoding** — NVIDIA NVENC, AMD VAAPI/AMF, Intel QSV/VAAPI hardware acceleration (10-50x faster than realtime)
- **CPU Encoding** — libx265 software encoding when no GPU is available
- **H.265 & H.264** — Encode to H.265 or H.264 with configurable quality
- **Presets** — Auto, Film, Animation, Grain, Custom with per-preset CQ/bitrate/speed
- **Constant Quality (CQ)** — Configurable quality level with max bitrate cap
- **Resolution Scaling** — Downscale 4K to 1080p, 1440p, 720p, or keep original
- **Test Mode** — Encode only the first 5 minutes for quick quality checks (originals never deleted)

### HDR & Dolby Vision

- **HDR10** — Passthrough and metadata preservation
- **HLG** — Hybrid Log-Gamma support
- **Dolby Vision** — DV Profile 5, 7, 8 support with skip, keep, HDR10, and P8.4 modes
- **DV P5 → P8.4** — Vulkan/libplacebo color conversion (IPTPQc2 → BT.2020) + RPU injection
- **DV Keep Original** — Re-encode while preserving DV metadata untouched
- **HDR to DV Upgrade** — Convert HDR10 content to Dolby Vision P8.4
- **dovi\_tool Integration** — Automatic RPU extraction, conversion, and injection
- **Remote DV Support** — DV P8.4 post-processing works on both local and remote GPU encodes

### Audio

- **Codec Options** — Passthrough, Opus, AAC, AC3, EAC3
- **Per-Stream Control** — Configure codec and bitrate for each audio track individually
- **Language Filter** — Keep all or selected languages (comma-separated codes)
- **Audio Type Filter** — All tracks, TrueHD/Atmos, EAC3, AC3, stereo, surround
- **Bitrate Control** — Configurable per-codec bitrate (64k-640k)

### Subtitles

- **Per-Stream Control** — Include/exclude individual subtitle tracks
- **Language Filter** — Keep all, keep selected languages, or discard all subtitles
- **Profile Support** — Subtitle settings in default profile and per-library profiles

### Multi-GPU

- **Auto Detection** — Automatically detects NVIDIA, AMD, and Intel GPUs with live capability probing
- **Auto Load-Balance** — Distributes across all local GPUs and remote servers equally
- **Per-GPU Max Jobs** — configurable max concurrent encodes per GPU, auto-calculated from VRAM
- **VRAM-Aware Assignment** — GPUs with ≤2GB VRAM excluded from 4K jobs (prevents CUDA OOM)
- **Idle GPU Utilization** — Jobs can use idle GPUs even when max concurrent limit is reached
- **GPU Selection** — Auto, All Local, All Remote, specific GPU, or specific server
- **OOM Recovery** — Automatic re-queue on GPU out-of-memory (up to 3 retries)
- **Auto-Disable** — Remote GPUs automatically disabled after 3 consecutive failures

### Remote GPU (RRP)

- **Reverse-Connect** — GPU servers connect OUT to clients, NAT-friendly (no port forwarding on GPU side)
- **FUSE Mount** — Stream input files on-demand with 256KB chunks (~40% faster LAN streaming)
- **Multi-Platform** — Linux (NVENC, QSV, VAAPI, AMF) and macOS (VideoToolbox) GPU servers
- **Hardware Probing** — Tests actual GPU encoder capabilities, auto-strips unsupported flags (e.g. temporal-aq on Maxwell)
- **H.264/H.265 Badges** — Connected GPUs show verified encoder capabilities
- **HMAC-SHA256 Auth** — Secure authentication with shared secret and heartbeat monitoring
- **SHA256 Verification** — Output file integrity check
- **CUDA Hwaccel** — Hardware decode on NVIDIA remote GPUs
- **VideoToolbox** — Apple Silicon hardware encoding on macOS (H.265/H.264)
- **Live Progress** — Real-time encoding progress with estimated speed and bitrate
- **Cancel Propagation** — Cancelling kills ffmpeg on remote, lazy FUSE unmount, temp cleanup
- **Auto Cleanup** — FUSE unmount + temp files removed on cancel, failure, or disconnect
- **Load Balancing** — Distribute jobs across GPU servers by name with per-GPU max\_jobs
- **GPU Name Targeting** — Select specific GPUs by name (stable across reconnects)
- **Per-GPU Controls** — Power button with spinner, connection error tooltips, enable/disable
- **Auto-Reconnect** — GPU servers reconnect with exponential backoff on disconnect
- **Single Binary** — `recode-remote` handles server, client, listener, and connect

### Plex Integration

- **Library Scanner** — Scan Plex libraries and detect candidates for re-encoding
- **Webhook Auto-Encode** — New media added to Plex is automatically queued
- **Post-Encode Rescan** — Plex library refreshed after each encode completes
- **Token Auto-Detection** — Finds Plex token from Preferences.xml
- **Library Profiles** — Different encode settings per Plex library

### Queue & History

- **Drag & Drop** — Reorder queue items by dragging
- **Concurrent Encodes** — Run multiple encodes simultaneously
- **Pause / Resume** — Pause individual encodes (SIGSTOP/SIGCONT)
- **Search & Filter** — Search by name, filter by codec, HDR type, status
- **Pagination** — Configurable page size for queue, history, and scan results
- **Unlimited History** — Full encode history with detailed logs
- **Retry Failed** — One-click retry for failed or cancelled jobs
- **Discard Larger** — Automatically discard encodes that are larger than the original
- **Skip Tagging** — Discarded files tagged with RECODE\_SKIPPED metadata, excluded from future scans
- **Delete Safety** — Never deletes original if encoded file is less than 5% of original size
- **DV Fallback** — RPU extraction failure falls back to HDR10 instead of failing the job

### Automation

- **Folder Watch** — Monitor directories for new files and auto-queue
- **Scheduled Encoding** — Set active hours (e.g., encode overnight only)
- **Auto-Start Queue** — Queue starts automatically when jobs are added
- **Library Profiles** — Per-library settings for codec, quality, resolution, audio

### Web Interface

- **Real-Time Progress** — Live encoding stats via WebSocket with interpolated progress between updates
- **Smooth Progress** — Preparing phase, decimal percentages, frame-based fallback, 1-second interpolation
- **System Monitoring** — CPU, RAM, GPU utilization, temperature, VRAM in header
- **GPU Graphs** — Per-GPU utilization, VRAM, and temperature charts with VRAM capability labels
- **Dark / Light Theme** — Toggle with header icon or in Settings
- **Mobile Responsive** — Adapts to desktop, tablet, and mobile screens
- **Settings Modal** — All settings in one place, save without closing, unsaved indicator
- **System Transcodes** — View all ffmpeg/Plex processes, remote GPU jobs on servers
- **System Logs** — Live log viewer with Server, ffmpeg, Listener, and Connector tabs
- **Stats Charts** — Daily encode count and space saved bar charts (last 30 days)
- **Find Duplicates** — Detect original + encoded file pairs
- **Space Savings** — Total potential savings for scanned libraries
- **Scan Cache** — Instant re-scans with local metadata cache
- **Stats Tab** — Aggregate stats: files encoded, space saved, compression ratio

### Security

- **Login Page** — Username/password authentication with session cookies
- **Default Credentials** — admin/admin with forced password change on first login
- **SSL/TLS** — Auto-generated self-signed certificate, custom cert upload, or Let’s Encrypt
- **Let’s Encrypt** — One-click free trusted SSL via certbot with HTTP (port 80) or DNS (TXT record) verification
- **SSL Toggle** — Enable/disable HTTPS from settings with inline restart confirmation
- **Root Password** — Let’s Encrypt uses root password entered in the browser, never saved
- **API Keys** — Bearer token authentication for programmatic access

### Updates & Deployment

- **Python + venv** — Runs directly from Python with automatic venv setup
- **Auto-Updates** — Daily GitHub check, one-click update with backup and live log
- **Setup Wizard** — System detection, GPU config, Plex integration, GPU Server Mode
- **Bundled Tools** — ffmpeg, ffprobe, recode-remote, dovi\_tool, mediainfo, mkvmerge
- **Multi-Distro** — Ubuntu, Debian, Fedora, RHEL, Alma, Rocky, openSUSE, SLES, Arch, Manjaro
- **Per-Distro NVIDIA** — Separate driver install handlers per distribution
- **Systemd Service** — Auto-start on boot with restart watcher
- **FUSE Auto-Setup** — Installer installs fuse3 and configures fuse.conf

## Quick Install

```bash
wget -qO- https://github.com/tarquin-code/recode/releases/latest/download/recode.tar.gz | tar xz && cd recode && sudo bash install.sh

```

Then open `http://your-server:9877` in a browser.

## Requirements

### Linux (Full Application)

- **GPU** (NVIDIA, AMD, or Intel) with drivers — auto-detected, CPU-only mode available
- **Linux** (RHEL/Debian/Arch-based distros)
- **Python 3.9+** — installer sets up a virtualenv automatically

### macOS (GPU Server Only)

- **macOS 11+** on Apple Silicon (M1/M2/M3/M4)
- **macFUSE** — `brew install macfuse` (required for FUSE mount mode)
- Uses **VideoToolbox** hardware encoder for H.265/H.264

### Bundled Tools (no manual install needed)

**Linux:**

- `recode_server.py` — Main application (Python, runs in auto-created venv)
- `ffmpeg` / `ffprobe` — Jellyfin static build with NVENC, QSV, VAAPI, libx265
- `recode-remote` — RRP remote GPU encoding (server + client + ping)
- `dovi_tool` — Dolby Vision metadata conversion
- `mkvmerge` / `mkvextract` — MKV muxing for DV encodes
- `mediainfo` — Detailed media analysis

**macOS (separate DMG download):**

- `Recode GPU Server.app` — Native macOS app with tray icon, settings UI, and auto-cleanup
- Includes `recode-remote`, `ffmpeg`, `ffprobe` (ARM64, VideoToolbox)

## Remote GPU Encoding

Recode includes RRP (Recode Remote Protocol) for offloading encodes to remote GPU servers. Supports both Linux (NVENC) and macOS (VideoToolbox) servers.

### Linux GPU Server Setup

1. **Install Recode** on the GPU server (same installer)
2. **Enable GPU Server Mode** in Settings → Remote GPU, set a port and shared secret
3. **Add Remote Servers** on the client in Settings → Remote GPU
4. **Select “Remote” targets** in the GPU Target dropdown

### macOS GPU Server Setup

1. Install [macFUSE](https://osxfuse.github.io/) — approve the kernel extension in System Settings → Privacy & Security, then reboot
2. Download `Recode-GPU-Server.dmg` from the [latest release](https://github.com/tarquin-code/recode/releases)
3. Open the DMG and drag **Recode GPU Server** to Applications
4. Launch the app, enter your Recode server address and secret in Settings, click Start

The app handles everything — VideoToolbox encoding, FUSE streaming, tray icon with live progress, and auto-cleanup. No command line needed.

### How It Works

The remote server mounts input files on-demand via FUSE — encoding starts immediately without uploading. Only the bytes ffmpeg reads are transferred. Output is returned with SHA256 verification.

### Firewall

Open the RRP port (default 9878) on the GPU server:

```bash
# Linux: firewalld (RHEL/Fedora/Rocky/Alma)
firewall-cmd --permanent --add-port=9878/tcp && firewall-cmd --reload

# Linux: ufw (Ubuntu/Debian)
ufw allow 9878/tcp

# macOS
sudo /usr/libexec/ApplicationFirewall/socketfilterfw --add ~/recode/recode-remote --unblockapp ~/recode/recode-remote

```

## Configuration

On first launch, a setup wizard guides you through:

1. System capability detection (GPU, ffmpeg features, tools)
2. GPU configuration and concurrency limits
3. Plex integration (auto-detects token)
4. Default encoding settings
5. Queue behavior
6. GPU Server Mode (optional)

All settings are configurable via the web UI at any time.

## Plex Webhook

Auto-encode new media added to Plex:

1. Plex → Settings → Webhooks
2. Add: `http://your-server:9876/api/plex-webhook` (HTTP webhook port, works with SSL enabled)
3. New media is automatically queued using library profiles

## Service Management

```bash
systemctl start recode # Start
systemctl stop recode # Stop
systemctl restart recode # Restart
systemctl status recode # Status
journalctl -u recode -f # Live logs

```

## License

Copyright (C) 2026 Tarquin Douglass

This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version.

See LICENSE for the full text.

### Third-Party

This software uses: ffmpeg (LGPL/GPL), dovi\_tool (MIT), mkvtoolnix (GPL), NVIDIA NVENC (proprietary). Dolby, Dolby Vision, and Dolby Digital are trademarks of Dolby Laboratories. Plex is a trademark of Plex, Inc.

---

<div class="post-metadata">

### Author: ![system](https://global.discourse-cdn.com/plex/original/3X/2/a/2acb9765406f63293d357b4ec509ec39aa28f2ad.png) [@system](https://forums.plex.tv/u/system)
#### Post date: [June 13, 2026, 5:53pm UTC](https://forums.plex.tv/t/plex-re-encoder-free-gpu-accelerated-hevc-batch-encoder-with-dolby-vision-support/937134/2 "2026-06-13T17:53:02Z")

</div>

This topic was automatically closed 90 days after the last reply. New replies are no longer allowed.
