Control Ableton Live (or any DAW) with a 3Dconnexion SpaceNavigator using all 6 axes and 2 buttons as MIDI CC messages.
The SpaceNavigator is a 6-DOF input device (push, pull, tilt, rotate in every direction). SpaceMIDI bridges it to MIDI, letting you use it as an expressive controller in your DAW.
Each physical axis maps to a MIDI CC:
| Axis | Direction | Default CC |
|---|---|---|
| X | Left / Right | CC 1 |
| Y | Forward / Backward | CC 7 |
| Z | Up / Down | CC 74 |
| RX | Tilt left / right | CC 10 |
| RY | Tilt forward / backward | CC 71 |
| RZ | Rotate | CC 91 |
| Button 1 | Press | CC 80 |
| Button 2 | Press | CC 81 |
All mappings are fully configurable in config.json.
- 3Dconnexion SpaceNavigator (tested on SpaceNavigator NB USB, model 3DX-600036)
- Windows 10 or 11
- Python 3.11 or 3.13
- loopMIDI — creates a virtual MIDI port
⚠️ The official 3DxWare driver from 3Dconnexion may conflict with SpaceMIDI. If the device is not detected, try uninstalling it.
1. Clone the repository
git clone https://github.com/yourusername/spacemidi.git
cd spacemidi2. Create a virtual environment
py -3.13 -m venv venv
venv\Scripts\activate3. Install dependencies
pip install -r requirements.txt4. Install hidapi.dll
Download the latest Windows release from hidapi releases, extract x64/hidapi.dll and place it in venv\Scripts\.
5. Create a virtual MIDI port
Open loopMIDI, click + and name the port SpaceMIDI.
6. Configure
cp config.example.json config.jsonEdit config.json if needed (see Configuration).
1. Activate the virtual environment
venv\Scripts\activate2. Run SpaceMIDI
python spacemidi.py3. Configure Ableton
In Ableton: Preferences → MIDI → enable Track and Remote for the SpaceMIDI input port.
4. Map axes to parameters
- Press F9 to switch to MAPPING mode (one axis at a time)
- In Ableton, press Ctrl+M to enter MIDI Map mode
- Click a parameter, then move one axis on the SpaceNavigator
- Press F9 again to switch back to LIVE mode (all axes simultaneously)
All settings live in config.json:
{
"midi_output_id": 5,
"midi_channel": 0,
"max_val": 500,
"dead_zone": 20,
"lock_ms": 400,
"axis_mapping": {
"x": 1,
"y": 7,
"z": 74,
"rx": 10,
"ry": 71,
"rz": 91
},
"btn_mapping": {
"1": 80,
"2": 81
},
"hotkey_toggle_mode": "F9"
}| Key | Description |
|---|---|
midi_output_id |
ID of the loopMIDI output port (run python list_ports.py to find it) |
midi_channel |
MIDI channel (0 = channel 1) |
max_val |
Expected maximum axis value — adjust for sensitivity |
dead_zone |
Ignore axis values below this threshold |
lock_ms |
How long (ms) to lock onto one axis in mapping mode |
axis_mapping |
Axis → CC number |
btn_mapping |
Button → CC number |
hotkey_toggle_mode |
Keyboard shortcut to toggle mapping/live mode |
List available MIDI output ports:
python list_ports.pyDevice not found
- Make sure the SpaceNavigator is plugged in
- Uninstall 3DxWare if installed
- Check that
hidapi.dllis invenv\Scripts\
No MIDI in Ableton
- Check that loopMIDI is running and the
SpaceMIDIport exists - Verify Track + Remote are enabled in Ableton MIDI preferences
- Confirm
midi_output_idinconfig.jsonmatches your loopMIDI port
Axes oscillate during mapping
- Make sure you are in MAPPING mode (press F9)
- Increase
lock_msinconfig.json(e.g. 600)
See CONTRIBUTING.md.
MIT — see LICENSE.