[Beta Test Ended - Program OFFICIALLY Released] The Handy <> VRCHAT ERP Companion


Hello everyone! My name is Devvious and I like to do random projects whenever my adhd brain kicks in full gear. I noticed the lack of Vrchat support for The Handy so I took it upon myself to build one. Unlike Lovense products, the Handy has a real problem trying to properly translate incoming data but I tried my best to make it work. I’m sure there is a better way but it’s just a hobby for me at best. I will gladly take any technical advice to make this product better in the future.

====================================================
Edit: The program now supports Lovense and other strokers!!
Please join the Discord if you have any questions or want to keep up. I will be happy to help
everyone. Also I plan to be hosting giveaways time to time so maybe you will be able to snag a key for your partner :wink:

====================================================

How does it work?
If you have used OSCGoesBrrr then its the exact same thing. Connect your Handy bluetooth to Intiface, and load up VRChat with an OSC and SPS enabled avatar.

Does this work with things outside of other players?

Absolutely! As long as the other has SPS attached to it, the Handy will respond to it. For example, Conrad_The_Woff’s Milking Machine works PERFECTLY for this.

~Requirements for Giveaway~

  • Needs to own a Handy (1 or 2, they both work)

  • I am looking to finalize the program in about a week, so I am looking for reviews and/or feedback in a week.

Upon completion of testing, I would be more than happy to provide selected testers that have helped with a free copy to keep.

EDIT: ALL THE TESTER SPOTS HAVE BEEN FILLED, THANK YOU EVERYONE FOR YOUR INTEREST AND SUPPORT.*

8/15/26: I WILL BE DEACTIVATING ANY KEYS TO THOSE WHO WERE INACTIVE, PLEASE REACH OUT TO ME IF YOU MISSED OUT FOR WHATEVER REASON.

Disclosure
Please do keep in mind there is a sort of limitation to the Handy’s movements due to how it functions in comparison to a usual .script file, I just made it so it actually responds correctly.

If you would like to just jump in and try it, or support me and my insane coffee intake, here is the product page.
—> OSCGetsHandy — VRChat OSC to Toy Bridge <—

UPDATE LOG

Previous Updates

V.2.0.1

  • Added OSCQuery functionality so there are no more port issues is user has another osc related program like VRCFT.
  • Added a reminder, closing only minimizes program into taskbar. Also if you now try to run another instance while a previous one is open, it will show a warning. (Program won’t work if there are multiple instances).

V2.0.3

  • Implemented Manual Sources

If there are any sources outside of the standard or because of naming issues, The debug panel in my program will appear as OSC IN (Unmatched). You can copy paste the pathway that comes after into the manual section so the program will read those values.

  • Implemented Wildcard Sources

If you’re lazy or there aren’t many sources to worry about, you can use wildcard to simplify the process.

  • Manual Wildcard AND Wildcard general sources.

  • You can rename your sources so you remember what it’s for.

  • Debug pause because trying to copy/paste it while its moving is practically impossible. No need to stop the program now to read the debug.

  • Added a feature into the simulator to also mimic edited tags.

V.2.0.4 MASSIVE Update for Lovense Support [08/16/2026]

  • Predictive Movement - A feature that will look at your first 2 strokes, then send a template AHEAD of time to your device so it feels like there is little to no delay. If the stroke changes TOO much, then of course there will be a moment of of de-sync. There are also 2 sliders that allow the original template to start transitioning to the new stroke so it will always be updating towards the new movements.
  • Inside Predictive Movement, there is also a delay Calibration button you can use in tandem with the simulator to figure out your delay. Or you can just manually figure it out in-game. Lovense Solace tends to be about 1200-1500ms delay.

  • Saved Presets for situations in which you have multiple devices.

  • Motor Kick-Start - This feature starts every new stroke direction with a little more power to your device, so it doesn’t feel as sluggish. Makes it snappier.

  • Source Mapping - (Under Active Sources Section) Instead of manually having to find the sources in the Debug, now this section will list off all the sources it comes across. You can click on the source and it automatically adds it to your Active Sources! Soo much easier ~ !

