Skip to content

Releases: stoatworks-labs/honeydew

Release list

v0.1.1

Choose a tag to compare

@github-actions github-actions released this 04 Oct 23:24

Break Wave makes spirals now. 0.1.1 adds one control, Excitability, and fixes the stirred start. Everything else is 0.1.0's: oscillating and clock reactions in a dish on a lightbox, for Resolume Arena and Avenue, as SW Honeydew (HD01, a source) and SW Honeydew Over (HD02, an effect whose clip is the lightbox), with the colour from Beer–Lambert through each species' absorption spectrum, never a palette.

What changed

  • Excitability (Reaction group, BZ only) is the Oregonator's stoichiometric factor f, from 1 to 4. At its default (f = 1.4, exactly 0.1.0's dish) the layer oscillates by itself: pacemakers fire target waves and a stirred dish flips colour in unison, but a broken wave's ends are overrun by the next firing. Past 0.42 on the slider (f = 1.78, where this three-variable model stops oscillating at the 1× recipe; the textbook 1 + √2 is the two-variable model's) the layer is excitable: quiet until something starts a wave, and Break Wave winds a pair of spirals that turn for ever. So: raise Excitability, press Drop, and when the ring reaches the middle press Break Wave.
  • A fresh BZ dish at Stir 1 starts on its own. In 0.1.0 the whole-vessel mixing held a fresh stirred dish at the Oregonator's unstable rest state, and nothing happened until a Drop. A fresh dish now starts 1% off that state, as the reference integration does.
  • The parameter is appended after the last 0.1.0 control, with the About block still last, so 0.1.0 compositions open unchanged.

What is verified

