Use the 'Haptic Pancake Bridge' app - Z4urce/VRC-Haptic-Pancake GitHub Wiki

1. Download the app

  1. Download the newest version on the Releases page.
  2. Save hapticpancake_windows.exe or hapticpancake_linux to somewhere it can stay.
    • For auto-launching with VR to work (optional), SteamVR/etc needs the app to stay in one spot.

Warning

Do not store the app in a protected/admin folder, e.g. avoid C:\Program Files. The app needs to save its own settings file.

2. Run the app

  1. Run the downloaded Windows .exe or Linux bundled app.
  2. If prompted, allow the app in your firewall.
    • The bridge app listens for incoming OSC/WebSocket messages and mDNS broadcasts (OSCQuery).

Note

You might get a false positive virus alert given how this app is built (PyInstaller). If you can't bypass that, download this repository and run BridgeApp/main.py using Python.

3. Set up your trackers

  1. Launch SteamVR.
    • You don't need to put on your headset if using Vive/Tundra Trackers (Lighthouse).
  2. Put your trackers out so SteamVR is tracking them (solid icon), not searching (fading in/out).
  3. Wait for your trackers to show up in the bridge app.
  4. For each tracker with haptics…
    • Click Setup.
    • Pick up a tracker, then click Identify - if it vibrates, you found it; if not, pick up another tracker.
    • Once found, click the button for where it is worn, e.g. Hips.
  5. Scroll through the list of trackers to check if everything looks correct.
    • Confirm any by clicking the Identify button.
  6. Optional: check Start with SteamVR and Start minimized to have haptics start whenever you enter VR.
  7. Optional: fill in any custom parameters if you didn't follow the recommended names.
    • Address: /avatar/parameters/ + parameter you added to your avatar.
    • E.g. /avatar/parameters/HapticFootLeft.

Screenshot of bridge app showing a section called 'Devices', with two trackers listed

Important

SteamVR must be running to communicate with your trackers.

Something not working? Jump down to Troubleshooting trackers.

4. Set up VR app

VRChat

  1. Launch VRChat (desktop mode or VR, either works).
  2. Once in a world, make sure you're in your new/edited avatar.
  3. Open the Action Menu (radial menu with avatar controls).
    • R (Desktop) or Menu (VR).
  4. Navigate to Options → OSC → then toggle on Enabled (if not already on).
  5. Optional: Have a friend join you and run into your avatar.
    • Make sure avatar interactions are turned on - default is friends only.
    • If they can pet your head/fluff/tail and push it, haptics should work.
    • Trackers may need tracked by SteamVR (icon solid, not fading in/out) to vibrate.
  6. Congrats, you're done! 🎉

Important

Identify button works, but VRChat doesn't? Jump down to Troubleshooting VRChat.

Resonite

An official guide will come later, when free time permits. For now, check the Haptic Pancake community chat (Discord) or ask folks in Resonite for help.

5. Customize haptics

Note

This is optional. Most of these settings are up to your preference. Feel free to experiment!

Haptic settings

