Snacks is a free, open-source, self-hosted transcoder for video and music libraries. It scans, analyzes, remuxes, encodes, verifies, and automates ongoing library maintenance from one web interface.
Website: snacksvideo.com | Documentation: snacksvideo.com/docs | Source: GitHub
services:
snacks:
image: derekshreds/snacks-docker:latest
container_name: snacks
network_mode: host
volumes:
- /path/to/media:/app/work/uploads
- /path/to/snacks/config:/app/work/config
- /path/to/snacks/logs:/app/work/logs
environment:
- ASPNETCORE_ENVIRONMENT=Production
- SNACKS_WORK_DIR=/app/work
- FFMPEG_PATH=/usr/lib/jellyfin-ffmpeg/ffmpeg
- FFPROBE_PATH=/usr/lib/jellyfin-ffmpeg/ffprobe
devices:
- /dev/dri:/dev/dri
restart: unless-stopped
Change the three host paths, remove devices if the host has no Intel or AMD GPU, start the service, and open http://YOUR-SERVER-IP:6767.
Host networking lets cluster UDP discovery reach the LAN. For a standalone bridge-network deployment, remove network_mode: host and add:
ports:
- "6767:6767"
Bridge networking requires manual node URLs if you later create a cluster. Automatic discovery uses the fixed UDP port 6768.
Originals are not replaced unless Replace Original Files is explicitly enabled. Start with Analyze, leave replacement disabled, and test with a copy of one representative file.
| Mount | Purpose |
|---|---|
/app/work/uploads | Media library visible to Snacks |
/app/work/config | Settings, presets, credentials, cluster configuration, and SQLite catalog |
/app/work/logs | Rolling application logs and per-encode FFmpeg logs |
Mount any separate output or scratch directory into the container before selecting it in Snacks. Back up the complete config directory as one unit while Snacks is stopped.
| Hardware | Docker / Linux path |
|---|---|
| NVIDIA | NVENC through the NVIDIA container runtime |
| Intel | VAAPI through /dev/dri |
| AMD | VAAPI through /dev/dri |
| CPU | x264, x265, and SVT-AV1 software encoders |
Snacks tests real encoder availability at startup and can fall back to safer decode, subtitle, or software paths where the selected policy permits it. Linux detection checks every /dev/dri/renderD* device rather than assuming the first render node is the desired GPU.
QNAP commonly requires privileged: true for /dev/dri access because its video/render group layout differs from conventional Linux hosts. Unraid normally uses device/group access instead.
Install the NVIDIA Container Toolkit, then add this to the service:
runtime: nvidia
environment:
- ASPNETCORE_ENVIRONMENT=Production
- SNACKS_WORK_DIR=/app/work
- FFMPEG_PATH=/usr/lib/jellyfin-ffmpeg/ffmpeg
- FFPROBE_PATH=/usr/lib/jellyfin-ffmpeg/ffprobe
- NVIDIA_VISIBLE_DEVICES=all
- NVIDIA_DRIVER_CAPABILITIES=compute,video,utility
Passing /dev/dri or enabling privileged mode alone does not provide NVENC.
healthcheck:
test: ["CMD", "curl", "-f", "http://localhost:6767/api/health"]
interval: 30s
timeout: 10s
retries: 3
start_period: 40s
The container runs on QNAP, Synology, Unraid, and Linux Docker hosts. Native Windows 10/11 and Apple silicon macOS 11+ downloads are available from the latest GitHub release.
Content type
Image
Digest
sha256:77c4d6353…
Size
563.7 MB
Last updated
21 days ago
docker pull derekshreds/snacks-docker