By tools/verify.sh on an Apple Silicon Mac, at 1280×720 and 320×180 and on Apple's software renderer, against the real plugin classes in a headless GL context, on top of everything 0.1.0 measured:

  • Spirals from the controls (hdtest --excitable): from the defaults plus Excitability 0.7 (f 2.64), the Drop button and the Break Wave button, the drop's wave reaches the pipette at 143 s, and after the press the pair's two cores are followed through 160 of 160 samples, moving at most 3.2 cells in 2 s, the arms sweeping every 97.0 s. At the default Excitability the same press leaves a pair in 0 of 160 samples, the 0.1.0 behaviour, now measured.
  • The stirred start (hdtest --freshstir): a fresh dish at Stir 1 from Reset, on the user's clock, rises through half the model's peak at 15 s and again at 115 s; seeded exactly on the rest state (the negative control) it never does.
  • The spiral, trigger-wave and light-threshold checks (--spiral, --fieldnoyes, --photo) now set f through the Excitability control, not a harness hook; their numbers are unchanged (the spiral's arms 86.0 s, a float round trip from 85.3).
  • 23 deliberately wrong models each fail their check; five one-character mutants are caught; all 56 parameters over both plugins move the picture; the browser demo's WebAssembly and shaders are the shipped code's.
  • Windows, in Resolume Arena 7.27.1 (win-lab, Mesa llvmpipe, no GPU, no sound device): the DLLs release.yml built from the tagged tree load, register and render, all 33 + 36 host controls match the declaration, Excitability included, and Arena's log stays clean: 15 of the fleet gate's 15 checks, audio skipped. Confirmed live one control at a time: 10 of the source's and 15 of the effect's; the rest inconclusive (the dish moves every frame), none dead. Software rendering says nothing about a GPU or about speed.

What is not

  • Briggs–Rauscher runs stirred only, and its model's period at the demonstration recipe is minutes, not a demonstration's seconds (use a high Time-lapse).
  • About thirty constants are stand-ins where no published value was found, each named in docs/CHEMISTRY.md.
  • The chemoconvection cells of a still blue-bottle layer are not built.
  • The chameleon shows no blue: permanganate and manganate through their spectra read grey-purple.
  • Stirring brings the chemistry's step limit down (a stirred BZ dish keeps up only to about 32× at Detail 256); Light Coupling reads only on a bright clip; in Flow the blue bottle and the valentine never go colourless. The guide says each.
  • Never loaded into Resolume on macOS. No real audio has reached it in a host. No presets, no OpenFX port.

User guide: https://stoatworks-labs.com/software/honeydew/guide/ · Browser demo (the plugin's own C++ as WebAssembly, with the new control): https://honeydew-demo.stoatworks-labs.com/ · Video (0.1.0, which does not show Break Wave): https://www.youtube.com/watch?v=EbBfD06QFAs

The macOS build is universal and Developer ID-signed and notarised (signed 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.

v0.1.0

Choose a tag to compare

@github-actions github-actions released this 04 Oct 10:33

Oscillating and clock reactions in a dish on a lightbox, for Resolume Arena and Avenue, as two FFGL plugins in one download: SW Honeydew (HD01), a source that is a thin layer of reagents on a lightbox, and SW Honeydew Over (HD02), an effect whose clip is the lightbox, filtered by the chemistry and, where the chemistry is photosensitive, acting on it. The colour is never a palette: every reaction is a published mechanism with its rate constants in mol/L and seconds, the species diffuse with real diffusion coefficients across a dish whose width is in millimetres, and each pixel is the lightbox's light through the layer by Beer–Lambert, through each coloured species' absorption spectrum, seen by the CIE 1931 observer.

Eight reactions: Belousov–Zhabotinsky (the three-variable Oregonator per cell; ferroin red ⇄ blue, Ru(bpy)₃ orange ⇄ green and photosensitive, or cerium), with target waves from pacemakers and, stirred, the whole dish flipping colour together; Briggs–Rauscher (De Kepper–Epstein, stirred), colourless → amber → blue-black; the iodine clock (Harcourt–Esson), which snaps to blue-black, is cleared by a dose of thiosulfate, and with Clock Sync lands each snap on the beat or bar; CDIMA Turing spots and stripes (Lengyel–Epstein) at a wavelength set by the chemistry; the traffic light (green → red → yellow), the blue bottle and the vanishing valentine (whose first blue never comes back), run back by a Shake; and the chemical chameleon (purple → green → brown, in rings from a drop). In the Over, Light Coupling projects the clip onto photosensitive BZ and CDIMA, so waves stop at its bright parts and Turing patterns print it. Drops, Shakes and doses can follow audio onsets.

What is verified

By tools/verify.sh on an Apple Silicon Mac on 2026-10-04, at two rasters (1280×720 and 320×180) and again on Apple's software renderer, against the real plugin classes in a headless GL context:

  • Belousov–Zhabotinsky. A stirred ferroin dish's period, read from the pixels, is 101.19 s against 100.97 s from the three-variable Oregonator in double precision, oxidised 10.0% of the time against 9.9%. In the excitable setting the harness sets (f = 2.6, which no control reaches in this version), trigger waves run at 0.0566, 0.1017 and 0.1728 mm/s at ½×, 1× and 2× acid against the one-dimensional reference solution's 0.0564, 0.1008 and 0.1718. In that setting a broken wave leaves exactly one +1/−1 pair of phase singularities, whose arms sweep every 85.3 s, and under Ru(bpy)₃ a lit band at full light stops a wave and one below the model's threshold lets it through; ferroin ignores the light.
  • The clocks. The iodine clock snaps at 50.75, 25.25 and 12.50 s at ½×, 1× and 2× peroxide against the Harcourt–Esson closed form's 50.66, 25.01 and 12.42. Clock Sync at 120 BPM puts every snap, every blue-bottle fade and every chameleon green within 0.02 s of the bar, and within 0.05 s at 97 BPM.
  • Briggs–Rauscher: 11 batch oscillations, whose gaps lengthen from about 130 s to 640 s as the batch runs down, average 248.00 s apart against 248.04 s from the mechanism in double, colourless → amber → blue-black with none out of order.
  • The dye family and the chameleon: each phase against a double reference of its mechanism (the traffic light's red at 258.5 s against 260.5, the blue bottle's fade at 814.5 against 809.0, the chameleon's green at 39.75 against 39.75); more air lengthens the green, more glucose or base shortens it; the valentine's resazurin is spent after the first fade and its blue never returns, in the state and in the pixels.
  • CDIMA Turing: the pattern's wavelength, read off an FFT of the state, is 0.1220 mm at two grid resolutions and two dish widths, within one FFT bin of the Lengyel–Epstein model's 0.1205; a white clip through Light Coupling erases it.
  • The light: twenty species reproduce their cited absorption peaks; every pixel of a uniform dish is within 2×10⁻⁷ of a double-precision Beer–Lambert integral through the CIE 1931 observer; an empty dish returns the lightbox, and the Over returns its clip, to the float.
  • Twenty deliberately wrong models each fail their check; five one-character mutants (three in the shipped GLSL, two in the C++) are caught; all 54 parameters over both plugins move the picture; oxbow loads both (SW Honeydew / HD01 / source, SW Honeydew Over / HD02 / effect) and renders 120 frames through each.
  • Render cost (median frame, on a machine shared with other builds): about 0.7–1.5 ms for BZ at the default Detail from 720p to 4K, under 2 ms at Detail 1024, and about 1.3 ms for Briggs–Rauscher's CPU engine.
  • Windows, in Resolume Arena 7.27.1 (win-lab, Mesa llvmpipe, no GPU, no sound device, 2026-10-04): the DLLs release.yml built from the tagged tree load from Extra Effects, register as SW Honeydew / HD01 / source and SW Honeydew Over / HD02 / effect, all 32 + 35 host controls match the declaration, both render, and Arena's log stays clean: 15 of the fleet gate's 15 checks, audio skipped. Confirmed live one control at a time: 12 of the source's and 21 of the effect's; the rest inconclusive (8 on the source, whose waves move every frame and lift the gate's noise floor, and Drop Position on the effect), none dead. Software rendering says nothing about a GPU or about speed.

What is not

  • Break Wave makes no spirals at any setting a control reaches. The shipped dish runs the Oregonator at f = 1.4, its oscillatory regime, where a broken wave's ends hook and the next bulk firing overruns them. The spiral, wave-speed and light-threshold figures above are the model's in the excitable regime the harness sets. Making that regime reachable is the next version's first job.
  • Filming the video found that the chemistry's step limit bites far below 300× when stirred (a stirred BZ dish keeps up only to about 32× at Detail 256), that a fresh BZ dish at Stir 1 needs a Drop to start, that Light Coupling reads only on a bright clip, that in Flow the blue bottle and the valentine never go colourless, and that a 1× iodine-clock Drop may not visibly clear a layer that has already snapped (Clock Sync's own doses do). The guide says each.
  • The chemoconvection cells a still blue-bottle layer forms are not in this version.
  • Briggs–Rauscher runs stirred only, and its model's period at the demonstration recipe is minutes, not a demonstration's seconds (use a high Time-lapse). The constants come through a thesis's transcription of De Kepper and Epstein.
  • About thirty constants are stand-ins where no published value was found: eleven of the twenty spectra and several rate constants and diffusion coefficients, each named in docs/CHEMISTRY.md.
  • The trigger-wave speed rises with acid faster than Field and Noyes's law (exponent 0.80 against 0.5); the speed matches its own equations, and the gap is reported, not hidden.
  • The chameleon shows no blue: permanganate and manganate through their spectra read grey-purple, so the plugin's sequence is purple → green → brown. A true blue would need hypomanganate, whose kinetics and spectrum could not be cited.
  • Never loaded into Resolume on macOS. No real audio has reached it in a host. No presets, no OpenFX port.

There is a user guide at https://stoatworks-labs.com/software/honeydew/guide/ and a browser demo at https://honeydew-demo.stoatworks-labs.com/, which runs the plugin's own C++ compiled to WebAssembly and its own shaders in WebGL2. The release video: https://www.youtube.com/watch?v=EbBfD06QFAs

The macOS build is universal and Developer ID-signed and notarised (both the .dmg and the bundles in the .zip, signed 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.