Skip to content

Releases: stoatworks-labs/plotter

Release list

v0.1.0

Choose a tag to compare

@github-actions github-actions released this 24 Sep 21:36

A pen plotter drawing the clip, as an FFGL effect for Resolume Arena and Avenue, shown as SW Plotter. galvo is a laser: a fast mirror redrawing the whole path every frame. A plotter is the opposite machine. It is slow, and the ink stays. The plugin traces the outlines in the frame with galvo's tracer, plans the strokes as a real plotter driver would (sorted by pen, then nearest start first), and drives a carriage along them under a trapezoidal motion profile: a speed limit, an acceleration limit, a settle at each end of every stroke, a full stop at corners sharper than Corner Angle, and a trip to the carousel off the corner of the sheet for every pen change. The machine advances by the time that really passed, in double, and the renderer deposits ink per unit of time, spread over the distance the carriage covered in each interval.

Nothing is drawn. The heavy ends of every stroke, the blot at every pen-down, the darker corners, the staircase a coarse Step Size makes of a shallow diagonal, and a sheet that is a collage of the moments each stroke was drawn all fall out. Ink is Beer–Lambert absorbance into an RGBA32F paper that is never decayed, survives a resize, and is torn off by Auto Sheet or New Sheet. Chase re-traces at the end of every stroke so each comes from now. Four palettes (Technical, Black, Neon, Source), one to eight pens, five papers.

What is verified

By tools/verify.sh on an M4 Max, macOS 26.4, on 2026-09-24, at two rasters (320×180 and 1280×720), and again on Apple's software renderer (the one CI's runners fall back to):

  • A stroke's pen-down time, read off the ink on the sheet, is 2.7998 s for 2.8000 predicted by L/v + v/a plus two settles, and 0.6000 for 0.6000 when it never reaches cruise (2√(L/a)); frame-counted to within one frame.
  • Where the pen is at half cruise the column density is 2.018× the middle's against 2.0125 predicted (ink follows 1/v), tolerance 2%.
  • After t seconds of a five-bar, 17.5 s job, at every checkpoint the finished bars, the inked length of the current one and the untouched ones match the closed-form schedule to a nib plus a pixel.
  • A slope of 1/6 at a coarse pitch is a staircase: every run on its level to 0.001 px, risers one pitch apart to 0.33 px, the straight line 1.75 px away.
  • Eight strokes over four pens make 4 trips to the carousel with Optimise and 8 without, every stroke in its pen's colour to 0.00%.
  • Thirty idle frames leave the sheet byte for byte; a resize to 2× reproduces the bilinear blend of the old texels at 464,456 inked texels, worst 1.2e-7; New Sheet clears to exactly nothing.
  • A filled square through the plugin's own detect passes is one closed black stroke of perimeter 1.3047 against 1.3333 (±8%), and is drawn.
  • Six perturbed machines each fail their check; -0.5 → -0.6 in the nib's Gaussian is caught by --trapezoid at both rasters (−8.8% against 1%).
  • All 19 controls change the picture; oxbow loads it as SW Plotter / PL01 / effect and renders 120 frames.
  • Render cost at the defaults: 0.19–0.21 ms/frame at 720p, 0.20–0.22 at 1080p and 0.53 at 4K as shipped; 0.73–2.05 ms with a trace forced every frame. macOS figures only.
  • Windows, in Resolume Arena 7.27.1 (win-lab, Mesa llvmpipe, no GPU, 2026-09-24): the DLL of this source loads from Extra Effects, registers as SW Plotter / PL01 / effect, all 25 host controls match the declaration, it renders, Arena's log stays clean and all 19 controls move the picture: 9 of the fleet gate's 9 checks, in two runs (before and after the tear-off fix). Software rendering says nothing about a GPU or about speed.

What is not

  • Never loaded into Resolume on macOS. Footage has been seen only through the harness's --pipe (the project video, on Resolume's bundled demo clips). Filming found that the first job after a hard cut wore the previous clip's colours, carried by the stabilise filter's slow release: a tear-off now drops that history and traces from the picture now (this is in the tag). It also found that Palette Source is a dark pen on a dark ground, because the stroke's colour is sampled at the edge, half background; the guide says so.
  • The tracer is a tracer, not a vectoriser: footage is a scribble of short strokes, one trip at a time. At a coarse Step Size the line is beaded at the grid points rather than dragged between them. Pen pressure, bleed and drying are not modelled.
  • No OpenFX port and no presets. There is a user guide at https://stoatworks-labs.com/software/plotter/guide/ and a browser demo at https://plotter-demo.stoatworks-labs.com/ (a port to a web page, not the plugin; its CPU half is a hand port that only a reader checks).

The macOS build is now Developer ID-signed and notarised (signed on 2026-09-25, after publication); a copy downloaded before then is unsigned, so if macOS refuses it, download it again. The Windows build is unsigned, so SmartScreen warns once.