Getting started¶
VMAFx scores how a distorted video compares with its reference, the way a viewer would judge it. You can run it as a container image, as a downloaded binary, or from a source build. Pick one below, then score your first pair.
Choose how to get VMAFx¶
| Route | What you get | Runs on | Start here |
|---|---|---|---|
| Container image | the vmaf CLI and libvmaf, CPU or one GPU backend per image | any Docker host; GPU images on x86-64 | Container image |
| Release download | the vmaf CLI, libvmaf.so.3 and libvmafx.so.1, CPU only | Linux x86-64 with glibc 2.41 or later | Release download |
| Source build | every backend your hardware and SDKs support, the tests, the tools | Linux, macOS, Windows | Build from source |
Each release is listed on the releases page. Until v1.0.0, the releases are candidates (v1.0.0-rc.N); the roadmap says what each candidate covers.
Container image¶
The images are published as ghcr.io/vmafx/vmafx:<tag>, where <tag> is a release tag such as v1.0.0-rc.2. The image's entry point is vmaf, so the arguments after the image name go straight to the CLI:
Images published after v1.0.0-rc.2 have zstd layers and need Docker Engine 23.0 or later, Docker Desktop 4.19 or later, Podman or containerd 1.5 or later (what can pull them).
| Tag | Backend | Platforms |
|---|---|---|
<tag> | CPU | linux/amd64, linux/arm64 |
<tag>-cuda13 | CUDA | linux/amd64 |
<tag>-rocm10 | HIP (AMD ROCm) | linux/amd64 |
<tag>-oneapi2026 | SYCL (Intel oneAPI) | linux/amd64 |
Note
Releases up to v1.0.0-rc.2 carry the SYCL image as <tag>-oneapi2025 only. Later releases publish both names (docker-publish-production.yml).
Docker shows how to mount your videos and how to give a GPU image access to its device.
Release download¶
Each release attaches a CPU build of the CLI for Linux x86-64:
| Asset | Contents |
|---|---|
vmaf | the command-line tool |
libvmaf.so, libvmaf.so.3, libvmaf.so.3.0.0 | the libvmaf API library the tool loads |
libvmafx.so, libvmafx.so.1, libvmafx.so.1.0.0 | the VMAFx engine library; the tool and libvmaf.so.3 both load it |
models.tar.gz | the VMAF model files |
*.bundle | a Sigstore signature for each file |
- Download
vmaf, the threelibvmaf.so*files and the threelibvmafx.so*files into one directory. The tool finds both libraries next to itself, so noLD_LIBRARY_PATHis needed. -
Restore the executable bit, which a download does not keep:
-
Optional: verify the signatures with the consumer verification recipes.
The binary is built with AVX-512 enabled and without the ONNX runtime, so the --tiny-* options are not available in it (build-native-release-artifacts.sh).
Build from source (any platform)¶
A source build gives you the GPU backends, the tests and the companion tools.
-
Install the build dependencies for your platform:
Platform Package manager Guide Ubuntu 22.04 / 24.04 / 26.04 apt Ubuntu Fedora, RHEL 9 family dnf Fedora Arch Linux pacman Arch Alpine (musl, CPU only) apk Alpine macOS (Apple silicon or Intel) Homebrew macOS Windows, MSVC winget or Chocolatey Windows Windows, MSYS2 / MinGW-w64 pacman (MSYS2) Building on Windows -
From the repository root, configure a CPU build. Meson's source directory is
core/: -
Compile and run the unit tests:
The CLI is build/tools/vmaf (build/tools/vmaf.exe on Windows), with build/tools/vmafx as a second name for the same program.
Use a fresh build directory for each backend configuration. The backend guide lists the SDK and the Meson options each backend needs, and build flags lists every option. For a container with every toolchain installed, see the dev-MCP container.
Compilers¶
GCC and clang are the reference compilers: the Netflix golden-score gate builds with one of them (ADR-1317). An Intel icx / icpx build on Linux links glibc's math library, so its CPU scores equal a GCC build's (ADR-1495). No C or C++ file is compiled with floating-point contraction on any compiler (ADR-1461).
Next steps¶
- Score your first pair and read the output.
- Choose a backend for your hardware.
- Use the CLI reference, the C API or the FFmpeg filter.
- To report results from hardware the project does not own, use the tester image.