ROLI Blocks

Lightpad grids and LUMI key lighting through the blocksd bridge.

Hypercolor sends colors to a local blocksd daemon over a Unix socket. The daemon owns MIDI, device keepalive, LittleFoot program upload, and frame delivery. Hypercolor supplies effects and spatial mapping.

DeviceRequired discovery fieldsHypercolor surface
Lightpad / Lightpad Mgrid_width = 15, grid_height = 15225-color matrix
LUMI Keyskey_count = 24, zero grid dimensions24-color strip in key-index order

Other Blocks and unsupported dimensions are excluded from lighting discovery. LUMI requires a blocksd build with the key_frame API and supported device firmware (1.3.0 or newer). Older daemons that omit key_count still work for Lightpad grids; Hypercolor does not invent a keyboard surface for them.

#Connect

Start blocksd before Hypercolor. ROLI discovery is enabled by default. A custom socket can be selected in the Hypercolor configuration:

[discovery]
blocks_scan = true
blocks_socket_path = "/run/user/1000/blocksd/blocksd.sock"

Use the socket path reported by your daemon. Hypercolor’s default is $XDG_RUNTIME_DIR/blocksd/blocksd.sock, falling back to /tmp/blocksd/blocksd.sock. An explicit path also supports a daemon installed with a different platform-specific runtime directory.

Once discovered, assign the Grid or Keys segment to a scene zone like other lighting devices. LUMI uses a linear key layout; its topology does not model the different physical heights of black and white keys.

#Frame delivery

Lightpad uses the existing 685-byte binary packet. LUMI uses JSON key_frame with 72 base64-encoded RGB888 bytes. The keyboard reply must carry the matching UID and a boolean acceptance result. Invalid replies invalidate the connection.

An accepted write means blocksd queued the colors. Startup and heap recovery may delay display while blocksd checks renderer execution. Neither an API ACK nor Hypercolor’s requested cadence establishes the hardware’s displayed frame rate.

#Native effect check

The repository includes a 15-second check that runs Hypercolor’s native Rainbow renderer through the bridge. Run it while blocksd is active and no other Hypercolor process is writing to the same ROLI devices:

./scripts/cargo-cache-build.sh cargo run -p hypercolor-core --example blocks_rainbow

Pass a custom socket path after -- if needed. The example touches only supported ROLI lighting surfaces and leaves blocksd running when it exits. The example verifies the native effect and bridge path; it does not exercise the full scene compositor or certify musical MIDI/MPE behavior.