Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
9 changes: 9 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -8635,6 +8635,15 @@ YUV400P sources always produce luma-only output regardless of the option.
[`docs/ai/quantization.md`](../../docs/ai/quantization.md).


- **The README carries its full badge set again, and a banner.** The rc1
documentation pass had cut it from 22 badges to four, leaving no signal for
the lint, security, FFmpeg, Go and Rust lanes, the toolchain versions, the GPU
and SIMD coverage, the OpenSSF Scorecard or the licence split. All of it is
back, every badge pointing at a workflow or endpoint that resolves, plus the
Comment thread
lusoris marked this conversation as resolved.
"Why VMAFx" comparison and "Backends at a glance" sections the same pass
removed.


### Added — `vmaf-tune recommend` and `ladder` consume conformal intervals

The conformal-VQA prediction surface shipped in PR #488 (ADR-0279) now
Expand Down
110 changes: 93 additions & 17 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,19 +1,70 @@
# VMAFx
<!-- markdownlint-disable MD013 MD023 MD033 MD036 MD041 -->
<!-- A centred header needs inline HTML, a banner image, indented headings and
badge lines past 80 columns, so those five rules are off for this file.
Same directive style as docs/adr/0000-template.md. The prose below still
wraps at 80. -->
<div align="center">

[![HISS-16 Compliant](https://img.shields.io/badge/Standards-HISS--16%20Compliant-brightgreen)](AGENTS.md)
[![Tests](https://github.com/VMAFx/vmafx/actions/workflows/tests-and-quality-gates.yml/badge.svg)](https://github.com/VMAFx/vmafx/actions/workflows/tests-and-quality-gates.yml)
[![Builds](https://github.com/VMAFx/vmafx/actions/workflows/libvmaf-build-matrix.yml/badge.svg)](https://github.com/VMAFx/vmafx/actions/workflows/libvmaf-build-matrix.yml)
[![Release](https://img.shields.io/github/v/release/VMAFx/vmafx?include_prereleases&sort=semver)](https://github.com/VMAFx/vmafx/releases)
[![License](https://img.shields.io/badge/License-EUPL--1.2%20%C2%B7%20BSD--2--Clause--Patent-blue.svg)](docs/adr/1250-eupl-fork-relicense.md)
<img src="docs/assets/vmafx-readme-banner.svg" alt="VMAFx — perceptual video quality assessment, GPU-accelerated and SIMD-tuned" width="100%" />

VMAFx is a fork of [Netflix/vmaf](https://github.com/Netflix/vmaf) for
perceptual video quality assessment. It extends libvmaf with GPU and SIMD
backends, additional metrics, and tools for scoring and model workflows.
# 🎬 VMAFx

**[Full documentation](https://vmafx.github.io/vmafx/)** ·
[Documentation source](docs/index.md)
**Perceptual video quality assessment — GPU-accelerated, SIMD-tuned, numerically exact**

## Get started
*A fork of [Netflix/vmaf](https://github.com/Netflix/vmaf) that keeps the reference scores byte-for-byte*

[![Tests](https://github.com/VMAFx/vmafx/actions/workflows/tests-and-quality-gates.yml/badge.svg)](https://github.com/VMAFx/vmafx/actions/workflows/tests-and-quality-gates.yml)
[![Builds](https://github.com/VMAFx/vmafx/actions/workflows/libvmaf-build-matrix.yml/badge.svg)](https://github.com/VMAFx/vmafx/actions/workflows/libvmaf-build-matrix.yml)
[![Lint](https://github.com/VMAFx/vmafx/actions/workflows/lint-and-format.yml/badge.svg)](https://github.com/VMAFx/vmafx/actions/workflows/lint-and-format.yml)
[![Security](https://github.com/VMAFx/vmafx/actions/workflows/security-scans.yml/badge.svg)](https://github.com/VMAFx/vmafx/actions/workflows/security-scans.yml)
[![FFmpeg](https://github.com/VMAFx/vmafx/actions/workflows/ffmpeg-integration.yml/badge.svg)](https://github.com/VMAFx/vmafx/actions/workflows/ffmpeg-integration.yml)
[![Go](https://github.com/VMAFx/vmafx/actions/workflows/go-ci.yml/badge.svg)](https://github.com/VMAFx/vmafx/actions/workflows/go-ci.yml)
[![Rust](https://github.com/VMAFx/vmafx/actions/workflows/rust-ci.yml/badge.svg)](https://github.com/VMAFx/vmafx/actions/workflows/rust-ci.yml)

[![OpenSSF Scorecard](https://api.scorecard.dev/projects/github.com/VMAFx/vmafx/badge?style=for-the-badge)](https://scorecard.dev/viewer/?uri=github.com/VMAFx/vmafx)
[![HISS-16](https://img.shields.io/badge/Standards-HISS--16-06B6D4?style=for-the-badge&logo=nasa)](AGENTS.md)
[![Power of 10](https://img.shields.io/badge/NASA_JPL-Power_of_10-0B3D91?style=for-the-badge&logo=nasa)](docs/principles.md)
[![Conventional Commits](https://img.shields.io/badge/Commits-Conventional-FE5196?style=for-the-badge&logo=conventionalcommits&logoColor=white)](CONTRIBUTING.md)

[![C23](https://img.shields.io/badge/C-23-00599C?style=for-the-badge&logo=c&logoColor=white)](docs/principles.md)
[![C++23](https://img.shields.io/badge/C%2B%2B-23-00599C?style=for-the-badge&logo=cplusplus&logoColor=white)](docs/principles.md)
[![Go](https://img.shields.io/badge/Go-1.27-00ADD8?style=for-the-badge&logo=go&logoColor=white)](go.mod)
[![Rust](https://img.shields.io/badge/Rust-2024-000000?style=for-the-badge&logo=rust&logoColor=white)](bindings/rust/vmafx-sys/Cargo.toml)
[![Python](https://img.shields.io/badge/Python-3.14%2B-3776AB?style=for-the-badge&logo=python&logoColor=white)](pyproject.toml)

[![CUDA](https://img.shields.io/badge/CUDA-13.3-76B900?style=for-the-badge&logo=nvidia&logoColor=white)](docs/backends/cuda/overview.md)
[![ROCm](https://img.shields.io/badge/ROCm-10.0-ED1C24?style=for-the-badge&logo=amd&logoColor=white)](docs/backends/hip/overview.md)
[![oneAPI](https://img.shields.io/badge/SYCL-oneAPI-0071C5?style=for-the-badge&logo=intel&logoColor=white)](docs/backends/sycl/overview.md)
[![Metal](https://img.shields.io/badge/Metal-Apple_Silicon-000000?style=for-the-badge&logo=apple&logoColor=white)](docs/backends/metal/index.md)
[![SIMD](https://img.shields.io/badge/SIMD-AVX2_·_AVX--512_·_NEON_·_SVE2-8B5CF6?style=for-the-badge)](docs/backends/index.md)

[![Tag](https://img.shields.io/github/v/tag/VMAFx/vmafx?style=for-the-badge&label=version&color=3b82f6)](https://github.com/VMAFx/vmafx/tags)
[![FFmpeg](https://img.shields.io/badge/FFmpeg-n9.0.1-007808?style=for-the-badge&logo=ffmpeg&logoColor=white)](docs/usage/ffmpeg.md)
[![License](https://img.shields.io/badge/License-EUPL--1.2_·_BSD--2--Clause--Patent-blue.svg?style=for-the-badge)](docs/adr/1250-eupl-fork-relicense.md)
[![Ko-fi](https://img.shields.io/badge/Support-Ko--fi-FF5E5B?style=for-the-badge&logo=kofi&logoColor=white)](https://ko-fi.com/lusoris)

**[📖 Full documentation](https://vmafx.github.io/vmafx/)** · [Documentation source](docs/index.md)

</div>

---

## 🎯 Why VMAFx

VMAFx keeps upstream's numbers and adds the parts a production pipeline needs. The
three Netflix reference pairs are a required CI gate, so every change below is
measured against scores that never move.

| | Upstream `libvmaf` | VMAFx |
| --- | --- | --- |
| **GPU backends** | CUDA | CUDA · SYCL · HIP · Metal, selected at runtime |
| **SIMD** | AVX2, AVX-512 | AVX2 · AVX-512 · NEON · SVE2, held to feature-specific parity tolerances |
| **Output precision** | `%.6f` | `%.6f` by default, `--precision=max` for IEEE-754 round-trip |
| **Model surface** | `.json` / `.pkl` | plus ONNX tiny models with a signed registry |
| **Integrations** | FFmpeg filter | FFmpeg, an MCP server, a Kubernetes operator, Go and Rust bindings |
| **Numerical contract** | — | cross-backend parity is a gate, not a promise |

## 🚀 Get started

Follow the [installation and source-build guide](docs/getting-started/index.md)
for your platform. For a container workflow, see [Docker](docs/usage/docker.md).
Expand All @@ -24,11 +75,36 @@ After installation, compare a matching reference and distorted Y4M pair:
vmaf --reference reference.y4m --distorted distorted.y4m --json --output scores.json
```

See the [CLI reference](docs/usage/cli.md) for raw YUV geometry, model selection,
backend selection and output options. For compressed inputs such as MP4, use
Raw YUV needs its geometry spelled out, and a GPU backend is one flag:

```sh
vmaf --reference ref.yuv --distorted dis.yuv \
--width 1920 --height 1080 --pixel_format 420 --bitdepth 8 \
--backend cuda --feature cambi --json --output scores.json
```

See the [CLI reference](docs/usage/cli.md) for model selection, backend selection
and output options. For compressed inputs such as MP4, use
[FFmpeg integration](docs/usage/ffmpeg.md).

## Guides and reference
## 🧩 Backends at a glance

Every GPU-backed feature extractor has at least one device twin, and each twin
is held to the CPU reference by the cross-backend parity gate. The coverage
matrix below distinguishes those extractors from CPU-only metrics.

| Backend | Selected with | Notes |
| --- | --- | --- |
| CPU | `--backend cpu` | scalar reference; SIMD paths dispatch automatically |
| CUDA | `--backend cuda` | NVIDIA, CUDA 13.3 |
| SYCL | `--backend sycl` | Intel oneAPI; fp64-free device contract |
| HIP | `--backend hip` | AMD ROCm 10.0 |
| Metal | `--backend metal` | Apple Silicon, Apple Family 7 and later |

See [GPU and SIMD backends](docs/backends/index.md) for feature coverage per
backend and the tolerances the gate enforces.

## 📚 Guides and reference

| Task | Documentation |
| --- | --- |
Expand All @@ -44,7 +120,7 @@ backend selection and output options. For compressed inputs such as MP4, use
Build requirements, backend limitations and model defaults live in these
guides so they can be maintained alongside their implementations.

## Contribute
## 🤝 Contribute

Start with [CONTRIBUTING.md](CONTRIBUTING.md) for setup, required checks and
pull-request expectations. The [engineering principles](docs/principles.md)
Expand All @@ -55,7 +131,7 @@ cover coding and numerical-correctness standards; the
- [Security reporting policy](SECURITY.md)
- [Support development](https://ko-fi.com/lusoris)

## Project status
## 📈 Project status

- [Roadmap and release goals](docs/roadmap.md)
- [Releases and downloads](https://github.com/VMAFx/vmafx/releases)
Expand Down
7 changes: 7 additions & 0 deletions changelog.d/added/readme-badges-and-banner.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
- **The README carries its full badge set again, and a banner.** The rc1
documentation pass had cut it from 22 badges to four, leaving no signal for
the lint, security, FFmpeg, Go and Rust lanes, the toolchain versions, the GPU
and SIMD coverage, the OpenSSF Scorecard or the licence split. All of it is
back, every badge pointing at a workflow or endpoint that resolves, plus the
"Why VMAFx" comparison and "Backends at a glance" sections the same pass
removed.
48 changes: 48 additions & 0 deletions docs/assets/vmafx-readme-banner.svg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading