What it does
A show is a folder of images and a JSON file describing them. A build step turns that into compressed textures and a room, and the result is a page a CDN can serve to four hundred people at once without anything to scale.
Rooms are files
A room is a
.glbwith its hanging positions marked as named empty nodes. Point the show at a different one and the same works rehang themselves, at their real size in centimetres.Lit like a room, not a slideshow
WebGPU where the browser has it, WebGL2 where it does not. Picture lights are metered in candela and their shadows are baked once. The reproductions themselves stay unlit, so a work shows the colours the artist approved.
Look closer
Open a work and it fills the screen at whatever magnification you want, beside the things a wall label has no room for: the curator's notes pinned to the passages they are about, the palette, a figure for scale, edition, provenance and literature.
A route through the show
A guided tour walks to each stop in turn, turns to face the work and says what the curator would have said standing in front of it. Walk off mid-stop and it waits.
Other people in the room
Optional presence and chat over a Cloudflare Worker and one Durable Object per room, in binary frames rather than JSON. It is a flag in the exhibition file; the gallery works completely without it.
Rooms from real places
Drop a pin on a map and the pipeline builds a walkable outdoor room from OpenStreetMap buildings — fetched once, committed, and never fetched again at build time.
It embeds
An
<iframe>is the whole mechanism, and the URL carries the state: open in a given room, on a given work, or straight into the tour.Readable without a GPU
The page renders the catalogue before the engine boots and keeps it as the fallback when neither WebGPU nor WebGL2 is available. The whole show stays a document you can read, tab through and search.
Nothing to run
No CMS, no origin database, no third-party analytics and no key in the bundle. What is deployed is a directory of files, and what it costs to keep up is what a CDN charges to serve them.
Example galleries
Every room below ships with the repository and holds the current show. Pick one and it opens with the same works rehung in it.
Loft
Now showingIndustrial space on a dune. The seaward elevation is glass floor to ceiling over open water at sunset, oak boards underfoot, a celadon studio behind. 12 hangs.Gallery Hall
InteriorWhite cube with a warmer cabinet and a celadon study off it. Oak floor, skirting, benches. 16 hangs.Salon
InteriorDeep green walls and parquet for a traditional hang, plus an oxblood cabinet. 12 hangs.Manhattan Loft
InteriorA New York studio twenty floors up, glazed onto a blue-hour skyline. A cool room and a terracotta study behind. 16 hangs.Atelier
InteriorA small warm studio with north light and one screen, and a store behind it. 9 hangs.Cathedral
InteriorA nave thirty metres to the vault, hung with works seven metres wide. 10 hangs.Pavilion
Open airTwo solid elevations, a roof slab, and three screens standing free on a podium in a meadow. 10 hangs.Salt Flat
Open airUnbounded. Six works standing on a salt pan at dusk, at the scale of billboards.Void
ImpossibleNo floor, no walls, no ceiling. Seven works in a rising spiral in a starfield.Times Square
Real place217 buildings of midtown Manhattan, pulled from OpenStreetMap, with the works hung on the facades as billboards.Tour Eiffel
Real placeThe Champ de Mars, 219 buildings, with the tower standing over it.Brandenburger Tor
Real placePariser Platz, with 2 638 buildings of central Berlin around it.Walksches Haus
Real placeWeingarten (Baden) along the Walzbach: the market square, the Walk’sches Haus, and 438 buildings of a village that mapped its streets and not its storeys.
Hanging a show
Everything a curator touches is a file in the repository.
- Drop the artwork into
content/artworks/— SVG, PNG, JPEG or WebP, at whatever resolution it was scanned. - Describe each piece in
content/artworks.json: title, artist, physical size in centimetres, and anything else worth saying about it. - Point
content/exhibition.jsonat a room, and push. The build compresses the images, validates the manifest and emits the site.