Cogwheel
A Spirograph with teeth, for Resolume and Resolve

What it does
Cogwheel models the machine, and the curve comes from that. A toothed ring is pinned to the paper, a smaller toothed wheel rolls round inside it in mesh, and a pen pushed through one of the wheel's holes gets carried along for the ride. It comes as two plugins, because FFGL only finds one entry point per binary. Cogwheel is a source, and Cogwheel Ink is an effect that can use your clip as the paper the pen draws on, as the ink the pen picks up, or both. There's also an OpenFX bundle for Resolve.
The ratio is two whole numbers because gears mesh. A wheel can only roll by a whole tooth, so everything about the figure follows from the two tooth counts: 96 and 32 mesh three to one and close in a single turn with three lobes, while 96 and 31 share no factor and take thirty-one turns to lay down ninety-six. The Ring and Wheel controls show the lobe count and the turn count as you drag them, since that's what you actually want to know. A floating-point ratio control would make the same shapes and explain none of them.
Ink is subtractive, which is what makes crossings look right. The sheet builds up optical density and you see the paper through it, so a second pen crossing the first gives the product of the two transmissions, the muddy near-black you get on the table, rather than the bright sum additive blending would give you. Because the sheet never holds a colour, the palette and the paper can change mid-drawing without anything already down going wrong. A ballpoint lays ink per unit of distance and a fibre tip per unit of time, which is the difference between an even line and one that blooms at every cusp.
A closed figure retraces its own line forever. That's arithmetic, and a drawing's finished when it's finished. The fix is the one you'd use at the table. A real plastic Spirograph's mesh isn't quite true, so Creep precesses the figure instead of closing it, Skip is the jumped tooth that ruins a drawing, and Layers lifts the pen at each closure and starts the next figure in the next colour. One of the three is on in the defaults, and a test fails if they're ever all switched off.
- Two plugins from one machine — a source that draws on its own sheet, and Cogwheel Ink, an effect that takes the clip as the paper, as the ink, or both
- Ring and Wheel are tooth counts, and the controls report the lobe count and the turns to close as you drag them
- Subtractive ink: crossings multiply and go darker, and paper, palette and pen can change mid-drawing without anything already down being wrong
- Creep, Skip and Layers keep a closed figure alive — or On Closing → Keep Going lets it precess for ever, and Unless Faded lets the fade decide
- Ballpoint and fibre-tip pens, and three blends — transparent ink, an opaque pigment that covers, and a pen that lifts ink off
- Fade, and Fade by Figure, which fades whole figures rather than the line as it is drawn; Clear Paper for a keyable sheet
- Export and Load XML, so a configuration travels as a file; Show Gears puts the ring, the wheel, the arm and the pen on screen
- Eight factory presets, each a recognisable drawing rather than a set of slider positions
- Universal macOS bundle, a Windows x64 DLL, and an OpenFX bundle for macOS, Windows and Linux
Where it stands
Released at v0.6.3, which puts Export XML's files in Documents wherever Windows has moved it, OneDrive included, and starts Load XML there. v0.6.2 fixed the OpenFX build on Resolve's Fusion page and a factory preset that crashed the host, and v0.6.1 renamed the plugins SW Cogwheel and SW Cogwheel Ink so the Stoatworks plugins sit together in Resolume's browser. Before that it moved fast: five releases in the fortnight to 11 September 2026, several of them answering reports from people running it live. v0.3.0 added Load XML, so an exported configuration can be read back in, and Fade by Figure, which fades whole figures rather than the line as it's drawn. v0.4.0 added the dot at the starting point, Clear Paper for a keyable sheet, honest tooth counts and named sliders. v0.5.0 added On Closing → Keep Going, where the figure coming home is no event at all, and two more pens: an opaque pigment that covers what's under it, and one that lifts ink off. v0.5.1 stops a reopened composition being overwritten by its own Load XML path, and keeps the figure on the paper when Keep Going is picked mid-run. v0.6.0 added Unless Faded, which lets the fade decide whether a figure closes. Before all that, v0.2.0 renamed Crank to Speed, kept every parameter display inside FFGL's sixteen characters and added the XML export. The plugins have been run in Resolume Arena 7.27.1 on two machines: macOS on an Apple GPU, and Windows 11 on llvmpipe with no GPU at all, using the CI build rather than a local one. Both bundles load, both register, every control fits FFGL's 16-character limit, both render, and presets hold through live rendering and drop to Custom on a real edit. The Windows half is the more useful one, because llvmpipe's GLSL compiler isn't macOS's, so the shaders passing there tells you something about the shader source rather than about one vendor's driver. It tells you nothing about NVIDIA or AMD, or about speed. The OpenFX bundle loads in an independent OFX host and renders a correct frame, Resolve Studio 21 lists both plugins, and from v0.6.2 both render as tools on the Fusion page of Resolve Studio 21.1. But nobody has compared their output inside Resolve with the GPU's, so the CPU renderer is proven to run and not yet proven to match the GPU one. On macOS the OFX bundle has to go in /Library/OFX/Plugins. ~/Library/OFX/Plugins is ignored without a word, and the plugin just never shows up.
Watch it running
Nothing loads from YouTube until you press play.Watch it there instead