Skip to content

Releases: stoatworks-labs/lenticular

Release list

v0.1.0

Choose a tag to compare

@github-actions github-actions released this 25 Sep 18:01

First release of Lenticular: a printed lenticular sheet that shows one layer or the other, as an FFGL mixer for Resolume Arena and Avenue. The fleet's fourth mixer, after genlock, wipe and relay.

What it does. Chosen as a layer's Blend Mode, it prints the layer below (A) and this layer (B) in interleaved strips under a sheet of cylindrical lenses, and the layer's opacity fader tilts the card. Each lens focuses the eye onto one point of the print, so the card flips from A to B square on and flips back at the edge of the viewing zone, atan( 1 / 2F ). A real lens's focus spot shows both pictures near the flip; a print pitch that misses the lens pitch flips in moiré bands that sweep as the card tilts; a near viewer sees the flip travel across the card, at D sin T; and each lens shows one column of its picture spread across its width, so the picture is stepped and the ridges catch the light.

Controls. Print: Squeeze, Interleave Pitch (4–480 periods a width), Bleed. Lens: Lens Pitch (4–480), Focal Length (0.5–6 lens pitches), Focus Spot, Distance (half a width to infinity). View: Opacity (the tilt), Angle Range (up to 45°), Ridge Shine, Light Angle.

Measured, not asserted. An offline harness drives the real plugin class with two inputs at two sizes, at 640×360 and 320×180, on the GPU and on Apple's software renderer: tilted all the way the card is A or B sampled at the lens pitch, 0 bytes wrong in all four channels; it flips square on and back at ±atan( 1 / 2F ) to 6e-8 rad; a pitch mismatch bands at 1 / | 1/p_L − 1/p_P |, measured by FFT to 0.0009 cycles a width, and the bands sweep by the predicted phase; a near viewer's flip lands at D sin T to 0.001 px; every check carries a negative control that fails, and a one-character mutation of the shipped GLSL is caught. All 11 controls change the picture. Render cost on an M4 Max: 0.035 ms/frame at 1080p, 0.11 ms at 4K.

In Resolume. Probed by hand in Arena 7.27.1 on Windows (software rendering), from REST and the plugin's own log: loads from Extra Effects, offered as a layer Blend Mode and as a transition, hides only Squeeze (index 0, on purpose), binds Opacity to the layer's opacity fader, and a 2 s layer transition runs its own instance, ramping Opacity from 0.007 to 0.944. Because Arena never sends 1.0 and the card has no end stops, a transition that uses it ends with a pop from the new clip seen through the lens to the plain clip — inferred from the log, not seen. Never loaded into Resolume on macOS; no picture of its output inside Resolume has been captured.

Downloads. macOS universal .dmg/.zip (Apple silicon + Intel) and Windows x64 installer/.zip. Install into Extra Effects (Resolume has no other FFGL folder, even for a mixer), restart Resolume, and choose SW Lenticular as the upper layer's Blend Mode. The macOS build is Developer ID-signed and notarised.

Not done. No presets, no OpenFX port. The lens is a thin lens in air with a box focus spot; the ridge highlight, edge shading and residual magnification are looks, not measurements of any sheet. See the README's Status and AGENTS.md for the full list.

Video: https://www.youtube.com/watch?v=I9bclzMmib4 · User guide: https://stoatworks-labs.com/software/lenticular/guide/ · Project page: https://stoatworks-labs.com/software/lenticular/ · Browser demo: https://lenticular-demo.stoatworks-labs.com