Releases: stoatworks-labs/wheel
Release list
v0.1.0
A single-chip DLP projector — the colour wheel, the retina that adds its sub-fields up, and the rainbow effect a moving eye sees through it — as an FFGL effect for Resolume Arena and Avenue, shown as SW Wheel. A single-chip DLP does not show a colour picture: it shows a red one, then a green one, then a blue one (and on many wheels white or CMY), in turn, through a spinning filter wheel, and the eye adds them up. It only adds them up correctly if the eye is still. So the model is a retina, not a filter: each sub-field is integrated displaced by the eye's travel during it.
A still eye sees the input exactly, at any wheel speed. Pursuit fringes every edge, red leading and blue trailing; Track follows the clip's own motion; Saccade is a burst of eye movement fired by an audio onset or the Fire button. A faster wheel packs the fringe tighter; RGBW and RGBCMY wheels brighten whites; Bit Planes break greys into bands under motion; and Three Chip mode is the other kind of projector fringe, static misconvergence, for comparison. Start with Eye Mode on Pursuit.
What is verified
By tools/verify.sh on an M4 Max, macOS 26.4, on 2026-09-23, every picture check at 320×180 and 1280×720:
- A still eye returns the input with 0 bytes different of 4.4 M per raster, at all five wheel speeds, on a moving clip, through the gamma round trip and without it.
- At 6 px a frame on a 1x wheel, red is green translated by 2.0000 px (want 2.0000) — bitwise over 910,080 pixels — and 1.0000 at 2x; fractional speeds land within a derived 8-bit bound.
- Per-channel energy is unchanged under pursuit to 1.1e-4 relative, inside the worst-case 8-bit bound.
- RGBW at White Gain 1 takes grey 64 to 128 (want 128.00); a saturated red stays 255 with green 0.
- Three-chip offsets are exact: 0 of 889,856 pixels wrong.
- One primed onset gives exactly one saccade, whose fringe decays by e⁻¹ over Saccade Time (0.3676 against 0.3679).
- Eight bit planes are the input bitwise, four are the 4-bit input bitwise.
- 12 of 12 negative controls reject, and a one-character mutation of the shipped integrate shader fails
--separation. - All 23 swept controls change the picture;
oxbowseesSW Wheel/WH01/ effect. - Render cost 0.90 ms/frame at 1080p and 3.29 at 4K at the defaults; the heaviest wheel (RGBCMY 6x under pursuit) is 19.1 ms at 4K. macOS figures only.
- Windows, in Resolume Arena 7.27.1 (win-lab, Mesa llvmpipe, no GPU, 2026-09-23): a CI build of this source loads from Extra Effects, registers as
SW Wheel/WH01/ effect, all 30 host controls match the declaration, it renders and Arena's log stays clean: 8 of the fleet gate's 9 checks. The ninth is controls: Saccade Size and Saccade Time read dead, because they act only during a saccade, and a saccade needs an audio onset (win-lab has no sound device) or a press of Fire, which the gate does not send. The harness proves both. Software rendering says nothing about a GPU or about speed.
What is not
- Never loaded into Resolume on macOS.
- The audio path has only seen the harness's synthetic spectra; nobody has measured what Resolume's 64 FFT bins are.
- The Track eye is one global estimate that follows whatever most of the picture is doing, not the object you are looking at.
- A white segment can push a white past 1.0, as a real RGBW wheel does; the re-encode clips it.
- No OpenFX port, no browser demo, no presets. There is a user guide at https://stoatworks-labs.com/software/wheel/guide/.
The macOS build is now Developer ID-signed and notarised (signed on 2026-09-24, after publication); a copy downloaded before then is unsigned, so if macOS refuses it, download it again. The Windows build is unsigned, so SmartScreen warns once.