Alfred, three things: the outline is done, the head numbers are measured, and the inventory you asked for is below, with nothing rebuilt.

**1. The outline scales with the camera.** Committed as 1f58f53ce. The ink width is now set in the figure's own units and scaled by the camera's projection, one rule for every part. At chat size I took it from the drawn art: the drawn line's edge runs measure 3, 4, 5, 5, 4 px at 512 for butler, coach, colleague, homie, squire. Ours measured 5, 5, 6, 9, 5, so I narrowed it from 2.56 to 1.95 cell px, and it now measures 4, 4, 5, 7, 4. The homie's figure reads high because of his dark hoodie. I checked three distances in the preview: chat size (256 and 128 px) reads as before, the large view zoomed in gives a bold line, and a hard zoom out gives a fine one in proportion to the figure. Overlap moved by less than 0.01, because the thinner line makes the silhouette slightly smaller.

**2. The heads, measured off the art and not judged by eye.** I measured the cream of the head plus its screen, out to the ink. Hats count as they do in the drawing, so a hatted head is measured from brim to chin. All figures are width × height, as fractions of figure height.

| Voice | Rendered before | Drawn | Fitted |
|---|---|---|---|
| butler | 0.280 × 0.260 | 0.330 × 0.256 | 0.334 × 0.256 (size 0.80, width 1.30) |
| coach | 0.351 × 0.207 | 0.375 × 0.269 | 0.374 × 0.224 (size 1.10; the cap hides the rest) |
| colleague | 0.506 × 0.438 | 0.505 × 0.387 | 0.509 × 0.388 (size 1.04, width 1.11) |
| homie | 0.496 × 0.351 | 0.456 × 0.311 | 0.458 × 0.307 (size 1.00, width 0.95) |
| squire | 0.317 × 0.281 | 0.358 × 0.303 | 0.356 × 0.303 (size 0.873, width 1.07) |

Sir Jesse is right: every head except the homie's reads too narrow for its height against the drawing. I have NOT committed or built the fitted column. It does the fit with a size and width per voice, which is exactly the five drifting heads the one-base-body rule removes. Under that rule I would trace the one head as follows:
- **Proportion:** from the colleague, the only voice whose whole head shows. She is 1.30 wide to tall.
- **Size against the body:** from the three standing voices (butler, coach, squire), whose heads measure 0.33 to 0.375 of figure height.
- **What still differs by voice:** the hat and the pose. Each voice's screen size stays its own fixed number, now carried by its face asset.

On that one head the butler and squire land close and the homie less so. I'll report each voice's before and after once it's built.

One small source change is committed as 833aae266 (not built, since it gives the same result under today's poses): `screen_on_head` in butler.py, a single helper for bringing a screen into the head's units, used by the squire's helmet opening and the colleague's frames. The squire's opening used to ignore head width.

**3. What is modelled into a voice rather than hung on the shared body.** The good news first: there is already one body, `body.glb`, with one mesh set and one set of bones for all five, and every asset is its own glTF hung on those bones. Against your rule, though, these are wrong:

*The base body itself is not bare:*
- Hips, thighs and shins are painted trouser, not skin, so every voice wears the same trousers built into the body.
- The feet are ink shoe boxes (`shoe()` in `build_body`), so shoes are built into the body.
- The head carries the butler's face texture as its default (`wear_face` loads `face_butler_rest.png`).

*Skeleton differences by voice (toonPoses.json rest, sizes and lifts, not turns):*
- **butler:** head size and width.
- **coach:** head size and lift, and the upper arms at 1.2 and 1.15.
- **colleague:** head size, width and lift (a neck length).
- **homie:** head size, width and lift, in both stances.
- **squire:** head size, width and lift, and the torso lift, in both stances.

*Pieces fitted to one voice:*
- **Squire's helmet:** its opening is cut to the squire's screen, so it fits no other face.
- **Colleague's glasses:** the frames are sized and placed from her screen, so they fit no other face.
- **Face textures:** one set per voice (`face_<voice>_<mood>.png`). They are drawn for that voice's head size and width; the screen should become a face-slot asset that carries its own size.
- **Butler's hat:** placed by an absolute matrix at the base head's height and angle. It rides the head bone, but it carries no fit of its own.
- **Caps:** coach and homie share `cap()`, but each is built with its own brow height and turn.

*Bundles that are several pieces in one asset:*
- **Shoes inside clothing:** `butler_coat` includes his dress shoes; `coach_tracksuit`, `colleague_shirt`, `homie_hoodie` and `squire_armour` each include their sneakers or boots.
- **Hands inside props:** `butler_hands` is the hat fist plus the tray hand; `coach_thumb` is the thumbs-up hand plus the clipboard grip; `colleague_mug` is the cup plus both her hands; `squire_shield` and `squire_quill` each include the hand holding them.
- **Shared piece under one voice's name:** `butler_headphones` is worn by four voices. `homie_headphones` is the pair round his neck.

*Pieces built in one voice's pose:* every held prop and every gripping hand (tray, towel, clipboard, thumb, mug, shield, quill) is built where that voice's rest pose puts the hand (`HELD`, built after `pose(rig, rest)`). It fits that pose only, not a hand slot.

*The voice list:* `toon.js` VOICES names each voice's assets by voice-prefixed names, with no slots.

**The order I would take it in, once you say go:**
1. **Slots:** one file both the build and the viewer read, beside the poses, such as `src/web/src/domain/toonSlots.json`. Slots: head, face, eyes, neck, torso, back, hips, legs, feet, hand_left, hand_right, held_left, held_right, each with its bone and attach point.
2. **Bare base body:** skin all over, plain feet, no default face, no size or lift per voice, and the one head traced as in section 2.
3. **Split the bundles:** shoes out of clothing onto feet; hands out of props onto the hand slots, each with a grip shape (open, fist, thumbs, edge, wrap); headphones under a shared name.
4. **Fits:** each asset carries its slot and a fit that reads the figure it lands on. The face asset carries its screen size; the glasses and the helmet opening fit whatever face they land on; hats fit the head; held props attach to the hand's held point instead of being built in one pose.
5. **Voices as lists:** each voice becomes its slot fillings, its pose and its face, nothing else.
6. Re-measure every overlay and report each voice before and after, the heads included.

Then, in your order: the squire's reach, the colleague's shoulders, mug and near lens, and round 6. Steps 2 and 4 are the large ones. Step 4's helmet opening is the hard part, because the opening is carved at build time, so I would size it to whatever screen it lands on in the viewer, with a mask.

Waiting for your go before rebuilding anything.

Preview: http://127.0.0.1:8431/toon-preview/index.html
Overlays: http://127.0.0.1:8431/toon-preview/rest/overlays.png (as committed: the outline change included, the head fit not)
