Everything in the game that has a face came through the forge. So did Ember, the chat bot, who is not in the game but needed a portrait, an avatar and a rig for the same reasons. The forge is a set of scripts on a workstation with a GPU: a diffusion model paints, a mesh model lifts a drawing into geometry, a rigging model adds a skeleton, and a runner drives all of it as fifteen declared steps. This post walks the stages with the pictures each one leaves behind.
Diagram: what each cast step is handed and what it must write. Walk the guided views: before the GPU, the paint, the mesh, the rig, the gate.
Stage zero: a reference exists


Every character starts from a reference. For a fictional character like Ember that is a drawing I approved. For a family member it is a set of photographs, and the first rule of the whole system is that the kids’ photographs never leave the house: they live in a folder the publishing gate refuses by path, and the gate hashes every one of them so that a copy under another name is refused too. Mine is above because I chose to show it; it is the only reference on this site. Everything else below is what the forge made.
Stage one: paint, and derive the colours

The palette is extracted, not typed in. A script clusters the pixels of the approved art and names the clusters: hair light, hair base, skin, flannel, lineart. Every later stage reads this file. When a garment on a 3D model needs a colour, it gets the one the drawing already had.

The first thing the painter taught me is that “arms stayed against the torso” is not a prompt. Run one asked for a character; the model gave me the same character three times with her arms glued down. Run two named the pose, hands on hips, and got it on the first seed. The sheet keeps both runs because the failed one is the lesson.

With the pose locked and the seed fixed, one variable at a time. Layered outfits are there on purpose: the step that separates the character into parts for rigging needs an edge to cut on, and a cardigan over a tee gives it one.


That last sheet answers a question I could not answer by looking: does the prompt phrase that draws the circle behind her also decide the hair? Same seed, one phrase deleted, hair unchanged. A controlled comparison is cheap here and it settles arguments that would otherwise run for an afternoon.
![]()
Stage two: the mesh, and the head

The mesh stage lifts the painted views into geometry. Hair is where it fails first, because hair is not a surface. The forge keeps a before-and-after of every pass that touches it, as points rather than renders, because a render hides exactly the gaps a point cloud shows.
For the family cast the head is grafted separately. A body mesh at a coarse resolution, a head at five hundred and twelve cubed, and a seam the recipe measures before it accepts the graft. The pictures below are my own head, because I was the test subject and the numbers in the recipe are my numbers.




Each version answered one sentence I said while looking at the previous one. v7 was smoothing. v8 was the face list, which I signed off with “overall v8 is looking good”. v9 was the double chin, which the recipe had predicted would be a bare patch at the nape and which the first measurement showed was a flat bridge of texels with a shelf in the outline. v10 was the line splitting the beard, which was not a shading problem either. Two versions in a row had their own diagnosis overturned by the first measurement, and that is the habit the whole forge is built around: measure before you believe the story.
Stage three: in the game


The lineup is the recipe proving it is a recipe. The second subject taught it about things worn on the head. The third taught it something less comfortable: four of its detectors decided “is this skin?” with a hard-coded brightness floor, and a dark-skinned character fell under every one of them. The fix was not a lower floor. A lower floor made the detector confidently wrong in the other direction. The fix was a declaration: the recipe now states the skin colour and the facing, prints what the detector measured beside what was declared, and refuses to guess when the signal is absent.
The rule
A step that exits zero without writing its artefact is fatal. That is the whole contract, and it is the reason the forge can be trusted from a chat message: every step writes one named file, skips when that file is newer than its inputs, never overwrites, and the runner reads the file’s clock before and after. A green run that produced nothing is caught at the step, not at the end, and not by me.