Screenshot of bridge app showing a section called 'Haptic settings', description follows

  • Pattern: Introduces variety into the vibration and prevents drifting.
    • None disables haptics (separate for Proximity and Velocity).
    • Constant vibrates at maximum intensity even with just a slight avatar collision.
    • Linear [recommendation #1] provides strongest result while still varying by closeness.
    • Sine ramps vibration up and down instead of vibrating at a steady speed.
    • Throb [recommendation #2] helps avoid tracker drift, especially with continuous vibration (e.g. sitting in someone's lap).
  • Strength: Sets minimum and maximum intensity.
    • Default: 0% minimum, 80% maximum.
  • Speed: For Throb pattern only, adjusts delay between pulses.
  • Stop stuck haptics after # (seconds): Works around haptics getting stuck on crash/avatar switch/etc.
    • After # seconds (default 15) with no input, haptics are stopped.
    • Works around glitches, slow computers, avatar switching, and crashing causing haptics to get stuck on.

Important

If using the Constant or Linear pattern with Vive Trackers and the regular (non-Vybronics) motors, keep the maximum vibration intensity to 80% to reduce risk of damaging the haptics output pin.

Vive Trackers using the low-current Vybronics motors and Tundra Trackers (any motor) do not have this issue.

Device settings

Screenshot of bridge app showing a section called 'Devices', description follows

The device list refreshes every 10 seconds. Normally, you don't need to click Refresh.

  • Address: OSC/WebSocket address to listen for haptics input from your VR app.
  • Setup button: fill in Address with common presets.
  • Identify button: send a half-second vibration pulse.
  • Battery threshold: Below this, you'll get a warning vibration, then vibrations will stop to save battery.
  • Pulse multiplier: Adjusts haptics strength relative to other trackers, default 1.0.
    • Use this to make some trackers weaker than others, e.g. if your chest is too sensitive versus feet.
    • Some haptics devices might need a custom multiplier (Vive/Tundra trackers shouldn't need this).

App settings

Screenshot of bridge app showing a section called 'App settings', description follows

  • Start with SteamVR: Check to automatically launch the bridge app when you open SteamVR/etc.
    • SteamVR must be running to toggle this setting.
  • Start minimized: Check to launch in the background, hiding to the task bar (reduces clutter).
  • Theme: Pick your favorite color scheme, or Reset to go to default.

Server settings

Screenshot of bridge app showing a section called 'App settings', description follows

  • Debug button: look at what's being sent to the bridge app.
  • Type: Pick how the bridge app listens for haptics input.
    • OSC (VRChat) for OSC compatible software, includes OSCQuery.
    • WebSocket (Resonite) for WebSocket-based software.
  • Auto-detect port (OSCQuery): For OSC, automatically register an available port.
    • Uncheck this if you have issues getting VRChat/etc to detect Haptic Pancake.
  • Address: Choose what server address is used for listening.
    • Keep the default of 127.0.0.1 unless you need to receive input from another computer.
  • Port: Pick which port the bridge app listens on, e.g. to avoid conflicts.
  • Apply button: apply changes made to the above.

6. Troubleshooting

Troubleshooting trackers

Follow these steps if the tracker doesn't show up at all or the Identify button doesn't work.

Tracker doesn't show in bridge app

  1. Check if SteamVR is running and actively following your tracker.
  2. Confirm SteamVR sees your tracker (icon is solid, not fading in/out).

Tracker won't vibrate with Identify

  1. Confirm SteamVR sees your tracker (solid, not fading in out).
    • It's easy to accidentally block the tracker while holding it.
  2. Vive Tracker: try unscrewing and removing the pancake, then re-assembling.
    • The pancake connection is fiddly, it can take multiple attempts to get a connection.
    • Some Vive Trackers vibrate once when you turn them on/off.
  3. Try increasing Pulse multiplier from the default of 1.0.
    • This should not be needed for Vive/Tundra trackers.

Troubleshooting VRChat

Follow these steps if the Identify button works, but haptics don't work from VRChat.

With VRChat and the Haptic Pancake bridge app both open, press the Debug button next to Server settings.

Screenshot of window titled 'Debug server input', filtering for 'haptic', showing 8 matching addresses with values '0.0' and 83 total addresses total as noted in the status bar

No parameters show up (0 total)

After every troubleshooting step, try moving around again in VRChat to send new OSC data.

  1. Make sure OSC is turned on in VRChat.
  2. Try moving around - parameters only show up when their value changes.
  3. Press Apply button in Server settings.
    • If Auto-detect port (OSCQuery) is checked, VRChat should show a quick pop up of Sending OSC data to: […].
  4. OSCQuery doesn't work on some networks. Uncheck Auto-detect port (OSCQuery).
    • NOTE: If you have other OSC software using the default port 9001, it will now conflict with the bridge app.
    • When using an OSC bridge/router app, follow their instructions for manual setup.
  5. Last resort, try restarting your computer and/or network.
    • This has actually helped someone - networking is cursed.

Example: OSCQuery success

Screenshot of VRChat showing the 'Sending OSC data to […]' popup, a semi-transparent small blue notification in the middle of the screen

Parameters found, but no haptics (0 matching addresses)

  1. Make sure you're using the right avatar.
    • Each avatar needs modified and uploaded to add haptics. It's not global.
  2. Have a friend run into you in VRChat.
    • Haptics parameters only show up when their value changes.
  3. Check your avatar interaction settings - VRChat defaults to friends only.
    • Friend someone, or both you and the other person need to set interactions to Everyone.
    • If the other person can mess with PhysBones (head/fluff/tail/etc), this is not the problem.
  4. Clear the Filter: text, check if your parameter shows up under another name.
  5. Revisit the Upload and test section of the avatar setup guide, make sure parameters exist in VRChat.

Matching parameters shown, but no haptics

  1. Check the value - if it's not 0.0 to 1.0, confirm VRC Contact Receiver's Receiver Type is set to Proximity.
    • If incorrectly set up as Constant Receiver Type, the Value might show up as True.
  2. Check Haptic settings and set Proximity Pattern to Linear, maximum to 80 or higher.
    • It might be vibrating, but too weak for you to feel.
  3. Re-try the Identify button, in case the haptics connection got loose.

At this point, you might also check the OSC avatar JSON file in the VRChat AppData OSC folder.

⚠️ **GitHub.com Fallback** ⚠️