A lightweight proxy that bridges grandMA3 OSC communication to work with standard OSC 1.1 implementations, solving critical compatibility issues with third-party software.
📡 Although OSC 1.1 is claimed to be supported, MA3 software does not implement SLIP framing for OSC messages over TCP.
💥 Currently, the destination IP is mandatory, forcing users to configure both a TCP server and client to avoid system monitor errors.
🧩 This is unnecessarily complex, considering TCP natively supports bidirectional communication over a single connection.
💡 Ideal behavior:
- If destination IP is not set, the console should still accept incoming TCP connections.
- If destination IP is set, the console can attempt to connect outwards.
- ✅ Once any connection is established, no further system errors should appear, regardless of client/server roles.
This proxy provides a practical workaround for both issues, easing integration and reducing config headaches by:
- Converting OSC messages to proper OSC 1.1 format with SLIP framing
- Enabling bidirectional communication over a single TCP connection
- Supporting both client and server modes for flexible deployment scenarios
- Deno runtime installed
-
Clone the repository:
git clone https://github.com/LightYourWay/grandMA3-tcp-osc-proxy.git cd grandMA3-tcp-osc-proxy
-
Run directly with Deno:
# Server mode (proxy listens for connections) deno task start server <MA3-IP> <MA3-Port> <Local-Server-Port> # Client mode (proxy connects to remote server) deno task start client <MA3-IP> <MA3-Port> <Remote-Server-IP> <Remote-Server-Port>
Start the proxy as a server that your OSC application can connect to:
deno task start server 192.168.1.100 8000 9000
- Connects to MA3 at
192.168.1.100:8000
- Listens for OSC clients on port
9000
Start the proxy as a client that connects to your OSC server:
deno task start client 192.168.1.100 8000 192.168.1.200 9000
- Connects to MA3 at
192.168.1.100:8000
- Connects to your OSC server at
192.168.1.200:9000
For development with auto-reload:
deno task dev
Enable detailed logging:
deno task start --verbose server 192.168.1.100 8000 9000
Build standalone executables for different platforms:
# Build for all platforms
deno task build
# Or build for specific platforms
deno task build:win # Windows x86_64
deno task build:macos:arm64 # macOS Apple Silicon
deno task build:macos:x86_64 # macOS Intel
deno task build:linux:arm64 # Linux ARM64
deno task build:linux:x86_64 # Linux x86_64
Executables will be created in the dist/
directory.
The proxy consists of several key components:
Proxy
- Main orchestrator that manages connections between MA3 and remote endpointsMA3
- Handles connection and communication with grandMA3 consoleServer
- TCP server implementation for accepting client connectionsClient
- TCP client implementation for connecting to remote serversOSCEncoder
/OSCDecoder
- Handles OSC message format conversion
[Third-party OSC App] ←→ [Proxy] ←→ [grandMA3]
↑
Converts between
OSC 1.0 ↔ OSC 1.1
--verbose, -v
- Enable detailed logging output--help
- Show help information--version
- Show version information
ma3-tcp-osc-proxy server <MA3-IP> <MA3-Port> <Local-Server-Port>
- MA3-IP: IP address of the grandMA3 console
- MA3-Port: OSC port on the grandMA3 console (typically 8000-8015)
- Local-Server-Port: Port for the proxy to listen on
ma3-tcp-osc-proxy client <MA3-IP> <MA3-Port> <Remote-Server-IP> <Remote-Server-Port>
- MA3-IP: IP address of the grandMA3 console
- MA3-Port: OSC port on the grandMA3 console
- Remote-Server-IP: IP address of your OSC server
- Remote-Server-Port: Port of your OSC server
Contributions are welcome! Please feel free to submit a Pull Request.
This project is licensed under the MIT License - see the LICENSE file for details.
- 🔗 Full Changelog: GitHub v0.1.0 Commits
- 🐛 Report Issues: GitHub Issues
- 📖 grandMA3 OSC Documentation: MA Lighting Documentation
Built with Deno 🦕