Tweaks - Some UI reordering, Debug Log Filters and pop out, Port number now shows in the Status section

V2.0.5 ANOTHER MASSIVE Update 9/3/2026

OSCQuery Integration The bridge now queries VRChat’s own OSCQuery tree (and the local per-avatar OSC config file it auto-generates) instead of relying only on passively watching traffic go by. This means +Sources and Parameter List can show your avatar’s parameters right away, even ones you haven’t triggered in-game yet. Passive listening still runs in the background too, refining which sources look “likely” based on real traffic.

Sources Overhaul

  • Split into “Likely Stroker” and “Likely Vibrate” groups, plus a “Not Likely” group for common non-SPS clutter (movement, blinking, voice, etc.)
  • Each section is individually collapsible
  • Shows each address’s live value right next to it
  • Search bar to filter by name
  • Manual Refresh button
  • “Dump Sources List” button to export the list to a file, avatar ID included in the filename
  • Keyword Tuning, improved the guessing of “likely sources”
  • Added a keyword inclusion/exclusion list for the user to add terms to (I will also be adding to these lists to narrow down sources as I come across them in future updates). It helps the source sorting.

Parameter List A separate window showing every parameter your avatar has, completely unfiltered.

  • Sort by Name, or by Value Change frequency (default, most-active sources first)
  • Click any row to add it as a source

Debug Filters

  • Per-address filters now auto-populate on their own. Only addresses with values that actually vary, or that send high-frequency traffic appear
  • Check All / Uncheck All buttons
  • Named filter profiles – save your current filter setup and switch between them (handy if you swap between a few different avatars)

Character Profiles Saves the settings of the entire application, and links it to your current loaded avatar.

  • Auto Switch setting that allows your profiles (and settings) to change based off of what Avatar you have loaded in-game. You can turn this feature on/off.

Keyword Tuning - A new setting in Active Sources that allows you to add/remove keywords to help your likely sources to be found quicker.

  • When you update your application and the keywords list do not match, it will prompt you if theres a difference and will ask you if you want to add new keywords or do nothing.

Preset Strokes - Feature that allows you to override any in-game movement with a preset movement.

Macro Switch - Set an avatar osc action (sit, dance, whatever your avatar can do) and link it to a function in OSCGetsHandy. Actions are pluggable and more will be added in as requested or when I think of more.

Bug Fixes

  • Fixed an issue where an idle source could block a source that was actually moving, freezing the toy in place even though live values kept visibly updating
  • Predictive Movement now always reaches the true 0/1 endpoints of a stroke, instead of sometimes stopping short
  • Popup windows now open on whichever monitor your main window is actually on (multi-monitor support)
  • Action buttons (Refresh, Close, etc.) can no longer get pushed off-screen when a window is shrunk

Other Changes

  • Removed the standalone “Live Source Values” section – values now show right next to each source in Active Sources instead
  • The 3 built-in sources always match any address with that tag automatically (no more separate Universal Wildcard checkbox to toggle)
  • “Log Unmatched OSC” renamed, now on by default for new installs
  • General UI text made bolder for readability
  • New “Settings” menu: Invert toggle, plus a Reorganize screen to drag-and-drop reorder the main window’s sections to your preference
  • New “View” menu: hide/show individual sections, everything visible by default
  • Added a User Guide link to the Help menu
  • +Sources/Parameter List now recognize toggle-style values and show “On”/“Off” alongside the raw number
5 Likes

Hello Devviant I would really like to participate in testing

I have The handy 1 and VRchat erp ready avatars with sps/dps systems.

p.s.
Your product page link is missing on your post

1 Like

Hello, I’d be glad to test it out.

I have been working on a similar app myself but haven’t gone public with it. I have a handy 1 and 2 so I can test on both if necessary.

