A reverse-engineered specification and reference implementation of the Artiphon Orba's control protocol — how to read device state and drive on-device parameters over USB-MIDI or Bluetooth, with no vendor app.
Artiphon, Inc. ceased operations and entered liquidation in 2025; the official Orba app and cloud are abandoned. This project exists so the hardware stays usable. It is not affiliated with or endorsed by Artiphon; "Orba" and "Artiphon" are trademarks of their respective owner. Published for interoperability and preservation.
It was derived from the official Android app and verified byte-identical against captured Bluetooth traffic and a live device.
spec/SPEC.md the canonical protocol spec
python/ Python reference: codec + command builders + a CLI
js/ JavaScript reference (ES module): codec + BLE-MIDI framing + builders
Python — decode a captured message, or build one:
python3 python/orba_protocol.py decode F0 00 02 03 00 03 50 60 40 00 00 06 00 18 0c 1d F7
python3 python/orba_protocol.py build 60 03 01 00 03 02 # SET active part = Bassimport orba_protocol as O
O.build_command(O.set_tempo(120), msg_id=0x60) # -> SysEx bytes for 120.00 BPM
O.set_fx("bass", "volume", 50) # -> payload: 03 02 50 10 80 00 01 04JavaScript (browser via Web Bluetooth / Web MIDI, or Node):
import * as orba from "./js/orba-protocol.js";
const sysex = orba.buildCommand(orba.setActivePart("bass")); // F0 .. F7 bytes
for (const pkt of orba.bleWrapMidiPackets(sysex)) { // split for a BLE GATT write
await characteristic.writeValueWithoutResponse(new Uint8Array(pkt));
}See python/README.md and js/README.md for more.
The same protocol runs over USB-MIDI and BLE-MIDI using an identical SysEx payload, where only the outer framing differs. The Orba does not send or follow MIDI clock :(. See
spec/SPEC.md §1 for transports and channel/part mapping.
⚠️ Do not blind-scan register addresses — reading invalid addresses can fault the firmware and reboot the device. Use the documented registers.
This builds on a small community of Orba reverse-engineering efforts. Credit and thanks to:
This repository's contribution is the control protocol: the framing/codec/CRC and the register map, with working multi-language implementations.
Code is MIT. The specification under spec/ is additionally licensed
CC BY 4.0. See LICENSE.