Expression Surface · Render Layer
An exact-size face lab for the live affect vocabulary. Compare the Heltec fast path that fits the classic ESP32 budget with the smoother P2 material study before any hardware flash.
Name the eye-only state. Labels and utterance are hidden.
The two renderer profiles keep comparison honest: Heltec fast path models the integer, frame-budgeted build; P2 material study previews the softer finish available to the future portrait surface. Both use the same poses, motion, tapered brows, and face proportions.
Curved, inner-weighted brows now replace uniform pill bars while preserving the accepted pose centers, angles, asymmetry, and six-state silhouette separation.
A deeper limbal ring, brighter blue core, restrained dual highlights, and upper-sclera shadow create depth without adding noisy texture that would shimmer on a 160-pixel display.
The classic ESP32 keeps integer coverage and ordered color groups for its proven 30 fps budget. The S3 lane adds sub-pixel placement and analytic edge coverage without changing semantic intent.
Neutral, thinking, happy, surprised, suspicious, and error remain the gate. No polish ships if it weakens the accepted eye-only read or the R2/R3 downsampled silhouettes.
The remaining choreography gate is five composed beats: attention, thinking, success, error, and playful. Eyes lead; the selected mouth display follows; explicit text and icon commands still preempt.
All thirty-eight affects now select distinct lip geometry, aperture, asymmetry, inner-mouth detail, and a restrained supporting accent. The emotion remains legible before a caption appears.
Listening softens, concern parts slightly, uncertainty wavers, embarrassment blushes, and reassurance settles into warmth. Sparkles, hearts, and alert marks are reserved for the moments that earn them.
Anticipation, staggered lip channels, moving holds, and six local speech visemes continue between agent updates. Agents still choose meaning, never pixels, coordinates, or animation keyframes.
Finish rule: simulator comparison first, verified role-specific flashes second, then a six-state read and combined soak. The accepted eye geometry and OLED fallback stay frozen.