VRChat OSC

The VRChat OSC plugin lets flows react to your VRChat avatar (parameters, Contacts, and PhysBones) and send OSC messages and chatbox text back to VRChat. This page describes version 1.3.0. Install it from Manage plugins → Browse. See how nodes work for how to read the node diagrams.

Setup

Plugin pages are hidden from the sidebar until you turn them on; see showing a plugin's pages.

  1. In VRChat, turn on OSC from the Action Menu: Options → OSC → Enabled.
  2. In MultiShock, open Manage plugins and click Configure on VRChatOSC. The defaults work for VRChat running on the same computer:
    • VRChat Remote Host 127.0.0.1 and VRChat Receive Port (send target) 9000 are where MultiShock sends.
    • Local Receive Port 9001 is where MultiShock listens. With Use any available local receive port on, it picks a free port if 9001 is taken and advertises it over OSCQuery.
    • Enable OSCQuery advertisement and discovery and Prefer OSCQuery discovered VRChat endpoint let MultiShock find VRChat automatically.
  3. Leave Enable plugin and Auto-start connection on app startup on, then click Save. Use Start and Stop to control the connection by hand.

Saving while Auto-start connection on app startup is off stops the connection, so click Start afterwards if you want it running.

The VRChatOSC page in the sidebar shows the connection status, the active send target, a form to send a test message, and a log of incoming messages. "Connected" means MultiShock's sockets are open, not that VRChat is running, so use the incoming message log to confirm VRChat is talking to it.

Triggers

Each OSC message VRChat sends fires the matching triggers once. Bundles are split into their individual messages.

OSC Message Received

Fires for OSC messages from VRChat, optionally filtered by address.

OSC Message ReceivedTriggeredAddressArgument CountFirst ArgumentArguments JSONTimestamp (UTC)Context
Outputs
TriggeredFlow
AddressString
For example /avatar/parameters/MyParam.
Argument CountNumber
First ArgumentString
The first argument as text. Booleans read True or False.
Arguments JSONString
All arguments as a JSON array.
Timestamp (UTC)String
When MultiShock received the message, in ISO 8601 format.
ContextString
Where the message came from and the port it arrived on.
Properties
Address Filter
The address to match. Empty matches every message.
Match Mode
Any, Exact, Contains, or OSC Pattern. Default Any, which matches everything.
Case Sensitive
Default off.

OSC Pattern supports OSC wildcards such as /avatar/parameters/*. An invalid pattern never matches.

Avatar Parameter Changed

Fires when an avatar parameter changes, including Contact and PhysBone parameters.

Avatar Parameter ChangedTriggeredParameter NameValueValue (Bool)Value (String)Changed
Outputs
TriggeredFlow
Parameter NameString
ValueNumber
Booleans read 1 or 0.
Value (Bool)Boolean
Value (String)String
ChangedBoolean
True when the value differs from the previous one.
Properties
Parameter Name
The name after /avatar/parameters/, matched exactly including capitalization. Empty matches any parameter.
Condition
Any change, Value changed, Becomes true, Becomes false, Equals value, Greater than value, or Less than value. Default Any change.
Compare Value
Used by the equals, greater than, and less than conditions. Default 0.

The node remembers the last value it saw, and the first message after the flow starts counts as a change. The edge conditions (Value changed, Becomes true, Becomes false) work best with a specific Parameter Name. Equals value allows a difference of up to 0.0001.

Contact / PhysBone Touched

Fires when a Contact receiver or PhysBone parameter starts or stops being touched.

Contact / PhysBone TouchedTriggeredParameter NameIs TouchedValue
Outputs
TriggeredFlow
Parameter NameString
Is TouchedBoolean
ValueNumber
Properties
Parameter Name
Required. The Contact or PhysBone parameter, such as MyContact or pb_IsGrabbed.
Fire On
Touch (grab start), Release (let go), or Both. Default Touch.
Threshold
Proximity contacts send 0 to 1. At or above this value counts as touched. Default 0.5.

This trigger never fires while Parameter Name is empty. The name must match exactly, including capitalization.

Actions

Both actions continue through Done even when sending fails. Check Success, and read Error for the reason, such as OSC is not connected.

Send OSC Message

Sends an OSC message to VRChat, for example to set an avatar parameter.

Send OSC MessageExecuteAddressArgumentsDoneSuccessErrorArgument Count
Inputs
ExecuteFlow
AddressString
Overrides the property when connected and not empty.
ArgumentsString
Overrides the property when connected and not empty.
Outputs
DoneFlow
SuccessBoolean
ErrorString
Argument CountNumber
Properties
Address
Default /avatar/parameters/MultiShock. A missing leading / is added.
Arguments
A JSON array, or comma-separated values. Default true.

Arguments can be a JSON array such as [true, 0.5, "text"], or comma-separated values such as true, 0.5. Comma-separated values become booleans, numbers, or text automatically; put text in quotes to keep it as text. At least one argument is required.

Send Chatbox Message

Shows a message in your VRChat chatbox.

Send Chatbox MessageExecuteMessageSend ImmediatelyNotifyDoneSuccessError
Inputs
ExecuteFlow
MessageString
Send ImmediatelyBoolean
NotifyBoolean
Outputs
DoneFlow
SuccessBoolean
ErrorString
Properties
Message
The chatbox text.
Send Immediately
Post the message right away instead of only filling the chatbox input. Default on.
Notify
Play VRChat's chatbox notification sound. Default off.

Connected inputs override the matching properties. The node does not shorten long messages, so keep them within VRChat's chatbox limit.

Contributors

Thank you to everyone who has helped improve this documentation.