Skip to content

Releases: stoatworks-labs/astronaught

v0.1.3

Choose a tag to compare

@github-actions github-actions released this 20 Sep 19:25

Resolume's browser has no vendor grouping, so the Stoatworks plugins scatter through one alphabetical list and you have to remember every name to find them (cogwheel#26). Every plugin now reports itself with an SW prefix, so they sit together.

  • AstronaughtSW Astronaught

Nothing else moved. The four-character plugin ID a composition actually references is unchanged, and so are the bundle file names — an upgrade replaces what you have instead of leaving the old plugin beside the new one.

Full Changelog: v0.1.2...v0.1.3

v0.1.2

Choose a tag to compare

@github-actions github-actions released this 04 Sep 22:01

Full Changelog: v0.1.1...v0.1.2

v0.1.1

Choose a tag to compare

@github-actions github-actions released this 02 Sep 17:24

Full Changelog: v0.1.0...v0.1.1

v0.1.0

Choose a tag to compare

@github-actions github-actions released this 27 Aug 01:32

The first release. Astronaught puts a video signal through a Space Echo — an FFGL effect for Resolume Arena and Avenue that models the Roland RE-201, with the picture as the signal on the tape.

The one idea

The tape is indexed by position, never by time. A frame is laid on the tape wherever the tape had reached when it was recorded, and it stays there. A playback head is a fixed distance down the path, so it reads whatever material has arrived under it. The delay is not stored anywhere — it is the time the tape takes to cover the head spacing.

Three things follow, and none of them is written as code:

Turning Repeat Rate drags every echo already recorded. The material does not move; only the rate at which the heads reach it does. Almost every other delay re-times its taps when you change the delay. This one drags them, and turning the knob is a performance move.

The picture comes back torn and rolled. A frame is written down the tape while the tape is moving, so it occupies a stretch of it, and a head almost never lands on a boundary — the top of an echo is the bottom of one pass and the bottom is the top of the next. Run the tape faster than it recorded and it comes back squeezed as well.

The three echoes wobble independently. The transport is never quite steady, and each head reads a different point on the tape, so each sees the speed error from a different moment. That is the chorus, and a model that applied one wobble to all three heads would give a vibrato.

The machine

Three playback heads at equal intervals, so their delays are locked at 1 : 2 : 3 — one delay control, not three. Head 1 runs 70 ms to 1 second, putting head 3 at up to three seconds.

The twelve-position Mode Selector, transcribed from Roland's printed table rather than derived. The obvious guess is wrong: positions 1–4 are echo only and the only combination among them is heads 2+3, so there is no dry 1+2 and no dry 1+2+3 anywhere on the machine. Positions 5–11 have the spring tank in; 12 is the tank alone.

Intensity re-records the head mix, so every repeat is another generation — more saturation, more head-gap softening, more noise — rather than a quieter copy. Past about 0.8 the loop builds.

A three-spring tank in parallel with the tape, with a Dispersion control for how much a spring blooms as it decays.

Plus, declared as extensions rather than passed off as hardware: Head Spread (moves the heads — a screwdriver job on the real thing), Saturation and Wow & Flutter (on BOSS's own RE-20 and RE-202, not the 201), the three transport components separately, head wear, hiss and dropouts, and a wet/dry Mix. Ten factory presets.

Where a picture is not an audio signal

One place this deliberately departs from the circuit, and it is the same cause three times: a video signal is unipolar, so its echoes cannot cancel. Three heads over a part of the picture that has not moved are three copies of the same value, every time. In audio the repeats are as often negative as positive, which is why a real RE-201 is usable with all three heads up.

Modelled literally, eight of the twelve selector positions rendered flat white at any Intensity worth having. So the head bus is levelled before the feedback, the record amplifier's headroom is shared between input and regeneration, and the tank is a normalised one-pole. All three are documented in the source beside the code that makes them.

Verified

21 checks pass from a clean universal build:

  • the Mode Selector asserted cell by cell against a second, independent transcription of Roland's table — including the three head combinations that must be absent
  • the heads are at 1 : 2 : 3 through the real conversion, at five Repeat Rate positions
  • Repeat Rate spans 1.000 s to 0.070 s, head 3 reaches 3.000 s, and turning the knob up makes the delay shorter
  • the drag measured, not asserted: after a 500 ms → 125 ms speed change, head 1 still reads 450 ms-old material, converging on 125 ms over the following transit
  • the chorus measured: head 3 is 3× head 1 to 0.0000% with a steady transport and 2.01% off at the default trim
  • the GLSL tape read agrees with an independent C++ implementation on every row, to 1.6e-06
  • Mix at zero returns the picture byte for byte — 0 of 230400
  • four hostile machines, including the loop past unity, leave 0 non-finite samples
  • all 22 controls reach the picture

Loaded and rendered in Resolume Arena 7.27.1 on macOS and on Windows — the Windows run on Mesa llvmpipe, a different GLSL compiler from Apple's, which is what makes it worth doing. Both hosts read all 27 parameters with nothing truncated, both detect the host clock as milliseconds, and a factory preset applies, holds through live rendering, and drops to Custom only on a real edit.

Cost: 0.93 ms/frame at 1080p, 1.42 ms at 4K on an M4 Max. The tape store is 96 passes of the record head — about 384 MB at 1080p — and is capped by a byte budget, which is why 4K costs 1.5× 1080p rather than 4×, and why the echoes at 4K are softer than the direct signal.

Not yet

No operator has dragged a slider — every control this far was driven over Resolume's REST API, so the inspector's feel is unjudged. No NVIDIA or AMD driver has run it. There is no OpenFX build, and structurally cannot be one without reimplementing the loop: an OFX host wants an arbitrary frame in arbitrary order, and what is on a tape at frame 900 depends on frames 1–899 including everything Intensity fed back. None of it has been through a show.


Roland, RE-201, RE-20, RE-202 and Space Echo are trademarks of Roland Corporation, used here only to say what this models. Astronaught is not affiliated with, endorsed by or derived from any Roland product, and contains no Roland code, samples, impulse responses or measurements.