STATUS: ONLINE _
ASSOCIATIVE MEMORY STUDIOS PRESENTS

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.

SPECIMENS: 0007 FAMILIESHEBBIAN · λ=0.35 · 8 PASS
◆ ARTIST STATEMENT

on holding a shape

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

hopfield.js
// 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];
02 // MECHANISM

recall from noise

A Hopfield network is content-addressable memory. Store a pattern, feed it a corrupted version, and it relaxes back toward what it remembers.

POWER-UP 01

STORE

The character bitmap becomes a vector of ±1 cells. Hebbian weights W[i][j]=A[i]·A[j] etch it into the energy landscape.

POWER-UP 02

CORRUPT

Random cells flip — the pattern is buried in noise, sitting up the slope of its energy basin.

POWER-UP 03

RELAX

Over 8 passes each cell re-checks its neighbours, with a bias λ=0.35 toward the stored state, rolling downhill.

POWER-UP 04

RECALL

The network settles at the basin floor — the original character, reconstructed. The memory is recovered.

energy  E = −½ Σ Wij si sj  — every pass lowers it until the pattern locks.
▸ PLAYER SELECT

choose your family

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.

▸ SELECT A FAMILY TO FILTER THE ARCHIVE
03 // PHOSPHOR

the screen 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.

FX

BARREL

k = 0.16

Edges curve outward like a real tube.

FX

VIGNETTE

0.85

Corners darkened for depth.

FX

ABERRATION

3.2px

Red/blue fringing near the edges.

FX

SCANLINES

0.08 → 0.34

Stronger at the edges, soft in centre.

FX

GLOW

0.10

Phosphor bloom rolling off to the corners.

04 // SIGNAL

every character sings

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.

05 // CAPTURE

record your specimen

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.

▸ READY
0.5×
◆ CRITICAL ACCLAIM

the network, reviewed

★★★★★
"Converges in eight steps. Every. Single. Time. I have never felt so remembered."
— Hebbian Weight Matrix
★★★★★
"I was pure noise. Then I wasn't. A redemption arc for the ages."
— Corrupted Vector #47
★★★★☆
"Rolled all the way down the energy basin and stuck the landing."
— Local Minimum
★★★★★
"The phosphor glow alone is worth the price of admission."
— A Cathode Ray, retired