
Ink, taken down the screen.
A WebGPU row of flames that puff, climb and lick the way buoyant fires do, pulled down the frame by an actual line integral, torn into lanes by the nicks in the blade, with the grain sitting on the print.
Part of Aperveil Pro · Coming soon. The live demo, editor and downloads will open in a later release. Free shaders and blocks are available now.
THE SYSTEM BEHIND THE SURFACE
Inside Pulled Ink.
What gets pulled is fire, and it moves the way fire moves because the motion comes from how buoyant flames behave. A pool fire sheds a vortex from its base at a steady rate and necks and bulges with it; that rate is f = 1.5/√D for a fire of width D (Cetegen & Ahmed, 1993), so every flame here keeps its own time and a narrow one flickers faster than a wide one. The gas accelerates as √z as it rises (McCaffrey), so a bulge reaches height z after 2√z/v₀ and its crests spread apart as they climb; above the flame tip only the shed puffs carry on, cooling as they go. That fire is then pulled: sampled at many points along the stroke and integrated, which carries its structure along the stroke — a flame stretches while its edges across the stroke stay sharp. A few columns are nicked and take their own offset along the stroke, either way, so the print tears into fine lines both darker and brighter than the ink around them. Grain is added after the pull, never through it.
Not a combustion model and not a print simulation. There is no chemistry, no radiation transport and no solved velocity field: the flames are placed and timed by those scaling laws, not evolved. There is no ink viscosity, no paper absorption, no screen mesh, no registration and no second colour pass. The pull is one straight direction applied uniformly, and the blade's nicks are a hash rather than a modelled edge.
7.209 ms GPU timestamp median; p95 7.93 ms. 1440x900 @ dpr 1.25; Metal driver on macOS Version 26.6.2 (Build 25G83); measured 2026-09-18. This is a recorded headless sample, not a browser FPS or mobile-performance guarantee.
Flame spacing
How many flames the frame holds. Each flame keeps its own width, and with it its own puffing rate.
Pull angle
Direction the blade pulls the ink, in degrees; 90 pulls straight down.
Pull length
How far along the stroke the line integral reaches. This is the length of the smear, not its softness.
Integral taps
How many points along the stroke are integrated. Fewer taps band the smear; this is the real cost of the shader.
Color Looks preserve these settings. Open the editor for all 23 controls.
APERVEIL PRO
Coming soon.
This Pro surface's demo, editor and downloads will open in a later release. Free shaders and blocks are available now.
Explore shadersTHE SURFACE IN CONTEXT
Made for a real interface.
Give an editorial cover, a music or publishing page, or a poster-led launch a surface that looks made rather than rendered. Set type over the calmer ground and let the blooms carry the colour.

Edition of one hundred
Pulled by hand, once each.
An illustrative cover for a press that prints its own covers and numbers them in pencil.
An illustrative layout. Your content stays in HTML; the shader sets the atmosphere.
A FEW USEFUL DETAILS
Before you ship.
What this surface does, where it fits, and where it stops.
ANOTHER WAY TO SEE IT
Keep exploring.
YOUR COLORS. YOUR CONTEXT.

