dgliwa / dgliwa/rig_cli

Full HX Stomp preset management (SysEx read/write via MIDI)

Open
#3 0 comments 0 reactions 0 assignees View on GitHub
feature
Dominant language
Python
Stars
0
Forks
0
PR merge metrics
No merged PRs in 30d

Description

## Problem

Currently `rig apply` only sends MIDI PC messages to recall existing presets on the HX Stomp. The full preset configuration (blocks, parameters, routing) defined in `pedals/hx-stomp/presets/*.yaml` is documentation-only — it is never pushed to the device.

## Goal

Make rig-cli the source of truth for HX Stomp presets:

1. **Read** existing presets from the device via MIDI SysEx
2. **Write** full preset config back to the device
3. **Diff** presets between config YAML and device (what changed)
4. **Apply** pushes the full config to the correct preset slot

## Research Required

HX Edit communicates with the HX Stomp via a proprietary serial-over-USB protocol that bundles MIDI SysEx commands. We would need to reverse-engineer:

- The SysEx format for reading/writing individual presets
- Block parameter encodings (float → hex conversion)
- How preset data (which we already parse from .hlx JSON) is packed into SysEx messages
- Command sequencing (handshake, chunking, checksums)

The .hlx file format gives us the JSON schema — the SysEx protocol is the missing link.

## Prior Art

- [line6-hx-edit-protocol](https://github.com/nicknisi/line6-hx-edit-protocol) — community reverse-engineering efforts
- HX Native / HX Edit USB packet captures
- Python `python-rtmidi` for raw MIDI I/O (already a dependency)

## Implementation Sketch

- New `src/rig/io/hx_sysex.py` module for encoding/decoding HX SysEx
- New `src/rig/io/hx_device.py` for communication (read preset, write preset, list presets)
- Integration with plan engine: compare config preset blocks against device
- Integration with apply engine: write preset blocks before sending PC recall

## Acceptance

- `rig apply hx-push` or similar writes a config-defined preset to the HX Stomp
- `rig plan` can detect when a config preset differs from what is on the device
- Can round-trip: read from device → export YAML → re-apply and get the same tone

Contributor guide

No contributing guide indexed for this repository

Assessment

This issue has not been assessed yet.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.