Skip to content

Commit d8bb8e2

Browse files
Daniel Kraftclaude
andcommitted
v2.0.0-alpha2: Docs rewrite, all screenshots, changelog
Complete documentation rewrite: - README.md: covers plugin system, 12 built-in plugins, features, installation, screenshots, plugin development guide - CHANGELOG.md: massive v2.0.0-alpha2 section covering all changes grouped by category (plugin system, UI components, routing matrix, device panel, presets, settings, mappings, performance, bug fixes) - UI_GUIDE.md: updated for Devices tab, plugin config panels, new controls, matrix icons, rate meters, PWA - plugins/README.md: icon.svg convention, HELP text, display outputs, Display param, labels, transport methods, display_factor 20 screenshots: 4 main pages, filter panel, device detail, 2 mapping types, 12 plugin configs (one per plugin type). Version bumped to 2.0.0-alpha2. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
1 parent 17d9ad1 commit d8bb8e2

32 files changed

Lines changed: 419 additions & 266 deletions

Makefile

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
PACKAGE = raspimidihub
2-
VERSION = 2.0.0-alpha1
2+
VERSION = 2.0.0-alpha2
33
DEB_NAME = $(PACKAGE)_$(VERSION)-1_all
44
BUILD_DIR = build/$(DEB_NAME)
55
DEB_FILE = dist/$(DEB_NAME).deb

README.md

Lines changed: 120 additions & 172 deletions
Large diffs are not rendered by default.

docs/CHANGELOG.md

Lines changed: 97 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,96 @@ All notable changes to RaspiMIDIHub will be documented in this file.
44

