← All work
project

Splatter

Procedural ink and blood brushes for the DOM and Canvas. Seeded and dependency free, so the same inputs always paint the same mark.

Prototype
A dark red splatter with a dense center and rings of droplets on a cream panel, above a row of five brush marks and beside brush, material and parameter controls.
The Splatter brush in the blood material, with all five brushes painted from the same seed underneath.

Splatter is a TypeScript library of painterly marks: wipe, smear, splatter, fractal and stroke. Each brush generates a mask from a seed, and that mask can clip an element, fill a background, animate a reveal or run a full page transition. It is for interfaces that want a hand-painted mark that stays put across re-renders.

A brush only decides where coverage goes. Shading, paper bleed and the animated reveal are shared passes, so a new brush is one file. Marks are layered at several scales, one strong mass, torn mid-size areas, tiny imperfections and a few long accents, because single-scale noise reads as a shader. Animation builds the mask once and re-reveals it each frame, which costs less than painting it again.

Status A prototype library with an interactive playground; no published package is stated.

Zach’s part Wrote the library and the playground.