Control OBS recording and streaming directly from your VRChat avatar's expression menu — no external apps required.
[VRChat Avatar Menu] ──OSC UDP:9001──▶ [OBS Plugin] ──OSC UDP:9000──▶ [VRChat]
(OBS Control submenu) (this repo) (state sync-back)
The OBS plugin listens for OSC messages from VRChat and calls the OBS recording/streaming API directly. It also sends the current OBS state back to VRChat so your avatar toggles stay in sync.
OBSController/
├── obs-plugin/ # Native OBS C++ plugin (Windows x64)
│ ├── src/
│ │ ├── plugin-main.cpp # Module entry point, OSC handler, frontend events
│ │ ├── osc-server.cpp/h # Winsock2 UDP OSC receiver
│ │ ├── osc-sender.cpp/h # UDP OSC sender (state sync-back to VRChat)
│ │ └── settings-dialog # Qt6 settings panel (Tools menu)
│ └── CMakeLists.txt
├── unity-prefab/
│ └── OBSController.unitypackage # Import into your Unity avatar project
└── nodejs-receiver/ # Legacy Node.js bridge (superseded by obs-plugin)
- OBS Studio 32.x (Windows x64, Steam or standalone)
- VRChat SDK3 (Avatars) + Modular Avatar ≥ 1.9
- Unity 2022.3.x LTS
- Download
obs-osc-controller.dllfrom the latest release - Copy it to
<OBS install>\obs-plugins\64bit\ - Restart OBS
The plugin adds an OBS OSC Controller entry under Tools. Default ports:
| Port | Direction | Purpose |
|---|---|---|
| 9001 | VRChat → OBS | Receive OSC commands |
| 9000 | OBS → VRChat | Send state sync-back |
- Open your avatar project in Unity 2022.3.x
- Ensure VRChat SDK3 Avatars and Modular Avatar ≥ 1.9 are installed
- Assets → Import Package → Custom Package → select
OBSController.unitypackage - Drag
Assets/OBSController/OBSControllerprefab onto your avatar root in the Hierarchy - Build & upload the avatar
The prefab adds an OBS Control submenu to your expression menu with two toggles: OBS Recording and OBS Streaming.
Quick Menu → Options → OSC → Enable
| Action | Effect |
|---|---|
| Toggle OBS Recording ON | Starts OBS recording |
| Toggle OBS Recording OFF | Stops OBS recording (after 3 s debounce) |
| Toggle OBS Streaming ON | Starts OBS streaming |
| Toggle OBS Streaming OFF | Stops OBS streaming (after 3 s debounce) |
| Start/stop recording in OBS manually | Avatar toggles sync back within ~1 s |
The 3-second debounce prevents VRChat's parameter re-broadcast from immediately cancelling a just-started recording.
Requires Visual Studio 2022 Build Tools and CMake.
cd obs-plugin
# Download OBS headers + Qt6 deps (see _build_deps/README if present)
cmake -B build -G "Visual Studio 17 2022" -A x64 `
-DOBS_INCLUDE_DIR=... -DOBS_FRONTEND_INCLUDE=... `
-DOBS_LIB=... -DOBS_FRONTEND_LIB=... `
-DCMAKE_PREFIX_PATH=_build_deps/qt6
cmake --build build --config Release| Address | Type | Direction |
|---|---|---|
/avatar/parameters/OBS_Record |
bool | VRChat → OBS (command) |
/avatar/parameters/OBS_Stream |
bool | VRChat → OBS (command) |
/avatar/parameters/OBS_Record |
bool | OBS → VRChat (state sync) |
/avatar/parameters/OBS_Stream |
bool | OBS → VRChat (state sync) |
MIT — see LICENSE
Third-party components: see ATTRIBUTION.md