Repository navigation
Releases: stoatworks-labs/scrawl
Release list
v0.1.0
The first release of Scrawl: hand-drawn doodles to the music for Resolume Arena and Avenue, as two FFGL plugins, a source (SW Scrawl, SK01) and the same over your clip (SW Scrawl Over, SK02). Rings of sound spread out on the kick, spikes and a jagged star go off on the snare, a forked zigzag bolt lands on the big kicks, curls float up off the hi-hats, and one long wobbly line across the frame is the spectrum. Every line boils, which on a projector would be a service call. It borrows the idea from the sound effects in Edgar Wright's Scott Pilgrim vs. the World and none of the film's artwork, and it has nothing to do with the film's makers.
The one idea: a hand that can't hold still, drawing every doodle again for every drawing. Effects animation is redrawn twelve times a second on twos, and no two passes of a pen land in the same place. So each doodle has an intended path, and each drawing of it gets its own error from the hand: a boil across the line, the whole pass landing a little off its pegs, and a pen that lands, presses unevenly and lifts. The error grows with the gesture, A = Wobble × (0.003 + 0.02 × extent) frame heights, and between drawings everything holds still, so the lines boil at 24, 12 or 8 drawings a second. The music only decides what gets drawn and when: three onset detectors on Resolume's 64-bin spectrum put rings on the kick, bursts on the snare and curls on the hats, and with nothing to hear it follows Resolume's tempo instead.
Downloads: universal macOS bundles (Apple silicon and Intel) as a .dmg or .zip, and a Windows x64 installer (-setup.exe) or .zip. The macOS build is Developer ID-signed and notarised. The Windows build isn't signed, so SmartScreen warns once. Every download carries both plugins: Scrawl.bundle and Scrawl Over.bundle, or Scrawl.dll and Scrawl Over.dll on Windows. Put both in Extra Effects.
What is measured (offline, by tools/verify.sh and a harness driving the real plugin classes in a headless GL context, on an Apple Silicon Mac):
- On twos. Over 4 s the picture changes on the frames a new drawing starts on and no others: 96 at On Ones, 48 at On Twos, 32 at On Threes, source and Over, at two rasters.
- The boil. 400 drawings of a circle spread between drawings as the hand's law says, to 0.4–1.5%. One ring drawn 120 times spreads by the law to 2–3%, read back out of the picture along 282 rays.
- The pen. Stroke ends at zero width, the middle at half Line Width, and a line's cross-section summing to Line Width to 0.0023 px.
- Latency. A lone kick is on the page in the first drawing made at or after its frame, at 24, 12 and 8 drawings a second.
- The ears. From a cold start the kick fires only the low band, the snare only the middle and the hats only the top. On Resolume's six Beat loops, through a stand-in FFT, each band's onsets are 80–100% on the sixteenth notes against 36% by chance (p ≤ 5e-6 for all 18).
- The beat. With no audio, every doodle is born within a frame of its eighth note, at 100 bpm free-running and 128 bpm from a host bar phase.
- The effect. With nothing drawn, or at Mix 0, the clip comes through bit-identical, alpha and all, and the host's GL state comes back as it went in.
- The checks. All 14 models that are wrong on purpose are detected, all 8 one-character mutants of the GLSL and C++ are caught, and all 27 parameters swept change the picture (every one but the Audio input and the About block).
In Resolume on macOS: never loaded. The only host that's run it on a Mac is the fleet's test host, oxbow, which reads both bundles the way a host does and renders through them.
Windows, in Resolume Arena 7.27.1 (the fleet's Windows machine: software rendering with Mesa llvmpipe, no GPU, no sound device): the x64 build loads, registers and draws, with the beat driving it. It passed all 15 of the fleet's Arena checks that can run there (the audio ones are skipped): every control as declared, by name, order, type, range and default, and nothing in Arena's log. That gate's a blunt instrument for this plugin, though. It decides whether a control does anything by comparing frames grabbed a moment apart, and Scrawl redraws and adds doodles all the time, so only Backdrop and Centre Y on the source, and Drive and Centre Y on the effect (Arena's own Opacity too, in one of two runs), stood clear of the churn. The rest came back too close to call, and none came back dead. So I looked instead. With the controls set one at a time through Arena's own API, the frames it served showed Paper and Ink, Neon, a colour of my own, three passes, a smoother line at Wobble 0, a fatter one at Line Width 1, bigger doodles at Size 1, the rings gathered at Placement Centre and the wave alone with the other doodles at 0; and the effect drawing over the clip at its defaults and in Neon, with the clip untouched at Mix 0. Software rendering says nothing about a GPU or about speed.
What is assumed, or unconfirmed. Nobody has measured what's in Resolume's 64 FFT bins, so the real-drum check uses a stand-in (a 2048-sample Hann window, magnitudes folded into 64 equal bins up to Nyquist). If Resolume spaces its bins differently, Bass Bins and Treble From put the bands back on the kick and the hats. The loops' 128 bpm is inferred from their length. A bass slide fires the low band all over the place, so Rings on a bassline is busier than on drums. Resolume's bar phase is trusted as a downbeat, unmeasured. No sound has reached either plugin in any host yet.
Cost: on an Apple M4 Max, busy (every kind at full, Passes 3, up to about 50,000 capsules a drawing), a new drawing takes 2.7–3.5 ms at 720p and 1080p and 4.0–4.2 ms at 4K; a held one 0.2–0.5 ms, and 0.9–1.1 ms at 4K. On twos at 60 fps a new drawing is one frame in five. Nothing was timed in Resolume.
Not done. No presets, no browser demo and no OpenFX port. No lettering ("KRAKOOM") yet, and no crackling aura round anything in the clip.
- User guide: https://stoatworks-labs.com/software/scrawl/guide/
- Project page: https://stoatworks-labs.com/software/scrawl/