Colophon · how it was built

Building the wake

KÁRMÁN renders an invisible thing — the wake behind a cylinder — as a dyed, lit von Kármán vortex street. This page documents the palette, the type, the simulation, and the three iteration passes that took it from a physics sketch to a premium plate.

The concept

One field, given a body

A steady stream past a bluff body carries a structure you cannot see. Below a critical speed it stays symmetric; above it, the wake becomes unstable and sheds a staggered double row of counter-rotating vortices at a fixed cadence — the von Kármán street that hums power lines and sways chimneys. KÁRMÁN is a fictional flow-visualisation lab whose single job is to let a visitor watch that instability switch on by dragging one speed slider across the threshold.

Palette · argued from the flume

Dark water, two spins

Colour here is not decoration — it is the sense of rotation. The dark ground is still water; each eddy is dyed by the direction it turns, so the street reads as a two-tone braid. The bright accents are reserved for the vortices and marks; body copy runs in a derived light ink that clears 4.5:1 on the ground.

Flume dark #0C1418
Still, unlit water — the ground the wake is drawn against.
Vortex #5AA9E0
Line/mark accent. Dyes the eddies shed from the top shoulder.
Counter-vortex #E07A5A
The opposite spin, shed a half-cycle later from below.
Current ink #AEC2CC
Derived body ink — ~10:1 on the ground, legible at small sizes.

Type

Instrument and label

Archivo Display and headlines. The Expanded cut at weight 900, uppercase, sets the wordmark and section heads with the flat, engineered authority of a test rig.
Plex Mono IBM Plex Mono carries every readout — Reynolds number, shedding frequency, λ/d, the eyebrows and record grid — so the data reads like an instrument panel, not prose.

Technique · the signature

Discrete vortices, dyed by curl

The plate is a canvas 2D simulation on a coarse grid (≈7 px/cell), upscaled for display. The steady flow around the cylinder is an analytic potential-flow field; the wake is a discrete-vortex method layered on top. On the Strouhal cadence a Lamb–Oseen vortex is shed alternately from each shoulder, its induced velocity splatted into the field, and each vortex then rides the very field it helps create — so the street convects, staggers, and spaces itself.

fs = St · U / d   Strouhal shedding cadence, St ≈ 0.20
vθ(r) = Γ/2πr · (1 − e^(−r²/r_c²))  Lamb–Oseen core

The dye is a rake of streaklines injected upstream and advected semi-Lagrangian (each cell traces its velocity back a step and samples the previous frame). Colour comes from the instantaneous vorticity — the curl of the live velocity field — so the dye caught in a core is tinted by that core's spin. Straight in the free stream, the filaments wind into whichever eddy catches them.

Iteration log

Three passes

Pass 1 — Craft

Sharper cores, wider street

The first build coloured the eddies with a separately-advected sign tracer. Numerical diffusion smeared it into featureless soft discs, and the shedding was so frequent the vortices merged (λ/d ≈ 1.3). Fixed: colour the dye by the instantaneous curl of the velocity field instead — sharp, core-sized — and stretched the shedding cadence so the street spaces at a physical λ/d ≈ 4.3. Retuned the neutral dye tone and rake density for a cleaner, darker ground.

Pass 2 — Depth

The street, read as an instrument

Enriched the signature: the dye rake now visibly wraps the cylinder and winds into each eddy, cores bloom where vorticity is strongest, and the cylinder is drawn as a lit dark disc with a metal rim. Added the live HUD — Re, fₛ, λ/d — and a STEADY / SHEDDING lamp that flips at the threshold. Second-read detail: hold the slider and watch λ/d stay fixed while fₛ and Re climb together — the Strouhal law, locking.

Pass 3 — Hardening

Kill the boxes, settle the frame

The finite vortex splat window left a velocity step at its edge, whose curl drew a square box around every eddy. Fixed: tapered the kernel smoothly to zero at the window boundary, and nulled the spurious curl the hard body mask left ringing the rim. Verified the 375 px reflow (slider drops full-width under the readouts), the reduced-motion path (a settled, fully-shed static frame — never blank), focus states, the DPR cap and the resize/visibility handling. Zero console errors.