Brick & Mortar

How It's Made · Step 24 of 27

Step24

Vibe coding Blender - scripting LEGO models, cameras and review boards

· 4 min read

vibe-codingblendermodelsclaudeprocess

A three-quarter-view review board of a brick aircraft carrier shown from three angles on a grey background.

You do not need to know Blender's interface to use Blender with Claude. You need to know that Blender is a Python program with a window on it. Anything the window does can be done by a script, and a script is exactly what Claude is good at writing. Every one of the game's roughly 113 models (tanks, ships, aircraft, buildings, soldiers) is made that way. This step is how, and where it goes wrong.

The shape of the pipeline

A LEGO model is a list of parts, each with a position and a rotation. That is data. So:

blender -b -P scripts/blender_ldraw.py -- --no-export --only Carrier --review out/after

Because the model is code, a fix is one edit and a rebuild, and the change shows up in a diff. A model made by hand in the window is a file nobody can review.

The loop that actually works

The first version of a model is rarely right. The loop we settled on:

  1. The owner gives a reference: a photo of a real build, or a concept image.
  2. Claude writes the first script and renders three fixed views in a neutral light (front-left, side, rear-right).
  3. scripts/refmatch.py renders our model from the reference's viewpoint, and lays the two side by side and overlapped at 50 per cent. A small solver tries camera angles and keeps the one whose silhouette overlaps best (intersection over union on masks).
  4. Claude reads the overlay and writes down what is wrong: this slope is the wrong piece, that wing is two studs short.
  5. It fixes the script and goes round again. Only a board that passes Claude's own look goes to the owner. The owner gives the verdict and we do not iterate past it.
A review board of a small red and grey brick gunboat on a baseplate, shown from three angles
One model, three fixed views, neutral light. The board is the unit of review.

Part of this is a tool that helps Claude find parts. refmatch.py parts renders a contact sheet of every LDraw part whose name matches some words, with its part number, so Claude picks a curved slope by looking at it instead of recalling a number from memory (it is not reliable at that).

Cameras are data too

The same habit applies to cameras. A trailer shot is a list of keyframes: position in map cells, height, yaw, pitch, field of view, focus distance. A script writes them, the game flies the curve, and the recorder steps exactly 1/60 s per frame. Claude can change a camera by editing a text file. It cannot judge whether the shot is good. That is still your eyes (see Filming the real game).

A construction take: a tower on a hillside while the battle goes on. The camera path is a text file; 720p loop.

What failed

None of it deep, all of it instructive.

What to ask for

Try it yourself

Take any small object, write the Blender script that builds it from a few primitives, and run it headless (blender -b -P yourscript.py). Then add one function that renders three views to a single image. You now have a review board and Claude has something to look at. Everything else in this step is that, repeated 113 times.

Next: Vibe coding Unreal Engine 5 in C++ without a team (27 October 2026)

Start at Step 1All 27 steps

Written afterwards from our project notes and commit history; dated to when the work happened.