4.Parameter registry (normative)

The registry is the authoritative list of every dimension. Each row is one dimension (sided dimensions exist as an _l/_r pair sharing the listed definition). Defaults are the neutral, normalized value.

ColumnMeaning
idStable machine identifier (e.g. a_hand_x). Sided ids append _l/_r. MUST NOT be reused or redefined within the same paradigm version (X, §8).
sideL/R (paired) or none (centerline).
definitionOne-sentence human-readable meaning.
−1 … +1Semantics of the two poles (real-unit max in parentheses).
dofDegrees of freedom.
affectWhether the dimension accepts an expression delta (h b f m only).
defaultNeutral normalized value.

4.1.arm

Hand position in the neck-centric frame, with a separate calibrated length scale for each axis, plus elbow spread. All bipolar except a_spread (unipolar).

AxisCalibrated reference distance d
Xwrist_r to middle_tip_r: wrist to middle fingertip, hand in its open bind pose
Yneck to navel: neck to navel, body in its bind pose
Zshoulder_r to wrist_r: shoulder to wrist with the arm fully extended, preserving its native wrist orientation
Three calibrated reference distances: wrist to middle fingertip, neck to navel, shoulder to wrist with the arm extended
Figure 3 — The calibrated reference distances d of the arm axes.

Legend: each drawn segment is the reference distance d of one axis — X wrist_r → middle_tip_r (hand open, bind pose) · Y neck → navel (bind pose) · Z shoulder_r → wrist_r (arm fully extended, native wrist orientation). The axis unit is L = 2 · r · d, not the drawn length itself; a normalized value n moves the hand n × max × L along that body-frame axis. The right side defines the units for both arms; distances are never remeasured from the animated pose.

Distances MUST be measured between calibrated Body sites, including their bone-local offsets, in fixed reference poses. They MUST NOT be remeasured from the animated posture: bending the elbow, curling a finger or turning the body must not change the units. The right-side reference defines the common units for both arms; left/right position signs still follow §3.2. A change to calibrated sites or effective hand geometry requires recomputing the affected reference distances.

For each axis, the physical unit is L = 2 · r · d, where d is the calibrated reference distance above and r is a fixed per-axis reference ratio defined by the official reference avatar (based); it retains the established numeric scale. Thus the X unit is 2 · r · hand length (wrist → middle fingertip), the Y unit is 2 · r · torso length (neck → navel) and the Z unit is 2 · r · arm length (shoulder → wrist, extended); no unit is the bare length itself. A normalized arm coordinate n produces a displacement n × max × L along its body-frame axis, before anchor/contact corrections. Equivalently, a consumer using shoulder-width units multiplies that axis by 2 · r · d / shoulderWidth. Thus shoulder width alone no longer defines arm placement across avatars. The registry ids, maxima and defaults below remain unchanged.

A consumer lacking a valid reference measurement SHOULD use its legacy shoulder-width unit for that axis and report the missing calibration. Such a fallback does not establish calibrated-axis conformance for that avatar.

idsidedefinition−1 … +1dofdefault
a_hand_xL/RHand sideways position, in units of L_X = 2 · r · calibrated hand length (wrist → middle fingertip)−1 = across to far side · +1 = out past own shoulder (max 1.5)10.333
a_hand_yL/RHand height, in units of L_Y = 2 · r · calibrated torso length (neck → navel)−1 = low/by hip · +1 = high overhead (max 1.5)1−0.933
a_hand_zL/RHand forward reach, in units of L_Z = 2 · r · calibrated arm length (shoulder → wrist, extended)−1 = tucked to body · +1 = fully forward (max 1.5)10.35
a_spreadL/RElbow spread0 = tucked to ribs · +1 = elbow out (unipolar, max 1)10.4

4.2.palm facing

Wrist orientation as the vector part of a body-frame global unit quaternion (w reconstructed on decode); gimbal-free. Identity (0,0,0) = palm to front, fingers up. The right hand mirrors across the sagittal plane. Defaults encode "hand hangs following the forearm, palm toward body".

