character core

The character creator's working parts, for any engine. Twenty modules make a character without Babylon or a DOM: they read MakeHuman's body, shape it, fit and bind a skeleton, retarget clips, fit hair and clothes, and save the result. Each is its own subpath, so a three.js app (or a server, or a test) imports only what it uses and never pulls in Babylon:

import { loadHumanPack } from 'tosijs-3d/human-pack'
import { macroWeights, morphHuman } from 'tosijs-3d/human-morph'
import { humanBodyMaker } from 'tosijs-3d/human-rig'
subpath what it does
human-pack MakeHuman's body as data: the base mesh, its rig and its morph targets
human-morph sliders (gender, age, muscle, weight, height, ancestry) to a shaped body
human-rig UAL's skeleton placed on a shaped body, and skin weights
rigged-body the one shape a rigged body takes, whoever made it
rig-fit a skeleton fitted to any mesh from eight markers
bone-heat skin weights by bone heat
rig-recipe a rig recipe as data
retarget clips from one skeleton played on another
spatial-transform the vector and quaternion maths under them
proxy-fit, proxy-rigid clothes bound to a body (MakeHuman's .mhclo), and rigid parts in them
hair-fit a hairstyle warped onto a head
garment-cut, uv-unwrap, garment-file the tailor: garments cut from a body, unwrapped, saved as GLB or OBJ
skin-tone skin colour from one dial
character-file a character as one versioned JSON document
character-settings every setting a character has, with its default; the slots; hair colours; the body pack's URL
proxy-cover the skin under what is worn, tucked in and hidden
asset-url where hosted assets (the body pack, the hair) are fetched from

What makes it a promise: pure-core.test.ts walks their import graph, type imports included, and fails if any of them reaches @babylonjs or a module outside the list; no-dom.test.ts imports each with no DOM, and the packed tarball is checked the same way under plain Node. The barrel still exports all of it, unchanged.

Where a body carries something an engine loaded (a file's own materials on RiggedBody.surfaces), the core types it by name only (SurfaceMaterial): it is a handle, never data.