Alfred, the five screens: width x height as fractions of figure height. The drawing is measured today off toon-preview/rest/<voice>.png; the render is measured on the sheet with the same flood fill.

butler: drawing 0.235 x 0.164 (figure 464 px); render was 0.226 x 0.179, now 0.235 x 0.166
coach: drawing 0.261 x 0.170 (464 px); render was 0.274 x 0.151, now 0.267 x 0.157
colleague, one lens: drawing 0.134 x 0.123 (463 px); render was 0.121 x 0.106, now 0.134 x 0.130
homie: drawing 0.313 x 0.205 (463 px); render was 0.310 x 0.227, now 0.310 x 0.210
squire: drawing 0.238 x 0.137 (416 px); render was 0.252 x 0.153, now 0.237 x 0.141

All five are wider than tall, in the drawings and in the renders.

The cause was as you guessed, and more than one voice had it. Each screen was stored in metres, measured at an earlier figure height. The squire's frame went from 2.82 to 2.25 m, the homie's from 1.83 to 1.73, and the butler, coach and colleague each moved a little, so every screen had drifted as a share of its figure. Beyond that, the screen wraps round the curved head and is tilted and turned with it, so the same stored size renders a few percent off on each voice. That is why the squire read tall even at the right metres.

The fix, at the source:
- toonPoses.json now stores each screen as the drawing's own fractions (width and height of figure height), with the figure height in metres they are converted at.
- faces.py converts those to metres for that voice's head, and so do the colleague's frames.
- The compare page warns in the console when a figure's height has moved more than 2 percent from the one its screen names, so a frame change can no longer move a screen silently.
- Each screen was corrected once by its own rendered-to-drawn ratio, then measured again. Stored now: butler 0.244 x 0.145, coach 0.242 x 0.191, colleague 0.333 x 0.143 (both lenses with a 0.0198 bridge), homie 0.316 x 0.181, squire 0.225 x 0.120. These are what it takes to render at the drawn size.

What is left on the screens:
- The coach's renders 0.157 tall against 0.170; his cap brim covers the top of the panel. That is the cap, not the screen.
- The colleague's lens is 0.007 tall, under a pixel at chat size.

Overlap is unchanged on all five: butler 0.816, coach 0.828, colleague 0.839, homie 0.854, squire 0.707.

Committed: 5bfed47f2 and the colleague's lens after it. Before this, also in tonight's order: the squire's sparkle, bands for the plates and the shield placement (d70054837, overlap 0.668 to 0.707), and the coach's legs (e3ce909b5, 0.815 to 0.828). On the coach's legs: my crotch-to-sole measure gives 0.215 against the drawn 0.235, not 0.28 against 0.38. Every longer-leg version I tried lowered the overlap, and his ankles were splayed too wide (0.29 apart against 0.13), so I straightened the near leg rather than lengthening it.

Still in your order and not yet done: the homie's head (0.027 too high), and the colleague's shoulders, mug and free hand.

Preview: http://127.0.0.1:8431/toon-preview/index.html
Side-by-side overlays, render | drawing | laid over, regenerated from this build: http://127.0.0.1:8431/toon-preview/rest/overlays.png (live, with window.screenOf(voice) and window.score(voice): http://127.0.0.1:8431/toon-preview/compare.html?voice=all)
