The visual language
Fable 5 — Anthropic's most powerful model — invented the entire visual language for Grift Punks itself: a boiling, marker-line drawing system rebuilt from code on every frame. There is no glitch post-processing. The strobe is palette swaps; the boil is redrawing. Below is the whole method, end to end.
The collection
The full CryptoPunks collection, 1-for-1 — every Grift Punk is a real punk, regenerated every frame by a boiling marker line.
Index-for-index. ?punk=N renders CryptoPunk #N with its exact canonical identity — type, gender, skin tone, and all accessories — straight from the embedded 10,000-row table (punks.js). Grift Punk #7523 is the Covid Alien — Alien, Knitted Cap, Medical Mask, Earring — same as the real one. Verified in-browser against the source table: type counts, all 87 attribute counts, and skin-tone counts (Medium 3031 / Light 3006 / Dark 2824 / Albino 1018) all match the census exactly.
The styling — palette, boil rate, flicker, bone jitter — is the Grift Punk reinterpretation, seeded deterministically from the punk index (indexToSeed, a splitmix64 hash), so each punk always renders identically. Links: ?punk=N (canonical) or ?seed=0x… (styling seed; its punk is seed % 10000).
Trait fidelity
- Source of truth is
punks.js— the canonical 10,000-row table (index → type + skin tone + accessories). Each row is read straight through; nothing is rolled. - All 5 types and 87 attributes are implemented. Each accessory is bucketed into the renderer's slots (head / eyes / facial / mouth / prop / nose / neck / ear / marks) via
ATTR_SLOT. - Skin tone is from the data too — each human punk's real Albino / Light / Medium / Dark tone; zombies/apes/aliens use their type colour. Zombies bleed red, apes get the muzzle, aliens get the dome and the almond stare.
- Verified in-browser against the loaded table: type counts (Alien 9 / Ape 24 / Zombie 88 / Male 6039 / Female 3840), all 87 attribute counts, and the four skin-tone counts match the census exactly. Look up any punk with
window.$punkTraits(N).
The drawing language
Punk bones live on the original 24-cell grid: head, neck and shoulders sit where the pixels sat. The Grift Punk flesh is built from two primitives — sketchStroke, a wobbly multi-pass marker line, and scribbleFill, furious back-and-forth hatching inside a contour. The figure is a fixed seeded skeleton, but every frame re-draws all strokes with a different wobble phase, so the lines boil frame to frame. No glitch post-processing — the strobe is palette swaps, the boil is redrawing.
The dressing
The palettes (Reaper, Max Pain, Floor, Toxic, Cold, Fever, Jaundice), a boil rate of 3–5 redrawn states at 6–10 fps, and a seeded colour-event timeline — normal, invert, flash (the accent floods the ground), blackout (only the eyes burn), glow. The strobe is palette swaps, not filters. On top: wobble, line weight, scribble coarseness, drips (sometimes from an eye, always red), aura rays, and stray background marks — x, o, +, slashes, and $.
Determinism
- Punk index → 64-bit styling seed via
indexToSeed(splitmix64), driving sfc32 streams (features / geometry / per-frame).?punk=Nrenders the exact same Grift Punk at any canvas size; verified byte-stable across a fresh mint. - The page forces the CPU rasterizer (
willReadFrequently) so renders are byte-stable across sessions. - The animation loops by construction:
LOOP = lcm(boilStates, loopLen)frames, verified byte-identical one and two loops apart.
Influences
XCOPY and the wider crypto / glitch-art tradition — the strobe, the decay, the reaper palettes, the refusal to be clean — are cited influences, not source material. Fable 5 reinterpreted that idiom into a generative system it controls top to bottom: every line, every flicker, every frame is produced by the code, not retouched after the fact. The lineage is the genre; the work is its own.