A little more life
in your eyes.
Let your avatar react to the world around you.
Fake Dilation turns scene brightness into smooth pupil movement for VRChat and Resonite. No eye-tracking hardware required.
Windows 10 / 11 · x64 · Installer
Get running in minutes.
It's just three quick steps.
-
Install and launch
Run the Windows installer, then open Fake Dilation.
-
Choose your platform
Select VRChat or Resonite. Enable OSC or configure your receiver.
-
Start tracking
Press Start tracking, then tune the response to your avatar.
Questions?
The essentials, without the fluff and all that crap.
Does this track my real eyes or pupils?
No. It animates your avatar from scene brightness, it never observes your eyes.
Does it save screenshots?
No. Pixel samples are processed in memory and never saved.
Do I need eye-tracking hardware?
No. You only need a compatible Windows PC.
Why isn't Linux supported?
Fake Dilation is built with WinUI 3 and uses Windows Graphics Capture with Direct3D 11 to sample a game window efficiently. Those parts are native Windows technologies and are not available on Linux.
OSC itself is cross-platform, but Linux support would require a different interface and screen-capture backend, followed by platform-specific testing. Running the Windows build through Wine is not officially supported.
How does VRChat setup work?
Enable OSC in VRChat. Fake Dilation discovers the active avatar automatically.
How does Resonite setup work?
Enable Use Resonite in Fake Dilation. In Resonite, add an OSC_Receiver, set HandlingUser to yourself, and use the same port as Fake Dilation 9000 by default.
Add OSC_Value<float> components with ArgumentIndex set to 0, then connect the values you need to your avatar:
/FakeDilation/PupilDilation/FakeDilation/PupilDiameter/FakeDilation/PupilDiameterLeft/FakeDilation/PupilDiameterRight
Enable the matching outputs in Fake Dilation and use Test OSC to verify the connection. Resonite wiring is manual and is not discovered automatically.
How is the pupil value calculated?
Each sampled pixel is converted to perceived brightness, then averaged:
L = (0.2126R + 0.7152G + 0.0722B) / 255
The app smooths that brightness over time, maps it between your minimum and maximum settings, and applies gamma:
Sₜ = smoothing × Lₜ + (1 − smoothing) × Sₜ₋₁
N = clamp((S − min) / (max − min), 0, 1)
P = clamp(1 − Ngamma, 0, 1)
This makes darker scenes produce larger values and brighter scenes smaller ones. Invert swaps the final result to 1 − P.
Can it keep running after I close the window?
Yes. Enable “Minimize to notification area when closing” in Settings, then use the tray icon to restore or exit the app.