Skip to content
This repository was archived by the owner on Oct 28, 2025. It is now read-only.
/ vrchat-heartio Public archive

Monitor your heart rate and display it in VRChat

License

xn-sakina/vrchat-heartio

Repository files navigation

HeartIO

Real-time heart rate monitoring that connects to Bluetooth devices and displays your heart rate in VRChat via OSC.

Features

  • Connect to BLE heart rate devices:
    • Heart rate monitors: Polar, CooSpo, Garmin, etc.
    • Smart wearables with BLE heart rate broadcast: Huawei bands, etc.
  • Display heart rate in VRChat via OSC protocol
  • Dynamic heart display styles based on BPM
  • SQLite data logging for heart rate tracking
  • Web-based graph visualization

Quick Start (Recommended)

For users who prefer a simple setup without development environment, download the pre-built Rust binary from GitHub Releases.

Rust Binary Version

The Rust version provides the same functionality as the Node.js CLI in a single executable file. When you run the Rust binary, it will automatically generate a heartio.config.json configuration file in the current directory. The heart rate threshold key in the config represents "less than" values.

  "HEART_RATE_LABEL": {
    // < 70
    "70": [],
    // 70 < bpm < 80
    "80": [],
  }

Xiaomi Band Support

Xiaomi Band versions ≤ 7 support Bluetooth heart rate broadcasting. Versions ≥ 8 are not supported.

Only Xiaomi Band 7 has been tested. Other versions (≤ 7) may work but haven't been tested with actual devices. You can share feedback in issues.

Enable in heartio.config.json:

{
  "XIAOMI_BAND": true
}

Note: Xiaomi Band heart rate broadcast has limited frequency (2-6 seconds per update). Standard heart rate monitors or bands are recommended for better performance.

Apple Ecosystem Integration

AirPods Pro 3

Build the iOS app to collect heart rate data from AirPods Pro 3 and forward it to HeartIO.

Apple Watch

Build the watchOS app to collect heart rate data from Apple Watch and forward it to HeartIO.

Node.js CLI Version

Setup

Install dependencies:

  just install

Configuration

Create .env file in the cli directory:

OSC_PORT=9000
OSC_HOST=0.0.0.0
# Configure ONE of the following:
HEART_RATE_DEVICE_NAME="YOUR_DEVICE_NAME"
# OR
# HEART_RATE_DEVICE_ADDRESS="YOUR_DEVICE_ADDRESS"

Configuration options:

  • You can use either device name or address for connection
  • If both name and address are omitted, the app will automatically connect to any available device with heart rate service (explicit configuration is recommended)

Usage

Start the Node.js CLI:

  just start

Graph Visualization

View heart rate data in a web interface:

  just start-graph

Troubleshooting

  • OSC not working: Ensure OSC is enabled in VRChat
  • Bluetooth not working: Verify heart rate broadcasting is enabled on your wearable device
  • Device not found: The Bluetooth reception range of most motherboards is very limited. If your device is not detected, try moving closer to your computer or consider purchasing a USB Bluetooth adapter for better range and reliability
  • Connection issues: Make sure your heart rate device is not connected to other applications

Development Notes

  • Node.js CLI: Not by AI
  • Apple Watch AppGraph Visualization: Created with GPT-4o
  • Rust Version: Claude Sonnet 4

License

MIT

About

Monitor your heart rate and display it in VRChat

Topics

Resources

License

Stars

Watchers

Forks

Contributors 2

  •  
  •