Stoatworks Labs

Afterglow

Frame trails that fall apart as they age, for Resolume

Releasedv0.1.5Plugin & ModuleC++ / GLSL
Afterglow — Frame trails that fall apart as they age, for Resolume
Afterglow

What it does

Most echo effects are a feedback loop: the output goes back into the input, and what you see is the picture piled on top of itself over and over. It's cheap and easy, and it's why most trails smear into mud. Every frame carries the whole history of every frame before it, so nothing in the trail is a picture any more.

Afterglow uses a queue instead. It keeps the last four to thirty-two frames as they were and lays all of them back over the picture at once, each weighted by its age. Nothing is ever fed back, so a ghost eight frames old is still that frame, recognisably a picture rather than an average of everything since. That's why the trail reads as separate ghosts instead of a smear, and it's the decision everything else hangs off.

The decay is where the character comes from, and there's more to it than a fade. Each control describes what's happened to a frame by the time it reaches the end of the queue: its bit depth collapsed, its grid coarsened, a noise field pulling it apart, its colour walked round the wheel, or the frame drifted, zoomed and spun away. Each ghost gets a share of that in proportion to its age. So as the trail goes back, the picture falls apart, in whichever way you pick, at whatever rate you like.

One rule holds all of it up: a picture that isn't moving has to come out of the effect byte for byte as it went in. Every frame in the queue is then the same, the weights add up to one, and the result is the input. The build checks that rather than hoping for it, and it's what stops the effect lifting or darkening a still frame behind your back.

  • A queue of 4 to 32 real frames, with Hold spreading a dozen ghosts across two seconds, and Decay shaping how the weight falls away along the trail
  • Four ways to combine the queue — a weighted average, added, screened, or the brightest of them — each with its own weight schedule, because a sum and a composite do not take the same alphas
  • Ageing that is more than a fade: Crush collapses 8 bits down to 1, Pixelate coarsens to six cells across the frame, Warp pulls the picture apart with a boiling noise field, and Drift, Zoom, Spin and Hue Shift carry the ghost away
  • Halation with its own size and tint, and Bleach, for the bloom around a bright trail
  • A still picture comes out untouched, byte for byte — asserted by the build, with Screen the one documented exception, which may lift but never darken
  • Ships for Resolume on macOS and Windows, and for Resolve, Nuke, Natron and Vegas on macOS, Windows and Linux

Where it stands

Released at v0.1.5. The last two point releases didn't change the Resolume picture: v0.1.4 put SW in front of its name in Resolume's browser, and v0.1.5 fixed the OpenFX build on Resolve's Fusion page, where every render used to fail. It has never been loaded into Resolume, and the OpenFX build has rendered as a tool on Resolve's Fusion page (Resolve Studio 21.1, macOS) and nowhere else. It's been compiled, rendered and measured offline, which isn't the same thing. An offline harness drives the real plugin and runs the shipped GLSL against a separate C++ version of the same maths, 365,696 comparisons without a single disagreement, and checks the still-picture rule byte for byte. All 23 controls change the picture, every factory preset survives every host behaviour, and the browser demo is checked to be running the plugin's own shader rather than a lookalike. It costs 0.66 ms a frame at 1080p and 2.6 ms at 4K. Try it in your own rig before you trust it in a show.

Watch it running

Afterglow video thumbnail

Nothing loads from YouTube until you press play.Watch it there instead