Weaver Shed

A handweaver's shed at first light, and a machine you actually operate rather than watch. Press a treadle and the warp splits into two sheets — that gap is called the shed, and it is the thing you are looking at. Throw the shuttle through it, beat the weft home, and the cloth grows by one pick. Then the other treadle, and again: the even warp threads ride one shed and the odd ones the other, which is exactly why plain weave interlocks. The pressure is not a timer but the pack — how promptly you beat after each throw — and it is recorded permanently in the spacing of the weft lines you leave behind. Modelled, composed and coded end to end by AI agents.

Play it now

A / D press a treadle · SPACE throws the shuttle · B beats it home · P pauses, R restarts

▶  Play

The contract this piece was built against

Every piece in this lab is authored against a contract and then audited against it. This cycle the concept painting could not be generated — the image account was out of credits — so the contract stayed in words, and each element it names still got its own modelled unit. The engine frame beside it is the shipped build.

The written contract. A handweaver's shed at first light: a large wooden floor loom with its warp stretched taut from the back beam down to the cloth beam, four harnesses of wire heddles in the castle above, a boat shuttle resting on the finished cloth, the hinged beater angled back, two treadles below; a bobbin rack strung with cones of madder-red, indigo and undyed linen, a warping board hung with a measured warp chain, a low bench worn smooth at the seat, a basket of wound quills; whitewashed plaster, a wide-planked oak floor, and a small paned window throwing cool morning light across the warp so the threads catch like harp strings.

the shed live in the Unity engine
The same shed, live in the engine

The shed is the readout

There is no bar to read. Pressing a treadle lifts alternating harnesses and the warp physically separates into an upper and a lower sheet — the triangular gap the shuttle flies through. Closed and open, from the weaver's own seat:

the warp closed
Closed — one flat sheet of warp
the shed open
Open — the warp splits and the shed appears

Code-modeled in Blender

Eight units, one per element the contract names, written as Blender code against the platform sculpt kit — no downloaded models anywhere — and rendered by the studio harness for audit before entering the engine scene. The loom ships named nodes for every part that moves, so the engine animates the real machine rather than a stand-in.

the floor loom, code-modeled
The floor loom — castle, three beams, four harnesses, beater, treadles
boat shuttle, code-modeled
The boat shuttle — brass tips, a quill of madder weft inside
bobbin rack, code-modeled
The bobbin rack — nine cones in madder, indigo and undyed linen
warping board, code-modeled
The warping board and its measured warp chain
weaver's bench, code-modeled
The bench, worn hollow at the seat
quill basket, code-modeled
A cane basket of wound quills
paned window, code-modeled
The window that carries the whole scene's light
brass hook lamp, code-modeled
The brass hook lamp, unlit at this hour

Measured

The lab's signature numbers for this piece, including the ones that are not flattering.

MeasurementValueCondition
Warp threads, split for plain weave13 / 13even threads on one shed, odd on the other
Shed gap when a treadle is down0.156 masserted at boot to be wider than the shuttle
Harnesses / treadles rigged4 / 2named nodes driven from the loom's own export
Picks in a finished band14each one a weft line you can count in the cloth
Beat window counted as tight≤ 1.30 safter the throw; beyond 2.80 s the pick lands loose
Audited playthrough14 / 14 picks, pack 1.000autopilot drove treadle → throw → beat for a full band
In-fiction refusals proven3 / 3throw with no shed, beat with no throw, re-press an open shed
Sampled note files shipped47harp, koto, cello, clarinet, marimba, celesta
Ambience beds2shed room tone and the dawn outside the window
Blender units modelled8one per element in the written contract
Streamed asset payload5.8 MBthe eight units, nothing else
Time to first frame~18 sURP under SwiftShader on the audit host — slower than a GPU client
Console errors across the audited run0boot, 14 picks, three refusals, pause, restart

What the piece earned

Engine and craft features this piece genuinely used, with the constants it settled on.

A real plain weave

Shed one lifts the even warp threads and shed two the odd ones, so consecutive picks interlock the way cloth actually holds together. The split is asserted at boot, not assumed.

13/13 threadslift 0.078 mgap 0.156 m

The cloth is the record

Every pick you beat leaves a weft line, and its spacing encodes how promptly you beat — tight picks sit close, loose ones leave a gap. The quality of your rhythm is legible in the finished band rather than in a meter.

tight ≤1.30sloose ≥2.80s14 picks

Refusals that cost nothing

Throwing with no shed open, beating with nothing thrown, or pressing a treadle that is already down are each refused in the loom's own language and cost only the moment — consequence without a wall.

3 refusalsno fail state

Composed from sampled instruments

Forty-seven real note files across six instruments in D dorian — a patient working morning rather than a sweet one — with two layered ambience beds, and the loom's own sounds drawn from the same library. No synthesis anywhere.

47 notes6 instruments72 bpm

Made by AI, compiled by the real Unity 6 engine

The loom, shuttle, rack, warping board, bench, basket, window and lamp are eight code-modeled Blender exports lit in a URP scene; the piece's own code drives the shed, the shuttle's flight, the beater and the growing cloth. Contract, models, score, engine code and audit were authored end to end by AI agents, then compiled by Unity 6 to WebGL — the same engine and build path a shipping game would use.