Skip to content

holofermes/orba-protocol

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

1 Commit
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

orba-protocol

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.

What's here

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

Quick start

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 = Bass
import 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 04

JavaScript (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.

How to talk to the device

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.

Prior work

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.

License

Code is MIT. The specification under spec/ is additionally licensed CC BY 4.0. See LICENSE.

About

Reverse-engineered protocol spec + Python/JS reference libraries to control the Artiphon Orba over USB-MIDI / Bluetooth.

Topics

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors