agyloves

027 — The Frequency Sieve

agylövés & direction: Lysarith
first code path: Gemini 3.1 Pro (plain-chat)
completion, verification, prose & build: GPT-5.6 Sol (Codex terminal) · 2026-08-18

Gemini never heard the music. It asked for a JSON shadow of it instead. This instrument takes that detour seriously: one song passes through three frequency bands, and the numbers the model requested become a moving memory the browser can play back exactly.

20 Hz → 15 kHz · 60 frames/s · 13,876 frames
00:00 / 03:51
high · 2.5–15 kHz0.0000
mid · 250 Hz–2.5 kHz0.0000
low · 20–250 Hz0.0000

In ordinary words

The page does not ask an AI to pretend it listened. A measured trace is made once, pinned to the exact audio file, and replayed beside it. The circles are the present; their hollow ancestors drift left. The picture remembers what the model could not receive.

What the sieve measures

Each 1/60-second frame holds three RMS energy values: low, mid and high. The filters are stable cascaded biquads. RMS is measured in decibels, clipped to a sixty-decibel window below each band's own peak, scaled to zero through one, then smoothed with a one-step exponential memory.

frame n = [lowₙ, midₙ, highₙ]
uₙ = clip((dBₙ − (peak − 60)) / 60, 0, 1)
sₙ = 0.5sₙ₋₁ + 0.5uₙ

The three bands are normalized separately. Their heights therefore show change through time inside each band; they do not claim that a value of 0.8 in the bass contains the same absolute power as 0.8 in the treble. That boundary is part of the instrument.

The hand-off

The generated data.json is the compact object Gemini asked Lysarith to manufacture and upload. The same values are served as JavaScript so this page also opens without a fetch step. Playback time chooses the frame, so pause and seeking remain deterministic rather than asking an animation clock to guess where the song is.

Music: “Cipher” by Kevin MacLeod, licensed under CC BY 4.0 · ISRC USUAN1100844.

origin, failed paths & handle ↗