55
The format is based on [Keep a Changelog](https://keepachangelog.com/).
66

7+
## [2.0.0-alpha2] - 2026-04-10
8+
9+
Massive release introducing the virtual instrument / plugin system. Plugins appear as
10+
routable MIDI devices in the matrix with their own configuration panels, live scopes,
11+
and full MIDI clock integration.
12+
13+
### Plugin System
14+
- **Plugin framework:** auto-discovery, sandboxed threads, per-plugin ALSA MIDI ports
15+
- **Plugin API:** `PluginBase` with event callbacks, output methods, parameter declarations,
16+
clock sync, CC automation, display outputs, and transport control
17+
- **Parameter types:** Wheel, Fader, Radio, Toggle, StepEditor, CurveEditor, NoteSelect,
18+
ChannelSelect, Display, Group (with conditional `visible_when`)
19+
- **CC automation:** map incoming CC numbers to plugin parameters via `cc_inputs` dict
20+
- **Clock distribution:** plugins declare `clock_divisions` to receive tempo-synced ticks
21+
- **Transport output:** plugins can call `send_clock()`, `send_start()`, `send_stop()`,
22+
`send_continue()` to generate MIDI clock and transport
23+
- **Display outputs:** plugins push live values to scopes and meters via `set_display()`
24+
- **HELP text:** plugins declare a `HELP` string shown via a `?` button in the UI
25+
- **12 built-in plugins:**
26+
- Arpeggiator -- pattern player with clock sync, step editor, gate control
27+
- CC LFO -- waveform generator (sine, triangle, square, saw, S&H) with live scope
28+
- CC Smoother -- jitter removal with configurable smoothing factor and scope
29+
- Chord Generator -- input note triggers full chords (major, minor, 7th, custom)
30+
- Master Clock -- internal BPM clock with start/stop/pause transport and beat meter
31+
- MIDI Delay -- note delay with feedback repeats and velocity decay
32+
- Note Splitter -- keyboard split at configurable note into two channels
33+
- Note Transpose -- semitone shift up or down
34+
- Panic Button -- All Notes Off + All Sound Off on all 16 channels
35+
- Scale Remapper -- quantize notes to musical scales with labeled root-note wheel
36+
- Velocity Curve -- drawable 128-point response curve
37+
- Velocity Equalizer -- normalize velocity to fixed value or compressed range
38+
39+
### UI Components
40+
- **Wheel control:** scrollable drum wheel with momentum, tick sound, boundary thud,
41+
optional `labels` list (e.g. note names), `display_factor` and `unit` for scaled display
42+
- **Fader control:** mixer-style horizontal/vertical fader with metallic thumb, tick feedback,
43+
`display_factor` and `display_format` for custom value display
44+
- **Radio control:** pill-style tap-to-select buttons replacing dropdown menus
45+
- **Toggle control:** metal switch with LED indicator for boolean parameters
46+
- **CurveEditor:** drawable 128-point canvas with preset curves (linear, exponential, etc.)
47+
- **StepEditor:** step sequencer grid with on/off dots and per-step note offset mini-wheels
48+
- **Scope display:** real-time waveform/level visualization inline in plugin panels
49+
- **Meter display:** beat/level indicator with segmented display
50+
- **Display param type:** inline placement of display outputs within the parameter layout
51+
52+
### Routing Matrix
53+
- **Device icons:** plugin icons (from `icon.svg`) shown in matrix labels
54+
- **Rate meters:** live MIDI message rate shown per connection cell
55+
- **Add button:** "+" button in matrix to add a new plugin instance
56+
- **Tap-to-open device:** tap a device label to open its detail/config panel directly
57+
58+
### Device Panel
59+
- **Editable title:** rename devices inline from the detail panel header
60+
- **Plugin config:** full plugin parameter panel with all control types rendered
61+
inside the device detail panel
62+
- **Port list:** input/output port display with rename support
63+
- **Scrollable piano:** multi-octave piano keyboard with scroll, multitouch support
64+
- **Multitouch:** simultaneous control of multiple faders/wheels on touch devices
65+
66+
### Presets
67+
- **Plugins included:** presets now save and restore plugin instances and parameter values
68+
- **Save/overwrite:** saving with an existing name prompts for overwrite confirmation
69+
- **Confirmation dialogs:** delete and overwrite require explicit confirmation
70+
71+
### Settings
72+
- **System info:** hostname, version, CPU temperature, uptime, RAM, IP addresses
73+
- **Load indicator:** CPU and memory usage shown in real time
74+
- **PWA install:** "Install App" button for adding to home screen
75+
- **Reload button:** force-reload the web UI without clearing cache
76+
- **Software update:** check, view changelog, one-click install (unchanged from 1.x)
77+
78+
### Mapping UI
79+
- **Wheel/fader/radio/toggle controls** replace dropdown menus in mapping editor
80+
for faster editing on stage
81+
- **MIDI Learn** works across all mapping types with visual feedback
82+
83+
### Performance
84+
- **CC coalescing:** rapid CC streams are coalesced to reduce UI update overhead
85+
- **Rate limiting:** SSE events throttled to prevent browser overload with many devices
86+
- **SSE timeout:** idle SSE connections are cleaned up after configurable timeout
87+
88+
### Bug Fixes
89+
- Filter engine: write ports now correctly removed when switching between direct
90+
ALSA subscription and userspace filter
91+
- Clock bus: clock events no longer leak between unconnected devices
92+
- Hanging notes: All Notes Off sent on plugin stop and connection disconnect
93+
- Matrix scroll: fixed scroll position jump when adding/removing devices
94+
- Preset load: plugin parameter values fully restored (not just connections)
95+
- Device panel: MIDI monitor no longer causes dropdown flickering from rapid events
96+
797
## [1.3.3] - 2026-04-07
898

999
### Fixed
@@ -14,8 +104,8 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/).
14104

15105
### Added
16106
- **Offline connections**: saved connections for offline devices shown as grayed-out
17-
checkboxes in the matrix can be toggled on/off even while the device is unplugged.
18-
- **Clock indicator**: pulsing play icon (▶) on FROM devices sending MIDI clock.
107+
checkboxes in the matrix -- can be toggled on/off even while the device is unplugged.
108+
- **Clock indicator**: pulsing play icon on FROM devices sending MIDI clock.
19109
Turns orange when multiple devices send clock simultaneously (common mistake).
20110
- **MIDI bar auto-expire**: bottom bar entries vanish after 2 seconds of inactivity.
21111
- **Toast shows original name**: tapping a renamed device in the matrix shows the
@@ -42,7 +132,7 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/).
42132
- **Config restore on reconnect**: toggling a connection back on restores its
43133
previous filters and mappings automatically.
44134
- **Default routing setting**: choose "all-to-all" or "none (manual)" for new
45-
devices in Settings MIDI Routing.
135+
devices in Settings > MIDI Routing.
46136
- **Offline devices**: unplugged devices with saved config shown grayed out in
47137
the connection matrix.
48138

