Releases: stoatworks-labs/bassalt
Release list
v0.1.0
A lava lamp, as an FFGL effect for Resolume Arena and Avenue, and the lamp is a heat engine. A bulb in the base heats wax that is a little denser than the water when cold and lighter when hot, so it rises, cools at the cap and sinks. Nothing is animated: the wax is a Cahn–Hilliard phase field with surface tension, the heat is advected and conducted, and the flow is Darcy's law in a Hele-Shaw cell, solved every step by multigrid as a streamfunction. The pillars that neck and pinch off, the hour-long warm-up from a cold slab and the stalls when the bulb is wrong all fall out of that.
The name is the lamp's two real controls: Bass drives the bulb through its own thermal lag, and Salt sets the water's density against the wax. The clip goes through it two ways. Behind puts the world behind the lamp, so every round blob is a lens with a small upside-down picture in it. Dyed makes the clip the wax itself, carried and pinched by the flow. Pour turns the clip's bright parts into wax.
What is verified
By tools/verify.sh on an M4 Max, macOS 26.4, on 2026-09-23:
- A level lamp at rest stays exactly at rest: the flow is 0 for three lamp-minutes, every row identical to the bit.
- A neutral round blob's spurious currents: 1.5e-5 m/s at most against a capillary scale of 8.3e-4, falling 107x over 20 minutes.
- Wax is conserved to 6e-7 over 7.4 lamp-minutes of convection, and no cell's heat leaves its stencil's old range (0 of 287,000).
- A blob stops at the crossover temperature to 4e-6 K at three salts, and T* moves -11.293 K per 1% salt, as the density laws say.
- The GPU's flow solve agrees with an exact CPU solve of the same system to 1e-9. A blob's Hele-Shaw speed, extrapolated to a sharp interface, is 0.08–0.45% from the law at four viscosity ratios.
- Rayleigh–Taylor growth within 0.8–2.4% of the law once the diffuse interface's response is divided out; the cutoff 0.7% from √(Δρg/σ).
- Every step's joules add up to 4e-3 of their 2-ulp bound; the bulb reaches 63.2121% at its time constant.
- The Cylinder glass is Snell's law to 1e-5 at two rasters; a round blob is a sphere's lens to 2.6–3.7% at the centre.
- 14 deliberately wrong models, all detected, and one character of the shipped GLSL changed is caught. All 30 swept parameters measurably change the picture.
- Render cost 1.8–2.7 ms/frame at 720p, 2.0–2.7 at 1080p and 2.2–3.0 at 4K at the default Speed. These are macOS figures only.
- The Windows x64 DLL compiles with MSVC in CI.
What is not
- Never loaded into Resolume on either platform at the time of this release.
oxbow probereads the bundle as a host would (SW Bassalt,BS01, effect, 38 parameters); nothing else has run it. Windows has never been run at all. - A flat lamp, not a round one: the flow is Darcy's law in a thin gap, and nothing here is compared with a real round lamp.
- Short waves are slow: the interface is four cells wide, and at the default Detail it passes 56–85% of a sharp interface's growth for wavelengths of 4 to 18 cm.
- Surface tension stops at 10 mN/m, Speed 300x is really about 70x once the lamp convects, and there is no latent heat.
- No real audio has reached it in a host, so Resolume's 64-bin FFT mapping is assumed.
- No user guide, no browser demo, no OpenFX port, no factory presets.
The macOS build is signed and notarised; the Windows build is unsigned, so SmartScreen warns once.
Full Changelog: https://github.com/stoatworks-labs/bassalt/commits/v0.1.0