discarr/docs/transcoders/ssh-workers.md
pyr0ball 12f540d072
Some checks are pending
Deploy docs to GitHub Pages / build (push) Waiting to run
Deploy docs to GitHub Pages / deploy (push) Blocked by required conditions
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
2026-05-27 09:59:51 -07:00

2.3 KiB
Raw Blame History

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

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:

ssh-keygen -t ed25519 -C "discarr-transcode"

Copy the public key to the remote host:

ssh-copy-id -i ~/.ssh/id_ed25519.pub mediauser@encode-box

Verify passwordless login:

ssh -i ~/.ssh/id_ed25519 mediauser@encode-box echo "OK"

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:

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 50100 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