Loading…
Inspired by the TV Programme Grayson Perry Has Seen the Future, Lexical Loom is a Multi-Agent System to generate a weekly visualisation of humanity's collective attention. Each Monday, two AI agents pick one of the most-read Wikipedia articles from the previous week and translate it into a one-off interactive 3D sculpture. The article becomes the piece's lens, the sculpture is built from its most-frequent meaningful words, and the artist reflects on what it reveals about our moment in time.
Every Monday at 00:01 UTC, a pipeline pulls the 25 most-viewed English Wikipedia articles from the previous week and hands them to two AI agents: an Artist who picks one as that week's lens and conceives a sculpture around it, and a Technician who fabricates the sculpture as a self-contained interactive 3D scene.
2026-W22 · 25–31 May 2026 UTC
This week's lens
Vaibhav Sooryavanshi — Wikipedia article
This week the encyclopedia traced a teenage cricketer from rural Bihar who became the youngest IPL centurion, led India U19 to World Cup victory, and won every major IPL 2026 award — a once-in-a-generation moment that reached beyond sport into questions of talent, geography, and what shapes a prodigy.
Source: edit comments and titles from English Wikipedia Recent Changes for the window above, via the Wikimedia API. Wikipedia content is licensed CC BY-SA.
At Monday 00:01 UTC, a Vercel Cron job calls Wikimedia's unauthenticated Pageviews REST API once per UTC day across the previous Mon–Sun window, sums views per article, filters out maintenance pages (Main_Page, Special:*, Wikipedia:*, etc.), and produces a ranked list of the 25 most-read English Wikipedia articles for the week.
The 25 articles are handed to an AI Artist (Claude Sonnet 4.5 via the Vercel AI SDK) whose job is to pick ONE article as the week's lens, explain why and generate a detailed description of a sculpture to visualise it. The Artist may call a Tavily web-search tool up to twice to investigate the chosen article's cultural moment. It is steered to avoid franchise releases that would dominate the rankings every week, and is given the last 8 weeks of picks so the archive never repeats. It returns a structured object (article + rationale + sculpture title, medium, visual description, and reflection), validated by a Zod schema.
The pipeline then fetches the chosen article's plaintext extract via the MediaWiki action API and tokenises it into the 50 most-frequent meaningful words (stop-words and short/numeric tokens removed, alphabetical tiebreak for determinism). These words become the typographic ornament the Technician etches into the sculpture — the piece is built from the article's own vocabulary.
A second AI agent — the Technician, also Claude Sonnet 4.5 — receives the Artist's brief and the word list, then autonomously writes a self-contained HTML document containing a Three.js r184 scene. It is given an MCP-served `fetch` tool scoped to threejs.org/docs and unpkg, which it uses to look up real API signatures while it codes. There is no template: every Sculpture's geometry, shaders, lighting, and interaction model are authored from scratch by the agent.
The Technician's HTML is parsed, size-checked (≤ 256 KB), and URL-scanned to enforce that every script/style/import resolves to the pinned Three.js CDN — no other external code is permitted to run. The validated payload, alongside the 25-article shortlist, the chosen article, the wordlist, and the agents' token usage, is written to Supabase as a DRAFT row. The cron writes a paired entry to the run ledger so every invocation (success or failure) is auditable.
A draft-ready email arrives in the site owner's inbox. At /admin/sculptures the draft is rendered behind a short-lived signed preview token inside the same sandboxed iframe visitors will see, alongside all 25 candidate articles (chosen one bolded). A single click publishes it to this page; another skips it. Published Sculptures are immutable — the same HTML you see today is the same HTML the archive will serve in five years.
Every Sculpture is served from a separate origin (`sculpture.realthreads.io`) and embedded here with `sandbox="allow-scripts"` — no `allow-same-origin`. The host page's cookies, storage, and DOM are inaccessible to Sculpture code, so even though the scenes are AI-generated and untrusted in the strict sense, they cannot reach the rest of the site.