docs: screenshots, sanitize PII, expand hardware encode docs
- Add 4 Playwright screenshots: main UI, scanning, title mapping, mobile - Embed screenshots in README, index.md, and quickstart.md - Sanitize docs: replace real name/hostname (alan/strahl) with generic examples (mediauser/encode-box) - ffmpeg.md: add NVENC, QSV, and VAAPI hardware acceleration sections; document QSV custom build requirement and jellyfin-ffmpeg workaround
This commit is contained in:
parent
5e5b3c8df2
commit
12f540d072
11 changed files with 86 additions and 10 deletions
|
|
@ -18,6 +18,14 @@ No npm packages. No Python. No config files to edit by hand — just a browser,
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
|
## Screenshots
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
## Features
|
## Features
|
||||||
|
|
||||||
- **Disc scanning** — detects `VIDEO_TS`, `BDMV`, multi-disc, and ISO structures automatically
|
- **Disc scanning** — detects `VIDEO_TS`, `BDMV`, multi-disc, and ISO structures automatically
|
||||||
|
|
|
||||||
|
|
@ -49,8 +49,8 @@ HANDBRAKE_PRESET=H.265 MKV 1080p30
|
||||||
When set, Discarr sends encode jobs to a remote host over SSH instead of running them locally.
|
When set, Discarr sends encode jobs to a remote host over SSH instead of running them locally.
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
SSH_TRANSCODE_HOST=strahl
|
SSH_TRANSCODE_HOST=encode-box
|
||||||
SSH_TRANSCODE_USER=alan
|
SSH_TRANSCODE_USER=mediauser
|
||||||
SSH_TRANSCODE_MEDIA_ROOT=/media
|
SSH_TRANSCODE_MEDIA_ROOT=/media
|
||||||
# Optional: override SSH key path (defaults to ~/.ssh/id_rsa)
|
# Optional: override SSH key path (defaults to ~/.ssh/id_rsa)
|
||||||
SSH_TRANSCODE_KEY=~/.ssh/id_ed25519
|
SSH_TRANSCODE_KEY=~/.ssh/id_ed25519
|
||||||
|
|
|
||||||
|
|
@ -6,6 +6,12 @@ Discarr is a self-hosted web UI that bridges disc ripping (VIDEO_TS / BDMV / ISO
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
|
## Screenshots
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
## How it works
|
## How it works
|
||||||
|
|
||||||
```
|
```
|
||||||
|
|
|
||||||
|
|
@ -50,12 +50,18 @@ Open **http://localhost:8603**.
|
||||||
|
|
||||||
## 4. Scan a disc
|
## 4. Scan a disc
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
|
||||||
1. Paste the path to a disc directory or ISO (e.g. `/media/disc/VIDEO_TS`) into the **Path** field
|
1. Paste the path to a disc directory or ISO (e.g. `/media/disc/VIDEO_TS`) into the **Path** field
|
||||||
2. Click **Scan**
|
2. Click **Scan**
|
||||||
3. Discarr lists the disc titles with duration and chapter count
|
3. Discarr lists the disc titles with duration and chapter count
|
||||||
|
|
||||||
## 5. Map titles to arr items
|
## 5. Map titles to arr items
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
|
||||||
For each title:
|
For each title:
|
||||||
|
|
||||||
1. Choose **TV (Sonarr)** or **Movie (Radarr)**
|
1. Choose **TV (Sonarr)** or **Movie (Radarr)**
|
||||||
|
|
|
||||||
BIN
docs/screenshots/01-main.png
Normal file
BIN
docs/screenshots/01-main.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 76 KiB |
BIN
docs/screenshots/02-scanning.png
Normal file
BIN
docs/screenshots/02-scanning.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 81 KiB |
BIN
docs/screenshots/03-title-mapping.png
Normal file
BIN
docs/screenshots/03-title-mapping.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 81 KiB |
BIN
docs/screenshots/04-mobile.png
Normal file
BIN
docs/screenshots/04-mobile.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 57 KiB |
|
|
@ -39,11 +39,67 @@ FFMPEG_ARGS=-c:v libx265 -crf 22 -preset medium -c:a copy -map 0
|
||||||
| 22–24 | High quality | Standard library |
|
| 22–24 | High quality | Standard library |
|
||||||
| 26–28 | Good quality | Space-constrained |
|
| 26–28 | Good quality | Space-constrained |
|
||||||
|
|
||||||
## Checking ffmpeg capabilities
|
## Hardware acceleration
|
||||||
|
|
||||||
|
Hardware encoding is significantly faster than software (`libx265`) but requires a supported GPU and the right ffmpeg build.
|
||||||
|
|
||||||
|
### NVIDIA NVENC
|
||||||
|
|
||||||
|
Most distro-packaged ffmpeg builds include NVENC support. Requires the NVIDIA driver (no CUDA toolkit needed at runtime).
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# H.265 via NVENC
|
||||||
|
FFMPEG_ARGS=-c:v hevc_nvenc -preset p4 -cq 22 -c:a aac -b:a 192k
|
||||||
|
|
||||||
|
# Verify NVENC is available
|
||||||
|
ffmpeg -encoders | grep nvenc
|
||||||
|
```
|
||||||
|
|
||||||
|
### Intel QSV (Quick Sync Video)
|
||||||
|
|
||||||
|
!!! warning "Custom ffmpeg build required"
|
||||||
|
Most distro-packaged ffmpeg builds **do not** include QSV support — it requires `--enable-libmfx` (legacy) or `--enable-libvpl` + `--enable-qsv` (oneVPL, Intel 11th gen+) at compile time.
|
||||||
|
|
||||||
|
**Easiest option:** use `jellyfin-ffmpeg`, which ships QSV-enabled builds for Ubuntu/Debian:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# Add Jellyfin repo and install jellyfin-ffmpeg
|
||||||
|
curl -fsSL https://repo.jellyfin.org/install-debuntu.sh | sudo bash
|
||||||
|
sudo apt install jellyfin-ffmpeg7
|
||||||
|
|
||||||
|
# Then point Discarr at the jellyfin binary
|
||||||
|
FFMPEG_BIN=/usr/lib/jellyfin-ffmpeg/ffmpeg
|
||||||
|
FFPROBE_BIN=/usr/lib/jellyfin-ffmpeg/ffprobe
|
||||||
|
```
|
||||||
|
|
||||||
|
Alternatively, build ffmpeg from source with `--enable-libvpl` (see [FFmpeg compilation guide](https://trac.ffmpeg.org/wiki/CompilationGuide)).
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# H.265 via QSV (requires QSV-enabled ffmpeg)
|
||||||
|
FFMPEG_ARGS=-c:v hevc_qsv -global_quality 22 -c:a aac -b:a 192k
|
||||||
|
|
||||||
|
# Verify QSV is available
|
||||||
|
ffmpeg -encoders | grep qsv
|
||||||
|
ffmpeg -hwaccels | grep qsv
|
||||||
|
```
|
||||||
|
|
||||||
|
### VAAPI (AMD/Intel on Linux)
|
||||||
|
|
||||||
|
Standard distro ffmpeg builds usually include VAAPI. Works on AMD GPUs and Intel integrated graphics.
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# H.265 via VAAPI
|
||||||
|
FFMPEG_ARGS=-vaapi_device /dev/dri/renderD128 -vf 'format=nv12,hwupload' -c:v hevc_vaapi -qp 22 -c:a aac -b:a 192k
|
||||||
|
|
||||||
|
# Verify VAAPI device
|
||||||
|
ls /dev/dri/renderD*
|
||||||
|
ffmpeg -hwaccels | grep vaapi
|
||||||
|
```
|
||||||
|
|
||||||
|
### Checking what your ffmpeg supports
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
ffmpeg -codecs | grep hevc
|
ffmpeg -codecs | grep hevc
|
||||||
ffmpeg -hwaccels
|
ffmpeg -hwaccels
|
||||||
|
ffmpeg -encoders | grep -E "nvenc|qsv|vaapi|hevc"
|
||||||
```
|
```
|
||||||
|
|
||||||
If hardware acceleration is available (NVENC, VAAPI, QSV), you can set it in `FFMPEG_ARGS` for significantly faster encodes.
|
|
||||||
|
|
|
||||||
|
|
@ -37,7 +37,7 @@ HandBrakeCLI --preset-list
|
||||||
Export a preset from HandBrake's GUI, save it to a JSON file, and reference it:
|
Export a preset from HandBrake's GUI, save it to a JSON file, and reference it:
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
HANDBRAKE_PRESET_FILE=/home/alan/.config/handbrake/my-preset.json
|
HANDBRAKE_PRESET_FILE=/home/mediauser/.config/handbrake/my-preset.json
|
||||||
HANDBRAKE_PRESET=My Custom Preset
|
HANDBRAKE_PRESET=My Custom Preset
|
||||||
```
|
```
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -30,8 +30,8 @@ Arr import
|
||||||
## Configuration
|
## Configuration
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
SSH_TRANSCODE_HOST=strahl # hostname or IP of the encode machine
|
SSH_TRANSCODE_HOST=encode-box # hostname or IP of the encode machine
|
||||||
SSH_TRANSCODE_USER=alan # SSH user on that machine
|
SSH_TRANSCODE_USER=mediauser # SSH user on that machine
|
||||||
SSH_TRANSCODE_MEDIA_ROOT=/media # path where media is accessible on the remote
|
SSH_TRANSCODE_MEDIA_ROOT=/media # path where media is accessible on the remote
|
||||||
SSH_TRANSCODE_KEY=~/.ssh/id_ed25519 # optional: SSH key (defaults to ~/.ssh/id_rsa)
|
SSH_TRANSCODE_KEY=~/.ssh/id_ed25519 # optional: SSH key (defaults to ~/.ssh/id_rsa)
|
||||||
```
|
```
|
||||||
|
|
@ -47,13 +47,13 @@ ssh-keygen -t ed25519 -C "discarr-transcode"
|
||||||
Copy the public key to the remote host:
|
Copy the public key to the remote host:
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
ssh-copy-id -i ~/.ssh/id_ed25519.pub alan@strahl
|
ssh-copy-id -i ~/.ssh/id_ed25519.pub mediauser@encode-box
|
||||||
```
|
```
|
||||||
|
|
||||||
Verify passwordless login:
|
Verify passwordless login:
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
ssh -i ~/.ssh/id_ed25519 alan@strahl echo "OK"
|
ssh -i ~/.ssh/id_ed25519 mediauser@encode-box echo "OK"
|
||||||
```
|
```
|
||||||
|
|
||||||
## Shared media mount (recommended)
|
## Shared media mount (recommended)
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue