- 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
82 lines
2.3 KiB
Markdown
82 lines
2.3 KiB
Markdown
# SSH Transcode Workers
|
||
|
||
Offload encoding to a remote machine over SSH. Useful when your NAS or media server is low-powered and you have a separate box with more CPU or a GPU encoder.
|
||
|
||
## How it works
|
||
|
||
When SSH transcode is configured, Discarr:
|
||
|
||
1. Copies the source disc files to the remote host over SCP
|
||
2. Runs ffmpeg or HandBrake on the remote machine
|
||
3. Copies the encoded output back
|
||
4. Triggers the arr notification from the local machine
|
||
|
||
```
|
||
Discarr (local)
|
||
│
|
||
│ scp source files →
|
||
▼
|
||
Remote encode host (SSH)
|
||
│ ffmpeg / HandBrake
|
||
│
|
||
│ ← scp encoded output
|
||
▼
|
||
Discarr (local)
|
||
│ notify Sonarr/Radarr
|
||
▼
|
||
Arr import
|
||
```
|
||
|
||
## Configuration
|
||
|
||
```bash
|
||
SSH_TRANSCODE_HOST=encode-box # hostname or IP of the encode 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_KEY=~/.ssh/id_ed25519 # optional: SSH key (defaults to ~/.ssh/id_rsa)
|
||
```
|
||
|
||
## Setting up SSH key auth
|
||
|
||
Generate a key pair if you don't have one:
|
||
|
||
```bash
|
||
ssh-keygen -t ed25519 -C "discarr-transcode"
|
||
```
|
||
|
||
Copy the public key to the remote host:
|
||
|
||
```bash
|
||
ssh-copy-id -i ~/.ssh/id_ed25519.pub mediauser@encode-box
|
||
```
|
||
|
||
Verify passwordless login:
|
||
|
||
```bash
|
||
ssh -i ~/.ssh/id_ed25519 mediauser@encode-box echo "OK"
|
||
```
|
||
|
||
## Shared media mount (recommended)
|
||
|
||
If both machines mount the same NFS share, Discarr can skip the SCP copy entirely — it passes the already-accessible path directly to the remote transcoder.
|
||
|
||
Set the same `SSH_TRANSCODE_MEDIA_ROOT` as the NFS mount point on the remote:
|
||
|
||
```bash
|
||
SSH_TRANSCODE_MEDIA_ROOT=/mnt/media # must match the NFS mount on the remote
|
||
```
|
||
|
||
Discarr detects the shared mount and avoids copying.
|
||
|
||
## Requirements on the remote host
|
||
|
||
- `ffmpeg` + `ffprobe` (always)
|
||
- `HandBrakeCLI` (if using HandBrake as the transcoder)
|
||
- SSH server running and accessible from the Discarr host
|
||
- Write access to `SSH_TRANSCODE_MEDIA_ROOT`
|
||
|
||
## Tips
|
||
|
||
- Use a dedicated SSH key for Discarr rather than your personal key
|
||
- If encoding stalls, check disk space on the remote — HEVC encodes of full discs can use 50–100 GB of temp space
|
||
- For GPU-accelerated remote encoding (NVENC), make sure the ffmpeg on the remote is built with NVENC support: `ffmpeg -encoders | grep nvenc`
|