Version 2.0 — Routes VRChat proximity OSC to GiggleTech haptic hardware, with optional device online status back to your avatar.
| File | Purpose |
|---|---|
| config.yml | Device IPs, VRChat parameters, speeds, and global setup |
| GiggleTech.exe | OSC router and settings window (system tray) |
| Giggletech_OSCQuery_Installer.exe | OSCQuery helper — discovers VRChat’s OSC listen port when using OSCQuery mode |
Logs are written to giggletech_log.txt beside the executable.
- Put your GiggleTech device on Wi‑Fi and note its IP.
- Install the OSCQuery helper (if you use
OSCQueryforport_rx). - Run GiggleTech.exe and keep it open while in VRChat.
The router listens for VRChat OSC (proximity, max speed, etc.), drives motors over UDP, and can report whether each device is reachable back to VRChat avatar parameters.
- Power on: 3 quick blinks.
- Normal: 3 blinks, 3 buzzes, then LED off (lights on pat commands).
- Configuration mode: Solid LED.
- Power the device (3 blinks).
- Unplug and plug back in — LED stays solid (configuration mode).
- Join Giggletech_haptics (password: giggletech).
- Open
http://192.168.4.1if your phone does not open the portal automatically. - Choose your network and enter the Wi‑Fi password.
- DHCP (recommended): Leave “Use static IP” unchecked, then Save.
- Static IP: Set IP, gateway, and subnet manually.
After saving, power-cycle the device. Three blinks and three buzzes mean it joined the network.
- Browse to
http://giggletech.local(requires Bonjour on Windows if.localdoes not resolve), or - Check your router’s DHCP client list, or
- Use the Ping button in the GiggleTech settings window once the router is running.
- Download the latest release from the GiggleTech GitHub.
- Run Giggletech_OSCQuery_Installer.exe if you plan to use
port_rx: OSCQueryin config (recommended for VRChat). - Launch GiggleTech.exe. A settings window and tray icon appear; the router starts automatically.
In the settings window header, click VR MODE to switch to a larger layout (wider panels, bigger controls) for use inside a headset. The choice is saved in the window and restored on next launch. Click again to return to normal size.
Each device card shows a status pill (Online, Offline, or Checking) updated about every 5 seconds via network ping. Use Ping on a device to refresh immediately. This is independent of VRChat; it only reflects whether the hardware answers on the LAN.
The router reads config.yml from (in order): the current working directory, giggletech-router/config.yml, or the folder containing GiggleTech.exe.
devices:
- name: Headpats
ip: 192.168.1.69
proximity_parameter: proximity_01
online_parameter: HeadpatsOnline
max_speed: 18
use_velocity_control: true
velocity_on_prox_drop: true
outer_proximity: 0.13
velocity_scalar: 22
velocity_smoothing_ms: 145
- ip: 192.168.1.70
proximity_parameter: proximity_02
online_parameter: Dev2Online
max_speed: 22
use_velocity_control: false
setup:
port_rx: OSCQuery
default_min_speed: 5
default_max_speed: 25
default_start_tx: 20
default_max_speed_parameter: max_speed
timeout: 5
default_use_velocity_control: true
default_velocity_on_prox_drop: false
default_outer_proximity: 0.0
default_inner_proximity: 1.0
default_velocity_scalar: 20
default_velocity_smoothing_ms: 80
online_status_broadcast_seconds: 0| Key | Description |
|---|---|
port_rx |
OSCQuery (use VRChat’s discovered port) or a fixed UDP port string, e.g. "9001" |
default_min_speed / default_max_speed |
Default motor power range as percent (5–100) for devices that omit max_speed |
default_start_tx |
Starting motor level when a pat begins (device TX scale) |
default_max_speed_parameter |
VRChat parameter name (without prefix) for global max speed, default max_speed |
timeout |
Seconds without proximity OSC before the motor is stopped for that device |
default_use_velocity_control |
Default: velocity-based haptics vs raw proximity level |
default_velocity_on_prox_drop |
Default: also fire on pull-away when velocity mode is on |
default_outer_proximity / default_inner_proximity |
Velocity band edges (0.0–1.0) |
default_velocity_scalar |
Velocity sensitivity (typical 1–100) |
default_velocity_smoothing_ms |
EMA smoothing for velocity (milliseconds) |
online_status_broadcast_seconds |
0 = send online OSC only when ping state changes. > 0 = also resend every N seconds (useful for debugging avatar parameters) |
| Key | Required | Description |
|---|---|---|
ip |
Yes | Device IP on your LAN |
proximity_parameter |
Yes | VRChat parameter name only, e.g. proximity_01 → /avatar/parameters/proximity_01 |
online_parameter |
No | VRChat Bool parameter for reachability, e.g. HeadpatsOnline → /avatar/parameters/HeadpatsOnline |
name |
No | Label in the settings UI (first device defaults to “Headpats” if empty) |
max_speed |
No | Power cap %; uses default_max_speed if omitted |
speed_scale |
No | Extra scale 0–100% |
max_speed_parameter |
No | Per-device max-speed VRChat parameter |
use_velocity_control |
No | Overrides default_use_velocity_control |
velocity_on_prox_drop |
No | Overrides default pull-away behavior |
outer_proximity / inner_proximity |
No | Velocity band; inner must be greater than outer |
velocity_scalar |
No | Overrides default velocity sensitivity |
velocity_smoothing_ms |
No | Overrides default smoothing |
Use null in YAML for optional fields you want to leave unset.
Note: The settings UI edits IP, proximity, power, and velocity fields.
online_parameterandonline_status_broadcast_secondsare edited inconfig.ymldirectly so they are not cleared when you save from the window.
When online_parameter is set for a device, the router periodically pings that device’s IP. It sends a boolean OSC message to VRChat at 127.0.0.1:9000 (VRChat’s default OSC port):
true— device responded to ping (online on LAN)false— device did not respond (offline or wrong IP)
When a device comes online, the router briefly sends false then true so VRChat registers a clean transition on Bool parameters.
- In your avatar’s OSC or parameters setup, add a Bool parameter whose name matches
online_parameter(e.g.HeadpatsOnline). - Use that parameter in Animator or menu logic (e.g. hide props, show “device disconnected”, gate haptics).
- Ensure OSC is enabled in VRChat and the router is running on the same PC as VRChat.
State changes are logged in the router window, e.g. /avatar/parameters/HeadpatsOnline true.
- Open GiggleTech.exe and confirm devices show Online after ping (fix IP or Wi‑Fi if not).
- Optionally run giggletech_vrc_simulator.exe to emulate VRChat OSC without launching the game.
- In VRChat, verify proximity parameters move your hardware and, if configured, online parameters update when you power a device off or on.
GiggleTech must stay running while you play so proximity OSC is forwarded and online status is updated.
For help, use the GiggleTech Discord or support email from the release page.
- New UI
- Graceful handling when devices are offline (no crash on unreachable networks)
- Background ping monitoring and optional VRChat online OSC per device
- Connection manager for UDP to hardware with improved error logging
- More reliable OSCQuery startup with fallback to port
9001 - VR mode UI scaling in the settings window
See change_log.txt for earlier releases (velocity control, YAML config, motor start speed, etc.).
For custom tools or non-VRChat use, you can send OSC directly to the hardware.
- GiggleTech hardware (GigglePuck, GiggleSpark, etc.)
- An OSC-capable language or tool
- Same LAN as the device
| OSC address | Description | Devices |
|---|---|---|
/motor |
Motor intensity 0–255 (integer) |
GigglePuck, GiggleSpark |
Default UDP port: 8888.
Values are scaled by 0.66 for motor safety (5 V vs 3.3 V design):
Effective output ≈ 0.66 × input (0–255)
Example: input 255 → effective 168.
If OSC stops, the motor holds the last value until a new message arrives; resend periodically if you need a heartbeat.
| Issue | What to check |
|---|---|
| No motor response | IP, port 8888, path /motor |
| Stale behavior | Resend values; verify Wi‑Fi and device online |
| Issue | What to check |
|---|---|
| No haptics in VRChat | Router running; port_rx matches VRChat (try OSCQuery); proximity parameter names match avatar |
| Device always offline in UI | Wrong IP; device asleep; PC firewall blocking ping |
| Online parameter never changes | online_parameter set in YAML; Bool parameter exists on avatar; VRChat OSC on; same PC as router |
| Config errors on start | YAML syntax; required ip and proximity_parameter per device; see giggletech_log.txt |