Astronaught
A video signal put through a Space Echo

What it does
Astronaught is a model of the Roland RE-201 Space Echo, with a picture where the audio should be. A loop of tape is pulled past an erase head, a record head and three playback heads at equal intervals; a twelve-position Mode Selector decides which of them are listening; an Intensity control feeds the head mix back onto the tape so every repeat is another generation; and a three-spring reverb tank hangs off the input in parallel.
One decision holds the whole thing up: 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 behaviours fall out of that with no code of their own. Turning Repeat Rate drags every echo already recorded, because the material does not move and only the rate at which the heads reach it does — Roland writes this out in both directions, the pitch rising as the tape speeds up and then falling again as the thinner recording arrives at the heads. The picture comes back torn and rolled, because 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. And the three echoes wobble independently, because each head reads a different point on the tape and therefore sees the speed error from a different moment, which is the chorus the machine is known for.
The head geometry is not a set of tuning constants. Roland's own documentation says the three playback heads are arranged sequentially at equal intervals, so their delays are locked at 1 : 2 : 3 and there is one delay control rather than three. The twelve-position selector is transcribed from the printed table rather than derived, and the obvious guess is wrong: positions 1 to 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.
There is one place where a picture and an audio signal genuinely differ, and it is handled openly rather than quietly. 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. Modelled literally, eight of the twelve selector positions rendered flat white at any useful Intensity. So the head bus is levelled before the feedback, the record amplifier's headroom is shared between input and regeneration, and the spring tank is a normalised one-pole. All three departures are documented in the source next to the code that makes them.
- A tape loop indexed by position, so changing Repeat Rate drags the echoes already recorded instead of re-timing them — measured, not asserted: after a 500 ms to 125 ms change, head 1 is still reading 450 ms-old material
- Three playback heads locked at 1 : 2 : 3 by their spacing, and the RE-201's twelve-position Mode Selector transcribed from Roland's printed table — including the three head combinations the machine does not offer
- The vertical tear and roll that a raster written down a moving tape produces, and the stretch that comes with reading it back at a different speed
- A transport that is never quite steady, so each head sees the speed error from a different moment and the three echoes chorus against each other rather than wobbling in unison
- Tape saturation as a true limiter, head gap loss and hiss along the scan, and dropouts — all inside the feedback loop, so every repeat is another generation rather than a quieter copy
- A three-spring reverb tank in parallel with the tape, live in the eight selector positions that have it, with a Dispersion control for how much a spring blooms as it decays
- Head Spread, which moves the playback heads along the path — something the hardware could only do with a screwdriver
- Ten factory presets, from a single tight slapback to a loop past unity that builds
Where it stands
Built, measured and released as v0.1.1; the point release changed nothing but the Windows installer, which no longer touches the system PATH — the earlier one could overwrite it. Twenty-one checks pass from a clean universal build. The twelve-position Mode Selector is asserted against a second, independent transcription of Roland's table, including the three combinations that must be absent; the head spacing and delay range are checked against Roland's published figures; the GLSL tape read is compared against an independent C++ implementation on every row to 1.6e-06; a bypassed Astronaught returns the picture byte for byte; and the drag and the chorus are measurements rather than assertions. It has been loaded and rendered in Resolume Arena 7.27.1 on macOS and on Windows, the latter on Mesa llvmpipe — a different GLSL compiler, which is the point of doing it. 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 is 0.93 ms a frame at 1080p on an Apple M4 Max. Still open: no operator has dragged a slider, since every control was driven over Resolume's REST API; no NVIDIA or AMD driver has run it; there is no OpenFX build, and structurally cannot be one without reimplementing the loop; and none of it has been through a show.
Watch it running
Nothing loads from YouTube until you press play.Watch it there instead