Generative art · Multi-agent · HTML5 Canvas
The Codex of Thom
— a generative museum
A single self-contained page holding 28 original animated artworks — each hand-coded on its own <canvas>, no libraries, no images, no network — themed on one corner of this portfolio and commissioned from a fleet of AI agents, one artist per piece.
- Canvas 2D
- 28 artworks
- Zero libraries
- Zero network
- Multi-agent build
- ~160 KB, one file
Everything is drawn live with Canvas 2D — no third-party libraries and nothing fetched from the network. Best on a desktop browser; animations are kept light enough to run on modest hardware.
Overview
The Codex is an experiment in orchestrated generative art. Rather than one program drawing everything, a workflow fanned out to a fleet of independent agents: each was given one theme from my project history and asked to write a single, original animated artwork as a self-contained HTML fragment. A second curator pass then audited every piece for scope isolation and robustness before a small Python assembler stitched all 28 into one gallery page. The result is a museum where each wall is a different hand and a different idea, yet the whole thing is a single static file you can open offline.
What's in it
🎨 28 distinct artworks
Each canvas is its own piece with a title and a short in-character artist statement — drifting Murk-orbs, an accelerating ΛCDM universe, a Bloch-sphere state vector, a 42-script spectrum bloom, the weft node-graph and more.
🤖 A multi-agent commission
Built by a workflow of dozens of agents — one artist per artwork plus a curator QA stage — running in parallel, then merged. The brief: make something beautiful and self-contained for each theme.
🧩 Isolated by construction
All 28 scripts share one page without colliding: every piece is an immediately-invoked function with index-suffixed element IDs, so no globals leak and no canvas IDs clash.
📦 One file, no dependencies
~160 KB of self-contained HTML. Pure Canvas 2D, no frameworks, no images, no fonts beyond the system, nothing fetched at runtime — it works offline.
🖼️ Companion wallpapers
A sibling Python generator (numpy + Pillow) renders ten static 2560×1440 wallpapers from the same themed universe — nebulae, flow fields, an orrery.
🌌 Themed on the portfolio
Every piece nods to a real project on this site — quantum, cosmology, the FPS, the language packs, the toy internet — so the gallery doubles as a self-portrait of what I've built.
How it works
- Fan-out: a workflow spawns one agent per theme; each returns a title, an artist statement and an HTML fragment (a
<canvas>plus an IIFE that animates it). - Curate: a second agent QAs each fragment — enforcing IIFE scoping, index-suffixed IDs, parent-fit sizing and a stable
requestAnimationFrameloop — before it's accepted. - Assemble: a Python script drops every fragment verbatim into a responsive card grid and writes one static
index.html; the scripts run on load with no bundler. - Verify: the assembled page is checked for unique canvas IDs, no global leaks and no duplicate DOM IDs, then headless-rendered to confirm every canvas actually paints.
A standalone curio, built for the joy of it. Open the full gallery →
More galleries: AI Art & Research → · Sketchbook, Reinterpreted →