Skip to content

Releases: stoatworks-labs/genlock

Release list

v0.1.0

Choose a tag to compare

@github-actions github-actions released this 23 Sep 16:00

An Amiga genlock, flaws and all, as an FFGL mixer for Resolume Arena and Avenue, shown as SW Genlock — the fleet's first mixer. It keys this layer's colour 0 over the layer below the way the hardware did, and cuts the key on the computer's own pixel clock, which is not locked to the video. So the key lands a pixel or so from the fill it belongs to: a coloured fringe down one side of every overlay edge, which crawls as the two clocks drift apart, and a roll when sync is lost. Nothing is drawn on; it is what a key timed by the wrong clock does. Amiga Mode picks lores, hires or superhires, and Crawl Wrap how far the key walks before it snaps.

Install it in Extra Effects, like every other FFGL plugin, and choose it as a layer's Blend Mode. Before release the repo said "Extra Mixers"; Resolume has no such folder on either platform, so that instruction was fixed.

What is verified

By tools/verify.sh on an M4 Max, macOS 26.4, on 2026-09-22 and 2026-09-23:

  • Two inputs at two sizes with two MaxUVs (Dest 200×120 of 256×256, Src 96×70 of 128×128, out 320×200): no padding pixel reaches the picture. A null input array, zero inputs, one input, a null Dest and a null Src all return FF_FAIL without crashing.
  • A whole-pixel key delay translates the key exactly (0 of 164 bytes differ); half a texel is recovered from partial coverage at 0.4941 against 0.5000. The fill never moves.
  • The crawl follows its closed form to 0.0176 output texels over 30 frames, wrapping 3 times as predicted. The roll lands within 0.0000 rows at 640×360 and 480×270.
  • The crawl's speed across the picture is bit-identical in lores, hires and superhires; Key Delay and the tear scale with the mode as predicted, and hires at −8 is lores at −4 byte for byte.
  • Negative controls fail in the picture at both rasters, and a one-character mutation of the shipped GLSL fails a check.
  • All 21 sweepable controls measurably change the picture. oxbow probe reads SW Genlock / GL01 / mixer / inputs 2..2 / 26 parameters.
  • Render cost under 0.12 ms/frame at 4K. macOS only.
  • The nine ctest suites and the sweep also run in CI on GitHub's GPU-less macOS runner, on its software renderer, and passed. The Windows x64 DLL compiles with MSVC.
  • Windows, in Resolume Arena 7.27.1 (win-lab, Mesa llvmpipe, no GPU, 2026-09-23), a CI build set as a layer's Blend Mode, with the plugin's own log read back. The fleet's Arena gate cannot gate a mixer, so this was a manual probe. It loads from Extra Effects and registers as category 2, beside Resolume's own blend modes; it is instantiated at the composition size; both inputs arrive padded (1280×720 of 1280×768); Arena calls SetTime every frame, in milliseconds, and SetBeatInfo every frame; a parameter named Opacity is bound to the layer's opacity fader (the mixer panel's own Opacity is overridden); clearing and refilling the layer below produced no one-input call; and Arena's log stayed clean.

What is not

  • Key Source cannot be reached in Resolume. Arena's mixer panel shows 25 of the 26 parameters and leaves out Key Source, the first one, so in Resolume the key is always the default, Colour 0; Luma and Alpha keying are there only in other hosts. Why is not known. Found on Windows; macOS not looked at.
  • No frame of its output in Resolume has been looked at. A mixer's picture exists only in the composition, which Arena's API does not serve, so "renders correctly in Arena" is not claimed.
  • Never loaded into Resolume on macOS. Whether a layer's transition or autopilot also drives Opacity, and whether Resolume ever calls a mixer with one input, are still open.
  • Hires and superhires are arithmetic, not observation of real hardware; the tear at the roll seam is a look, not a model; premultiplied alpha is assumed.
  • The universal build has never run on an Intel Mac. No factory presets, no OpenFX port, no browser demo. There is a user guide at https://stoatworks-labs.com/software/genlock/guide/.

The macOS build is signed and notarised; the Windows build is unsigned, so SmartScreen warns once.