A downloadable plugin for Windows


Are you looking to do workout streams in the new year? Why not connect your heartbeat to VTube Studio? Features include:

💓 Support for many heart rate monitors with pulsoid.nethyperate.ioANT+ and even Fitbit!

💓 Configurable model tinting that scales with pulse!

💓 Automatic expression and hotkey triggering at desired heartrate thresholds!

💓 Custom tracking parameters for pulse, breath and Live2D items!

💓 NEW! Dynamically control VTube Studio VFX with your heartbeat! 

💓 NEW! Plugin API so that you can build your own apps that consume or write heartrate data!

About

This plugin is developed by Tom "Skeletom" Farro. If you need to contact him, the best way to do so is via Twitter.

If you're more of an email-oriented person, you can contact his support email: tom@skeletom.net.

Usage

Getting up and running is relatively straightforward. The plugin will automatically connect to VTube Studio on launch. From there, do the following steps:

  • Input an estimated minimum and maximum heartrate.
  • Select a desired heartrate input method. You can connect over bluetooth using your phone and pulsoid.net or hyperate.io, connect directly to your PC with an ANT+ USB dongle, or connect with your Fitbit watch by downloading a companion app through the Fitbit phone app.
  • Add Art Mesh Tint modules and configure them to parts of your model!
  • Add Expression and Hotkey Trigger modules and configure them to activate model functions automatically!
  • Hook up Custom Tracking Parameters, to your model for things like breathing speed!

For the complete guide on all input and output features, the unabridged README can be found here (also accessible from within the plugin under Settings -> Open README). In addition, I have put together a complete video tutorial.


Custom Parameters

This plugin outputs fifteen custom tracking parameters for use. They are as follows:

  • VTS_Heartrate_Linear: A value that scales from 0.0 to 1.0 as your heartrate moves across the expected range.
  • VTS_Heartrate_Pulse: A value that bounces back and forth between 0.0 and 1.0 with a frequency exactly matching your heartrate.
  • VTS_Heartrate_Breath: A value that bounces back and forth between 0.0 and 1.0 with a frequency slower than VTS_Heartrate_Pulse, suitable for controlling your model's ParamBreath output parameter.

The following parameters are primarily suited for controlling Live2D props, but you may also find them useful of your model:

  • VTS_Heartrate_BPM: A value that represents the actual current BPM from 0 to 255, rather than a normalized value from 0.0 to 1.0.
  • VTS_Heartrate_BPM_Ones: A value from 0 to 9 that represents the first digit of the current BPM. For example, with a heartrate of 95, this parameter would be 5.
  • VTS_Heartrate_BPM_Tens: A value from 0 to 9 that represents the second digit of the current BPM. For example, with a heartrate of 95, this parameter would be 9.
  • VTS_Heartrate_BPM_Hundreds: A value from 0 to 9 that represents the third digit of the current BPM. For example, with a heartrate of 95, this parameter would be 0.
  • VTS_Heartrate_Repeat_1: A value that scales linearly from 0.0 to 1.0 and resets back to 0.0 with every heartbeat.
  • VTS_Heartrate_Repeat_5: A value that scales linearly from 0.0 to 1.0 and resets back to 0.0 with every 5 heartbeats.
  • VTS_Heartrate_Repeat_10: A value that scales linearly from 0.0 to 1.0 and resets back to 0.0 with every 10 heartbeats.
  • VTS_Heartrate_Repeat_20: A value that scales linearly from 0.0 to 1.0 and resets back to 0.0 with every 20 heartbeats.
  • VTS_Heartrate_Repeat_30: A value that scales linearly from 0.0 to 1.0 and resets back to 0.0 with every 30 heartbeats.
  • VTS_Heartrate_Repeat_60: A value that scales linearly from 0.0 to 1.0 and resets back to 0.0 with every 60 heartbeats.
  • VTS_Heartrate_Repeat_120: A value that scales linearly from 0.0 to 1.0 and resets back to 0.0 with every 120 heartbeats.
  • VTS_Heartrate_Repeat_Breath: A value that scales linearly from 0.0 to 1.0 and resets back to 0.0 with the frequency of the VTS_Heartrate_Breath parameter.

FAQ

Q: "What devices are supported?"

A: This plugin supports any device that is supported by: 

Unfortunately, Fitbit has not provided a way to develop or install third-party apps on their latest models (Versa 4 and later), so the latest devices cannot be supported at this time.

Download

Download
vts-heartrate-v1.4.0.zip 44 MB

Install instructions

This is a plugin for VTube Studio, so naturally it requires an installation of VTube Studio, which is available for free on Steam.

Simply unzip the folder and run the bundled .exe file to launch the plugin, no installation required.

To update, just download the latest .zip archive and replace the files from your previous download.

The plugin will request network permission so as to be able to connect with VTube Studio, check for latest version, and optionally connect with pulsoid.net, hyperate.io, or the Fitbit companion app.

Development log

Comments

Log in with itch.io to leave a comment.

(+1)

I am a Korean user. I'm using it very well, but when I register outputs, I have trouble registering all the things I registered in Korean because my name is not displayed..

I'd appreciate it if you could support me to write in Korean

That’s good to know. The fonts used in the app should include all Latin characters, Japanese Kana, Korean Hangul and Chinese Hanzi. Can you please share a screenshot of where in the app your text isn’t being displayed properly?

Thank you!

(+1)

I'd love to get my model breathing really fast the higher the heartrate goes - there doesn't seem to be any instructions on how to do this in your tutorials! I'm a tech dummy, not sure how to control the 'parameters'...

I’m planning on recording a narrated full tutorial video for the plugin, but I needed a break first… 😅 I hope that this is sufficiently helpful in the interim.

(+2)

Works great! One thing I would love to have in the future though would be the ability to create profiles for outputs so that I can have one for horror games and one for action games without changing each output myself but overall it works perfectly! 

(+1)

After watching someone stream a horror game in the same week as RFA the same realization dawned upon me, too.

I’ll need to think about how I want to set that up, since right now it automatically loads profiles based on the model ID. I’ll need to come up with a way to allow the same ID to have multiple profiles without breaking the existing settings for people… 🤔

(+2)

This feature has been added in today’s update. I hope it meets your needs!