Skip to content

v0.4.0

Choose a tag to compare

@github-actions github-actions released this 27 Aug 07:15
· 60 commits to master since this release

fretwire 0.4.0

Your HX Edit backups open on Linux. An .hxb device backup converts into presets the pedal
accepts — blocks, parameters, snapshots, footswitches and controller assignments — and a verified
restore puts them back on the hardware. Alongside that: custom footswitch labels and ring
colours
(the 0.3.0 known-limit, closed), the Globals panel grown to the pedal's own six menus,
the POD Go and HX Effects recognised, and the CLI built for arm64.

68 commits since v0.3.0.


Backup import

HX Edit's backups are the format your presets already live in. fretwire now reads them:

  • Inspect — fretwire show-backup <file.hxb> lists a backup's setlists and presets, offline.
  • Convert — fretwire hxb-convert <file.hxb> <out.json> turns every preset into the device's
    own wire format. Offline, and checkable: the conversion is verified against presets held in
    both forms — a contributor's Floor backup and wire dumps of the same slots off the same unit —
    and the reference backup converts 363 of 363 non-empty presets.
  • Restore — fretwire restore <out.json> <slot> writes one preset into a setlist slot.
    Verified end-to-end on hardware: export, restore, and the flash read-back is byte-identical.

What carries: every block type (amps with their cabs, both cab generations, dual cabs, IRs by
their user-slot reference, split/mixer topology, the looper, even the synths), all parameter
values, snapshot names and per-snapshot state, the footswitch layout with custom labels and
colours, and the full controller-assignment tables — expression pedals, footswitches and
snapshots, byte-equal to what the device itself writes.

What doesn't carry is said, never guessed: the conversion reports what it skipped and why
(MIDI-sourced assignments and a couple of corners listed under Known limits), and refuses a
preset it cannot represent rather than producing a plausible-looking wrong one.

Restore is a flash write — it overwrites the target slot, with a confirmation naming what is
about to be lost. Export first; the same tooling makes that easy (export-setlist).

Finding the restore path also found a bug worth having on the record: an op-21 preset write sent
straight after a goto stalls the transfer deterministically. Reading the preset first re-opens
the edit buffer and the write proceeds; restore does this itself now.

Custom footswitch labels and ring colours

0.3.0's known limits said: "Footswitch ring colours and labels can be read, not written... setting
a custom one needs ops we have not decoded, and probing them blind wedged a pedal."
Closed — and
without those ops. The label and colour turn out to live in the preset document itself, so they
ride the same whole-preset write the restore work proved out, and the dangerous opcodes stay
untouched.

  • In the GUI: a ✎ next to the footswitch picker on any block that's on a switch opens a label
    field and the colour palette. Changes land in the edit buffer, undoable like any other edit, and
    the pedal's ring and scribble strip repaint immediately.
  • From the CLI: fretwire switch-label <fs> [text] and switch-color <fs> [1-11] — no
    argument clears.
  • The palette is the device's own, mapped end to end: the twelve values are the
    footswitchLED list in Line 6's shipped data (Auto, White, Red, Dark Orange, Light Orange,
    Yellow, Green, Turquoise, Blue, Violet, Pink, Off), and every one was confirmed against a real
    ring — including Off, which is exactly that.
  • hxb-convert carries @fs_customlabel and @fs_customcolor, so backups with customised
    switches restore with them intact.

Global settings, in the pedal's own menus

