KQ-1392 · HALFTONE/WAKE

Halftone Wake

A single-ink halftone plate whose image surfaces in the pointer's wake: every dot rests at a faint fraction of its size, and the dots the hand passes grow on their own springs with the snap constants, popping just past full size before they settle, then recede from the trail's oldest end over linger seconds. Scrolling sweeps a band of ink down across the plate, and the first time it is mostly in view one press runs across it. The plate is a focusable image: focus and Enter or Space run the press across the whole of it.

KQ-1392 · HALFTONE/WAKE

Enter or Space runs the press across the whole image.

Basinworks Press · plate 07

ghost · move across the plate or tab in

Install

One command — the source lands in your repo. Or copy it from the Code tab.

$ pnpm dlx shadcn@latest add @kinetiq/halftone-wake

Props

src
string
default —
The image to print; it must be readable across origins (CORS). The generated art is used without it or when it fails.
art
"ridges" | "tide" | "orbit"
default "ridges"
The generated artwork printed when there is no image.
alt
string
default a description of the art
What the image shows: the plate's accessible name.
cell
number
default 10
The screen's cell size, px (4 to 32).
angle
number
default 45
The screen's angle, degrees; 45 is the classic black screen.
linger
number
default 2.4
How long the wake takes to recede, s.
shape
"round" | "square" | "line"
default "round"
The dot: round, square, or a line screen whose thickness follows the tone.
ink
string
default "var(--foreground)"
The ink.
paper
string
default —
Paper behind the dots; the page shows through when unset. Dark ink on light paper prints shadows, light ink on dark paper prints highlights.
rest
number
default 0.18
The dot size where nothing has passed, 0 to 1; 0 hides the image until it is printed.
brush
number
default 112
The width of the pointer's wake, px.
contrast
number
default 0.5
The plate's tone curve, 0 (flat) to 1 (punchy).
scroll
boolean
default true
Scrolling the page sweeps a band of ink down across the plate.
intro
boolean
default true
One sweep across the plate the first time it is mostly in view.
seed
number
default 3
The generated art's variation.
interactive
boolean
default true
The pointer, the scroll and the keys print; false leaves the plate at rest and out of the tab order.
paused
boolean
default false
Freeze the plate as it is.
dpr
number
default 2
The highest device pixel ratio drawn, capped at 2.
onCoverageChange
(printed: number) => void
default —
Fires with the share of the plate printed, 0 to 1, whenever it moves by a whole percent.
className
string
default "aspect-[2/1] w-full"
Size the plate here.