Cogwheel
A Spirograph as a machine, not a curve

What it does
Cogwheel models the machine rather than the curve it makes. A toothed ring is pinned to the paper, a smaller toothed wheel rolls around inside it in mesh, and a pen dropped through one of the wheel's holes is carried along for the ride. It ships as two plugins, because FFGL resolves a single 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 — and again as an OpenFX bundle for Resolve.
The ratio is two integers because gears mesh. A wheel cannot roll by anything other than a whole tooth, so every property of the figure follows from the two tooth counts alone: 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 report the lobe count and the turn count as you drag them, which is the question an operator is actually asking. A floating-point ratio control makes the same shapes and explains none of them.
Ink is subtractive, and that is what makes crossings correct. The sheet accumulates optical density and what you see is the paper through it, so a second pen crossing the first gives the product of the two transmissions — the muddy near-black it is on the table — rather than the bright sum additive blending would produce. Because the sheet never holds a colour, the palette and the paper can change mid-drawing without anything already down being 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 for ever, which is arithmetic rather than a bug — a drawing is finished when it is finished. The answer is the one a person at the table uses: a real plastic Spirograph's mesh is not 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 to start the next figure in the next colour. One of the three is on in the defaults, and a test fails if they are ever all turned 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.0, and moving quickly: 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 is drawn; v0.4.0 the dot at the starting point, Clear Paper for a keyable sheet, honest tooth counts and named sliders; v0.5.0 On Closing → Keep Going, where the figure coming home is no event at all, and two more pens — an opaque pigment that covers what is 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 selected mid-run; v0.6.0 adds 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 were verified 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 artefact rather than a local build. Both bundles load, both register, every control is inside 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 one worth having — llvmpipe's GLSL compiler is not macOS's, so the shaders passing there is evidence about the shader source rather than about one vendor's driver. It says nothing about NVIDIA or AMD and nothing about speed. The OpenFX bundle loads in an independent OFX host and renders a correct frame, and Resolve Studio 21 lists both plugins, but it has not been applied to a clip inside Resolve — so the CPU renderer is proven to run and not yet proven to match the GPU one. On macOS the OFX bundle must go in /Library/OFX/Plugins; ~/Library/OFX/Plugins is silently ignored, and the plugin simply never appears.
Watch it running
Nothing loads from YouTube until you press play.Watch it there instead