Files
pi-multifx-pedal/TEST_PLAN.md
T

20 KiB

Pi Multi-FX Pedal — Manual Test Plan

Device: Pixel 9a, Firefox
URL: http://pedal.local
Pre-req: Guitar plugged into Focusrite input 1, speaker/monitors connected to Focusrite outputs


1. Initial State Check

# Test Expected Result Pass/Fail
1.1 Open http://pedal.local in Firefox Page loads, dark theme, status bar at top
1.2 Status bar shows green dot (connected) Green dot, not red
1.3 Status bar shows channel name (e.g. GUITAR) Amber text on dark badge
1.4 Status bar shows preset name Truncated with ellipsis if long
1.5 Status bar shows VU meter bars (I / O) Green bar (I), Amber bar (O)
1.6 Status bar shows NAM CPU % e.g. 42%
1.7 Play guitar — I bar moves Green VU fills in response to playing
1.8 Play guitar — O bar moves Amber VU fills in response
1.9 Play guitar — NAM CPU % changes Should move between ~30-50%

2. Channel Cycling (Status Bar)

# Test Expected Result Pass/Fail
2.1 Status bar shows current channel name e.g. GUITAR in amber badge
2.2 Tap channel name badge Cycles to next instrument (Bass)
2.3 Status bar updates Shows BASS
2.4 Tap 🎛 button next to status bar Also cycles instrument
2.5 Tap again — cycles through: Guitar → Bass → Keys → Vocals → Backing Tracks Each tap advances
2.6 AUDIO: Cycling channels doesn't drop audio No pop/glitch
2.7 Cycle back to Guitar Returns to Guitar
2.8 Open Settings → Audio Interface → Instrument section Shows current instrument
2.9 Tap "Cycle" button in Settings Also cycles instrument
2.10 Verify instrument dropdown matches status bar Both show same instrument

3. Home Screen — NAM Hero

# Test Expected Result Pass/Fail
2.1 NAM badge shows current model name Large text in center of hero card
2.2 Green LED dot top-right is ON Model is loaded and active
2.3 Tap NAM hero Opens Downloads overlay (local NAM models)
2.4 Close Downloads overlay Returns to home screen

3. Home Screen — Pedal Row (FX Blocks)

# Test Expected Result Pass/Fail
3.1 Pedal row shows FX blocks as stompbox icons Horizontal scrollable row of pedals
3.2 Each pedal shows LED (green=on, red=off) Colored dot at top of each pedal
3.3 Each pedal shows icon + label Text below icon
3.4 Each pedal shows toggle switch Green when enabled, grey when bypassed
3.5 Tap a pedal's toggle switch Pedal toggles on/off, LED changes
3.6 AUDIO: Play guitar while toggling — no dropout No pop/click, audio continues
3.7 "+ Add Block" pedal at end (dashed border) Last item in row, shows + icon
3.8 Tap "+ Add Block" Opens Downloads overlay

4. Home Screen — Volume Slider

# Test Expected Result Pass/Fail
4.1 Volume label reads VOL Text at left of slider
4.2 Drag volume slider up/down Amber fill bar moves, percentage updates
4.3 AUDIO: Volume changes smoothly No pops when dragging
4.4 Drag to 0% Audio silent
4.5 Drag back to 80% Audio returns at normal level

5. Home Screen — Footswitch

# Test Expected Result Pass/Fail
5.1 Footswitch shows green when bypass OFF Green gradient, BYPASS text
5.2 AUDIO: Tap footswitch Bypass toggles — audio goes from processed to DI
5.3 Footswitch turns red when bypass ON Red gradient, BYPASS text
5.4 AUDIO: Tap again Audio returns to processed (NAM engaged)
5.5 AUDIO: No pop/click on toggle Smooth transition

6. Home Screen — Tab Bar

# Test Expected Result Pass/Fail
6.1 Bottom tab bar visible 5 tabs: Presets, Snapshots, Downloads, Settings, 🔄
6.2 Tap each tab Opens corresponding overlay
6.3 Tap same tab again Closes overlay (or overlay stays open)
6.4 Tap close (X) button on overlay Returns to home screen

7. Presets Overlay

# Test Expected Result Pass/Fail
7.1 Open Presets overlay Grid of bank rows with preset names
7.2 Tap a preset Preset loads, overlay closes
7.3 AUDIO: Sound changes to match preset NAM model, FX chain, and routing load
7.4 AUDIO: No dropout during preset change Smooth transition
7.5 Status bar preset name updates Shows newly loaded preset name
7.6 Tap another preset in same bank Loads that preset
7.7 Tap a preset in different bank Loads preset from other bank
7.8 Close and reopen Presets Last loaded preset highlighted

8. Snapshots Overlay

