README.md

April 2, 2026 · View on GitHub

really cool frickin logo

demo video - https://www.youtube.com/watch?v=qEZXpI9APYk

(YOU CAN FIND OUT WHAT TOYS ARE ON SUPPORTED ON INTIFACE IN THIS INDEX) https://iostindex.com/?filter0Availability=Available,DIY&filter1ButtplugSupport=4 612 Confirmed devices and counting

If anyone has any questions or help on setting this up. Send me a dm on discord 420goonpig

AnalBeats is a small Rust app that connects Beat Saber (through BSDataPuller) to Intiface/Buttplug toys. It runs a local web dashboard where you can:

- see connection status

- pick a toy for hit and miss reactions (You can have different toys for each reaction, or use the same toy)

- set mode/intensity/duration/cooldown

- test hit/miss reactions

- save config

## What you need

- Windows!!

- [Rust](https://www.rust-lang.org/tools/install)

- [Intiface Central](https://intiface.com/central/)

- Beat Saber with BSDataPuller on your headset/PC setup (IDK IF OCCULUS WILL WORK IM TO LAZY TO TEST BUT SHOULD??)

- a buttplug.io supported toy

## How do I get the datapuller plugin for beatsaber???

https://github.com/Zagrios/bs-manager

Get version 1.36.2 (Or any other version that has DataPuller in the BS manager)

donezo

(Im sure there is newer websocket plugins but thats the one I used. If you used a different one, change the url and verify that the names for the stuff is still right)

## Run locally

git clone https://github.com/Blu3Be4ry/AnalBeats.git

cd AnalBeats

cargo run

Open:

- http://127.0.0.1:3030

Project layout

- src/main.rs – backend server + DataPuller listener + Buttplug control

- frontend/index.html – dashboard page

- frontend/app.js – dashboard logic

- frontend/style.css – dashboard 💅styles⭐

- config.example.json – example config

config.json is created locally when you run the app. If not, I fucked up. Try renaming config.example to config

JUST TO VERIFY!

1. Start Intiface Central

2. Connect your device(s) in Intiface

3. Start Beat Saber + BSDataPuller

4. Start AnalBeats

5. In the dashboard:

- verify DataPuller websocket URL

- select toy for hit

- select toy for miss

- click Save Config

- test hit/miss buttons

## DataPuller URL

Default:

- ws://127.0.0.1:2946/BSDataPuller/LiveData

(reminder that there is also /MapData if you want to add other detections)

If Beat Saber is on Quest and your PC is reading over LAN, use:

- ws://<QUEST\_IP>:2946/BSDataPuller/LiveData

Dont ask me how you get the ip idfk

## Notes

- Toy selection is strict. If the selected toy is missing/disconnected, reactions fail until fixed.

- Rotate mode only works on toys that support rotate.

- If a mode is unsupported by your toy, test will return an error in the log.

## Troubleshooting

### Dashboard stuck on Loading

- Check that frontend/app.js exists

- Hard refresh browser (Ctrl+F5)

- Open http://127.0.0.1:3030/api/status and confirm DataPuller is exposing himself...

### No toys in dropdown

- Make sure Intiface is running

- Make sure device is connected in Intiface (not just powered on)

### Hit/Miss test say toy is missing

- Re-select toy in dropdown

- Save config!!!!!!

- Make sure that toy is still connected

### Rotate does fuck all

- Toy likely does not support rotate

- Try vibrate or oscillate mode idk