3D of Things

3D of Things18 October 2026

3D of Things · a skill for Claude Code

Name a machine in one line, and Claude builds it in 3D, takes it apart and shows how it works.

6 beats a second

The collection’s pocket watch, live. The case is glass, the red line is the power from the crown to the balance, and the hands show your time.

/3d-of-things13 objects, all liveby 3D of ThingsInstall ↓

01Machines, not shells

The skill rests on one rule, written at the top of its instructions, above everything else:

Real insides, really moving.

SKILL.md, “The one idea”

A model that only shows its outside is a catalogue picture. A page explains a machine when its insides are true and they work: the real number of teeth on each wheel, the real distance from lens to film, the real order a shutter’s parts move in, all driven by the same numbers the charts show.

The site went wrong in two ways before the rule existed. The first was a shell. Its first pocket watch was a fine model of a case, a dial and three hands with nothing inside, so “Take it apart” pulled the hands off and stopped. The fix was to cut the case open along its own edges and build the movement in code: a barrel and mainspring, a train of 80/10, 75/10 and 84/7 teeth, and a Swiss lever escapement beating six times a second.1

The second was a list. Twenty lettered parts on an exploded model say what is there, not how it works. The fix was order: the parts grouped as the energy flows, from the mainspring to the hands, and a tour that follows the same chain one step at a time.

02Writing a prompt

The prompt is the machine, not the drawing. Name it as exactly as you can and say what should move; finding the numbers is Claude’s job.

Name the machine
/3d-of-things add a mechanical metronome
Say what should move
/3d-of-things a sewing machine: the needle, the shuttle hook and the feed dog working together
Start from a free model
/3d-of-things take apart Poly Haven’s vintage video camera, like the Leica
Check what’s there
/3d-of-things the SLR’s winding step has a label floating somewhere: check everything still works

It sizes the job before anything else, in one of four tiers. Sourced: a free model whose parts are already separate. Opened: a free shell, cut open and given its insides in code. Built: no usable model, so the whole thing is generated. Machine: several systems with physics of their own, like a car that flies. A Machine isn’t started without asking; Claude first proposes a smaller version that keeps the core of the idea.2

03What Claude does

Between your line and the finished page, Claude works through eight stages. Each ends with a check, and most of the quality is decided in the first two, before any geometry exists.

  1. Brief. Exactly which object, whether it differs from what’s on the site, the energy chain in a line, and a short plan.
  2. Truth sheet. Sources, real numbers, the energy chain, one misconception to correct, the parts in groups, the tour. A research subagent does the digging.
  3. Scaffold. npm run new writes the object’s folder, builds a first model and page, and checks it, in seconds.3
  4. Model. The shell cut open, or the whole object generated with the kit. The build fails on any clash, and on any explode path that would pass one part through another.
  5. Content. The words and the tour, placed by points the build names, never by pasted coordinates.
  6. Mechanism. Only for a kind the site doesn’t have yet. Everything that exists is reused first.
  7. Check. npm run check and npm run qa, until both pass and every contact sheet has been read.
  8. Ship. Posters, the README, the production build.

Placing things used to cost time too: a callout’s position typed as three decimals, then nudged after every look. Now the generator names its points and the content file uses the names, so a changed layout moves everything with it.

objects/<slug>/generate.mjs, then content.mjs
// The build names the points the page will need…
anchors: {
  handle: toModel([cx, cy + L.handle, 14]),
  small_face: toModel([sx, sy, -17]),
},

// …and the content file places things by name.
{ title: 'Crank', node: 'crank', ride: true,
  position: at('handle'), camera: pose(at('handle'), [-24, 18], 1.5) }

04The rules of a teardown

Every object follows the same rules. They are what make a page read as a real machine at work rather than a model with labels.

One misconception per object is stated and corrected. Wind a watch tighter and it doesn’t tick faster: the balance sets the rate, not the spring.

05Thirteen machines, up close

The collection reads best one machine at a time. Each opens on its own page, ready to turn, take apart and run.

06Inside, generated

Most free models are shells. Three of the thirteen objects had their insides generated inside a downloaded case, and four were generated whole. Each was laid out from published numbers, and each page says what was simplified.

The pocket watch in How it works: the case turned to glass, leaving the balance wheel, the pallet fork and the escape wheel solid, beside a timing chart of one swing of the balance.
The watch’s escapement. At each beat the pallet fork lets the escape wheel slip half a tooth, and the tooth gives the balance a push. The chart is drawn from the same beat count that turns the wheels.

The pocket watch was a closed case. Its build step cuts the case along the mesh’s own edge loops, adds the inside surfaces a shell never had, and builds about twenty parts from real tooth counts. In the viewer, every wheel follows one beat count taken from your clock, so the train stays in mesh at any time of day and in slow motion.

