Skip to main content

Data model

The data structures your client receives. Units are meters; rotations are quaternions (x, y, z, w); positions are world space unless noted.

Skeleton

A tracked person for one frame.

FieldTypeNotes
IdstringPer-frame/session instance id
EntityIdstringStable identity (set during entity registration)
AnchorIdstringAnchor the skeleton is positioned against
Positionsfloat[25 × 3]Joint positions (x, y, z) in meters, world space
Confidencefloat[25]Per-joint confidence 0–1
CaptureTimedoubleUnix timestamp (s, fractional) — use to sync streams
HeadLocalRotationquaternionDevice-local head orientation
LeftHand* / RightHand*bytesHand joint positions/rotations (when hands enabled)
Controller infoVR controller state, when present

Joints (25)

Nose · Neck · Shoulders (L/R) · Elbows (L/R) · Wrists (L/R) · Hips (L/R) · Knees (L/R) · Ankles (L/R) · Eyes (L/R) · Ears (L/R) · Toes / heels (L/R).

Hands add 21 key points each. A full body-plus-hands point set is 25 + 21×2 = 67 points — this is the positions_67 layout you'll see in exports.

Tracked objects

TypeKey fields
MarkerId, Type, Position, Radius
ObjectId, Name, Position, Rotation, MarkerIds[]

Objects are composed from markers (e.g. a ball built from a colored marker).

Camera

FieldNotes
IdCamera identifier
Intrinsic3×3 camera matrix
Extrinsic4×4 pose
DistortionLens coefficients
Width / Height / FrameRateStream properties

Spatial

TypeFields
AnchorAnchorId, Position, Rotation, ParentId, Visible
GuardianGuardianId, Points[], Height (play-space boundary)
tip

EntityId is the field you want for "is this the same person as before?" — Id can change frame to frame; EntityId is stable once the person is registered.

Was this page helpful?