Pelorus is the GPU pre-encode sibling of vmafx and follows the same engineering contract. Read AGENTS.md and docs/principles.md before opening a PR.
- Branch + PR. Never commit to
master; never force-push it. Squash or fast-forward merge only. - Conventional Commits.
type(scope): subject. Types:feat, fix, perf, refactor, docs, test, build, ci, chore, revert.!/BREAKING CHANGE:for breaks. Branches:type/<slug>. - Local gate before pushing.
meson test -C build --suite=fastplusclang-format --dry-run+clang-tidyon touched files. CI re-runs the full gate; catch it locally first. - Lint-clean touched files. Every file your PR touches leaves the tree
warning-clean to
-Wall -Wextra -Werrorand clang-tidy. A// NOLINTneeds an inline citation (ADR / research digest / load-bearing invariant).
These mirror vmafx's rules; reviewers verify them.
- ADR for any non-trivial architectural / policy / scope decision —
docs/adr/NNNN-kebab.md, Nygard format, landed before the implementing commit. Runscripts/adr/next-free.sh --claim <slug>to reserve the number. Cite the user request (req) or popup answer (Q<r>.<q>) in## References. - Per-surface docs — any user-discoverable surface (a filter, an AVOption,
a public
libpelorusAPI, an interop section, ameson_options.txtflag) ships human-readable docs underdocs/in the same PR. No docs = unmergeable. See docs/adr/0100-doc-substance-rule.md. - Six deep-dive deliverables for fork-local PRs — research digest,
decision matrix (the ADR's alternatives table),
AGENTS.mdinvariant note, reproducer command in the PR body,changelog.d/<section>/<topic>.mdfragment, and adocs/rebase-notes.mdentry when the change affects the FFmpeg patch stack. See docs/adr/0108-deep-dive-deliverables-rule.md. - Patch-stack sync — a change to any
libpelorussurface the FFmpeg patches consume updatesffmpeg-patches/files/+ the regenerated patch in the same PR, verified by a full series replay (ffmpeg-patches/test/build-and-run.sh).
The PelorusSideData interop ABI is append-only (interop.h R1/R2). Adding
a field or section bumps PELORUS_ABI_MINOR and adds a case to the shared
conformance fixture (libpelorus/test/interop_test.c). A breaking change is
forbidden — mint a new section bit instead. See
docs/adr/0103-interop-sidedata-abi.md.
By contributing you agree your work is licensed under BSD-2-Clause-Patent
(libpelorus) / LGPL-2.1 (files that become part of FFmpeg). New wholly-new
files carry the Copyright 2026 Lusoris header for their tree.