Obsidian is a fictional museum with a strict acquisitions policy: no artwork may exist as a file. Each of the six pieces is an algorithm — 20 to 40 lines — that paints itself onto a canvas when you arrive. This page is the catalogue of techniques.
Hijacking the wheel event breaks trackpads and accessibility. Instead the gallery uses the sticky-rail pattern: the gallery wrapper is given a height equal to the rail's overflow width plus one viewport; inside it, a position:sticky full-screen room holds the rail, and vertical scroll progress is mapped to translateX. Native scrollbar, native momentum, keyboard and screen-reader friendly — but you walk sideways past the frames.
progress = -rect.top / (wrapperHeight - viewportHeight);
rail.style.transform =
`translateX(${-progress * (railWidth - viewportWidth)}px)`;
noise(x,y) × 4π); 2,600 particles each walk the field at 6% opacity, accumulating ink like commuter routes. Seeded randomly, so every visitor gets a different city.Each canvas sits in a frame (padded panel, deep drop shadow on a slightly lighter wall colour) with a proper wall label: number, title, medium, and a one-line curatorial note. The labels are half the design — Topography of a Bad Night's Sleep recontextualises a marching-squares demo into an artwork. Titling is a rendering technique.
mix-blend-mode:difference so it survives any artwork behind it.Every algorithm here is a classic of creative coding: flow fields, moiré, n-body, marching squares, Voronoi, layered alpha. Implementations are all in this page's parent — view source, copy one, change the palette and the seed, and hang your own hall.