# Test Expected Result Pass/Fail
8.1 Open Snapshots overlay Grid of numbered snapshot slots
8.2 Tap a snapshot slot Recalls that snapshot
8.3 AUDIO: No dropout recalling snapshot Smooth
8.4 Tap "Save Current" button Saves current state to snapshot
8.5 Change a setting, then recall saved snapshot Reverts to saved state
8.6 AUDIO: No dropout saving Sound unaffected

9. Downloads Overlay — Local Tab

# Test Expected Result Pass/Fail
9.1 Open Downloads overlay Opens to Local tab by default
9.2 Local tab shows installed .nam files List of local models
9.3 Each model card shows name, size, architecture Text info on card
9.4 Currently-loaded model has green border + Visual indicator
9.5 Tap an unloaded model Model loads, green border + appears
9.6 AUDIO: Sound changes to new model New NAM model processes audio
9.7 AUDIO: No dropout during model switch Smooth transition
9.8 status bar model name updates NAM hero shows new name

10. Downloads Overlay — NAM Tab

# Test Expected Result Pass/Fail
10.1 Tap NAM tab (🎛) Shows Tone3000 search
10.2 Search bar and filters visible Search input, sort, gear, arch filters
10.3 Results load automatically (trending) Grid of model cards appears
10.4 Type in search bar + tap Search button Results filter by query
10.5 Change sort dropdown Results re-sort
10.6 Tap gear filter (Amp, Pedal, Full Rig, etc.) Results filtered by gear type
10.7 Scroll results + tap Next → Pagination loads next page
10.8 Tap ← Prev Goes back a page
10.9 Tap a model card Opens detail panel
10.10 Detail shows name, author, size, description Metadata visible
10.11 Tap "Get" / Install Downloads model
10.12 After download, model appears in Local tab Switch to Local to verify

11. Downloads Overlay — IR Tab

# Test Expected Result Pass/Fail
11.1 Tap IR tab (📦) Shows Tone3000 IR search
11.2 Search loads trending IRs Grid of IR cards
11.3 Search, filter, pagination (same as NAM tab) Works like NAM tab
11.4 Install an IR Downloads, appears in IR list

12. Settings Overlay — Navigation

# Test Expected Result Pass/Fail
12.1 Open Settings overlay Sections: Network, Audio, Audio Interface, Bluetooth, System
12.2 Nav strip pinned below header Doesn't scroll away
12.3 Tap each nav button Scrolls to that section

13. Settings — Audio Section

13a. Sample Rate Tests

# Test Expected Result Pass/Fail
13.1 Note current Sample Rate in dropdown e.g. "48000"
13.2 AUDIO: Play guitar — note the tone and latency Baseline reference
13.3 AUDIO: Change Sample Rate to 44100, Buffer 512 POST succeeds, ~6-10s JACK restart
13.4 AUDIO: NAM survives (CPU > 0%) after restart No DI signal
13.5 Play guitar — does the tone sound different from baseline? Pitch should be same, slight feel difference possible
13.6 AUDIO: Change Sample Rate to 48000, Buffer 512 POST succeeds, NAM survives
13.7 Play guitar — compare to baseline Should match baseline
13.8 AUDIO: Change Sample Rate to 96000, Buffer 1024 POST may take longer, higher CPU
13.9 AUDIO: NAM survives (CPU may be higher) Expect higher CPU % at 96k
13.10 Play guitar — any difference in clarity/feel? Higher sample rate may sound cleaner
13.11 AUDIO: Change Sample Rate to 192000, Buffer 1024 May fail if device doesn't support it
13.12 If 192k fails, verify rollback works Still running at previous rate, NAM CPU > 0%
13.13 AUDIO: Return to 48000, Buffer 512 Back to baseline

13b. Buffer Size Tests

# Test Expected Result Pass/Fail
13.14 Note current Buffer Size in dropdown e.g. "512"
13.15 AUDIO: Change Buffer to 1024 POST succeeds, lower CPU expected
13.16 AUDIO: NAM CPU drops e.g. ~18-25%
13.17 Play guitar — feel the latency Higher latency noticeable
13.18 AUDIO: Change Buffer to 256 POST succeeds, higher CPU expected
13.19 AUDIO: NAM CPU rises e.g. ~60-80%
13.20 Play guitar — feel tighter latency Lower latency, snappier feel
13.21 AUDIO: Change Buffer to 128 May xrun on complex models
13.22 AUDIO: NAM CPU may hit 90%+ Listen for pops/glitches
13.23 AUDIO: Change Buffer to 64 Likely xruns immediately
13.24 AUDIO: Return Buffer to 512 Back to stable range

13c. Combined Changes & Stability

