Skip to content

Releases: stoatworks-labs/standards

Release list

v0.1.0

Choose a tag to compare

@github-actions github-actions released this 24 Sep 00:15

A field-store PAL/NTSC standards converter, as an FFGL effect for Resolume Arena and Avenue, shown as SW Standards. Until the 1990s a programme crossing the Atlantic went through a box that turned 625-line, 50-field pictures into 525-line, 59.94-field ones. It had a store of a few fields and it interpolated, twice: in time, making each output field from the input fields either side of it, and in space, making each output line from nearby lines of the field being read. Neither knows anything about motion. Standards is that box: the clip becomes fields of the source standard at that standard's own instants, and everything else follows.

Nothing is drawn: 50 into 60 is 5 into 6, so smooth motion advances in a six-field judder, which at 59.94 also creeps; an output field between two input fields is a double image; few vertical taps across interlaced lines give the soft look. Temporal picks Drop/Repeat, Linear or Four Field; Vertical Taps 1, 2, 4 or 8; Motion Comp adds crude block vectors that remove the judder on a pan and tear wherever a block holds two motions.

What is verified

By tools/verify.sh on an M4 Max, macOS 26.4.1, on 2026-09-23, at two rasters (320×180 and 1280×720):

  • Every output field's temporal weights, read back out of field numbers painted into the input, sit where the time geometry puts them over 772 fields, worst 4.9e-4. 50 → 60 repeats bit for bit every six fields; 50 → 59.94 creeps 0.004997 of a field per cycle against 0.005.
  • A moving bar's repeats and double images land at the stated positions exactly on whole pixels and within 1.7e-4 px on fractional ones.
  • The vertical impulse response matches every stated tap; 3,036 zone-plate fits of G(f) sit within a quarter of their derived tolerance.
  • Same returns the fielded input with 0 bytes different; Motion Comp steps a 3 px/field pan within 0.5 px as one image.
  • Sixteen perturbed models each fail their check, and one character changed in the shipped GLSL is caught.
  • All 8 sweepable controls change the picture; oxbow loads it as SW Standards / ST01 / effect and renders 120 frames.
  • Render cost at the defaults: 0.12 ms/frame at 720p, 0.19 at 1080p and 0.42 at 4K; with Motion Comp 0.77, 1.04 and 1.81 ms. macOS figures only.
  • Windows, in Resolume Arena 7.27.1 (win-lab, Mesa llvmpipe, no GPU, 2026-09-24): a CI build of this source loads from Extra Effects, registers as SW Standards / ST01 / effect, all 14 host controls match the declaration, every control moves the picture, it renders and Arena's log stays clean: all 9 of the fleet gate's checks. The gate's picture is a still, so the judder itself was not seen there. Software rendering says nothing about a GPU or about speed.

What is not

  • Never loaded into Resolume on macOS.
  • The input is progressive, so a source field is the nearest host frame sampled onto the standard's lines, not a field that was shot; nothing reads a real interlaced stream. Horizontal resolution is the host's own. The converter has two source fields of latency, as a real one had.
  • A 50-field picture on a 60 Hz host also picks up the display's own 5-in-6 cadence, as any 50 Hz picture on a 60 Hz screen does.
  • No OpenFX port and no presets. There is a user guide at https://stoatworks-labs.com/software/standards/guide/.

The macOS build is Developer ID-signed and notarised by the release pipeline after publication; if macOS refuses a download, it predates the signing, so download it again. The Windows build is unsigned, so SmartScreen warns once.