@@ -59,7 +149,7 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/).
59149

60150
### Added
61151
- **In-app software updates**: check for new releases, view changelog, one-click
62-
install with live progress (Downloading Installing Restarting).
152+
install with live progress (Downloading > Installing > Restarting).
63153
Uses an external update script that survives the service restart.
64154
- Version number displayed in header bar.
65155
- Page auto-reloads after upgrade to pick up new JS/CSS.
@@ -126,7 +216,7 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/).
126216
endpoints now return proper success responses instead of redirects.
127217

128218
### Added
129-
- Devices sorted alphabetically in connection matrix and device list
219+
- Devices sorted alphabetically in connection matrix and device list --
130220
rename with `1_...`, `2_...` prefixes for consistent ordering.
131221
- Network settings page for configuring eth0 (DHCP or static IP).
132222
- Enhanced MIDI activity bar with split left/right showing device names.
@@ -142,14 +232,14 @@ First stable release.
142232

143233
**Core MIDI Hub**
144234
- Automatic all-to-all MIDI routing between USB devices via ALSA sequencer
145-
- Hotplug support with 500ms debounce add/remove devices at any time
235+
- Hotplug support with 500ms debounce -- add/remove devices at any time
146236
- Loop prevention (no self-connections)
147237
- Multi-port device support
148238

149239
**MIDI Filtering (per-connection)**
150240
- Channel filtering with 16-channel bitmask
151241
- Message type filtering (notes, CC, program change, pitch bend, aftertouch, SysEx, clock/realtime)
152-
- Instant apply no confirmation needed
242+
- Instant apply -- no confirmation needed
153243
- Colorblind-friendly traffic light indicators
154244

155245
**MIDI Mapping (per-connection)**

docs/UI_GUIDE.md

Lines changed: 54 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -1,20 +1,24 @@
1-
# RaspiMIDIHub UI Guide
1+
# RaspiMIDIHub -- UI Guide
22

33
This guide walks through every screen of the RaspiMIDIHub web interface.
44

55
---
66

77
## Routing Page
88

9-
The main screen shows the **connection matrix** a grid where rows are MIDI sources (FROM) and columns are destinations (TO). Tap a cell to connect or disconnect two devices. Purple cells indicate connections with active filters or mappings.
9+
The main screen shows the **connection matrix** -- a grid where rows are MIDI sources (FROM) and columns are destinations (TO). Tap a cell to connect or disconnect two devices. Purple cells indicate connections with active filters or mappings.
1010

11-
**Offline devices** (saved but unplugged) appear grayed out with their saved connections shown as dimmed checkboxes. You can toggle offline connections on/off — the settings are stored and applied when the device is plugged back in.
11+
**Plugins** appear in the matrix alongside USB devices. Each plugin shows its icon (from `icon.svg`) next to the device name. Live **rate meters** on connection cells show MIDI message throughput.
1212

13-
A pulsing **▶ play icon** appears next to devices sending MIDI clock. If multiple devices send clock simultaneously (a common misconfiguration), the icon turns orange as a warning.
13+
**Offline devices** (saved but unplugged) appear grayed out with their saved connections shown as dimmed checkboxes. You can toggle offline connections on/off -- the settings are stored and applied when the device is plugged back in.
1414

15-
Tap a device label to see its full name in a toast. Renamed devices also show the original ALSA name in gray.
15+
A pulsing play icon appears next to devices sending MIDI clock. If multiple devices send clock simultaneously (a common misconfiguration), the icon turns orange as a warning.
1616

17-
At the bottom: **Save Config** persists the current routing to disk (survives reboots), **Load Config** reloads the last saved state. **Export Config** / **Import Config** let you back up or transfer the full configuration as JSON. Disconnected connections are also saved and restored.
17+
Tap a device label to open its **device detail panel** directly. Renamed devices also show the original ALSA name in gray.
18+
19+
The **"+" button** in the matrix header lets you add a new plugin instance. Select a plugin type from the list, and it appears as a new device in the matrix with its own IN and OUT ports.
20+
21+
At the bottom: **Save Config** persists the current routing (including plugin states) to disk. **Load Config** reloads the last saved state. **Export Config** / **Import Config** let you back up or transfer the full configuration as JSON.
1822

