Repository navigation
Releases: stoatworks-labs/handleman
Release list
v0.1.0
The first release of Handleman: a hand-cranked camera and projector, for Resolume Arena and Avenue, as an FFGL effect (SW Handleman, HM01). Sepia or black and white, a frame rate that won't sit still, the usual wear and tear on the print, and a button that runs the reel out.
The one idea: two people are turning handles, and neither of them is a motor. The cameraman's hand decides when each frame was exposed, so the action drags when he hurried and rushes when he slowed, and because the shutter is a fixed angle, a frame cranked slowly prints lighter and a hurried one darker: the action rushes as the picture brightens, as it does on real silent footage. The projectionist's hand decides how long each frame stays on the screen, and the shutter's geared to the handle, so the flicker wanders with it. Between them is a loop of film neither can get far ahead of. The print is orthochromatic (blind to red: lips and skin go dark, skies go white) or panchromatic silver, sepia toned (the whites stay white) or tinted amber, blue or green (the blacks stay black), with grain that belongs to the frame, weave, scratches that stay put in the gate, dust that rides the print, and the odd hair. Run Out fogs the roll from the edges in to blank cells, and the frame line crawls up the screen (Rolling), is framed off (Framed) or the tail whips out of the gate (Off the End). Press it again to thread a new roll.
Downloads: a universal macOS bundle (Apple silicon and Intel) as a .dmg or .zip, and a Windows x64 installer (-setup.exe) or .zip. Every download carries the one effect: Handleman.bundle on macOS, Handleman.dll on Windows. The macOS build is Developer ID-signed and notarised by the fleet's signing agent once the release is published. The Windows build isn't signed, so SmartScreen warns once.
What is measured (offline, by tools/verify.sh on an Apple Silicon Mac under macOS 26.4, driving the plugin's own class in a headless GL context at 320×180 and 1280×720 and on Apple's software renderer; most checks feed it a picture whose top strip says, in black and white blocks, which display frame it was):
- The hands. With both still, 598 of 598 display frames show the picture a steady clock predicts. The projector's hand alone (40%): every picture is the steady camera's, in order, each held for 2 to 8 display frames and shown 1 to 10 after it was exposed, inside the loop's limit of 19.9. The camera's hand alone (50%): every switch is where a steady projector 2.64 frames behind puts it, every pull-down brings a newer picture, and over a turn the scene runs at 0.77 to 1.37 of real time. Both: 466 pictures in 29 seconds, against 463.7 at sixteen a second, and the loop never deeper than 12 pictures.
- Exposure. Log light against log camera interval rises at a slope of 1.440, against the print's gamma of 1.40.
- Flicker. Every DFT bin of a flat grey's brightness within 2.3e-8 of the shutter's Fourier series.
- Tone. Black & White is neutral to the last bit; the curve's straight line has the slope Contrast says to 1.4e-3; sepia keeps its density law to 1.3e-6 and the tints theirs to 1.1e-7; the stocks' weights read back out of the picture as 0.0482 / 0.3331 / 0.6460 (orthochromatic red, green, blue) against 0.0482 / 0.3331 / 0.6459 computed.
- The print's marks. Within a hold the grain and dust don't move (to 2.2e-7) and across a pull-down they do; scratches take their own columns, and only theirs, on every frame of a moving, weaving picture; the weave has the stated deviation and frame-to-frame correlation.
- Run Out. Blank cells are the clear base to float precision; the frame line is 41 or 42 rows at 720 (41.32 from the film's pitch and aperture); Rolling climbs 47.55 rows a pull-down; Framed's line goes and stays gone; Off the End is the bare lamp; a second press has the picture back and framed within 161 display frames.
- The checks can fail. Ten deliberately wrong models each fail their check, and so does a one-character mutant of the shipped shader. All 19 controls change the picture. The bundle is universal, and
oxbowseesSW Handleman,HM01, an effect, and renders 120 frames through it.
Windows, in Resolume Arena 7.27.1 (win-lab, Mesa llvmpipe: software rendering, no GPU, no sound device): the x64 build loads, registers and renders, and passed all 9 of the fleet's Arena checks that can run there, twice. Every control is as declared and Arena's log stays clean. The gate measures each control against a still picture, and at the defaults Handleman never stands still on its own (new grain at every pull-down, the weave, dust, the flicker), so 8 controls measurably changed the picture and 9 were too close to call. With the grain, the wear and both hands held at 0 while every other control was measured, 12 did. Crank Rate, Blades, Shutter Angle and Projector Hand, which change how the light varies over time rather than what's in the picture, and Hair, a rare event, were too close to call both times, and none read dead. Run Out Time and Tail only act after a Run Out press, which the gate never sends. A third run, on this release's own handleman-windows-x86_64.zip, passed all 9 again, and 15 controls moved the picture there: Blades, Shutter Angle and Projector Hand did this time, and only Crank Rate and Hair were too close to call. Software rendering says nothing about a GPU or about speed.
On macOS it's never been loaded into Resolume; the fleet's test host, oxbow, is the only host it's run in there.
What is assumed, or unconfirmed. The published figures are the eight frames a turn and the film's apertures and pitch. The rest (how the hands wander, the jerk, the slip, the fog, the grain, the tones' colours) are numbers I picked to look and behave right, not measurements of a cameraman or a print, and the orthochromatic sensitivity is an assumed shape, not a digitised curve. It's only been seen on Resolume's bundled demo clips. A 16-bit composition is quantised to 8 bits in the loop of film, and nothing has been verified at 4K, only timed there.
Photosensitivity. The shutter flickers against your output's refresh, and the projector's hand moves that beat around, so on a flat grey the light steps by up to about 20% from one display frame to the next at the defaults, mostly at 12 to 15 Hz, inside the band broadcast flash guidelines restrict. The default shutter (3 blades at 315°) is the gentlest the projector has; two blades at 180°, the classic, is a lot worse. Camera Hand at 0 stops the breathing and Projector Hand at 0 makes the beat regular.
Cost: GPU time, best of three with glFinish both sides, on an Apple Silicon GPU shared with other work: 0.050 ms at 720p, 0.066 ms at 1080p and 0.175 ms at 4K at the defaults. The state is the loop of film, a stack of 8-bit pictures at the input's size: 21, 47 and 190 MB at the defaults, up to about 400 MB at 4K with both hands at full. Nothing was timed inside Resolume.
Not done. No presets, browser demo or OpenFX port.