1 Like

Hi, I’d be more than happy to help test it.

I only have a Handy 1, but I’d be willing to put it through extensive use during the testing period and provide any feedback that could be helpful.

1 Like

Would absolutely love to test this!!!

1 Like

Thanks for showing an interest everyone, I just sent you a DM with the instructions~

may i test?

1 Like

Ofcourse, I DMd you the details~

@jotaro123 With the integration of intiface in this, what’s the difference in this and OSCGoesBrrr?

I just see OSCGBR as a tool for vibes and OSCGH meant for strokers (i’m using my Handy as the base of this program). I do however want the community to be able to have as many similar features they are used to seeing for comfort/enjoyment of use.

Brrr just receives the float values as intensity for the vibes. Strokers can “kind of” interpret those as positions however there is too much noise for strokers which are servo-driven linear actuators. They HAVE to finish their last given command. When slammed with a bunch of float values, it stutters so OSCGH is meant to solve this by utilizing a user adjustable filter to start ignoring some inputs to make the arm move much smoother. I can confirm now the arm moves VERY smoothly.

I think this alone is hardly a “product” so I am striving to add as many stroker related features like predictive movements (to reduce delay for lovense solace), pattern additions like how in funscripts have small vibrations in Fapheros, and also a “bounce” feature as if there is a sort of “jiggle” effect from avatars.

-Currently working on finalizing the predictive movements.

I just see OSCGBR as a tool for vibes and OSCGH meant for strokers (i’m using my Handy as the base of this program).

OSCGB works amazingly well with wired or local network T-Code based devices. It’s not so much that it’s just for vibes as it is for things that either don’t need high update rates (vibes) or can use them correctly (wired tcode devices). Things like the Handy, Keon, etc are the very, very awkward middle of that.

Strokers can “kind of” interpret those as positions however there is too much noise for strokers which are servo-driven linear actuators. They HAVE to finish their last given command.

Right problem, wrong reason. Welcome to the hell I’ve been dealing with since the RealTouch died in like 2013. :slight_smile:

Most mainstream strokers are built specifically for video sync because the customer base just does not give a shit about real time (this is a problem for our game engine support too), and this is encoded at the protocol level. Then there’s the whole issue of BLE latency issue that you really only get so much control over. So the noise is from the communication format and specifics of the bus. The “HAVE to finish their last given command” thing isn’t true of several protocols, command interruption exists, but everything (even tcode devices) are open loop control anyways so you’re not really sure where a newly inserted command is gonna land.

We’re working on cross-hardware stroker smoothing in intiface to try to approximate real time controls, but it’s a per-device situation due to the differences in motors, radios, protocols, etc. Is it fixable? If companies cared, sure, but until then filtering (or reversing firmware) is the best option available, as you’ve found out. The Fleshlight Launch updated firmware also proved with low enough connection gaps you can get something fairly good going.

This is all a nasty uphill product battle against most people just wanting scripts though, which is why I usually just point anyone interested in VRC at SSR-1/OSR-2/etc.

At some point if you really want to fix this and I don’t have a generic enough interface in Intiface (which I’m hoping I will, just implemening our Position message for non-tcode strokers), this may require tuning per-protocol or specializing bluetooth. May god have mercy on you if you have to go that far.

1 Like

Ahh, I don’t know much of T-Code so i didn’t even know how well they worked. I just started with the Handy 2 years ago and it got me interested in trying to do stuff with it :sweat_smile:.

I was just comparing data sent in from VRChat to my program’s debug screen so I honestly thought the constant flow of data was just inherent to just.. "that’s how it works’'. (Hence why i tackled the issue with just a filter to ignore small movements)

I pray i don’t have to do anything crazy. I know NOTHING of BLE :grimacing: :sob:

Im sure you know much more than I do in coding but since im hella new to this, ive vibe coded my way through, but if you want to see the filter i made, i can send you the .py if curious.