mirror of
https://github.com/got-feedBack/feedBack.git
synced 2026-07-21 20:31:21 +00:00
* feat(capabilities): add core-owned midi-input control-plane domain (#873, #880) The MIDI analog of audio-input: a core-owned provider-coordinator over MIDI device discovery, selection, and shared open/close sessions. Separate from audio-input (whose source/open contract is audio-frame-centric) and not owned by any feature plugin, so the device-access boundary outlives the input-setup wizard. `discover` is the Web-MIDI permission boundary; selection persists by redaction-safe logicalSourceKey; diagnostics redact device labels and never carry raw MIDI messages. - static/capabilities/midi-input.js + load-order wiring in both shells - spec 012 + capability-domains/safety-matrix entries; midi-control narrowed to mappings-only (split) - 9 domain tests against the real runtime Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> * feat(input_setup): bundled plugin owning input-calibration + Web-MIDI provider (#872) Bundled core plugin that supplies the Web-MIDI source provider to the core midi-input domain, owns the input-calibration workflow domain (run/status/ inspect), and renders the per-instrument wizard (guitar/bass -> audio-input + note_detect; keys/drums -> midi-input live note/pad test). Idempotent hydration; redaction-safe. .gitignore allowlists the in-tree plugin. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> * feat(onboarding): input-device setup step between paths and calibration (#874) After instrument-path selection and before the note-detect calibration challenge, dispatch input-calibration `run` (fire-and-launch) and await the `calibration-done` event. Fail-soft: a non-handled outcome (plugin/runtime absent) advances immediately so onboarding can never be stranded. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> * refactor(midi-input): ship a built-in Web-MIDI provider in the core domain Move the Web-MIDI source provider out of input_setup and into the core midi-input domain so every consumer (piano, drums, input_setup) gets MIDI devices from the domain without depending on any one plugin being loaded. input_setup is now a pure midi-input requester (manifest role updated). Prepares piano/drums full consumption (#876/#877). +1 domain test. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> * feat(input_setup): Settings panel to re-run input setup (#878) Adds a settings.html with a "Set up input devices" button (window ._inputSetupRelaunch) that re-runs the wizard for the player's selected instrument paths (from /api/progression; falls back to all instruments). Makes the calibration wizard re-launchable outside first-run onboarding. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> * docs(midi-control): formalize the midi-input/midi-control split (#882) Narrow the reserved midi-control domain to mappings ONLY (CC/pitchbend/note → action routing), consuming the delivered midi-input domain for device access. Adds spec 013 defining the contract + intended consumers (feedback-plugin-midi, drums learn-mode), updates the safety-matrix row, and cross-references it from capability-domains. Per governance, midi-control stays RESERVED (no runtime domain) until a concrete mapping consumer + tests exist. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> * fix(onboarding): wait for input_setup before the calibration step (#874) The input-setup wizard is a mandatory onboarding step, but plugins load asynchronously — in the desktop app (40+ plugins) the user can reach path selection and click Next before input_setup has registered its input-calibration owner. The dispatch then got a no-owner outcome and onboarding fell through to the calibration challenge, silently skipping the wizard. Now wait (bounded, 8s) for the plugin's public global before dispatching; fall through only if it never appears. Race-verified. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> * feat(onboarding): add Song directory step after name+avatar (#874) New first-run step (now step 2 of 4: name+avatar → song directory → paths → calibration challenge) where the player sets their songs folder, fixing the "folder not configured" error on a fresh install. Saves to settings (dlc_dir) and kicks a library scan; persists to config.json so it survives restart. A native folder picker is offered on desktop (window.slopsmithDesktop .pickDirectory); web users type/paste the path. "Skip for now" leaves it unconfigured (settable later in Settings). Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> * fix(input_setup): filter MIDI entries out of the guitar audio-input picker (#876) Other plugins export pseudonymized MIDI sources ('midi-input-N') into the audio-input domain; they aren't audio inputs and the cryptic labels confused the guitar/bass device dropdown. Filter them out so only real audio inputs show. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> * fix(input_setup): de-dupe audio input picker entries (#876) The desktop audio engine enumerates the same device under multiple driver types, so the guitar audio-input dropdown showed repeated entries. De-dupe by display label (paired with the desktop fix that surfaces real device names). Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> * fix(midi-input): drop vanished devices on re-discovery; reset setup confirm on switch Codex preflight findings: - midi-input domain `_discover()` only upserted enumerated sources, so an unplugged device (statechange re-discovery) lingered in list-sources and later open/select hit stale state. Reconcile each provider's sources against the fresh enumeration (close any live session, keep the selectedKey preference). - input_setup MIDI panel left "Continue" enabled (and the instrument marked done) after switching the device selection following a prior hit. Reset the waiting state + disable Continue on every selection change, and discard a stale open if the selection changed mid-await. +1 reconciliation test. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> * fix(midi-input): coalesce concurrent opens; commit shown audio source pre-calibration Codex re-review (round 2): - midi-input domain: two concurrent open-source calls for the same source both passed the `sessions.get` guard and each called provider.open(), which for the built-in Web-MIDI provider overwrites the shared input.onmidimessage handler and orphans the earlier session — leaving the device silent. Coalesce in-flight opens onto one provider session (await the pending open, adopt its session; re-check after open and release a redundant handle if another open won). +test. - input_setup: the guitar/bass audio <select> shows its first option by default but fires no `change`, so on a first run with nothing selected, audio-input was never told before launchCalibration(). Commit the shown option on render. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> * fix(midi-input): longer timeout for MIDI permission commands; stale-open guard in wizard Codex re-review (round 3): - The advertised command surface ran `discover`/`open-source` through the 250 ms default handler timeout, but those front a real Web-MIDI permission prompt / device open that commonly takes longer, so dispatch returned `failed` while the operation was still completing. Add per-(capability,command) timeout overrides (15 s for those two), folding the existing audio-mix special-case into the same table so both the command() and dispatch() paths honor it. - input_setup MIDI panel: openSelected() compared the mutable shared `activeKey` after its awaits, so a device switch mid-open could bind the old device's listener / close the wrong session. Capture the requested key in a local and use a generation guard to discard a superseded open. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> * fix(onboarding): detect 200-with-error song-dir saves; close MIDI session on skip Codex re-review (round 4): - /api/settings reports an invalid folder as a 200 response with an `error` body (a bare dict return, not a non-2xx status), so saveSongDir's res.ok-only check treated the failure as success and advanced onboarding without saving. Parse the body and throw on `error` too. - input_setup: the opened MIDI test session was only closed on the Continue button, so using the generic "Skip for now" after scanning leaked the listener and kept the Web-MIDI input live. Run teardown on every panel exit via a per-panel cleanup hook invoked by advance(). Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> * fix(input_setup): don't hard-code Web MIDI in the device wizard Codex re-review (round 5): the MIDI panel gated availability on navigator.requestMIDIAccess and filtered sources to providerId === 'web-midi', which defeats the midi-input domain's provider-coordinator abstraction — a native/desktop MIDI adapter registered with the domain would be reported unavailable and hidden from the picker. Gate availability on the domain (window.slopsmith.midiInput) and show every source it surfaces. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> --------- Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com> |
||
|---|---|---|
| .claude/skills | ||
| .github | ||
| .specify | ||
| data/progression | ||
| docs | ||
| lib | ||
| plugins | ||
| scripts | ||
| specs | ||
| static | ||
| tests | ||
| .dockerignore | ||
| .gitattributes | ||
| .gitignore | ||
| build-proxmox-ct.sh | ||
| CHANGELOG.md | ||
| CLAUDE.md | ||
| CONTRIBUTING.md | ||
| docker-compose.nas.yml | ||
| docker-compose.yml | ||
| Dockerfile | ||
| LICENSE | ||
| main.py | ||
| package-lock.json | ||
| package.json | ||
| playwright.config.ts | ||
| pyproject.toml | ||
| README.md | ||
| requirements-test.txt | ||
| requirements.txt | ||
| server.py | ||
| SUPPORTERS.md | ||
| tailwind.config.js | ||
| TODO.md | ||
| uv.lock | ||
| VERSION | ||
fee[dB]ack
Plugins
| Plugin | Description | Install |
|---|---|---|
| Create from Tab | Search Ultimate Guitar for GP tabs and convert to playable songs | git clone ...slopsmith-plugin-ug.git ultimate_guitar |
| Import Tab | Drag and drop Guitar Pro files to create songs | git clone ...slopsmith-plugin-tabimport.git tab_import |
| Practice Journal | Auto-track practice time, speed, loops. Dashboard with charts | git clone ...slopsmith-plugin-practice.git practice_journal |
| Setlist Builder | Create ordered playlists with sequential playback | git clone ...slopsmith-plugin-setlist.git setlist |
| Metronome | Audible click and visual beat flash synced to song tempo | git clone ...slopsmith-plugin-metronome.git metronome |
| Tone Player | View amp/pedal/cab signal chains with gear artwork | git clone ...slopsmith-plugin-tones.git tones |
| Fretboard View | Live fretboard overlay showing active notes in real-time | git clone ...slopsmith-plugin-fretboard.git fretboard |
| Tab View | Scrolling guitar tablature notation via alphaTab | git clone ...slopsmith-plugin-tabview.git tab_view |
| MIDI Amp Control | Auto-switch amp/modeler presets via MIDI on tone changes | git clone ...slopsmith-plugin-midi.git midi_amp |
| Section Map | Color-coded song structure minimap with clickable navigation | git clone ...slopsmith-plugin-sectionmap.git section_map |
| Arrangement Editor | DAW-like visual editor for creating and editing song note charts | git clone ...slopsmith-plugin-editor.git editor |
| MIDI Capo | MIDI capo control for real-time transposition | git clone ...slopsmith-plugin-midi-capo.git midi_capo |
| Note Detection | Real-time pitch detection and scoring against highway notes | git clone ...slopsmith-plugin-notedetect.git note_detect |
| Find More | Search for more songs by the same artist | git clone ...slopsmith-plugin-find-more.git find_more |
| Piano Highway | Scrolling piano/keyboard view for Keys arrangements with MIDI input | git clone ...slopsmith-plugin-piano.git piano |
| Studio | Collaborative band recording and multi-track mixing | git clone ...slopsmith-plugin-studio.git studio |
| Drum Highway | Lane-based drum highway with MIDI drum pad input and built-in sounds | git clone ...slopsmith-plugin-drums.git drums |
| Split Screen | 2-4 highway panels side-by-side for multi-arrangement practice | git clone ...slopsmith-plugin-splitscreen.git splitscreen |
| Stems Mixer | Per-stem mute/volume controls for .sloppak songs | git clone ...slopsmith-plugin-stems.git stems |
| Invert Highway | Flip the highway note direction | git clone ...slopsmith-plugin-invert-highway.git invert_highway |
| Jumping Tab | Yousician-style 2D horizontal tab with trajectory arcs and hopping ball | git clone ...slopsmith-plugin-jumpingtab.git jumpingtab |
| Step Mode | Step-by-step practice mode — highway freezes at each note until played (via Note Detection) or Space | git clone ...slopsmith-plugin-stepmode.git step_mode |
| Lyrics Sync | Generate synced LRC lyrics from text + vocals stem via Whisper alignment | git clone ...slopsmith-plugin-lyrics-sync.git lyrics_sync |
| Lyrics Karaoke | Per-syllable karaoke pitch ribbon for sloppak songs (Whisper alignment + librosa pYIN) | git clone ...slopsmith-plugin-lyrics-karaoke.git lyrics_karaoke |
| NAM Tone Engine | In-browser amp modeling with NAM WASM, cabinet IRs, tone auto-switching | git clone ...slopsmith-plugin-nam-tone.git nam_tone |
| Guitar Theory Lab | Explore scales, chords, intervals, tunings, and voicings on a fully interactive fretboard | git clone ...slopsmith-plugin-nam-tone.git guitar-theory-lab |
| Themes | Offers several basic recolorings of the interface | git clone ...slopsmith-plugin-themes.git themes |
| Update Manager | Installs, updates, and uninstalls other plugins and the slopsmith core itself | git clone ...slopsmith-update-manager.git update_manager |
| Tuner | Floating tuner with customizable tunings | git clone ...slopsmith-plugin-tuner.git tuner |
| Simplify Chords | Changes complex chords on the note highway to simpler ones. Inspired by Ultimate Guitar's Simplify button. | git clone ...slopsmith-plugin-simplify-chords.git simplify-chords |
| Key Bindings | Highway key bindings for keyboard and TV remote | git clone ...slopsmith-plugin-key-bindings.git key_bindings |
| Folder Organizer | Organize your sloppak DLC songs into a folder tree view, grouped by subfolder name | git clone ...slopsmith-plugin-folder-organizer.git folder-organizer |
| SlopScale | Scale, arpeggio, and sweep-arpeggio practice routines with 3D highway, 2D highway, and tab renderers. Pathway selector, CAGED shape-run arpeggios, and generated audio backing. | git clone ...slopsmith-plugin-slopscale.git slopscale |
| NAM Rig Builder | Map tones to chained NAM neural-amp rigs (tone3000 captures + IRs) — full pedal→amp→cab playback, per-stage bypass, and a gear catalog | git clone ...slopsmith-plugin-nam-rig-builder.git nam_rig_builder |
| Audio Preview | Quick audio previews from library cards with configurable start time, volume, and duration | git clone ...slopsmith-plugin-audio-preview.git audio_preview |
| Song Mastery | Auto-adjusts difficulty based on your rolling note accuracy and saves the slider position per song | git clone ...slopsmith-plugin-song-mastery.git song_mastery |
| Song Preview | Quickly hear previews of songs in your library with a clean visual indicator of what's playing. Supports .sloppak and loose folders song formats, with the visual indicator matching up to whatever theme you are using! | git clone ...slopsmith-plugin-song-preview.git song_preview |
| Mobile Note Highway | Touch-optimized player with collapsible controls, highway gestures, and device-adaptive layouts for phones and tablets | git clone ...slopsmith-plugin-mobile-note-highway.git mobile_note_highway |
| Shuffle | Random playback from your library — artist & tuning filters, auto-advance with countdown popup, note_detect compatible | git clone https://github.com/Erikcb91/Slopsmith-Shuffle-Mode.git shuffle |
Install any plugin by cloning it into your plugins/ directory and restarting:
cd plugins
git clone https://github.com/got-feedback/feedback-plugin-ug.git ultimate_guitar
docker compose restart