Custom OSC Action
Send fully customized OSC (Open Sound Control) messages to any application, address, and port. Perfect for advanced integrations beyond VRChat or when you need fine-grained control over OSC communication.
What You Need
- An application that receives OSC messages
- Knowledge of the OSC address you want to target
- The port number the application listens on
- Understanding of the value type required (String, Float, Int, Bool)
Quick Start
- Identify your target OSC address and port
- Create or edit an alert
- Add the Custom OSC Message action
- Enter OSC address (e.g.,
/avatar/parameters/MyParam) - Select value type (String, Float, Int, Bool)
- Enter the value to send
- Optionally set remote address and port (defaults: 127.0.0.1:9000)
- Save and test
Configuration interface screenshot will be added here.
Configuration Options
OSC Address
OSC Address
- The OSC address path to send to
- Always starts with
/ - Example:
/avatar/parameters/MyParam - Case-sensitive
- Required field
OSC addresses use path-like syntax:
/avatar/parameters/Param1/filter/cutoff/1/fader1
Check your target application's documentation for valid addresses.
Value Configuration
Value Type
- The data type of the value you're sending
- Options:
- String: Text (e.g., "hello", "{username}")
- Float: Decimal number (e.g., 1.5, 0.75)
- Integer: Whole number (e.g., 1, 100, -5)
- Boolean: true/false
- Required field
- Must match what receiving application expects
Value
- The actual value to send
- Type depends on Value Type selection:
- String: Any text, supports placeholders
- Float: Decimal number (e.g., 1.0, 0.5, -2.75)
- Integer: Whole number (e.g., 1, 50, -10)
- Boolean: true or false
- Required field
- Supports dynamic placeholders (e.g.,
\{username\},\{amount\})
Use placeholders for dynamic content:
\{username\}- Viewer name\{amount\}- Tip/sub amount\{message\}- Viewer message- Works with String, Float, and Int types
Network Configuration
Remote Address
- IP address of the target machine
- Default:
127.0.0.1(localhost) - Use for local applications
- Or enter IP for networked devices
- Optional (uses default if empty)
Remote Port
- UDP port the target listens on
- Default:
9000 - Common OSC ports: 9000, 8000, 7000
- Check application documentation
- Optional (uses default if empty)
Local Port (Optional)
- Port for TipLink to listen on (for two-way OSC)
- Leave empty for send-only mode (recommended)
- Only needed if target sends responses back
- Most use cases don't need this
Most alert actions only need to send OSC messages. Leave Local Port empty unless your application requires two-way communication.
Setup Guide
Basic Setup
-
Identify Target Information
- Application name (e.g., TouchOSC, Max/MSP, VRChat)
- OSC address (e.g.,
/1/fader1) - Value type required
- Port number (check app settings)
-
Create Alert
- Navigate to Alerts
- Create new or edit existing
- Set trigger conditions
-
Add Custom OSC Action
- Actions → Add Action
- Select "Send Custom OSC Message"
-
Configure Message
- OSC Address:
/your/address - Value Type: Select appropriate type
- Value: Enter your value
- Leave network defaults (127.0.0.1:9000) if local
- OSC Address:
-
Test
- Save alert
- Trigger while target app is running
- Verify message received
VRChat Custom Parameters
To send to VRChat (alternative to built-in VRChat action):
- OSC Address:
/avatar/parameters/MyParameter - Value Type: Bool (or Float/Int depending on parameter)
- Value:
trueor1 - Remote Port:
9000(default) - Remote Address:
127.0.0.1(default)
TouchOSC Integration
For controlling TouchOSC:
-
Find TouchOSC port
- Check TouchOSC → Connections settings
- Default often 9000 or 8000
-
OSC Address:
/1/fader1(or your control's address) -
Value Type: Float
-
Value:
0.75(0.0 to 1.0 range) -
Remote Port: Your TouchOSC port
Max/MSP Integration
For Max/MSP patches:
-
Setup udpreceive in Max
- Add
udpreceive 9000object - Add
route /your/addressobject
- Add
-
Configure TipLink
- OSC Address:
/your/address - Value Type: Match your Max patch
- Remote Port:
9000
- OSC Address:
Networked OSC Device
For OSC devices on your network:
-
Find device IP
- Check device network settings
- Example:
192.168.1.100
-
Configure TipLink
- OSC Address: As per device docs
- Remote Address: Device IP (e.g.,
192.168.1.100) - Remote Port: Device port
- Ensure firewall allows UDP traffic
Common Use Cases
VRChat Alternative
- Address:
/avatar/parameters/EmoteTrigger - Type: Bool
- Value:
true - Use when built-in VRChat action doesn't fit
Audio Software Control
- Address:
/track/1/volume - Type: Float
- Value:
0.8(80% volume) - Control DAW or audio mixer
Lighting Control
- Address:
/lights/color/hue - Type: Int
- Value:
\{amount\}(maps tip to hue) - Control smart lights or DMX
Game Integration
- Address:
/game/spawn/item - Type: String
- Value:
sword - Trigger game events
Visual Effects (Resolume)
- Address:
/layer1/clip1/connect - Type: Bool
- Value:
true - Trigger video clips
Physical Device Control
- Address:
/device/servo/angle - Type: Int
- Value:
90 - Control Arduino/ESP32 with OSC
Custom Chat Bot
- Address:
/bot/command - Type: String
- Value:
!shoutout \{username\} - Send commands to custom bot
Troubleshooting
Message not received
- Verify target application is running
- Check port number is correct
- Confirm firewall isn't blocking UDP
- Test with OSC monitor tool
- Verify address format (must start with
/)
Wrong value received
- Check value type matches expectation
- Float vs Int: 1.0 vs 1
- String vs others: quotes not needed
- Verify placeholder expansion worked
Connection issues (networked)
- Ping remote IP to verify connectivity
- Check both machines on same network
- Verify UDP port forwarding if needed
- Firewall may block UDP traffic
Address not found
- OSC addresses are case-sensitive
- Check for typos or extra spaces
- Verify address exists in target app
- Some apps require specific formatting
Local port conflicts
- Only use Local Port if truly needed
- Port may be in use by another app
- Leave empty for send-only mode
- Check with
netstat -an | findstr :PORT(Windows)
Placeholder not working
- Verify placeholder syntax:
\{username\}notusername - Check placeholder is supported for trigger type
- Works with String, Float, Int (not Bool)
- Float/Int placeholders convert to numbers
Best Practices
Address Naming:
- Use clear, descriptive paths:
/game/player/health - Follow target app's convention
- Case-sensitive - be consistent
- Avoid spaces and special characters
Value Types:
- Match exactly what receiver expects
- Float: Always include decimal (1.0 not 1)
- Int: Whole numbers only
- Bool:
true/falseor1/0 - String: For text or complex data
Network Configuration:
- Use localhost (127.0.0.1) when possible
- Only set Remote Address for networked devices
- Leave Local Port empty unless needed
- Document your port assignments
Testing:
- Use OSC monitor tool (e.g., Protokol, OSC Monitor)
- Test with simple static values first
- Add dynamic placeholders after basic test works
- Verify with target application's feedback
Performance:
- OSC messages are lightweight
- Safe to send frequently
- No artificial delays needed
- Rate limiting depends on receiver
Documentation:
- Document your OSC addresses
- Note expected value ranges
- Keep list of used ports
- Track which apps use which addresses
Technical Reference
OSC Protocol:
- Protocol: UDP (User Datagram Protocol)
- Default Port: 9000 (customizable)
- Message Format: Binary OSC format
- Transport: IP network (local or remote)
Address Format:
- Must start with
/ - Path-like structure
- Case-sensitive
- No wildcards in sending
- Example:
/category/subcategory/parameter
Value Type Details:
- String (s): UTF-8 text, null-terminated
- Float (f): 32-bit floating point
- Integer (i): 32-bit signed integer
- Boolean (T/F): OSC true/false tag
Network Details:
- Protocol: UDP (unreliable, fast)
- IP: IPv4 (IPv6 not currently supported)
- Broadcast: Not supported (unicast only)
- Multicast: Not supported
Message Structure:
OSC Address: /path/to/parameter
Type Tag: ,s (string) or ,f (float) or ,i (int) or ,T/F (bool)
Value: [your value]
Port Ranges:
- Well-known: 0-1023 (avoid)
- Registered: 1024-49151 (common for OSC)
- Dynamic: 49152-65535 (avoid)
- Common OSC: 7000, 8000, 9000, 9001
Placeholders:
- Processed before sending
- Type conversion automatic for Float/Int
- String: No conversion needed
- Bool: No placeholder support (static only)
Send-Only Mode:
- Default behavior (no Local Port)
- TipLink sends messages
- Doesn't listen for responses
- Most efficient for alerts
Two-Way Mode:
- Set Local Port to enable
- TipLink listens for incoming messages
- Rarely needed for alert actions
- Adds overhead
Error Handling:
- No delivery confirmation (UDP)
- Fails silently if receiver offline
- Logs errors to TipLink console
- No automatic retry
Performance:
- Message send: < 1ms overhead
- Network latency: 10-50ms (local), 50-200ms (network)
- No rate limiting on send
- Receiver may have rate limits
Compatibility:
- OSC 1.0 specification
- Compatible with all OSC-capable software
- No special codecs or extensions
- Standard binary format