Skip to content

Releases: stoatworks-labs/filament

Release list

v0.1.0

Choose a tag to compare

@github-actions github-actions released this 25 Sep 14:58

A wall of incandescent bulbs, as an FFGL effect for Resolume Arena and Avenue, shown as SW Filament. Every bulb is a tungsten wire heated by current, not an LED with a slow fade. Its dimmer is set by its cell of the clip, and its own filament does the rest: electrical power in, through tungsten's resistance (Forsythe and Worthing's 1925 table, fifteen times lower cold than hot); radiation out as T⁴; conduction out; all against the wire's heat capacity, sized from the lamp's wattage and voltage. Each bulb solves that equation on the GPU every frame, in RK4 substeps through the mains waveform (50 Hz / 230 V or 60 Hz / 120 V) and a sine-wave, square-law or triac dimmer, and its light is Planck's law at its temperature through the CIE 1931 observer, averaged over the frame as a shutter would collect it.

Nothing is animated by hand. Dimmed bulbs go red as well as dark; a flash comes up in tens of milliseconds and dies away in hundreds, slowing as it cools; cold bulbs surge; small filaments ripple at twice the mains and big ones hardly at all; a 1000 W wall lags where a 10 W one snaps. Up to a 160 × 90 wall, clear, frosted or coloured glass, RGB gels (three filaments per cell), a flat Pixel Mode, halo, bloom and exposure.

What is verified

By tools/verify.sh on an M4 Max, macOS 26.4, on 2026-09-25, at two rasters (320×180 and 1280×720), and again on Apple's software renderer (the one CI's runners fall back to). Every check reads a bulb's temperature back through the plugin's own probes and sets it against the same equation integrated independently in double:

  • Steady state. A 200 W filament at 1.0, 0.7 and 0.4 of its voltage settles at 2799.95, 2404.28 and 1862.32 K against a power balance of 2800.00, 2404.32 and 1862.40 K.
  • Colour. At five temperatures from 1975 to 2816 K the light is on the Planckian locus to 1e-6 in xy, luminance right to 1e-4, and each dimming step is redder.
  • Rise. From cold the GPU follows the equation to 0.004 K; 90% in 65.2 ms, where a constant-resistance lamp takes 135.3 ms.
  • Fall. Switched off it follows T⁴ plus conduction to 0.17 K and reaches 1500 K in 176 ms; its time constant is 2.53× longer at 1200 K than at 2400 K (a linear cooler: 0.84×).
  • Ripple. Under a triac the strongest line is exactly 100 Hz at 50 Hz mains and 120 Hz at 60 Hz; 137 K peak to peak on a 25 W filament and 19 K on a 500 W one.
  • Resize. An output resize and a regrid mid-fade leave every temperature exactly where it would have been.
  • Six perturbed models each fail their check; a one-character mutation of the shipped shader's sine is caught. All 14 controls change the picture; oxbow loads it as SW Filament / FI01 / effect and renders 120 frames.
  • Render cost at the defaults: 0.25 ms/frame at 720p, 0.26 at 1080p and 0.39 at 4K on macOS; 1.78 ms at worst (160 × 90, 10 W, RGB gels, 4K).
  • Windows, in Resolume Arena 7.27.1 (win-lab, Mesa llvmpipe, no GPU, 2026-09-25): the DLL of this source loads from Extra Effects, registers as SW Filament / FI01 / effect, all 20 host controls match the declaration, it renders, Arena's log stays clean, and all 14 valued controls move the picture: 9 of the fleet gate's 9 checks. The gate's picture is a still, so Wattage, Mains and Ambient Temp read weak (about 4.6–5 levels over a floor of 1.1). Software rendering says nothing about a GPU or about speed.

What is not

  • The checks verify the stated model, not a real lamp. Three of its constants are assumptions: emissivity 0.30, half of the coiled coil's surface radiating, 15% of the power conducted. They size the wire and so every time constant; no real bulb has been measured against the model. The resistivity table was copied from a web reproduction of Forsythe and Worthing (1925) and not checked against the paper. The filament's colour is a black body's.
  • Never loaded into Resolume on macOS. Footage has been seen only through the harness's --pipe (the project video, on Resolume's bundled demo clips). Filming found no defect; it found that a 1000 W wall barely registers a quick flash, that a Linear dimmer leaves only the highlights, that the blue gel is dim, and that the mains ripple is averaged away by a 30 fps shutter. The guide says so.
  • Thin, dim features vanish, because each bulb sees the average of its cell. No OpenFX port, no presets.

There is a user guide at https://stoatworks-labs.com/software/filament/guide/ and a browser demo at https://filament-demo.stoatworks-labs.com/ (a port to a web page, not the plugin: the shaders run in WebGL2, and the clock, the lamp sizing and the substep rule are a hand port to JavaScript that only a reader checks). Video: https://www.youtube.com/watch?v=rJRPgKvLfSk

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