1923
![Routing Page](screenshots/01-routing.png)
2024

@@ -30,15 +34,17 @@ Long-press (or right-click) a connected cell to open the connection panel. Here
3034

3135
Dismiss the panel by swiping down, tapping X, pressing ESC, or tapping the dark overlay.
3236

33-
Toggling a connection off in the matrix preserves its filters and mappings they are restored when you re-enable it.
37+
Toggling a connection off in the matrix preserves its filters and mappings -- they are restored when you re-enable it.
3438

3539
![Filter & Mapping Panel](screenshots/05-filter-panel.png)
3640

3741
---
3842

3943
## Add / Edit Mapping
4044

41-
The mapping form opens as a sub-overlay. Mapping types:
45+
The mapping form opens as a sub-overlay. Controls use **wheels, faders, radio buttons, and toggles** instead of dropdowns for fast editing on stage.
46+
47+
Mapping types:
4248

4349
| Type | Description |
4450
|------|-------------|
@@ -48,48 +54,67 @@ The mapping form opens as a sub-overlay. Mapping types:
4854
| **Channel Remap** | Route all events to a different MIDI channel |
4955

5056
- **Src Ch / Dst Ch:** Filter by source channel and remap to destination channel
51-
- **MIDI Learn:** Press the button, then play a note or move a knob the source is auto-filled
57+
- **MIDI Learn:** Press the button, then play a note or move a knob -- the source is auto-filled with visual feedback
5258
- **Pass through original event:** When checked, the original note/CC is forwarded alongside the mapped output
5359

60+
![Mapping (Note to CC)](screenshots/07-mapping-note-to-cc.png)
61+
5462
---
5563

5664
## Presets Page
5765

58-
Save the current routing as a named preset and recall it later. Useful for switching between different setups at a gig.
66+
Save the current routing as a named preset and recall it later. Presets now include plugin instances and their parameter values.
5967

60-
- **Save:** Enter a name and tap Save to snapshot the current routing
61-
- **Load:** Activate a saved preset instantly
62-
- **Export/Import:** Share presets as JSON files between devices
63-
- **Delete:** Remove presets you no longer need
68+
- **Save:** Enter a name and tap Save. If the name already exists, a confirmation dialog asks whether to overwrite.
69+
- **Load:** Activate a saved preset instantly -- routing, filters, mappings, and plugin states are all restored.
70+
- **Export/Import:** Share presets as JSON files between devices.
71+
- **Delete:** Remove presets with a confirmation dialog.
6472

6573
Note: After loading a preset, tap **Save Config** on the Routing page to make it the boot default.
6674

6775
![Presets Page](screenshots/02-presets.png)
6876

6977
---
7078

71-
## Status Page
79+
## Devices Page
7280

73-
System overview and device list.
81+
The Devices tab shows all connected MIDI devices and active plugin instances.
7482

7583
- **System info:** Hostname, version, CPU temperature, uptime, RAM, IP addresses
84+
- **Load indicator:** CPU and memory usage shown in real time
7685
- **Connected Devices:** Tap a device to open its detail panel
86+
- **Plugin instances:** Listed alongside hardware devices, tap to configure
7787

78-
![Status Page](screenshots/03-status.png)
88+
![Devices Page](screenshots/03-devices.png)
7989

8090
---
8191

8292
## Device Detail Panel
8393

84-
Tap a device on the Status page to open the detail panel (slides up). Features:
94+
Tap a device on the Devices page or tap a device label in the routing matrix to open the detail panel (slides up).
8595

