Patch release focused on better error visibility, UI polish, and test coverage expansion.
Better error visibility
- Audio conversion failures now surface in the UI. When the server's WEM→MP3 pipeline fails (missing
vgmstream/ffmpeg, PSARC with no WEM files, sloppak with no stems), you now see a red banner with the actual reason instead of a silent blank<audio>element and a crypticMEDIA_ELEMENT_ERROR: Empty src attributein the console.
Bug fixes
- Volume slider now stays in sync with playback. Setting the slider to 30% and loading a new song no longer plays it at 100%. Also persists across page reloads, matching how
lefty/invertHighway/renderScale/showLyricsalready behaved. tuning_nameno longer mislabels 7+-string tunings. A 7-string all-zeros used to return "E Standard" (misleading — 7-string E standard has a low B, not E). Now falls through to numeric offsets for>6-string content.tuning_name([])returns"Unknown"instead of an empty string. Library cards for songs whose metadata couldn't produce offsets now show a visible label instead of a blank badge.
UI polish
- Favicon. A guitar emoji (🎸) placeholder so Slopsmith tabs are distinguishable from other browser tabs. Easy swap for a real logo later.
Test coverage
Pytest suite went from 44 tests / 2 files in v0.2.2 to 97 tests / 5 files covering wire-format defaults, sloppak_convert.py string helpers, gp2rs.py tempo/tick math, and JSON-safety of the WebSocket wire format. No user-facing change — foundation for catching regressions earlier.
Plugin fixes (update via Plugin Manager)
These aren't in the desktop bundle itself but are worth pulling from the Plugin Manager if you have them installed:
- Fretboard plugin — overlay no longer covers the player controls bar; added a visible
✕dismiss button. - 3dhighway plugin — actually respects the Invert toggle now (was ignored before).
- rs1extract / discextract — resolved a Python import collision that broke both when installed together.
Downloads
- Linux:
.AppImageor.deb - Windows:
.exeinstaller - macOS:
.dmgor.zip