Smart Transcode

Install

Choose one way to run Smart Transcode. They give the same web page; pick the one that suits your server. Only the Linux service uses the downloadable package. Docker and Podman pull a ready-made image and need no download from this site.

Whichever you choose: user and group IDs

Smart Transcode replaces your files, so it must run as a user that may write them. Read User and group IDs before you install (it takes five minutes).

Linux service

Runs on the machine itself as a systemd service. The installer asks no questions: it installs what is missing, builds a private Python environment and starts the service. It needs a Linux system with systemd, Python 3.9 or newer and an ffmpeg that has your GPU's encoder.

Smart Transcode 1.0
Released 2026-10-27 · 600 KB · SHA-256
smart-transcode-latest.tar.gz

1. Download and unpack in a terminal on the server. The file name never changes: it always holds the newest release.

wget https://transcode.aarondyck.ca/downloads/smart-transcode-latest.tar.gz
tar xzf smart-transcode-latest.tar.gz
cd smart-transcode

2. Install, giving the folder that holds your media. The service runs as that folder's owner.

sudo ./install.sh --media /srv/media

3. Open http://your-server:8080.

Optional: verify the download with wget https://transcode.aarondyck.ca/downloads/smart-transcode-latest.tar.gz.sha256 && sha256sum -c smart-transcode-latest.tar.gz.sha256.

Next: Linux service guide (all options, GPU notes) · Upgrading · Getting started

Older versions

Every release stays available under its own file name, for example smart-transcode-1.0.tar.gz.

Docker

One image holds the program and an ffmpeg build with every encoder it uses. There is nothing to download from this site: Docker pulls the image from Docker Hub.

ImageUse it for
aarondyck/smart-transcode:1.0The current release, pinned: it never changes under you.
aarondyck/smart-transcode:latestAlways the newest release.

Platform: linux/amd64.

Set it up for your hardware

The image is the same for everyone, but the container must be configured for the video hardware you have, so that it can use the GPU. Follow the guide for yours; each has a complete compose file:

  • NVIDIA GPU: needs the NVIDIA Container Toolkit on the host
  • Intel GPU: Quick Sync / VA-API through /dev/dri
  • AMD GPU: VA-API through /dev/dri
  • No GPU: CPU encoding

Next: Docker guide · User and group IDs (PUID / PGID) · Upgrading

Podman

The same image, run with Podman 4.4 or newer, rootless or rootful. Podman needs the full image name:

docker.io/aarondyck/smart-transcode:1.0      # the current release
docker.io/aarondyck/smart-transcode:latest   # always the newest

Podman differs in three ways

  • Who the container runs as. Rootless Podman runs it as you (--userns=keep-id), so your media must belong to you.
  • GPUs. NVIDIA uses CDI (--device nvidia.com/gpu=all); Intel and AMD pass /dev/dri with --group-add keep-groups.
  • SELinux. On Fedora, RHEL and derivatives the container needs --security-opt label=disable to reach your media.

Next: Podman guide (every GPU, rootless and rootful, start at boot with Quadlet) · User and group IDs

After installing

Open the page, then follow Getting started: add a root folder, choose your encoding device and convert a first file. Behind HTTPS? See Reverse proxy. Something not working? Troubleshooting has a section for each platform.