86-
- **Device info:** ALSA client ID, USB VID:PID, port types
87-
- **Rename:** Assign a custom device name that persists across reboots (stored by USB topology)
88-
- **Port rename:** For multi-port devices, rename individual ports (e.g., name a DIN output "Octatrack")
96+
### For USB MIDI devices:
97+
98+
- **Editable title:** Rename the device inline from the panel header. Custom names persist across reboots (stored by USB topology).
99+
- **Port rename:** For multi-port devices, rename individual ports (e.g., name a DIN output "Octatrack").
89100
- **MIDI Monitor:** Live display of incoming MIDI events with note names (e.g., "Note On ch1 C3 vel=100"). Uses direct DOM updates so it won't interfere with other controls.
90-
- **MIDI Test Sender:** Select channel and port, then use the piano keyboard (one octave, adjustable with +/- octave buttons) and CC slider for testing connections without physical MIDI input
101+
- **MIDI Test Sender:** Scrollable multi-octave piano keyboard with multitouch support, plus CC slider for testing connections.
102+
103+
### For plugin devices:
104+
105+
- **Plugin config panel:** Full parameter UI rendered inside the detail panel. Controls include:
106+
- **Wheels** -- scrollable drums with momentum and optional labels (e.g., note names on the Scale Remapper root selector)
107+
- **Faders** -- horizontal or vertical mixer-style sliders with optional scaled display (e.g., "0.5 Hz" on the CC LFO)
108+
- **Radio buttons** -- pill-style tap-to-select (e.g., waveform shape, scale type)
109+
- **Toggles** -- metal switches with LED indicators (e.g., clock sync on/off)
110+
- **Step Editor** -- step sequencer grid with on/off dots and per-step note offsets (arpeggiator)
111+
- **Curve Editor** -- drawable 128-point curve canvas (velocity curve)
112+
- **Scope** -- real-time waveform display showing plugin output (CC LFO, CC Smoother)
113+
- **Meter** -- segmented beat/level indicator (Master Clock)
114+
- **Help button:** "?" icon shows the plugin's extended HELP text with usage examples.
115+
- **Port list:** Input and output ports with connection info.
91116

92-
![Device Detail Panel](screenshots/06-device-detail.png)
117+
![Device Detail (Plugin)](screenshots/09-plugin-arpeggiator.png)
93118

94119
---
95120

@@ -98,10 +123,12 @@ Tap a device on the Status page to open the detail panel (slides up). Features:
98123
Configuration and system controls.
99124

100125
- **WiFi:** Current mode (AP or client) with clear status badge. Join WiFi or change AP password.
101-
- **Ethernet (eth0):** Configure as DHCP or static IP with address, netmask, gateway, and DNS (8.8.8.8 added automatically for static).
102-
- **MIDI Routing:** Default routing for new devices "Connect all" (every new device connects to all others) or "None" (new devices start disconnected).
126+
- **Ethernet (eth0):** Configure as DHCP or static IP with address, netmask, gateway, and DNS.
127+
- **MIDI Routing:** Default routing for new devices -- "Connect all" or "None" (new devices start disconnected).
103128
- **Display:** Toggle the persistent MIDI activity bar.
104-
- **Software Update:** Check for updates, view changelog, one-click install (requires internet — easiest via Ethernet cable, which works alongside the WiFi AP).
129+
- **PWA Install:** "Install App" button for adding RaspiMIDIHub to your device's home screen.
130+
- **Reload:** Force-reload the web UI.
131+
- **Software Update:** Check for updates, view changelog, one-click install (requires internet -- easiest via Ethernet cable alongside the WiFi AP).
105132
- **System:** Reboot the Pi remotely.
106133

107134
**Safety net:** If the WiFi connection is lost in client mode, the Pi automatically falls back to AP mode within ~90 seconds. Run `sudo reset-wifi` from a console to force AP mode.
@@ -112,7 +139,7 @@ Configuration and system controls.
112139

113140
## MIDI Activity Bar
114141

115-
A persistent bar above the bottom navigation showing the latest MIDI events from two sources left and right. Device names are truncated to fit. Clock events are not shown here (they appear as the indicator in the matrix instead). Entries auto-expire after 2 seconds of inactivity. Toggleable in Settings > Display.
142+
A persistent bar above the bottom navigation showing the latest MIDI events from two sources -- left and right. Device names are truncated to fit. Clock events are not shown here (they appear as the play indicator in the matrix instead). Entries auto-expire after 2 seconds of inactivity. Toggleable in Settings > Display.
116143

117144
---
118145

docs/screenshots/01-routing.png

-3.2 KB
Loading

docs/screenshots/02-presets.png

3.51 KB
Loading

docs/screenshots/03-devices.png

32.6 KB
Loading

docs/screenshots/04-settings.png

1.86 KB
Loading
2.81 KB
Loading
14.6 KB
Loading

0 commit comments

Comments
 (0)