Skip to content

Jellyfin FFmpeg Jellyfin FFmpeg

Description / nameInput element
Container Registry
Container Configuration Root Path
Jellyfin FFmpeg /work Path

Build Status Last Commit

FFmpeg with the Jellyfin patch set for HDR tone mapping (the SIMD-optimized
tonemapx / libplacebo filters) on FreeBSD. Ships both the 7.x and 8.x lines:
jellyfin-ffmpeg (= v7, the default) / jellyfin-ffmpeg7 / jellyfin-ffmpeg8
(and matching *probe) are all on PATH. Standalone CLI image, not a service.

Registry ghcr.io/daemonless/jellyfin-ffmpeg
Daemonless daemonless/jellyfin-ffmpeg
Source jellyfin/jellyfin-ffmpeg
Website jellyfin.org

Version Tags

Multi-arch manifests — resolve automatically to the right image for your platform.

Tag Description Best For
7 / latest FreeBSD Quarterly. Uses stable, tested packages. Most users — recommended.
8 Upstream Binary. Built from official release. Alternative build.
Tag Description Best For
7-amd64 / latest-amd64 FreeBSD Quarterly. Uses stable, tested packages. Most users — recommended.
8-amd64 Upstream Binary. Built from official release. Alternative build.
Tag Description Best For
7-aarch64 / latest-aarch64 FreeBSD Quarterly. Uses stable, tested packages. Most users — recommended.
8-aarch64 Upstream Binary. Built from official release. Alternative build.

Before deploying, ensure your host environment is ready. See the Quick Start Guide for host setup instructions, including the security model for host vs. container privileges.

Deployment

1
2
3
4
5
6
7
8
services:
  jellyfin-ffmpeg:
    image: "ghcr.io/daemonless/jellyfin-ffmpeg:latest"
    container_name: jellyfin-ffmpeg
    volumes:
      - "/path/to/containers/jellyfin-ffmpeg/work:/work"
    # always (not unless-stopped) so FreeBSD's podman rc.d auto-starts it at boot
    restart: always

Save as compose.yaml, then run podman-compose up -d.

1
2
3
podman run -d --name jellyfin-ffmpeg \
  -v /path/to/containers/jellyfin-ffmpeg/work:/work \
  ghcr.io/daemonless/jellyfin-ffmpeg:latest

Save as run.sh, then run sh run.sh.

1
2
3
4
5
6
7
8
- name: Deploy jellyfin-ffmpeg
  containers.podman.podman_container:
    name: jellyfin-ffmpeg
    image: "ghcr.io/daemonless/jellyfin-ffmpeg:latest"
    state: started
    restart_policy: always
    volumes:
      - "/path/to/containers/jellyfin-ffmpeg/work:/work"

Save as jellyfin-ffmpeg-deploy.yaml, then run ansible-playbook jellyfin-ffmpeg-deploy.yaml.

Experimental

Bastille's OCI support is experimental. It requires buildah and shares the host network stack (inherit). Mount volumes with --volume HOST JAIL; without it, image-declared volumes are stored under ${bastille_volumesdir}/${jail}.

1
2
3
4
5
6
7
8
services:
  jellyfin-ffmpeg:
    name: jellyfin-ffmpeg
    image: "ghcr.io/daemonless/jellyfin-ffmpeg:latest"
    network:
      - mode: host
    volumes:
      - "/path/to/containers/jellyfin-ffmpeg/work:/work"

Save as bastille-compose.yml, then run bastille up.

1
2
3
bastille create -O \
  --volume /path/to/containers/jellyfin-ffmpeg/work /work \
  jellyfin-ffmpeg ghcr.io/daemonless/jellyfin-ffmpeg:latest inherit

Interactive Configuration

Parameters

Volumes

Path Description
/work

Implementation Details

  • Architectures: amd64, aarch64
  • User: root (UID/GID set via PUID/PGID). Defaults to 1000:1000.
  • Base: Built on ghcr.io/daemonless/base (FreeBSD 15.1).

Need help? Join our Discord community.