Skip to main content

OSC Face Tracking

External applications can send face tracking data directly to VRChat's Face Tracking system using OSC. The input uses the Unified Expressions tracking keys established by VRCFaceTracking (VRCFT).

Enable OSC in VRChat and use an avatar configured for Face Tracking with Use All Tracking Keys enabled. The avatar's Blendshapes Sets and Parameter Behaviors determine how the incoming values affect its appearance.

Message format​

FieldValue
Address/tracking/face/v1
ArgumentsOne OSC blob (type tag b; OSC type-tag string ,b).
Blob payload sizeExactly 102 bytes.
Byte orderOne unsigned byte per tracking key, in the order below.
Value range0 to 255. VRChat decodes each byte as byte / 255.0 to produce a tracking strength from 0 to 1.

Send the complete 102-byte payload in every message. Set any key your tracking source does not provide to 0. Preserve its position in the payload; do not omit unsupported keys. VRChat ignores messages with the wrong number of arguments or the wrong blob payload size.

Use your OSC library's blob argument type to send the byte array. The 102 bytes are the blob's data payload, excluding the OSC blob length field and alignment padding. Voice and Viseme_* are inputs supplied by VRChat and are not part of this payload.

For example, a payload with byte 36 set to 255 and all other bytes set to 0 sends JawOpen = 1 with all other tracking keys at 0.

Tracking key order​

Indices are zero-based. These names are also the tracking key names used in Blendshapes Sets and Parameter Behaviors, including the Expression field in Custom mode.

IndexTracking key
0EyeLookOutRight
1EyeLookInRight
2EyeLookUpRight
3EyeLookDownRight
4EyeLookOutLeft
5EyeLookInLeft
6EyeLookUpLeft
7EyeLookDownLeft
8EyeClosedRight
9EyeClosedLeft
10EyeDilationRight
11EyeDilationLeft
12EyeConstrictRight
13EyeConstrictLeft
14EyeSquintRight
15EyeSquintLeft
16EyeWideRight
17EyeWideLeft
18BrowPinchRight
19BrowPinchLeft
20BrowLowererRight
21BrowLowererLeft
22BrowInnerUpRight
23BrowInnerUpLeft
24BrowOuterUpRight
25BrowOuterUpLeft
26NasalDilationRight
27NasalDilationLeft
28NasalConstrictRight
29NasalConstrictLeft
30CheekSquintRight
31CheekSquintLeft
32CheekPuffRight
33CheekPuffLeft
34CheekSuckRight
35CheekSuckLeft
36JawOpen
37JawRight
38JawLeft
39JawForward
40JawBackward
41JawClench
42JawMandibleRaise
43MouthClosed
44LipSuckUpperRight
45LipSuckUpperLeft
46LipSuckLowerRight
47LipSuckLowerLeft
48LipSuckCornerRight
49LipSuckCornerLeft
50LipFunnelUpperRight
51LipFunnelUpperLeft
52LipFunnelLowerRight
53LipFunnelLowerLeft
54LipPuckerUpperRight
55LipPuckerUpperLeft
56LipPuckerLowerRight
57LipPuckerLowerLeft
58MouthUpperUpRight
59MouthUpperUpLeft
60MouthUpperDeepenRight
61MouthUpperDeepenLeft
62NoseSneerRight
63NoseSneerLeft
64MouthLowerDownRight
65MouthLowerDownLeft
66MouthUpperRight
67MouthUpperLeft
68MouthLowerRight
69MouthLowerLeft
70MouthCornerPullRight
71MouthCornerPullLeft
72MouthCornerSlantRight
73MouthCornerSlantLeft
74MouthFrownRight
75MouthFrownLeft
76MouthStretchRight
77MouthStretchLeft
78MouthDimpleRight
79MouthDimpleLeft
80MouthRaiserUpper
81MouthRaiserLower
82MouthPressRight
83MouthPressLeft
84MouthTightenerRight
85MouthTightenerLeft
86TongueOut
87TongueUp
88TongueDown
89TongueRight
90TongueLeft
91TongueRoll
92TongueBendDown
93TongueCurlUp
94TongueSquish
95TongueFlat
96TongueTwistRight
97TongueTwistLeft
98SoftPalateClose
99ThroatSwallow
100NeckFlexRight
101NeckFlexLeft

Synchronization​

VRChat synchronizes received face tracking data to remote viewers through its native face tracking synchronization. You do not need to send each key through a custom synced avatar parameter. See Networking and synced parameters for fidelity considerations and when to use a synced parameter instead.