The Globals panel now mirrors all six of the pedal's menu sections — Ins/Outs, Preferences,
Footswitches, EXP Pedals, MIDI/Tempo, Displays — in the pedal's own order, with newly named
settings among them (Snapshot CC Send, Return Type, Auto In-Z's values). The sections, and the
XL rows that came with them, were contributed and verified on hardware by Robert Tsai.

Also fixed here: the HX Stomp XL reports its preset range as 000-128; that last number is the
XL's own firmware bug, and the panel now shows the range the pedal actually has.

Devices

Two new entries, and real captures for a third:

Device PID Status
HX Stomp 0x4246 verified — developed against one
Helix Floor 0x4248 verified — ~70 logged sessions with a remote tester
Helix LT 0x424a reads verified, edits untested
HX Stomp XL 0x4253 reported working — and now surveyed from its own preset streams
HX Effects 0x4245 reported working — recognised, no session logged yet
POD Go 0x4247 reads and writes reconciled — an owner drives one from the editor
  • The POD Go (issue #15) speaks the identical protocol with entirely different reference data:
    its own symbol table, so it needs POD Go Edit's data imported rather than HX Edit's (the
    importer keeps both side by side). Reads and writes both reproduce its captured bytes exactly —
    see docs/pod-go.md.
    Its fixed-chain add/move/delete is not mapped yet.
  • The HX Effects (issue #10) is recognised from an owner's lsusb line — @kolbiman — and
    reported working; that report is the whole of what we hold, so nothing about its geometry is
    assumed.
  • The HX Stomp XL stopped being extrapolated: two preset streams off a real one (Robert Tsai,
    issue #13) settle one DSP, four snapshots, eight footswitches and a 13-entry controller table.
    The fixes that followed matter on every device: expression-pedal bypasses now show (they used
    to render as unassigned), the footswitch picker is sized by the preset instead of capped at
    five, and MIDI/Snapshots source ordinals move with the switch count instead of being hard-coded.

Headless and arm64

  • The udev rule now grants access by group (plugdev) as well as by seat, so the pedal works
    over SSH and from services — the seat-based grant only ever covered someone logged into the
    console. fretwire install-udev creates the group; join it and replug.
  • The release ships a native arm64 CLI (fretwire-cli-aarch64-linux-musl.tar.gz) alongside
    x86-64 — for the Pi-class machines a headless pedal tends to be plugged into.

Fixes

  • A cab parameter pushed from the pedal could land on the amp. Status pushes name the paired
    model in key 26; it was dropped, so turning a cab's knob on the pedal moved the amp's slider of
    the same index in the GUI. Writes were always correct; only the mirror was wrong.
  • clear-preset empties the loaded preset properly: blocks, controller assignments and
    snapshot names, matching what the pedal means by an empty preset.
  • The amp+cab pairing survey that unblocked the backup import also produced ten new tracked
    fixtures and the complete block-class table in
    docs/preset-format.md
    — measured on the pedal, not inferred.

Also

  • Revert to saved — discard unsaved edits and reload the preset as last saved, from the ⋯
    menu (or fretwire revert). It rides a small protocol finding: a goto to the slot the device
    is already on is a real reload, so this is the pedal's own switch-away-and-back gesture without
    another preset ever entering the signal path. It confirms first, and the state it discards stays
    one Undo away.
  • The cab's mic placement is drawn — position, distance and angle as a diagram rather than
    three numbers.
  • The window opens wide enough to show a whole chain.
  • The GUI warns when its embedded frontend is older than the UI sources it sits next to — a
    dev-build foot-gun, defused.

Known limits

  • Backup conversion has three named gaps: MIDI-sourced controller assignments (their wire row
    carries a CC field no sample shows), the Floor's A/B split topology, and the four I/O nodes'
    parameter blocks. Each is skipped and reported per preset; nothing is silently dropped.
  • Grid and routing planning is still DSP-0 only. Reading and per-block edits are DSP-agnostic;
    moving and inserting blocks plans inside the first 20-slot array.
  • The settings namespace is mapped only in part — 166 ids answer on a Stomp, 28 are named.
    settings-diff finds a new one in about thirty seconds if you want to help.
  • IR reorder is not implemented. Delete and re-upload expresses it.
  • No firmware, flash or DFU traffic, by design and permanently. See
    docs/safety.md.

Installing

Grab the .deb, .rpm or .AppImage for the GUI, or a static CLI tarball —
fretwire-cli-x86_64-linux-musl.tar.gz or fretwire-cli-aarch64-linux-musl.tar.gz — that runs on
any distro. The deb and rpm install the udev rule and the CLI alongside the app; for the AppImage
or the tarballs, install packaging/70-hxstomp.rules yourself and replug the pedal.

On first run the app imports the model and preset reference data from your own HX Edit
installation
(POD Go owners: from POD Go Edit). Nothing proprietary is shipped in these
packages. Skipping the import is allowed — the editor works without it, with numeric names
instead.

Thanks

@rtsai for the six Globals sections, the XL preset streams and the string of precise
issue-#13 reports that fixed source ordinals for every device; @kolbiman for the HX Effects
(issue #10); the @jamesremuscat on issue #15, whose captures and live sessions took a "could
this work?" to reads and writes reconciled in two rounds; Reddit user /r/zadtheinhaler and the Floor
testers whose logged sessions keep the write path honest; and the contributor whose Floor backup
became the oracle the entire backup-import feature is measured against.