main
HEVC Re-Encode Dashboard & Worker
A lightweight, self-hosted web dashboard and queue worker for scanning media libraries and transcoding video files to HEVC MKV with selectable audio handling.
It includes a modern dark dashboard, server-side CPU/GPU detection, folder browsers, live logs, safe rename and remux handling, and an optional force re-encode mode for normalizing an entire library.
Features
- 🖥️ Cross-Platform Support: Runs on Windows and Linux hosts.
- ⚙️ Zero Hardcoded Paths: Configure Media and Temporary directories directly inside the dashboard.
- 🧬 Hardware Detection: Automatically queries and displays the host CPU and GPU names.
- 🎥 Video Encoders: Support for CPU
libx265, NVIDIA NVENC, AMD AMF, and Intel QSV. - 🎵 Audio Handling: Copy original audio, keep source-aware audio behavior, or transcode to AAC/AC3.
- 🔁 Force Re-encode Mode: Re-encode files to HEVC plus the selected audio codec even when the output is not smaller.
- 🏷️ Optional Safe Renaming: Rename outputs to Plex/Radarr/Sonarr-friendly names while preserving the library structure.
- 🧱 Remux Support: Remux compatible files to MKV without re-encoding when possible.
- 🔧 Custom Binaries: Set custom FFmpeg and FFprobe paths from the UI.
- ⚡ Auto-detected Worker Threads: Recommends a thread count based on CPU cores, with manual override.
- 🔔 Discord Webhooks: Sends structured completion embeds with a built-in test button.
- 📁 Filesystem Browser Modal: Browse drives and directories to choose media and temp folders.
- 📈 Real-Time Progress & Logs: Shows FPS, speed, ETA, progress bars, and live worker logs.
- 🧹 Safe Move and Temp Cleanup: Handles cross-filesystem moves and cleans up failed temp outputs.
Installation & Setup
Before running, ensure Python 3, FFmpeg, and FFprobe are installed on the host machine.
If you use the start_dashboard.sh script on Linux, it will attempt to automatically detect your OS and install missing dependencies!
- Windows: Download from gyan.dev and add its
binfolder to your system environment variables (PATH), or set custom paths in the Dashboard UI. - Linux (CachyOS / Arch):
sudo pacman -Sy python ffmpeg - Linux (Debian / Ubuntu):
sudo apt update && sudo apt install -y python3 python3-venv ffmpeg
How to Run
Windows
- Double-click the
start_dashboard.batscript in this repository.- This automatically creates virtual environments, installs lightweight dependencies (
Flask,Flask-CORS,requests), and launches the worker API (port 5001) and web dashboard (port 5000).
- This automatically creates virtual environments, installs lightweight dependencies (
- Open your browser and go to http://localhost:5000.
Linux
-
Make the startup script executable and run it:
chmod +x start_dashboard.sh ./start_dashboard.sh- This launches the worker API in the background (logging output to
server/worker.log), runs the dashboard in the foreground, and automatically tears down the background processes when stopped (Ctrl+C).
- This launches the worker API in the background (logging output to
-
Open your browser and go to http://localhost:5000.
Usage Guide
- Media Directory: Click the Browse button, choose an active drive/root volume, navigate to your media folder, and click Select Folder (or type it in manually).
- Temporary Directory: Set this to a fast local SSD drive to prevent network performance bottlenecks during active transcoding.
- Hardware / Codec Limits: Set your video encoder, audio format, and custom FFmpeg paths if required.
- Rename Output Files: Enable this if you want safer library-friendly names during scan and processing.
- Force Re-encode: Enable this if you want every queued file normalized to HEVC plus the selected audio codec, even when the result is larger.
- Threads: Defaults to the server's auto-detected recommended thread count, or select a manual override.
- Discord Webhook: (Optional) Paste your webhook URL. Click the Test button to confirm a success notification embed is received.
- Scan Media Library: Scans files recursively. Files smaller than the Min Size or already matched by the current target format are skipped or marked done.
- Run Processing: Starts the transcode queue.
Open Source Notes
- The project is designed to be self-hosted and does not require cloud services.
- Keep any test media out of the repository unless it is explicitly licensed for redistribution.
- If you publish on GitHub, include a short note that the worker depends on FFmpeg/FFprobe being installed on the host.
Languages
Python
52.7%
JavaScript
18.2%
HTML
17.3%
CSS
5.2%
Batchfile
4%
Other
2.6%