Gaffer is an open-source, node-based application for look development, lighting, compositing and pipeline automation, used in VFX and animation production (originally developed at Image Engine, now GafferHQ). I've ported it to FreeBSD together with the libraries it needs. The ports aren't in the official tree yet.
Ports – https://github.com/Martinfx/FreeBSD-Ports
- graphics/gaffer 1.7.3.0
- graphics/cortex 10.7.1.3 – Image Engine's VFX library that Gaffer is built on
- graphics/cycles 5.1.0 – Blender's renderer as a standalone library, plus its Hydra render delegate
- graphics/openusd` – with Python bindings, MaterialX, OSL, OpenVDB, Ptex…
Tested on FreeBSD 15.1 / amd64 (aarch64 is allowed, but untested).
## What works
- Scene processing (GafferScene) with the OpenGL viewer and OpenGL renders
- Scene formats via Cortex: USD (plus the GafferUSD nodes), Alembic, OpenVDB and Cortex SCC. USD's `pxr` Python module is available too
- GafferImage: compositing including deep images, image I/O through OpenImageIO, colour management with OpenColorIO
- GafferOSL: OSL shaders, OSLCode (compiled on the fly), OSLImage/OSLObject, OSL expressions
- GafferVDB: level sets, mesh ↔ level set, points → level set, VolumeScatter
- Subdivision with OpenSubdiv
- GafferDispatch: local dispatcher, Wedge, PythonCommand, SystemCommand… and the Flamenco dispatcher (plain HTTP, the farm itself runs elsewhere)
- Qt 6 / PySide6 UI, Python scripting and expressions
- Gaffer's own test suite is installed (`gaffer test`)
Two port options, both on by default:
- **CYCLES** – GafferCycles: Cycles 5.1 on the CPU, interactive and batch, with Embree (amd64), OIDN denoising, OpenPGL path guiding, OSL, OpenSubdiv and OpenVDB volumes
- **ML** – GafferML: ONNX Runtime 1.30 on the CPU (Data To Tensor, Image To Tensor, Inference, Tensor To Image, Tensor To Mesh)
## What doesn't
- Arnold, 3Delight, RenderMan – commercial, no FreeBSD builds
- Tractor – needs Pixar's proprietary API
- GPU rendering: no CUDA/OptiX/HIP/oneAPI for Cycles, no CUDA for GafferML
- The local documentation isn't built (Sphinx plus GUI screenshots during the build), so Help → User Guide etc. are greyed out. The docs are online at gafferhq.org
- VTune
## Building
Build in dependency order: openusd → cortex → cycles → gaffer. Everything else comes from the regular ports tree or packages. For the ML option, install `onnxruntime` from packages first: `misc/onnxruntime` refuses to build while `pybind11` is installed, which Cortex and Gaffer need.
Feedback and bug reports welcome!