Development

Notes for contributors working on the client codecs, protocol, or daemon.

Repository Layout

Build Instructions

macOS (Server & Client)

The easiest way to build everything on a Mac:

make build

Release builds default to MACOSX_DEPLOYMENT_TARGET=13.0. Keep that default when building on macOS 27 or newer SDKs unless a release intentionally raises the minimum supported macOS version.

This produces:

The vtremoted binary must not hard-link Homebrew liblz4 or libzstd; those libraries are runtime-only optional dependencies for LZ4/Zstd wire compression. The release smoke test checks both the macOS 13.0 minimum OS and the absence of absolute Homebrew dylib load commands.

Linux / Windows (Client Only)

Linux CI and release artifacts target x86_64. The project does not publish or test 32-bit i686 Linux builds.

  1. Install assembler and library dependencies:
    nasm -v
    yasm --version
    

    Install current nasm and yasm before building. FFmpeg’s x86 assembly can fail early with older or missing assemblers.

  2. Configure:
    cd ffmpeg
    ./configure --enable-videotoolbox-remote --enable-liblz4 --enable-libzstd \
      --enable-libvmaf --enable-libaom --enable-libdav1d --enable-libsvtav1
    
  3. Build:
    make -j$(nproc)
    

The repository Makefile wraps the same build with project defaults:

make build-ffmpeg

If a Linux x86_64 source build fails in FFmpeg x86 assembly after installing current assemblers, use the diagnostic compatibility fallback:

make clean-ffmpeg
make build-ffmpeg FFMPEG_DISABLE_X86ASM=1

This appends --disable-x86asm. It is slower and should not be the default path, but it confirms whether the failure is limited to the assembler/toolchain surface.

Testing & Benchmarks

Integration scripts are located in tests/integration/.

Setup

Export the path to your server binary:

export VTREMOTED="$PWD/vtremoted/.build/release/vtremoted"

Key Scripts

Running a Benchmark

To reproduce the performance numbers:

VTREMOTE_HOST=<mac-host> VTREMOTE_PORT=5555 VTREMOTE_USE_EXISTING=1 \
VTREMOTED=/bin/true tests/integration/bench_vtremote.sh

Adaptive options

-vt_remote_wire_compression auto   # pick LZ4 vs Zstd based on resolution/FPS
-vt_remote_inflight auto           # adjust inflight over time

GitHub Metadata and Release Notes

The repository includes small gh-based helpers for keeping the public GitHub surfaces in sync.

Prerequisite:

gh auth status

Key commands:

make sync-github-metadata
make release-notes TAG=v0.3.1
make release-notes-all
bash scripts/generate_release_notes.sh v0.3.1
bash tests/test_llms_release_version.sh

What they do:

Release checklist:

Artifact Smoke Checks

CI smoke-tests packaged tarballs after creating them. To reproduce locally:

bash scripts/smoke_release_artifact.sh ffmpeg ffmpeg-linux-x86_64.tar.gz
bash scripts/smoke_release_artifact.sh vtremoted vtremoted-macos-arm64.tar.gz

The FFmpeg smoke check unpacks the tarball and verifies the remote encoders, remote decoders, vtremote_transcode, and quality filters are present. The vtremoted smoke check verifies --version and --help without binding a socket.