AI Character Studio · Pipeline Guide

From a Folder of Art to a Finished Game Character

The complete flow for creating a production-ready character - new design, full turnaround sheets, and targeted fixes - running entirely on a local GPU. Every step below is a tab in the Studio, and every claim was earned by experiment.

TrainBuilderCharactersKrea EditorErase
The star of this page did not exist yesterday: an original mongoose aviator, invented by the Builder and sheeted by the pipeline - front, three-quarter, side, back and face, one identity throughout.
The star of this page did not exist yesterday: an original mongoose aviator, invented by the Builder and sheeted by the pipeline - front, three-quarter, side, back and face, one identity throughout.
01

Teach the game's language - Train

Point the Train tab at a folder of 15–40 existing characters from one game. A local VLM writes one caption per image using a closed trait vocabulary - the same words the Builder's dropdowns use (hero / villain, tiny / tall…), fixed before captioning, because sliders only work if the training words match them. One overnight run (~26s/step on an RTX 3060) produces a style LoRA that appears in the Builder automatically.

Rule learned: a closed loop validates consistency, not truth. Captions and declarations must be derived from the images - never written from memory.
02

Design a new character - Builder

Pick traits from structured axes (gender, age, build, alignment, mind, role), add a free-text line, and anchor the style: a single reference character at low reference-pull (copies the drawing language without cloning the character), the trained LoRA, or both. Generate 2–4 candidates and pick.

Rule learned: reference-pull is one dial with two jobs - high pins identity and pose, low frees rotation but loosens identity. Choose per task, not per habit.
03

Declare the character - Characters

The winner becomes a reference. Its declaration is a table, not a prompt: each feature says which views it is visible from, and - critically - what is there instead where it is hidden. The model cannot subtract; absence must be stated (“the backs of the trousers are plain - no stripe”). Style is declared explicitly too, or a glossy 3D reference comes back as flat 2D.

The chosen candidate becomes the reference. Its declaration is written by LOOKING at it - including what the BACK of the head shows, or it renders as a smooth bald sphere (we learned this the hard way).
The chosen candidate becomes the reference. Its declaration is written by LOOKING at it - including what the BACK of the head shows, or it renders as a smooth bald sphere (we learned this the hard way).
04

Generate the sheets - one view per run

Each view renders separately (~80s) and passes gates: geometry in plain code (shared height, ground line, stance), and content checks by a local VLM judge - calibrated on known answers before it earned a veto. Failed views re-roll automatically; the designer accepts or rejects; layouts are assembled by code.

The rigging sheet: a true T-pose, front and back - with the backpack, ears and goggle strap surviving the turn because they were declared.
The rigging sheet: a true T-pose, front and back - with the backpack, ears and goggle strap surviving the turn because they were declared.
The same pipeline holds for photorealistic characters: one generated reference (left), a full photographic sheet (right) - freckles surviving rotation.
The same pipeline holds for photorealistic characters: one generated reference (left), a full photographic sheet (right) - freckles surviving rotation.
Rule learned: the unit of generation is the view, not the sheet. Sheets are assembly queries - presentation, rigging, and detail layouts from the same accepted views.
05

Fix, don't re-roll - Krea Editor & Erase

Local defects get local fixes: instruction edit (change one thing, keep the rest), head swap between characters, outpaint to grow a canvas, and identity-aware Character fix - paint a region, describe what belongs there, the character stays intact.

Head swap: two inputs, one edit - the body, outfit and lighting of the first, the exact face of the second.
Head swap: two inputs, one edit - the body, outfit and lighting of the first, the exact face of the second.
Outpaint: the canvas grows, the original pixels stay untouched, and nothing uninvited appears in the new space - because absence is declared.
Outpaint: the canvas grows, the original pixels stay untouched, and nothing uninvited appears in the new space - because absence is declared.
Rule learned: the designer's note fixes the declaration, not the image - so every correction is capital that transfers to the next character.
06

Off the page - the same character, in 3D

The newest piece of the pipeline takes a finished character past 2D: the sheet becomes a fully textured 3D model, ready for rigging and animation. This is the studio's original mongoose - drag to look him over.

Same local-first approach as everything above, on the same machine. Getting him rigged and walking is a story of its own - coming in a future post.

-

What makes it hold together

LayerWho does itWhy
Geometry, colour, layoutplain codeexact and free - never ask a model to count pixels
Where is a featuregrounding VLM (boxes)only after its phrase is validated on the reference
Counts & verdictslocal VLM judgechosen by calibration on known answers (10/10)
Taste & truththe designerthe loop's corrections become permanent system rules

Hardware: one RTX 3060 12GB. Generation ~80s per view; LoRA training overnight via WSL2. No cloud, no per-image cost, no licence fees.

+

Behind the scenes: the training run that almost didn't happen

The LoRA training above nearly died on arrival - the same 26GB model load segfaulted three times on Windows before a Linux subsystem on the very same machine got it running. The full engineering story, traps and all: How WSL2 rescued the training run →