# Test Expected Result Pass/Fail
13.25 AUDIO: Change rate + buffer at once (e.g. 44100 + 256) Both apply, NAM survives
13.26 AUDIO: Change back to 48000 + 512 (one POST with both) Both apply, NAM survives
13.27 AUDIO: Rapidly change buffer 3x in a row (512→256→1024→512) Each change works, NAM survives all
13.28 AUDIO: Rapidly change rate 3x in a row (48000→44100→48000→44100) Each change works, NAM survives
13.29 AUDIO: Leave running at 48000 + 512 for 30 seconds No pops, no dropout
13.30 AUDIO: Verify no persistent "peaking/poping every second" Clean audio through NAM

14. Settings — Audio Interface Section

# Test Expected Result Pass/Fail
14.1 Input Device dropdown lists ALSA devices Focusrite Scarlett 2i2 shown
14.2 Output Device dropdown lists ALSA devices Same device
14.3 Change Input Device JACK restarts with new input
14.4 AUDIO: No dropout after device change NAM CPU > 0%
14.5 Change back to original device Restores
14.6 CH 1 Output dropdown playback_1 / playback_2 / both
14.7 AUDIO: Change CH 1 Output Output routing changes
14.8 CH 2 Output dropdown playback_1 / playback_2 / both
14.9 AUDIO: Change CH 2 Output Output routing changes
14.10 Backing Track Source dropdown Shows "None", "Bluetooth Audio" or other sources
14.11 AUDIO: Select a backing track source Source connects, audio routes through FX chain
14.12 AUDIO: Toggle back to None Returns to normal input
14.13 AUDIO: No dropout changing backing source NAM CPU > 0%

15. Settings — Routing Section

# Test Expected Result Pass/Fail
15.1 Routing Mode shows "Mono" or "4CM" Current mode displayed
15.2 AUDIO: Tap to toggle Mono ↔ 4CM Routing changes
15.3 AUDIO: No dropout on toggle NAM CPU > 0% after toggle
15.4 Toggle back Restores
15.5 Channel Mode shows "Dual-Mono" or "Stereo" Current mode displayed
15.6 Tap to toggle Mode switches
15.7 AUDIO: No dropout on channel mode toggle NAM CPU > 0%

16. Settings — Channel Cards (CH 1 / CH 2)

# Test Expected Result Pass/Fail
16.1 CH 1 card shows name, instrument, power toggle Card visible in Audio Interface section
16.2 CH 2 card shows same Second card visible
16.3 Instrument selector shows options Guitar / Bass / Keys / Vocals
16.4 Change instrument Updates
16.5 Power toggle (mute channel) Channel mutes/unmutes

17. Settings — Network Section

# Test Expected Result Pass/Fail
17.1 Hostname displayed e.g. "pedal"
17.2 Tap hostname → edit Text input appears
17.3 Change hostname + save Updates, may need reboot
17.4 Network mode shows DHCP or Static Current mode
17.5 Tap to toggle DHCP/Static Switches mode
17.6 Ethernet IP address displayed Shows the pedal's LAN IP
17.7 Ethernet MAC address displayed Shows the pedal's MAC
17.8 Gateway address displayed (if static) Shows gateway IP
17.9 DNS server displayed (if static) Shows DNS IP
17.10 Network mode shows DHCP or Static Current mode
17.11 Tap to toggle DHCP/Static Switches mode
17.12 IP, Gateway, DNS become editable (if static) Fields visible
17.13 Wi-Fi status shows connected or hotspot Current state
17.14 Tap Wi-Fi scan Lists available networks
17.15 Tap a network Connects
17.16 AUDIO: Wi-Fi connect doesn't drop audio NAM continues
17.17 Hotspot toggle Enables/disables hotspot
17.18 AUDIO: Hotspot toggle doesn't drop audio NAM continues

18. Settings — Bluetooth Section

# Test Expected Result Pass/Fail
18.1 Bluetooth status shows Available/Powered Current state
18.2 Discoverable toggle Toggles discoverability
18.3 MIDI over BT toggle Enables/disables BT MIDI
18.4 BT MIDI status shows running or not After enable
18.5 AUDIO: BT toggle doesn't drop audio NAM continues

19. Settings — System Section

# Test Expected Result Pass/Fail
19.1 System section shows CPU readout e.g. 42% with sys 30% dimmed beside it
19.2 Temperature displayed e.g. 53°C (should be < 80°C)
19.3 Uptime displayed Shows how long since last boot
19.4 Disk usage displayed Shows percentage + free space, e.g. 12% (6.2G free)
19.5 RAM usage displayed Shows percentage + used/total, e.g. 16% (1284/7869MB)
19.6 NAM Engine field shows "C++" or "PyTorch" Current engine mode
19.7 Tap "Switch" to change engine Reloads model in new engine
19.8 AUDIO: NAM survives engine switch CPU > 0% after change
19.9 Tap "Switch" back to previous engine Restores
19.10 Tap "Reset to Defaults" — confirm dialog Resets config.yaml to defaults
19.11 AUDIO: After reset, NAM still works May need to reload model
19.12 Tap "Restart Service" Toast appears, pedal restarts
19.13 AUDIO: After restart, wait 18s NAM loads back, CPU > 0%
19.14 Verify model reloaded after restart Same model as before restart
19.15 Tap "Reboot" — confirm dialog System reboots
19.16 AUDIO: After reboot, wait 30s Pedal comes back, NAM CPU > 0%

