Colophon · how it was built
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
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
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.
Type
Technique · the signature
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.
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
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.
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.
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.