Identity palm facing: palm toward the viewer, fingers up, with the three rotation axes
Figure 4 — Palm facing: the identity orientation and its rotation axes.

Legend: identity (0,0,0) = palm toward the viewer (+z), fingers up (+y), shown on the right hand (thumb on the viewer's left). w_qx rotates about x (pitch), w_qy about y (pronate), w_qz about z (roll); axes as in Figure 2.

A consumer MUST reconstruct the scalar part from the unit-length constraint:

w = sqrt(1 - (q_x² + q_y² + q_z²))

If the squared norm of the vector part exceeds 1, the consumer MUST rescale the vector part to length at most 1 before reconstructing, and SHOULD clamp it slightly below 1 (e.g. 0.98) to avoid the singularity near w = 0. Taking w ≥ 0 always also makes the representation unambiguous (q and −q are the same rotation).

idsidedefinition−1 … +1dofdefault
w_qxL/RQuaternion x (pitch axis)−1 … +1 (max 1)10.885
w_qyL/RQuaternion y (pronate axis)−1 … +1 (max 1)1−0.093
w_qzL/RQuaternion z (roll axis)−1 … +1 (max 1)1−0.429

4.3.fingers

Per finger curl / fold / side on both hands; the thumb adds a 4th DOF (roll). The thumb is bound ~90° rotated, so its fold = opposition (across the palm) and side = abduction (in/out of the palm plane). g_thumb_roll is frequently unobservable from 2D pose; a producer that cannot estimate it MUST emit the default (0). All bipolar, max 1, default 0.

Finger DOF poles at −1, 0 and +1 for curl, fold and side
Figure 5 — Finger DOF poles: curl, fold and side.

Legend: columns −1 · 0 · +1. Curl (top row; joints marked): −1 = the finger curves backward along its middle and tip joints · 0 = straight · +1 = hooked toward the palm. Fold (middle row; base-knuckle pivot marked): the whole straight finger rotates about the base knuckle — −1 = raised backward · 0 = straight · +1 = folded down toward the palm (≈ 90°). Side (bottom row, index finger highlighted): −1 = toward the thumb · +1 = toward the pinky.

Thumb DOF poles at −1, 0 and +1 for fold and side
Figure 6 — Thumb DOF poles: fold and side.

Legend: right hand, palm toward the viewer; columns −1 · 0 · +1. Thumb fold = opposition (top row): −1 = swung away from the palm · +1 = across the palm toward the pinky base. Thumb side = abduction (bottom row): −1 = in, pressed to the palm · +1 = out of the palm plane, toward the viewer. Thumb roll is not drawn.

idsidedefinition−1 … +1dofdefault
g_{thumb,index,middle,ring,pinky}_curlL/RFinger curl (PIP/DIP toward palm)−1 = bent back (hyperextended) · 0 = straight · +1 = fully curled10
g_{index,middle,ring,pinky}_foldL/RMCP base-knuckle fold−1 = folded backward · 0 = straight · +1 = folded toward palm10
g_thumb_foldL/RThumb opposition (sweep across palm to pinky base)−1 = away · +1 = across palm10
g_{index,middle,ring,pinky}_sideL/RFinger spread−1 = toward thumb · +1 = toward pinky10
g_thumb_sideL/RThumb abduction (in/out of palm plane)−1 = in · +1 = out10
g_thumb_rollL/RThumb roll/pronation−1 = pad out of palm facing · +1 = pad in10

4.4.head (affect-capable)

Head Euler angles (stored bipolar, degrees). Affect-capable.

idsidedefinition−1 … +1dofaffectdefault
h_yawnoneTurn left/right±80° (max 80)1yes0
h_pitchnoneNod up/down±60° (max 60)1yes0
h_rollnoneTilt head±50° (max 50)1yes0

4.5.body (affect-capable)

Torso motion distributed along the spine (degrees). Affect-capable.

idsidedefinition−1 … +1dofaffectdefault
b_twistnoneTwist torso left/right±60° (max 60)1yes0
b_bendnoneBend forward/back±50° (max 50)1yes0
b_leannoneLean sideways±40° (max 40)1yes0

4.6.face (affect-capable)

Bipolar expression dims; each drives one or more ARKit-named morph channels per direction. All max 1, default 0. Affect-capable.

idsidedefinition−1 … +1dofaffectdefault
f_brow_innernoneInner brow−1 = furrow (angry) · +1 = raise1yes0
f_browL/ROuter brow−1 = down · +1 = up1yes0
f_eyeL/REyelid−1 = blink-shut · +1 = wide1yes0
f_squintL/REye squint0 = neutral · +1 = squeezed (plus-only)1yes0
f_nosenoneNose wrinkle / sneer0 = neutral · +1 = wrinkled (plus-only)1yes0

4.7.mouth (affect-capable)

Bipolar mouth/oral shapes; each recruits several ARKit morphs per direction so the extremes reach strong shapes (yawn, kiss, bared teeth). Cheeks, tongue, and teeth are oral articulators grouped here. All max 1, default 0. Affect-capable.

idsidedefinition−1 … +1dofaffectdefault
m_mouthL/RMouth corner−1 = frown · +1 = smile1yes0
m_jawnoneJaw−1 = clench · +1 = open (to yawn)1yes0
m_lipsnoneLip rounding−1 = funnel · +1 = pucker1yes0
m_widenoneMouth width−1 = narrow (/u/) · +1 = wide (signed)1yes0
m_rollnoneLip roll−1 = lower over upper · +1 = upper over lower1yes0
m_pressnoneLip press−1 = relaxed-parted · +1 = pressed/tensed (signed)1yes0
m_fwdnoneMouth/jaw thrust0 = neutral · +1 = forward (plus-only)1yes0
m_cheeknoneCheek−1 = suck in · +1 = puff out (signed)1yes0
m_tonguenoneTongue out0 = in · +1 = out/lick (plus-only, best-effort)1yes0
m_teethnoneTeeth bared (lips retracted)0 = neutral · +1 = bared (plus-only)1yes0

When mouthing is active, the artist viseme_* morph remains the primary shape and m_* is a bounded delta from that shape. The normalized viseme mix supplies a share-weighted implied baseline b; decode sends only clamp(b + authored, −1, 1) − b through the ARKit mouth channels. Therefore an authored zero leaves the artist viseme untouched, a same-direction adjustment uses only the remaining range, and an opposing adjustment can cancel it. The conservative seed table is viseme_aa → m_jaw +0.7 and viseme_PP → m_jaw −0.7, m_press +0.7; other pairs imply zero until tuned.

4.8.hyper conditions

Discrete/conditional channels carried alongside the continuous vector — see §3.4. (Section renamed from "4.cat categorical channels" in pre-release drafts; ids unchanged.)

iddomainowner groupstagedefinition
eye_lookatenumfacedecodeGaze target (front / left hand / right hand / glance left, right, up, down).
visemesparse map viseme_* → 0…1mouthdecodeMouthing: a sparse map of viseme_* shape ids to their share, e.g. {viseme_PP: 0.7, viseme_aa: 0.3} — an absent id is 0, {} is no mouthing, and the shares sum to at most 1. SEVERAL shapes may be active at once (each id is its own morph channel, so decode assigns each share directly), and because the value is continuous two mouth keys crossfade on interpolation instead of snapping. A map that arrives over budget is clamped per entry then scaled back onto 1.
contactmover site → target sitearm (mover side)post-processingThe mover body site connects to the target site on the fully decoded body; target never moves (§3.4).
anchorbody site per arm sidearm (per side)post-processingAn anchored arm's position is measured from its site instead of the neck; an arm with no anchored keys never moves; contact wins on its mover side (§3.4).