Windows WPF Bluetooth to OSC bridge

Live heart-rate data
for VRChat avatars.

Reads BPM from a paired heart-rate sensor.
Sends VRChat OSC avatar parameters.

What It Does

A focused desktop utility for sending heart-rate driven avatar state into VRChat.

Finds paired sensors

Discovers paired Bluetooth LE devices that expose the standard GATT Heart Rate service.

Sends VRChat OSC

Outputs OSC messages to 127.0.0.1:{port}, using VRChat's default receive port by default.

Includes test mode

Generates sample BPM values so you can check avatar parameters before connecting a real sensor.

Quick Start

Set up Windows, VRChat, and your avatar parameters before starting the bridge.

  1. Pair your Bluetooth LE heart-rate monitor in Windows.
  2. Enable OSC in VRChat.
  3. Run HR OSC for VRChat.
  4. Choose the paired heart-rate device in the app.
  5. Confirm the OSC port and parameter names match your avatar.
  6. Start the connection and verify that BPM updates appear in VRChat.
No sensor available?

Enable Use test mode in the app or launch with --test to send generated BPM values.

OSC Defaults

The app sends both default parameters to 127.0.0.1:9000. Enter only the parameter name in the app; the OSC prefix is added when sending.

Setting Default OSC address Type Value
Int BPM parameter /avatar/parameters/HR int Current BPM
Float BPM parameter /avatar/parameters/HRPercent float Normalized BPM from 0.0 to 1.0

The default normalization range is 80 BPM to 160 BPM, so 80 maps to 0.0 and 160 maps to 1.0.

Requirements

Use a Windows machine with Bluetooth support and a VRChat avatar prepared for OSC avatar parameters.

  • Windows with Bluetooth support.
  • .NET 8 Desktop Runtime, unless you use a self-contained published build.
  • VRChat with OSC enabled.
  • A Bluetooth LE heart-rate sensor paired in Windows.
  • A VRChat avatar with matching OSC avatar parameters.

Settings and logs

Settings are saved under the current Windows user profile.

%LOCALAPPDATA%\HR-OSC-VRChat\settings.json

Activity logs are written as rotating log files.

%LOCALAPPDATA%\HR-OSC-VRChat\logs\activity-*.log

Troubleshooting

Most setup issues come from Bluetooth pairing, OSC being disabled, or avatar parameter names and types not matching.

No device found

Pair the heart-rate monitor in Windows first. The app discovers paired Bluetooth LE devices that expose the Heart Rate service.

OSC is not visible in VRChat

Check that OSC is enabled in VRChat, the app is sending to the same port VRChat is listening on, and your avatar parameters match the configured names and types.

BPM appears in the app but not on the avatar

Verify that the avatar has OSC parameters with the same names and compatible types. An app setting of HR sends to /avatar/parameters/HR.

Bluetooth connection is unstable

Use Reconnect Sensor to reconnect manually. Automatic recovery can reconnect after repeated sensor errors, and verbose Bluetooth diagnostics can write more detail to the activity log file.

Test mode works but the sensor does not

The VRChat OSC side is likely configured correctly. Check Windows Bluetooth pairing, sensor battery, sensor contact, and whether another app is already connected to the monitor.