close
Skip to content
 
 

Repository files navigation

Tobii Advanced Eye Tracking Module for VRCFaceTracking

A module for working with Tobii Eye Tracking in VRCFaceTracking.

Supported devices

VR headsets (wearable streams):

  • HP Reverb G2 Omnicept Edition.
  • Pimax Crystal.
  • and more.

Desktop (screen-based) trackers:

  • Tobii Eye Tracker 5.
  • other screen-based Tobii devices exposing the consumer streams.

The module auto-detects the device type: if the wearable streams are not available it derives per-eye gaze from the on-screen gaze point, the per-eye 3D eye positions and the physical screen geometry (see Desktop mode).

Usage

  • Download and install VRCFaceTracking
  • Download the archive with the module from release
  • Run VRCFaceTracking
  • Go to the "Module Registry" tab
  • Click "+ Install Module From .zip"
  • Select the downloaded archive
  • Done!

Desktop (screen-based) mode

Screen-based trackers such as the Eye Tracker 5 (feature group consumer) support neither the wearable streams nor the licensed per-eye gaze_data stream. Instead, this module reconstructs per-eye gaze directions from what the device does provide:

Stream Rate Used for
gaze_point ~33 Hz combined gaze position on screen (0..1)
gaze_origin ~33 Hz per-eye 3D positions in mm
head_pose ~25 Hz optional eye-in-head compensation
user_presence events suspending output while away
tobii_get_display_area once physical screen plane incl. mounting tilt

For each gaze sample the screen target is converted to millimeters on the screen plane reported by the Tobii software, and each eye's direction is normalize(target - eye_origin). This recovers true per-eye vergence (validated on hardware: the L/R angle difference matches 2*atan(IPD/2 / distance) within a few percent).

Eye openness is inferred from per-eye tracking validity (a closed eye loses tracking), debounced over blink_debounce_samples. Pupil diameter is not available on consumer devices — that data requires a professional license.

Setup:

  1. Configure and calibrate the tracker in the Tobii Experience software (this is where the module gets the screen geometry from).
  2. Install the module; it selects desktop mode automatically.

Config options in config.json:

Option Default Meaning
mode auto auto / wearable / screen source selection
screen_width_mm 0 screen size override; 0 = use the Tobii display area (recommended)
screen_height_mm 0 see above
screen_curvature_radius_mm 0 cylinder radius for curved monitors (e.g. 1800 for 1800R); 0 = flat
screen_head_compensation false rotate gaze into the head frame (eye-in-head angles) using head_pose
gaze_degrees_scale 1.8 linear gain on the gaze angles, same meaning as in standalone mode (VRCFT's atan conversion is pre-compensated, so the game receives exactly angle × scale); does not affect vergence
vergence_scale 0.0 how much true eye vergence to keep — VRChat infers focus distance from it when the eye raycast is off: 0 = parallel eyes (focus far, never cross-eyed), 1 = true screen distance (~0.55 m), >1 exaggerated
blink_debounce_samples 2 invalid samples (~30 ms each) before an eye counts as closed
eyelid_transition_ms 100 linear blink animation time for a full open↔close sweep; 0 = instant
combined_eyelids true one shared eyelid value, open unless both eyes closed — avoids winks becoming "both eyes 0.5" on combined-lid outputs; set false for avatars with per-eye lids

On a curved monitor, the calibrated gaze point is pixel-anchored, so the screen target is mapped onto a cylinder anchored at the display corners (uniform arc length, center sagging away from the user) instead of a flat plane.

Standalone mode (no VRCFT)

Standalone\TobiiStandalone.exe connects to the tracker directly and sends VRChat's native eye tracking OSC, bypassing VRCFaceTracking entirely:

  • /tracking/eye/CenterPitchYawDist — combined gaze in raw physical degrees plus the true focus distance in meters (computed from the eye-to-screen geometry), so VRChat handles convergence itself.
  • /tracking/eye/EyesClosedAmount — eyelid value with the same debounce, blink animation and combined-eyelid behavior as the module.

When to use it: avatars without face-tracking parameters (VRChat native eye tracking only). For FT avatars keep using the VRCFT module instead.

Important

Do not run the exe and the VRCFT module at the same time — both would send native eye tracking and fight each other.

Config (config.json next to the exe): mode, screen_width_mm, screen_height_mm, screen_curvature_radius_mm, blink_debounce_samples, eyelid_transition_ms, combined_eyelids work as in the module table above, plus:

Option Default Meaning
vrchat_host 127.0.0.1 OSC destination
vrchat_port 9000 VRChat's OSC input port
gaze_degrees_scale 1.8 multiplier on the sent pitch/yaw degrees

When gaze leaves the screen the gaze message stops, and VRChat reverts to auto-look after its 10 second timeout.

How to use the "advanced" mode.

Important

You must have a file with a valid license, otherwise the module will not work in "advanced" mode!
Or you can use the workaround: Broken Eye

By default, the module is loaded without a license, which allows you to use it to track combined gaze direction and eye opening/closing.

The "Advanced" mode allows you to track the gaze direction for each eye separately, as well as get information about the pupil diameter.

For this, you must have a valid license, in which is indicated

"featureGroup": "professional"

(you can see an example in the file license.example.json)

It needs to be placed in the module folder

C:\Users\<USERNAME>\AppData\Roaming\VRCFaceTracking\CustomLibs\324b3cd5-5e64-4f3f-b056-12340badc0de

# Or paste into the address bar of the explorer to open the folder
%APPDATA%\VRCFaceTracking\CustomLibs\324b3cd5-5e64-4f3f-b056-12340badc0de

under the name license.json

After launching VRCFaceTracking, make sure that the module has loaded your license, it should be in the "Output" tab:

...
[TobiiAdvanced] Information: Loading license...
[TobiiAdvanced] Information: Creating device with license.
[TobiiAdvanced] Information: Connected to platform module with build version "<version>"
[TobiiAdvanced] Information: Subscribe to advanced data.
...

If instead you see:

[TobiiAdvanced] Information: No license found in <redacted>

It means the license was not found, check the path and file name.

And if you see:

...
[TobiiAdvanced] Warning: License validation failed: TOBII_LICENSE_VALIDATION_RESULT_TAMPERED
...

It means you are using an invalid license, check its content.

How to get a license for "advanced" mode.

I don't know

Most likely you can only wait until the manufacturer of the device you are using gets a license from Tobii.

How to use the "advanced" mode without a license.

There is a workaround that will allow you to obtain data on the direction of gaze for each eye separately, the diameter of the pupil, and even receive images from cameras! And all this without a “professional” license!

The software is called Broken Eye and can be downloaded here.

About

Tobii Advanced Eye Tracking Module for VRCFaceTracking (Supports any Tobii tracker, for example "Eye Tracker 5", "HP Reverb G2 Omnicept" or "Pimax Crystal")

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages