Skip to main content

Adding Hardware Profiles

This page is for contributors who want to add a new face-tracking device to the support table. When adding hardware, add a hardware profile JSON and always keep a source URL that explains the support status or the reason for the judgment.

Files to update

PurposePath
Support profile JSONEditor/Data/HardwareSupport/Profiles/*.json
Expression list, only when adding a new expression keyRuntime/Data/Expressions/UnifiedExpression.cs

1. Add the support profile JSON

Add a JSON file under Editor/Data/HardwareSupport/Profiles/. The profile value is a stable unique key for the hardware profile. The id value is used as both the Inspector order and the bit index for saved selections (1 << id), so do not reuse an existing value.

{
"profile": "NewHardware",
"displayName": "New Hardware",
"id": 18,
"sources": [
{
"title": "New Hardware tracking specification",
"url": "https://example.com/spec",
"note": "Source used to map device output to UnifiedExpression."
}
],
"full": [
"EyeLookOutRight",
"EyeLookInRight",
"EyeLookUpRight",
"EyeLookDownRight"
],
"converted": [
"EyeClosedRight"
],
"unknown": [
"TongueOut"
]
}
FieldRequiredDescription
profileRequiredStable unique key for this hardware profile.
displayNameRequiredThe hardware name shown in the Inspector.
idRequiredBit index and Inspector order. Use 0 through 30 and do not conflict with existing profiles.
sourcesRequiredSource material for the support status. Add at least one source.
fullOptionalUnifiedExpression values that the hardware can output directly.
convertedOptionalUnifiedExpression values supported through conversion, emulation, merged left/right values, or module-side processing.
unknownOptionalUnifiedExpression values that cannot be confirmed from public information.

Expressions that are not listed in full, converted, or unknown are treated as unsupported.

Changing an existing id changes the saved bit flag for that hardware profile. Treat existing IDs as persistent.

2. Check expression names

Only values from UnifiedExpression can be used in the JSON file. Invalid names or None cause a load error.

If the device documentation uses its own expression names, map them to VRCFaceTracking Unified Expressions before adding them. You do not need to list the same expression more than once in a single hardware profile.

3. Run tests

Run Unity EditMode tests and confirm that:

  • The JSON profile loads correctly.
  • profile values do not conflict.
  • id values do not conflict.
  • All UnifiedExpression names in JSON exist.

Support status criteria

StatusCriteria
fullThe hardware or VRCFT module outputs the expression value directly.
convertedThe value is produced through estimation, shared left/right values, synthesized values, or module-side conversion.
unknownThe available information is not enough to determine support.
UnsupportedThe expression is not supported, or support cannot be confirmed.

When unsure, use unknown and explain the reason in sources.note.