Skip to content

Releases: stoatworks-labs/lowband

Release list

v0.1.0

Choose a tag to compare

@github-actions github-actions released this 04 Oct 04:55

The first release of Lowband: a Hi8 tape played back on a Video8 deck, as an FFGL effect for Resolume Arena and Avenue (SW Lowband, LB01).

Hi8 is Video8 with the luma's FM carrier moved up: sync tip 5.7 MHz and peak white 7.7 MHz, 2.0 MHz of swing where Video8 has 4.2, 5.4 and 1.2, and a 0.47 µs pre-emphasis where Video8's is 1.3 µs. The colour-under chroma stayed where it was. Lowband models the luma as that FM signal — recorded, band-limited, limited and demodulated by counting zero crossings at 40.5 MHz, on the CPU — and plays a Hi8 tape through a Video8 deck's channel, scale and de-emphasis. Nothing is painted on: the contrast comes out 5/3 too high; every step lands half-way at once and creeps the rest with the deck's 1.3 µs, a glow trailing each highlight; the back porch is still settling when the monitor clamps black there, so the black lifts about 5 %; a bright edge's overshoot reaches 10 MHz, outside the Video8 band, and the demodulator loses the crossings, a black streak; and under tape noise the highlights break up first, because white's carrier sits furthest outside the band. A Video8 tape on the same deck, or the Hi8 tape on a Hi8 deck, plays clean. Tape Noise, Head Clog (Wallace's spacing loss), Dropouts, Sync AGC, PAL and NTSC.

Downloads: a universal macOS bundle (Apple silicon and Intel) as a .dmg or .zip, and a Windows x64 installer or .zip. The macOS build is signed and notarised; the Windows build is unsigned, so SmartScreen warns once. The bundle is Lowband.bundle (Lowband.dll on Windows): drop it into Extra Effects.

What is measured (offline, tools/verify.sh, at 320x180, 960x540 and 1280x720 and on Apple's software renderer): the recorded carriers, counted crossing by crossing, are the formats' own on PAL and NTSC; a deck playing its own format gives a flat field back to 3e-4 of white; a Hi8 tape on the Video8 deck has a gain of 1.66675 against 2.0 / 1.2 = 1.66667; the step's tail decays with 1.30–1.32 µs, the deck's de-emphasis; the lifted black is within 4 % of its analytic prediction; at the same carrier-to-noise a Hi8 tape's white is 2.6 times as noisy as its black (the band's |H| ratio predicts 2.2) and a Video8 tape's 1.02; a bright edge dips a third of the step below black on Video8 and not on Hi8; the clog's taps realise Wallace's law less their truncation to 1e-8; a matched deck registers an edge within 0.07 px of the filters' prediction; and 1, 3 and 8 worker threads give the same picture bit for bit. Twelve negative controls each fail their check, a GLSL mutation and a demodulator mutation are both caught, and all 8 controls change the picture.

Windows, in Resolume Arena 7.27.1 (win-lab, Mesa llvmpipe, no GPU, 2026-10-04): a CI build of this source loads from Extra Effects, SW Lowband registers as LB01, an effect, all 14 host controls match the declaration (the two names at Resolume's length limit complete), it renders and Arena's log stays clean: 9 of 9 of the fleet gate's checks. 7 of the 9 controls that can move the picture were shown doing so; Dropouts and Standard read inconclusive, because the tape noise is drawn afresh every frame and their change to one frame was no bigger than that floor (offline, both change the picture). Software rendering says nothing about a GPU or about speed.

What is assumed, or unconfirmed. No recording of a real Hi8 tape on a real Video8 machine was found to compare against: the look is the model's prediction. The deck's RF band (1.9–7.0 MHz, Butterworth 2 and 8) is the filter a decoder puts on a Video8 capture, standing in for a real deck's head, equaliser and RF stage, and it is the number the streaks and the sparkle depend on most. The emphasis time constants and shelf, and the white and dark clips, come from one source (vhs-decode), the clips from comments marked with a question mark. No non-linear emphasis; the noise levels, the clog's range and the filter orders are chosen.

Cost: about 4 ms a frame at 1080p on an M4 Max at the defaults (the FM chain on up to eight CPU threads). Not measured on Windows, where the lane loops may not be vectorised.

Not done. Never loaded into Resolume on macOS; never seen on camera footage; no presets and no OpenFX port. The browser demo runs a JavaScript port of the engine, checked bit for bit against the C++ built without fused multiply-adds by demo/tools/check_port.sh; on the page you are trusting it, and it runs behind a playing clip.