The Leica's rangefinder: amber rays through both windows meet at the beam splitter, with a chart of the two images in the viewfinder.
The Leica’s rangefinder. Two windows 68.5 mm apart; a lens on a roller arm, moved by the lens’s own cam, lays one picture over the other.
The SLR's winding: a vermilion line runs from the knob through the gear train to the drive key, with a chart of each gear's turns.
The SLR’s winding. One turn of the knob winds the drive key back 30/35 of a turn, through gears sized from the factory’s service manual.

The Leica M3 was a shell too: its build cuts it along the seams of the top cover and base plate, thickens each piece inward, and builds the cloth shutter, the film path, the rangefinder optics and a nine-blade iris. The medium-format SLR had no free model at all, so all of it is code, laid out from the service manual of the Hasselblad 500C/M.4

The Roadster's suction fans: blue air lines run from under the floor to four fans in the tail, with a chart of the pressure above and below the car.
The Roadster’s suction. Four ducted fans pull the air from under the sealed floor. About 6 kPa less underneath is two tonnes of downforce, parked or moving.

The cars are lofted from a few curves per car and cut into the panels that come off. Under the 2026 Roadster are the fans, two carbon tanks of air at 690 bar and ten nozzles, laid out from Tesla’s launch and its patent; under the family car, a two-litre four firing 1, 3, 4, 2, a four-speed gearbox and a differential.

07The checks

Claude builds quickly and sees slowly, so the checks do the looking. All three are driven by the object’s own content file, so a new object is checked without new code.

Headless Chromium used to draw with software WebGL, at about 460 ms a frame. On the Mac’s GPU it takes 18 to 23 ms, with the same picture. A whole object’s check now runs in about a minute, and a quick pass over all thirteen in under two.5

A contact sheet from npm run qa: the SLR's seven tour steps tiled in one image, each labelled with its step.
One run, one sheet. The SLR’s seven tour steps as the runner saw them. Step 5, Winding, shows one of its two labels; the runner failed it.

08How long it takes

Detail costs time, and real numbers beat a guess. These are Claude’s active times, measured from the session logs with npm run timing, idle gaps left out.

ObjectTierActive timeOf that, checking
Before the procedure: checked by hand
Pocket watch movementOpened1 h 4727%
Leica M3Opened2 h 0737%
Medium-format SLRBuilt1 h 5933%
2026 Roadster, rebuilt from the 2017 carMachine57 min + 39 min24–32%
With the procedure, 18 October 2026
Washing machineBuilt24 min38%
Bicycle pumpOpened15 min38%
Garden sprinklerSourced15 min46%

Before the procedure, a third of every build went on checking by hand, with a new browser script for each object waiting on software rendering, and another sixth on re-reading code to remember how things fit together. The checks, the scaffold, the kit and the skill’s references removed most of both. The three objects built with them took 15 to 24 minutes each, all three in one 70-minute session, with each one’s research running in a subagent alongside. Checking is still the biggest stage, but now it’s reading contact sheets and fixing what they show.6

09Install

Add the skill to Claude Code with one command:

npx skills add bro-xuan/3d-of-things

Then open Claude Code in any folder and name a machine:

/3d-of-things add a mechanical metronome

The first time, Claude sets up a workspace: a copy of the repository, because the repository is the skill’s kit (the viewer, the model pipeline, the generator kit and the checks), with the thirteen machines as its references.7 To put your machines on your own site, bake them in. The export builds the site for that path, checks it, copies it in as static files and prints the two rewrites your host needs.

npm run export -- --out ../my-site/public/machines

10Limits

Claude is good at building these and less good at seeing them. A part can be right in every number and still look wrong, and the fixes that mattered most came from someone watching the model play and saying what felt off: a watch that faded into the page’s edge, seven cars that looked the same.

So treat the first version as a draft. Open it, turn it, take it apart, say what’s wrong, and ask again.

11Questions

Does it work outside this repository?
Yes. Installed with the command above, it sets up a workspace the first time and builds there, with this site’s viewer, pipeline and checks; npm run export then puts the machines on any static host, Next.js and Vercel included.
Can I change an object later?
Yes. An object’s words and placement live in its content.mjs and its geometry in the generator beside it. Change a number in the generator and everything placed by name moves with it; then run the checks again.
Will it slow the page down?
Models are 0.8 to 2.9 MB, compressed with meshopt and WebP. The gallery is plain HTML, and three.js loads only when an object page opens, after its poster is on screen.
Is it accessible?
The viewer answers the keyboard (arrow keys turn the model, W switches the look, Esc closes the tour), every step is reachable from the step bar, and reduced motion turns the flights and sweeps off.
What’s the licence?
MIT, for the code, the skill and the models built in code. Every downloaded model is CC0, and its credit is on its page.
How do I get the best result?
Name the exact machine and what should move, give any numbers you know, and look hard at the first version.