# FOITIN asset pipeline (MODELBEAST) New fighter = one pass through this pipeline. Target cost: hours, not weeks. Steps 1–3 run as MODELBEAST jobs (queue on m3ultra `:8777` — see the fleet skill); 4–6 run locally. ``` 1. IDENTITY FLUX + character LoRA → master portrait(s), costume locked 2. MESH Hunyuan3D-2.1 / TRELLIS → textured 3D mesh (GLB) from portrait 3. RIG+MOVES auto-rig → retarget the SHARED move library (~30 clips) onto the rig (character-specific specials are extra clips, added per character) 4. RENDER render_moves.py (Blender headless, tested on Blender 5.1): handles Mixamo namespace remap, axis fix, height normalisation, first-frame pivot centring, transparent ortho side camera → renders///####.png /Applications/Blender.app/Contents/MacOS/Blender -b \ --python pipeline/render_moves.py -- \ --char --clips --out renders/ \ --rotz 155 --step 2 5. HITBOX autohitbox.py — DWPose over rendered frames → hurtbox rects per move 6. PACK pack_character.py — assemble characters// per CHARACTER_SPEC.md ``` Timing/damage numbers still get tuned by hand in each move's `data.json` — that's game feel, not asset work. Startup/active windows: see STUDY.md §2 (modern pacing, NOT BKB's 53-frame jab). ## Naming Use the shared move vocabulary (`idle`, `walk_f`, `jab`, `kick`, `hit`, `knockdown`, …, spec/CHARACTER_SPEC.md "Required move names") so every character drops onto the same FSM with zero engine changes — the Mortal Kombat uniform-mechanics doctrine, same reason BKB could ship 12 fighters on one exe.