The forge is the part of this estate that turns a drawing, or a photograph, into a character the game can stand next to: a mesh, a rig, a face, hair, and a licence record for every piece. This piece is the long view. The earlier posts in this section cover one render pipeline and one set of pictures; this one tells the order things happened in and what each attempt taught us. The cast is named by role: the hero, the Smith, the Elder, the uncle, the mother, the father, the grandmother and the grandfather.
The goal
The forge began in August 2026 as a split. Three projects were generating character art and importing each other’s painters by absolute path, and two of them loaded their own copy of the same four-billion-parameter image model while a resident painter service already held one warm. The first decision was to put the shared things in one place: a painter client that calls a resident model instead of loading it, a background stripper, a palette tool, and a provenance stamp that writes the prompt, seed and model into every PNG it produces. Ember, the household assistant, was the first subject to live there in full; the game’s cast was the reason it existed.
By mid-October the goal had been written down in one sentence: a photographed person becomes a cast member whose face reads as them, through a pipeline a non-expert driver can run. “Done” was defined just as plainly, after a lesson told below: the evidence reviewer says the named artifacts are gone, and the playtester approves one compare sheet. Numbers steer; they never declare a win.

What we tested, and what the numbers said
Image-to-3D, and the graft. The first route ran a cartoon front portrait through a multi-view sheet, then TRELLIS.2 for the body and again for a head crop at 1536³, a 4K texture post-pass, a reprojection of the drawing onto the mesh, an automatic rig onto a 52-bone Mixamo skeleton, and a graft of the generated head onto the generated body. It ran entirely on one 16 GB card for no cloud cost, and the Smith came out of it looking like the Smith. It also produced the seam ledger: a chin shelf, a jagged ring, a double jaw, a pale band and a nape line, each a different symptom of joining two meshes that were never one. By version 10 the graft script was 5,848 lines long.


Measuring why the atlas looked soft found that a 4K texture from the generator held roughly 1K of real detail, and that the generator’s “keep UVs” branch never ran: 14,517 vertices went in and 19,743 came out.
The template body. A September rethink asked whether the graft was worth fixing. A parametric human body from MakeHuman has continuous skin, a fixed UV layout and no seam to hide, so the face becomes paint rather than geometry. The bake-off put both side by side in three registers against one reference with one shared detector. The template’s jaw was 8 % too wide and its default age read as about eleven years old; the graft’s chin was clean on the metric and wrong by eye. Projection failed on agreement between views: painting all views in one 1792×896 generation took 23.5 s and the right-hand tile came back bald. The winner was the plainest option, painting over the template’s own clay render and projecting with a 3.9 GB numpy projector at 15 to 18 s per view.
Likeness is not the metrics. Two rounds tuned the hero’s head until jaw, chin and nose width sat within a few percent of the reference, and one look beside the photo showed it was not him: a short upturned nose where his is long and straight, a round face where his is slim, small flat ears where his stick out. The metrics measured were the ones that had been asked for plus whatever the detector reported easily, and every review compared candidate against candidate, never candidate against the person. That finding became the definition of done above.
Hair, about seventy rounds. Scripted card grooms grow from scalp faces. The painted scalp under them has to follow the real hairline, not the configured one: at the nape the cards stopped 39 mm above where the config said, and the root-coloured paint below read as a hat. A feathered face card carried its own dark outline into the skin as a curved seam that moved with the camera; seven one-variable boots found it, and eroding the card’s mask by 12 pixels before the feather removed it, after a first erosion widened the eye holes too. Moving the hero’s look to the adults showed that a hair look is tuned for one hair colour: a highlight lobe invisible on a child’s blond turned the father’s hair silver, a colour gain cut blue and made the grandmother yellow-green, and 2,500 of the mother’s 4,000 strands stalled above the ear on an adult skull.
Strands versus cards. A strand simulation was vendored for the mother’s long hair and measured on one head at 1080p, median of 340 frames: no hair 0.37 ms, cards 0.47 ms, 16,384 strands 0.69 ms, plus a 1.13 ms distance-field rebuild every frame because the body moves. The reviewer called the strands fuller and more like hair and the artifacts worse: shoulder flare from guides authored over a T-pose, a fringe shelf, a bare crown. The playtester kept the cards for the mother (“that hair is taking lighting now”) and deferred strands. Alpha-to-coverage on cards cost nothing measurable, 0.474 against 0.476 ms.
The painter. A newer image model was tried against the resident one: 9 s and 2.4 GB against 6 to 7 s and 7.8 GB, better text and fewer artifacts, and four-fingered hands on a child. The resident model stayed the default and the newer one became an opt-in for art without characters. The painter itself learned to know no names: a reference arrives as a picture, never as a person.
Where we are
The recipe is twenty-one declared steps in one script, from turnaround to install, with every reference number written down and three subjects run end to end. The painter service is a package with CUDA and Apple backends behind one HTTP contract. Each add-on carries its licence record, checked by code: the strand addon’s demo bust was excluded because it is attribution-licensed, and the generator’s texture bake was found to depend on a non-commercial rasteriser. Hair round four is merged, opt-in, for the mother, the father, the grandfather and the hero.
Two findings opened the current front. Every one of the 49 face presets carried the same stylisation block since September: eye spacing 30 % wide, nose depth halved, lips 40 % thinner, head 12 % larger. Each round had been judged against the previous build, never against a human anchor, so the look persisted. And the hair defects turned out to be cast-wide, so a fix patched onto one character could not close the item.
What is next
Gate faces against a neutral adult, not the last build. Turn each named defect into a code check that fails before any A/B runs. Debug hair on the mother, fix it in the shared pipeline, and run the gate on every cast member. Then a photograph kit per subject, six to eight angles instead of one front, because the painter can already take ten references and the sheet uses one. The next piece in this series, the game journey, is where these characters have to stand.
Architectures we tried
Kept: the resident painter behind a contract; the template body with painted faces; the automatic rig onto one shared skeleton; licence records as code. Dropped: the two-mesh graft as the main route, kept as a fallback; a 4K post-pass that held 1K of detail; single-generation multi-view painting; strand hair for now. Looked at and declined on licence or fit: three other image-to-3D generators at 21 to 29 GB or non-commercial terms, two parametric face models under research licences, a hosted generator at $20 a month, and an avatar service that shut down in January.