Relay
A relay's A/B cut, bounce and all, for Resolume

What it does
An FFGL mixer for Resolume Arena and Avenue, and the third mixer in the Stoatworks fleet. A cheap video switcher of the analogue era, a SCART box or an old routing switcher, cut with a relay, and each of the relay's parts did something to the picture, because a video frame is scanned in time and a relay's events happen in milliseconds: about fifteen lines each.
The coil has hysteresis: it pulls in at one voltage and drops out at a much lower one. The layer's own opacity fader is the coil voltage (Resolume binds a mixer parameter named Opacity to it), so the fader cuts to B on the way up past Pull-in and back to A on the way down past Drop-out, and nothing in between is a dissolve. The contacts bounce: when the armature moves, the moving contact leaves A, flies to B, hits, rebounds and hits again, each flight shorter by the coefficient of restitution, so the frame the switch lands on shows horizontal bands of A, black and B at the scanlines the bounce times set, cut mid-line at the pixel where the contact landed.
The receiver re-locks: if the two sources are not genlocked, the new source's field timing is somewhere else, and the monitor's vertical PLL pulls it in as a second-order step response, so the picture rolls and settles, overshooting if the loop is underdamped. And the open contact is a small capacitor, so the unselected input leaks through it high-passed, rising 6 dB an octave: its edges ghost faintly into the selected picture. A good router switched in the vertical interval, and Switch Point set to Vert Interval is that cure.
The relay runs on the CPU in double, in seconds of real elapsed time; the shader only asks, for each pixel, which line and how far along it, and therefore which contact the relay was on. It is chosen as a layer's Blend Mode: the layer below is A, and the clip on this layer is B, which the energised coil selects.
- Chosen as a layer's Blend Mode in Resolume, installed in Extra Effects like any FFGL plugin
- The layer's opacity fader is the coil: Pull-in and Drop-out hysteresis, Operate Time, plus Select and Take for hosts without that binding
- Contact bounce: Bounce Time, Restitution and the Open Level, cut at the scanline and pixel
- A vertical PLL that re-locks: Genlocked off, Phase Offset, Lock Time and Damping
- Capacitive crosstalk with its corner in the signal's own MHz
- PAL or NTSC raster timing; Switch Point Anywhere or Vert Interval
- Universal macOS bundle and a Windows x64 DLL
Where it stands
v0.1.0, and honestly early. The relay is measured, not asserted: an offline harness drives the real plugin class headlessly with two inputs at two different sizes and checks each claim against a closed form at two rasters, on the GPU and on Apple's software renderer. The switching frame's bands are where the bounce schedule puts them with every pixel away from a cut exactly right and all 16 contact events seen within one line's blanking of when they happened; the coil switches at Pull-in on the way up and Drop-out on the way down, 41 of 41 frames bitwise; the re-lock follows the second-order step response to 0.002 rows over 150 frames with the log decrement read off the picture; the crosstalk doubles per octave to 0.013; and every check carries a negative control that fails. All 17 sweepable controls change the picture. Render cost on macOS is 0.04 ms a frame at 1080p and 0.11 ms at 4K at rest, 0.13 ms at 4K with Crosstalk on. Resolume Arena hides a mixer's first parameter, so Relay's first is Standard (PAL) on purpose: NTSC is unreachable in Arena. It has not yet been loaded into Resolume on macOS. On Windows, Resolume Arena 7.27.1 (software rendering, win-lab) loads it from Extra Effects, offers it as a layer Blend Mode and as a transition, initialises it cleanly, binds its Opacity to the layer's opacity fader and drives it from a layer transition, hiding only Standard — probed over REST and read from the plugin's own log; no frame of its output in Resolume has been looked at yet. There is a user guide and a browser demo, which is a port rather than the plugin; no presets and no OpenFX port. The macOS build is Developer ID-signed and notarised. Check it in your own rig before trusting it in a show.
Watch it running
Nothing loads from YouTube until you press play.Watch it there instead