Guide
From zero to your first note.
Installation, connecting devices, virtual MIDI ports and Ableton Live. Solutions to the most common problems at the end.
Installation
- Download the app for your system and install it on the computer with the MIDI ports, usually the one running your DAW.
- Start Omnithru (Start menu on Windows, Applications on macOS): it runs in the background and opens the home page in your default browser at
http://localhost:443. If that isn't Chrome or Edge, copy the address into one of them. - The first time, Windows or macOS asks you to confirm, because the app is not signed yet: see Security warnings.
- From the home page open Web Thru Box and allow access to MIDI devices.
Security warnings
Omnithru is made by an independent developer: the installers are not yet signed with a paid certificate, and the HTTPS certificate is created by Omnithru itself on your computer. That's why a few warnings appear. They are expected, and you only see most of them once.
| Where | What you see and what to do |
|---|---|
| Windows, first start | Windows protected your PC (SmartScreen): choose More info → Run anyway. |
| Windows, network | The installer lets phones and tablets connect only on private networks. If they can't connect, open Settings → Network & internet → your Wi-Fi (or the phone's hotspot) and choose Private network. |
| macOS, first start | Apple could not verify "Omnithru": press Done, then open System Settings → Privacy & Security and choose Open Anyway. If macOS asks whether Omnithru may accept incoming connections, choose Allow. |
| Phones and tablets | Your connection is not private (Chrome) or This connection is not private (Safari): choose Advanced → Proceed or Show details → visit this website. Once per device, and again if the computer joins a new network. |
| The computer itself | No warning: there Omnithru opens at http://localhost:443, which browsers treat as secure. |
Turning Omnithru off
Omnithru has no window: it runs in the background. To shut it down, press ⏻ on the home page; the button only appears on the computer running Omnithru. Starting Omnithru again while it is already running simply opens the home page.
Connecting devices
- Connect your phone or tablet to the same Wi-Fi as the computer.
- On Omnithru's home page on the computer, press the session button (usually called
default): a QR code and a link appear, with the computer's network address. - Scan the QR code with your phone's camera, or copy the link and open it in the browser.
- Accept the certificate warning if it appears, and pick a controller from the home page.
- A row for the new controller appears in the receiver: assign it an OUT port.
Every device that joins through the QR code is part of the same session: same receiver, same controllers, same theme.
You can open several controllers on the same device, in different tabs, even two of the same kind: they stay separate.
Virtual MIDI ports
A virtual MIDI port is a "cable" inside your computer: what one program writes to a port's output, another program reads from its input. Omnithru's receiver gets the senders' messages (Keyboard, XY Pad, GyroBall, Clip Launcher…) and forwards them to these ports; the DAW reads them as if they were real instruments.
Three rules for every system
- Create and name your ports before opening the receiver. The browser reads the list of ports when it starts. Some systems don't pass on added or removed virtual ports right away, and on a Mac the browser doesn't update the name of a port it has already seen until it restarts (see macOS). If you add a port during a session, use Rescan MIDI in the receiver: the page reloads and the senders' tables are cleared, so ports need to be assigned again.
- One port per sender, named after the sender:
Keyboard,XY Pad,GyroBall,Chord Wheel… That way you can tell which port is which in both the receiver and the DAW. - Two ports must never echo each other. If the receiver and the DAW read and write the same port, messages bounce back and forth endlessly. The wiring below exists to prevent exactly that.
Send-only senders
Keyboard, XY Pad, GyroBall, Chord Wheel and the others send notes or controls to the DAW: one output is enough.
| Ports | Receiver | DAW |
|---|---|---|
| loopMIDI or IAC one port, e.g. Keyboard | sender output → Keyboard | track MIDI input → Keyboard |
| Windows MIDI Services loopback A/B pair | sender output → A | track MIDI input → B |
In Windows loopbacks the two halves are cross-wired: what goes out of A arrives on B (and vice versa), so the DAW listens to the other half from the receiver.
Clip Launcher: both directions
The Clip Launcher talks both ways: it sends your taps to the DAW and receives the LED state back. So it needs a path there and a path back.
loopMIDI (Windows) and IAC Driver (Mac): two ports. Create two ports, for example ClipA and ClipB, and cross-wire them.
If you swap the ports in the receiver, swap them in Ableton too. The rule is: one side's output is the other side's input.
Windows MIDI Services loopback: one port, two endpoints. When you create a port, Windows makes two endpoints by itself, A and B, each with an input and an output.
You can also swap the letters (B in the receiver, A in Ableton), as long as they are never the same. With the same letter on both sides, messages bounce back.
Windows
- Windows 11 with Windows MIDI Services (included from 25H2): create the loopbacks in the Windows MIDI Services settings. Nothing else is needed.
- Windows 10 and Windows 11 versions without Windows MIDI Services: use loopMIDI. Create the ports, named after the senders, before opening the browser.
macOS
On a Mac, virtual ports are created with the IAC Driver, built into the system.
- Open Audio MIDI Setup and choose Window → Show MIDI Studio.
- Double-click IAC Driver and turn on Device is online.
- In the list of ports, add buses with + and give each one the name of a sender.
- Open the browser, then the receiver.
If something doesn't work
| Symptom | What to check |
|---|---|
| Messages bounce back or the DAW "goes crazy" | The receiver and the DAW use the same port or the same letter: one side's output must be the other side's input. |
| A port you just created doesn't appear | Create it before opening the receiver, or press Rescan MIDI. |
| A name doesn't update (Mac) | Quit the browser completely with Cmd+Q and open it again. |
| The Clip Launcher LEDs stay off | Confirm the Clip Launcher's ports again in the receiver; check that the css_omnithru surface in Ableton uses the right ports (cross-wired, or the other letter). |
| The browser sees no ports at all | Use Chrome or another Chromium-based browser and allow MIDI access when it asks. |
Ableton Live and Clip Launcher
The Clip Launcher talks to Ableton through the css_omnithru remote script.
- Download the remote script for your version of Live.
- Copy the folder into
MIDI Remote Scripts. On Windows:C:\ProgramData\Ableton\Live 12 Suite\Resources\MIDI Remote Scripts. On macOS: right-click Ableton Live in Applications → Show Package Contents →Contents/App-Resources/MIDI Remote Scripts. - Restart Live and open Settings → Link, Tempo & MIDI.
- In a free row choose Control Surface
css_omnithru, Input Loopback B and Output Loopback B. - In the receiver assign the Clip Launcher IN and OUT on Loopback A and confirm. The LEDs light up to match your set.
For the other controllers, enable Track and Remote on the input port in Ableton, then map parameters with MIDI Map Mode (Ctrl+M or Cmd+M).
Full screen
On tablets and phones a controller works better without the browser bars.
| Device | How |
|---|---|
| Android and iPad | Press the full screen button in the controller's bar. Changing page exits full screen: press it again. |
| iPhone | Safari and Chrome don't allow full screen for web pages: on iPhone, use the controllers in the browser. |
Themes
Choose from six themes on the home page: Dark, Light, High contrast, Neon, Retro and Pastel. The theme applies to every connected device, so on stage every screen looks the same.
Troubleshooting
My phone doesn't connect
Check that it is on the same Wi-Fi as the computer and that the address starts with https://. Some guest networks isolate devices from each other: use the main network instead.
On Windows the network must be private: a phone hotspot is often set as public. See Security warnings. On macOS, if the firewall asks about Omnithru, choose Allow.
The receiver doesn't see my MIDI port
Create the port before opening the receiver, or press Rescan MIDI. If the port is virtual, check that the program creating it is running. If you renamed a port on a Mac, quit the browser completely (Cmd+Q). The receiver works in Chrome and Chromium-based browsers (Edge, Brave…).
Messages bounce back or notes repeat
It is almost always the wiring: receiver and DAW on the same loopback port. With the Windows loopback put the receiver on A and the DAW on B; with loopMIDI or IAC the output of one port must be the input of the other (ClipA/ClipB), as in the diagram.
The Clip Launcher pads don't light up
Check that the control surface in Ableton is css_omnithru with the right ports as in the diagram (Windows loopback: Input and Output on port B; loopMIDI or IAC: Input ClipB and Output ClipA), and that the Clip Launcher has both IN and OUT in the receiver. Confirm the ports again in the receiver: Ableton sends all the LEDs back.
The Clip Launcher says it is already active
Each session can have one Clip Launcher and one receiver. Close the tab where it is already open.
On a tablet, switching tabs disconnects the controller
Some Android tablets suspend background tabs. When you come back the controller reconnects and gets its port back by itself.
To avoid it: Settings → Battery → Background usage limits, turn off putting unused apps to sleep and add Chrome to the never-sleeping apps.
GyroBall doesn't move
On iPhone and iPad tap Allow when Safari asks for motion sensors. On Android check that auto-rotate isn't blocking the sensors and that the page is open with https://.
A note is stuck
Omnithru turns notes off when you close or hide a controller and when you disconnect a route. If it still happens, disable and re-enable the route or reload the controller.