An associative-memory type specimen.
Each character is stored in a Hopfield network, shattered by noise, then pulled back into focus — rendered on a curved phosphor screen, scored by its own generative composition.
Every character here is a memory under pressure.
The form is stored once — a small grid of charges, nothing more — and then deliberately ruined: cells flipped at random until the shape dissolves into static. What follows is not drawing but remembering. The network has no picture to copy from; it has only the relationships it learned, and it feels its way back down the slope of its own energy until a familiar shape settles out of the noise.
I am drawn to that moment of settling. We tend to think of memory as storage, but a Hopfield network insists it is something more active and more fragile — a basin you fall into, a pattern that reasserts itself only because the parts agree on what they used to be. Sometimes it lands cleanly. Sometimes it settles into a shape that was never stored at all. The recall is never guaranteed; it is earned, pass by pass.
The characters are the most ordinary marks we have — letters, digits, the punctuation we type without thinking. Rendering them on simulated phosphor, behind the curve and glow of a screen that no longer exists, is a way of asking what it costs to hold even the simplest form against entropy. Each one carries its own small piece of generated music, so that recognition arrives as sound as well as image: the instant the noise resolves, the network, briefly, sings.
Each piece is a single, self-contained HTML file — the network, its noise, and its score all in one place — looping its recall endlessly in the browser: the memory recovered, lost again, and recovered once more, without end.
— Pattern Retrieval, by Adam Ilenich
// store one pattern as Hebbian weights const W = Array.from({length: N}, () => new Float32Array(N)); for (let i = 0; i < N; i++) for (let j = 0; j < N; j++) if (i !== j) W[i][j] = A[i] * A[j]; // recall: relax toward the basin floor let h = 0; for (let j = 0; j < N; j++) h += W[i][j] * state[j]; h += LAMBDA * A[i]; // λ = 0.35 state[i] = h >= 0 ? 1 : -1; // sgn(h) // energy — every pass lowers it for (let i = 0; i < N; i++) for (let j = 0; j < N; j++) E += -0.5 * W[i][j] * s[i] * s[j];
A Hopfield network is content-addressable memory. Store a pattern, feed it a corrupted version, and it relaxes back toward what it remembers.
The character bitmap becomes a vector of ±1 cells. Hebbian weights W[i][j]=A[i]·A[j] etch it into the energy landscape.
Random cells flip — the pattern is buried in noise, sitting up the slope of its energy basin.
Over 8 passes each cell re-checks its neighbours, with a bias λ=0.35 toward the stored state, rolling downhill.
The network settles at the basin floor — the original character, reconstructed. The memory is recovered.
Six classes of character, each with its own phosphor color, harmonic temperament, and population.
Pick one to load its roster into the archive below.
Dense Symbols were the most difficult to train, given their pixel complexity — so these
characters received a special targeting-display aesthetic that sets them apart visually from the rest of the roster.
Every character runs live — a miniature recall loop, corrupting and restoring. Tap any cell to open the full piece with sound and the complete CRT treatment.
Nothing is a flat pixel grid. Every frame renders at 2× and runs a five-stage CRT post-process, sampled bilinearly so the curved text stays sharp.
Edges curve outward like a real tube.
Corners darkened for depth.
Red/blue fringing near the edges.
Stronger at the edges, soft in centre.
Phosphor bloom rolling off to the corners.
Each piece carries its own generative score, built live in the Web Audio API — no samples, just oscillators, reverb and a saturator. The composition is keyed to the character: E sings in E major, + builds an additive chord, the space resolves into silence.
Corruption stirs a low wash; each recall pass bleeps a note; convergence rings a chime in the home key.
Pick a character, watch it corrupt and recall, and capture the loop as a video — full CRT treatment baked in. Your own trailer to keep or share.