Driven largely by community bug reports and a spate of plugin-architecture cleanups. No major new features beyond infinite library scroll and a native folder picker — mostly correctness and ergonomics work.
Highway factory cleanup
A handful of fixes that make createHighway() genuinely usable for plugins that instantiate multiple highways (splitscreen especially):
- Leaving split-screen no longer breaks audio playback in single-highway mode
- Lyrics on/off preference now persists across sessions and per-instance
connect()gains{ onSongInfo, onError }callbacks so plugin-spawned panels can skip the default writes to shared HUD / audio / arrangement dropdown- Resize listener leak in
init()fixed — plugins creating highway instances repeatedly no longer accumulate dead listeners init(canvas, container)— optional container arg for plugins embedding a highway in their own div'ready'callback now fires on the correct per-instance factory, not the global singleton
Plugin context API
New window.slopsmith EventTarget:
- Events:
song:loaded,song:play,song:pause,song:ended,arrangement:changed,screen:changed window.slopsmith.navigate(screenId, params)for cross-plugin navigation with parameterswindow.slopsmith.currentSongfor direct state read
Library
- Infinite scroll in grid view — the 1/2/3/Next paginator is gone; scrolling loads more cards via
IntersectionObserver. Much less tedious for libraries in the hundreds+.
macOS / Docker scan diagnostics
Addresses user reports of scans silently failing:
- Per-file scan logging visible in the desktop log pane
- Permission errors surfaced explicitly with platform-specific hints ("grant Full Disk Access on macOS", "share this path in Docker Desktop → File Sharing")
- Scan banner now shows error states in red instead of vanishing
- Native folder picker button in Settings (📂 Browse) — no more pasting paths from Finder / Explorer
Dev hygiene
- Removed 18 broken symlinks from the core repo's
plugins/directory (thanks @ahonnecke)
Plugin fixes (available via Plugin Manager updates)
Two extraction plugins shared a top-level extractor.py that collided at Python import time when both were installed. Renamed in each:
slopsmith-plugin-rs1extract— update in Plugin Managerslopsmith-plugin-discextract— update in Plugin Manager
If you saw cannot import name 'MANIFEST_DIR' from 'extractor' with both installed, updating both plugins resolves it.
Downloads
- Linux:
.AppImageor.deb - Windows:
.exeinstaller - macOS:
.dmgor.zip