A cross-platform desktop application that bridges OSC (Open Sound Control) and MIDI protocols. Very much written with a lot of help from AI, but this is tested and will be actively maintained, and we use it #dogfooding.
We made this because we were sad osculator went away. RIP.
Download the appropriate file for your system from the latest release. Releases
Download the macos-arm file. After downloading, right-click the app and select "Open". If that doesn't work, go to System Settings > Privacy & Security and click "Open Anyway" next to the blocked app message. Apple code signing is coming soon.
Download the macos-intel file. Follow the same steps as above to allow the app to run.
Download the windows installer and run it. Windows may show a SmartScreen warning—click "More info" and then "Run anyway".
Download the linux AppImage or deb file. For AppImage, make it executable with chmod +x and run it. For deb, install with your package manager.
Note
I only currently have a Mac with an ARM processor easily available. Please open an issue if it doesn't work on your OS. I am new to the whole desktop app game. But it is fast.
credit Joel Wetzell
In the top right corner, there's a settings icon. Click on that to open it.
Important
You cannot change the settings while the app is running. Please click stop to edit the settings.
The app can receive and send osc via tcp or udp. The TCP implementation uses SLIP to frame it. This is a part of the 1.1 spec of osc and is supported by apps like Qlab and ETC EOS.
Incoming
The app listens to all available interfaces by binding to 0.0.0.0.
| Name | Example | Notes |
|---|---|---|
| Listen Port | 53000 |
This value must be between 1024 and 65535 |
| Listen Protocol | UDP |
This is where you select what port the app should listen to. |
Outgoing
The outgoing section sets where the app sends the osc when doing MIDI -> OSC maps.
| Name | Example | Notes |
|---|---|---|
| Send IP | 192.168.100.12 |
This must be a valid ip address |
| Send Port | 8000 |
The port that the app should send to |
| Send Protocol | TCP |
The transport protocol to use |
The app can send and listen to one MIDI source. If you don't see your source, click Refresh Devices above the construction dino to reload the lists.
This option allows the app to open on computer startup. This is useful for shows where you want your show computer to launch all it's applications it needs without an operator having to do that manually
When you open the app, it will automatically start running the engine. This means that all mapping functions will be engaged.
After you've set the settings you like go ahead and click Start. The app will say running.
Click + Add Mapping at the bottom of the app. This is the juice of the app. It allows you to select MIDI -> OSC or OSC -> MIDI and select an address.
MIDI
MIDI can listen to specific channel/velocity combinations or ignore velocity with Vel Any. Right now the available values are Note On, Note Off, CC, and Program Change messages. You also must specify a channel to listen to. MIDI values can also be mapped to OSC Args via the dropdown after adding an arg.
OSC
OSC can listen to specific addresses. It can also map float args to midi values 0-1.0 -> 1-127. You can also specify a static output for the MIDI value. Additionally, you can add as many args as you like. They'll show up in the sent osc message like this /address/yay arg arg arg.
- Rust toolchain (install via rustup)
- Node.js 18+
- npm 9+
Linux additional deps:
sudo apt-get install -y libgtk-3-dev libwebkit2gtk-4.1-dev \
libappindicator3-dev librsvg2-dev patchelf libasound2-devnpm install
npm run tauri devnpm run tauri build# Frontend tests
npm test
# Lint
npm run lint
# Type check
npm run typecheck
# Rust tests
cd src-tauri && cargo test --workspacesrc/ # React frontend (TypeScript)
components/ # UI components (shadcn/ui)
hooks/ # State management hooks
lib/ # Utilities (MIDI, events)
types.ts # Shared type definitions
src-tauri/ # Rust backend
src/
lib.rs # App entry, command registration
commands/ # IPC command handlers
router.rs # Message routing/matching engine
osc_engine.rs # OSC listener + sender (UDP/TCP)
midi_engine.rs # MIDI I/O (midir)
models.rs # Shared data types
config.rs # Settings persistence (JSON)
state.rs # Application state