20. Detail Overlay (FX Block Controls)

# Test Expected Result Pass/Fail
20.1 Tap any FX block in pedal row Opens detail overlay
20.2 Block name and type shown at top Header text
20.3 Parameter controls visible (varies by block type) Knobs, sliders, toggles
20.4 Adjust a parameter Value updates
20.5 AUDIO: Parameter changes take effect Sound changes accordingly
20.6 AUDIO: No dropout adjusting parameters Smooth
20.7 Close detail overlay Returns to home screen

21. Model / IR Upload

# Test Expected Result Pass/Fail
21.1 Open Downloads → Local tab Lists installed .nam files
21.2 Check for upload button or file picker May need to use a file input in the UI
21.3 Upload a .nam file File uploads to pedal
21.4 Uploaded model appears in Local tab list Shows in model list
21.5 Tap uploaded model to load it Loads, green border appears
21.6 AUDIO: Uploaded model processes audio NAM CPU > 0%, different tone
21.7 Upload a .wav IR file IR uploads
21.8 Load the uploaded IR IR loaded indicator
21.9 AUDIO: IR affects tone EQ/space changes

22. Tuner (Full-Screen View)

# Test Expected Result Pass/Fail
22.1 Tap 🎵 tab in bottom bar Tuner opens full-screen
22.2 Note display shows -- when silent Large text centered
22.3 Cents bar shows flat/center/sharp indicator Visual position indicator
22.4 Frequency readout shows 0.0 Hz when silent Below note display
22.5 Play open E string (low E, ~82Hz) Shows E, cents bar near center
22.6 Play open A string (~110Hz) Shows A
22.7 Play open D string (~147Hz) Shows D
22.8 Play open G string (~196Hz) Shows G
22.9 Play open B string (~247Hz) Shows B
22.10 Play open high e string (~330Hz) Shows e or E
22.11 Bend a string sharp — cents bar moves right Red fill on sharp side
22.12 Bend a string flat — cents bar moves left Blue fill on flat side
22.13 Tune to pitch — cents bar turns green centered Green fill, narrow bar centered
22.14 AUDIO: Output is muted when tuner is active No sound from speakers
22.15 Tap "✕ Close Tuner" button Returns to home screen
22.16 AUDIO: Audio resumes after closing tuner Normal processing, NAM CPU > 0%

23. Stress Tests

# Test Expected Result Pass/Fail
23.1 Rapidly tap footswitch 10x Toggles each time, no crash
23.2 Rapidly change buffer size 5x in a row Each change works, NAM survives
23.3 Load 3 different NAM models in succession Each loads cleanly
23.4 Change routing mode 5x in a row No crash, CPU stable
23.5 Change channel mode 5x in a row No crash, CPU stable
23.6 Open/close all 5 overlays rapidly No UI freezes
23.7 Cycle through all 5 instruments rapidly No glitch
23.8 Leave pedal running 30 min with audio No audio dropouts or xruns
23.9 Hard-refresh browser (Ctrl+Shift+R) UI reloads cleanly, state intact
23.10 Kill browser, reopen — page loads fresh No stale state

24. Expected Reference Values

Setting Typical Value CPU Range
Buffer 128 @ 48k 2.67ms window 70-90% (may xrun)
Buffer 256 @ 48k 5.33ms window 60-80% (may xrun occasionally)
Buffer 512 @ 48k (default) 10.67ms window 35-50% (stable)
Buffer 1024 @ 48k 21.33ms window 18-25% (very stable)
4CM routing mode Both channels processed CPU ~1.5x mono
Model unloaded No NAM processing 0% NAM CPU
Bypass ON DI signal 0% NAM CPU
Tuner active Muted output 0% NAM CPU
96kHz sample rate Higher clarity CPU ~2x 48kHz
PyTorch engine In-process inference CPU varies by model

Known Quirks

  • After model unload: NAM CPU drops to 0% (no model to process). Reload a model to restore.
  • Engine switch (C++ ↔ PyTorch): May take 5-8 seconds. Model reloads in new engine.
  • Profile changes: ~6-10s JACK restart pause. NAM CPU should return >0% after restart.
  • Browser cache: Hard refresh (Ctrl+Shift+R) if UI seems stale after an update.
  • "Peaking/poping every second": If this returns, increase buffer to 1024. Should be fixed by GC disable + 512 default.