Skip to content

feat(settings): Plugins > Drums settings page and end-of-song card - #24

Closed
mattromano wants to merge 4 commits into
got-feedBack:mainfrom
mattromano:feature/1-drums-settings-page
Closed

mattromano wants to merge 4 commits into
got-feedBack:mainfrom
mattromano:feature/1-drums-settings-page

Conversation

@mattromano

@mattromano mattromano commented Oct 10, 2026 •

Copy link
Copy Markdown

What

Refs #1, partly: (best score per song + difficulty; a full history is still open). Stacked on #23 (on #22 on #20) — this PR's own change is the last commit.

  • Settings page (screen.html + nav entry → Plugins → Drums): difficulty & assists, drum sounds (kit, ▶ Play test, volume), your kit (MIDI input, channel, pad tester, pad mapping with Learn), display & controls (view, offset, keyboard, 2D options), best scores, and Reset drum settings (keeps MIDI input, mapping and scores). Same per-browser settings as the ⚙ panel, kept in sync. While shown it registers a pseudo-instance so MIDI routes to the pad tester; per-visit setup comes from core's screen:changed event (no MutationObserver).
  • MIDI status (page + ⚙ panel): device, hits received, last note / velocity / channel and why a hit was dropped (no drum view focused, channel filter), or why the device failed to open.
  • Learn moved into a shared _learnConsume() used by the player and the page.
  • End-of-song card on song:ended (both views, only if the player hit something): final score with bonuses, stars, accuracy, notes hit, best streak / FC, chips for notes × multiplier, star power, dynamics, spot-on timing, rolls, solos; best score per song and difficulty in localStorage (drums_best_v1:<song>|<difficulty>) with NEW BEST SCORE. Closes on button / Esc / Enter / next song. z-index 40 (popover layer of the v3 chrome).

Dropped from the custom version: the page's Clone Hero kit-profile / velocity-threshold hints and MIDI auto-pick (custom 0.2.9-era features, not part of this port).

Screenshots

Settings page top, MIDI + pad tester, best scores + reset, and the end-of-song card:
(b4-settings-top.jpg, b4-settings-pad-tester.jpg, b4-settings-best-scores.jpg, b4-end-card.jpg)

Tests

  • node tests/screen.test.js — 26 pass (+ best-score key/record, MIDI status counting before routing, Learn assignment)
  • engine 44, session 40, highway3d 6, kits 6 — all pass; validator ok; node --check all JS
  • Manual in core (v3 shell): the nav entry mounts the page, controls fill from saved settings, 8 pad chips render, best score from a keyboard-played run shows on the page; the card shows after song:ended (synth volume set to 0; no audio played).

🤖 Generated with Claude Code

mattromano and others added 4 commits October 9, 2026 17:32
Score drum charts the way the rhythm games do: assets/engine.js is a
JavaScript port of YARG.Core's drums engine (LGPL-3.0, kept as its own
replaceable file with LICENSE.LGPL-3.0, LICENSE.GPL-3.0 and NOTICE.md),
driven through assets/session.js (MIT) which adds difficulty levels,
star power metadata, assists and timing / roll / drum-solo bonuses.

- Per-player difficulty Easy..Expert+ (settings, HUD badge, D/Shift+D).
  Expert drops x2 kicks; lower levels, star power, fills and solos come
  from the drum tab's feedpak 1.20.0 gameplay metadata (Expert only
  without it).
- Assists: auto kick / auto cymbals up to a difficulty (played on the
  drum sound at their own volume), timing presets, Pro cymbals, input
  offset.
- The 2D view marks hits / misses from the engine and draws a score HUD
  (multiplier, score, streak, stars, star power) with Score on.
- Drum-tab accents follow the authored `a` flag; x2 kicks map to GM 35.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Signed-off-by: mattromano <42412983+mattromano@users.noreply.github.com>
Add assets/highway3d.js, a three.js drum track in the style of the
classic drum games (MIT, original code, no artwork from those games):
pad lanes and a kick bar, bevelled rectangle pad gems, domed cymbals,
strikeline targets, hit flashes and sparks, star power / fill / solo
highlighting and a HUD with streak, multiplier, star power, score,
stars, accuracy and the difficulty badge. It renders the scoring
session from the previous change, through core's vendored three.js.

- View setting Auto (3D with WebGL2) / 3D / 2D; the main player swaps
  renderers on change; feedBackViz_drums3d / _drums2d for hosts.
- Keyboard drumming in both views (Keys, default on): B kick, F red,
  J/K/L toms, Shift or U/I/O cymbals, Enter star power.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Signed-off-by: mattromano <42412983+mattromano@users.noreply.github.com>
Closes the third-party load: the WebAudioFont player and its GM drum
sets now ship in assets/sounds/ and load from core's plugin assets
route, so the synth works offline. Adds a Kit setting with two real
multi-sampled acoustic kits (velocity layers, round-robins, hi-hat
chokes) played by assets/kits.js: Crocell (rock, CC BY 4.0, new
default) and Virtuosity (jazz, CC0), plus four GM kits (JCLive,
FluidR3 GM, SB Live!, Chaos). tools/build_sample_kit.py rebuilds the
sampled kits; licences and credits are in NOTICE.md (~12 MB total).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Signed-off-by: mattromano <42412983+mattromano@users.noreply.github.com>
Add a settings screen (screen.html, nav entry Plugins > Drums) with
every drum setting on one page, a pad tester that lights the lane each
pad counts as (Learn works there), a MIDI status line (hits received,
last note, why a hit was dropped) and a reset. It shares its controls
with the player's settings panel through the same setters.

When a played song ends, an end-of-song card shows the final score
with bonuses, stars, accuracy, streak / full combo and where the points
came from, and keeps the best score per song and difficulty in this
browser; the settings page lists them.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Signed-off-by: mattromano <42412983+mattromano@users.noreply.github.com>
@coderabbitai

coderabbitai Bot commented Oct 10, 2026

Copy link
Copy Markdown

Important

Review skipped

Too many files!

This PR contains 110 files, which is 10 over the limit of 100.

To get a review, reduce the PR to 100 files or fewer by splitting it into smaller PRs or changing its base branch.

Upgrade to a paid plan to raise the limit.

This review couldn't start because sufficient usage credits or metered capacity aren't available. Add credits or update usage-based reviews in the billing tab, then retry.

Check out review usage here.

⚙️ Run configuration
  • Configuration used: defaults
  • Review profile: CHILL
  • Plan: Advanced
  • Run ID: 5ae1ab58-2be6-4e0e-9e1d-dddbbd5da1b6

📥 Commits

Reviewing files that changed from the base of the PR and between 871eb0e and 72dfc37.


⛔ Files ignored due to path filters (256)
  • assets/sounds/kits/crocell/bell_v1_a.ogg is excluded by !**/*.ogg
  • assets/sounds/kits/crocell/bell_v1_b.ogg is excluded by !**/*.ogg
  • assets/sounds/kits/crocell/bell_v2_a.ogg is excluded by !**/*.ogg
  • assets/sounds/kits/crocell/bell_v2_b.ogg is excluded by !**/*.ogg
  • assets/sounds/kits/crocell/bell_v3_a.ogg is excluded by !**/*.ogg
  • assets/sounds/kits/crocell/bell_v3_b.ogg is excluded by !**/*.ogg
  • assets/sounds/kits/crocell/bell_v4_a.ogg is excluded by !**/*.ogg
  • assets/sounds/kits/crocell/bell_v4_b.ogg is excluded by !**/*.ogg
  • assets/sounds/kits/crocell/china_v1_a.ogg is excluded by !**/*.ogg
  • assets/sounds/kits/crocell/china_v1_b.ogg is excluded by !**/*.ogg
  • assets/sounds/kits/crocell/china_v2_a.ogg is excluded by !**/*.ogg
  • assets/sounds/kits/crocell/china_v2_b.ogg is excluded by !**/*.ogg
  • assets/sounds/kits/crocell/china_v3_a.ogg is excluded by !**/*.ogg
  • assets/sounds/kits/crocell/china_v3_b.ogg is excluded by !**/*.ogg
  • assets/sounds/kits/crocell/china_v4_a.ogg is excluded by !**/*.ogg
  • assets/sounds/kits/crocell/china_v4_b.ogg is excluded by !**/*.ogg
  • assets/sounds/kits/crocell/crash2_v1_a.ogg is excluded by !**/*.ogg
  • assets/sounds/kits/crocell/crash2_v1_b.ogg is excluded by !**/*.ogg
  • assets/sounds/kits/crocell/crash2_v2_a.ogg is excluded by !**/*.ogg
  • assets/sounds/kits/crocell/crash2_v2_b.ogg is excluded by !**/*.ogg
  • assets/sounds/kits/crocell/crash2_v3_a.ogg is excluded by !**/*.ogg
  • assets/sounds/kits/crocell/crash2_v3_b.ogg is excluded by !**/*.ogg
  • assets/sounds/kits/crocell/crash2_v4_a.ogg is excluded by !**/*.ogg
  • assets/sounds/kits/crocell/crash2_v4_b.ogg is excluded by !**/*.ogg
  • assets/sounds/kits/crocell/crash_v1_a.ogg is excluded by !**/*.ogg
  • assets/sounds/kits/crocell/crash_v1_b.ogg is excluded by !**/*.ogg
  • assets/sounds/kits/crocell/crash_v2_a.ogg is excluded by !**/*.ogg
  • assets/sounds/kits/crocell/crash_v2_b.ogg is excluded by !**/*.ogg
  • assets/sounds/kits/crocell/crash_v3_a.ogg is excluded by !**/*.ogg
  • assets/sounds/kits/crocell/crash_v3_b.ogg is excluded by !**/*.ogg
  • assets/sounds/kits/crocell/crash_v4_a.ogg is excluded by !**/*.ogg
  • assets/sounds/kits/crocell/crash_v4_b.ogg is excluded by !**/*.ogg
  • assets/sounds/kits/crocell/ftom1_v1_a.ogg is excluded by !**/*.ogg
  • assets/sounds/kits/crocell/ftom1_v1_b.ogg is excluded by !**/*.ogg
  • assets/sounds/kits/crocell/ftom1_v2_a.ogg is excluded by !**/*.ogg
  • assets/sounds/kits/crocell/ftom1_v2_b.ogg is excluded by !**/*.ogg
  • assets/sounds/kits/crocell/ftom1_v3_a.ogg is excluded by !**/*.ogg
  • assets/sounds/kits/crocell/ftom1_v3_b.ogg is excluded by !**/*.ogg
  • assets/sounds/kits/crocell/ftom1_v4_a.ogg is excluded by !**/*.ogg
  • assets/sounds/kits/crocell/ftom1_v4_b.ogg is excluded by !**/*.ogg
  • assets/sounds/kits/crocell/ftom2_v1_a.ogg is excluded by !**/*.ogg
  • assets/sounds/kits/crocell/ftom2_v1_b.ogg is excluded by !**/*.ogg
  • assets/sounds/kits/crocell/ftom2_v2_a.ogg is excluded by !**/*.ogg
  • assets/sounds/kits/crocell/ftom2_v2_b.ogg is excluded by !**/*.ogg
  • assets/sounds/kits/crocell/ftom2_v3_a.ogg is excluded by !**/*.ogg
  • assets/sounds/kits/crocell/ftom2_v3_b.ogg is excluded by !**/*.ogg
  • assets/sounds/kits/crocell/ftom2_v4_a.ogg is excluded by !**/*.ogg
  • assets/sounds/kits/crocell/ftom2_v4_b.ogg is excluded by !**/*.ogg
  • assets/sounds/kits/crocell/hhclosed_v1_a.ogg is excluded by !**/*.ogg
  • assets/sounds/kits/crocell/hhclosed_v1_b.ogg is excluded by !**/*.ogg
  • assets/sounds/kits/crocell/hhclosed_v2_a.ogg is excluded by !**/*.ogg
  • assets/sounds/kits/crocell/hhclosed_v2_b.ogg is excluded by !**/*.ogg
  • assets/sounds/kits/crocell/hhclosed_v3_a.ogg is excluded by !**/*.ogg
  • assets/sounds/kits/crocell/hhclosed_v3_b.ogg is excluded by !**/*.ogg
  • assets/sounds/kits/crocell/hhclosed_v4_a.ogg is excluded by !**/*.ogg
  • assets/sounds/kits/crocell/hhclosed_v4_b.ogg is excluded by !**/*.ogg
  • assets/sounds/kits/crocell/hhopen_v1_a.ogg is excluded by !**/*.ogg
  • assets/sounds/kits/crocell/hhopen_v1_b.ogg is excluded by !**/*.ogg
  • assets/sounds/kits/crocell/hhopen_v2_a.ogg is excluded by !**/*.ogg
  • assets/sounds/kits/crocell/hhopen_v2_b.ogg is excluded by !**/*.ogg
  • assets/sounds/kits/crocell/hhopen_v3_a.ogg is excluded by !**/*.ogg
  • assets/sounds/kits/crocell/hhopen_v3_b.ogg is excluded by !**/*.ogg
  • assets/sounds/kits/crocell/hhopen_v4_a.ogg is excluded by !**/*.ogg
  • assets/sounds/kits/crocell/hhopen_v4_b.ogg is excluded by !**/*.ogg
  • assets/sounds/kits/crocell/hhpedal_v1_a.ogg is excluded by !**/*.ogg
  • assets/sounds/kits/crocell/hhpedal_v1_b.ogg is excluded by !**/*.ogg
  • assets/sounds/kits/crocell/hhpedal_v2_a.ogg is excluded by !**/*.ogg
  • assets/sounds/kits/crocell/hhpedal_v2_b.ogg is excluded by !**/*.ogg
  • assets/sounds/kits/crocell/hhpedal_v3_a.ogg is excluded by !**/*.ogg
  • assets/sounds/kits/crocell/hhpedal_v3_b.ogg is excluded by !**/*.ogg
  • assets/sounds/kits/crocell/hhpedal_v4_a.ogg is excluded by !**/*.ogg
  • assets/sounds/kits/crocell/hhpedal_v4_b.ogg is excluded by !**/*.ogg
  • assets/sounds/kits/crocell/kick2_v1_a.ogg is excluded by !**/*.ogg
  • assets/sounds/kits/crocell/kick2_v1_b.ogg is excluded by !**/*.ogg
  • assets/sounds/kits/crocell/kick2_v2_a.ogg is excluded by !**/*.ogg
  • assets/sounds/kits/crocell/kick2_v2_b.ogg is excluded by !**/*.ogg
  • assets/sounds/kits/crocell/kick2_v3_a.ogg is excluded by !**/*.ogg
  • assets/sounds/kits/crocell/kick2_v3_b.ogg is excluded by !**/*.ogg
  • assets/sounds/kits/crocell/kick2_v4_a.ogg is excluded by !**/*.ogg
  • assets/sounds/kits/crocell/kick2_v4_b.ogg is excluded by !**/*.ogg
  • assets/sounds/kits/crocell/kick_v1_a.ogg is excluded by !**/*.ogg
  • assets/sounds/kits/crocell/kick_v1_b.ogg is excluded by !**/*.ogg
  • assets/sounds/kits/crocell/kick_v2_a.ogg is excluded by !**/*.ogg
  • assets/sounds/kits/crocell/kick_v2_b.ogg is excluded by !**/*.ogg
  • assets/sounds/kits/crocell/kick_v3_a.ogg is excluded by !**/*.ogg
  • assets/sounds/kits/crocell/kick_v3_b.ogg is excluded by !**/*.ogg
  • assets/sounds/kits/crocell/kick_v4_a.ogg is excluded by !**/*.ogg
  • assets/sounds/kits/crocell/kick_v4_b.ogg is excluded by !**/*.ogg
  • assets/sounds/kits/crocell/ride_v1_a.ogg is excluded by !**/*.ogg
  • assets/sounds/kits/crocell/ride_v1_b.ogg is excluded by !**/*.ogg
  • assets/sounds/kits/crocell/ride_v2_a.ogg is excluded by !**/*.ogg
  • assets/sounds/kits/crocell/ride_v2_b.ogg is excluded by !**/*.ogg
  • assets/sounds/kits/crocell/ride_v3_a.ogg is excluded by !**/*.ogg
  • assets/sounds/kits/crocell/ride_v3_b.ogg is excluded by !**/*.ogg
  • assets/sounds/kits/crocell/ride_v4_a.ogg is excluded by !**/*.ogg
  • assets/sounds/kits/crocell/ride_v4_b.ogg is excluded by !**/*.ogg
  • assets/sounds/kits/crocell/rimshot_v1_a.ogg is excluded by !**/*.ogg
  • assets/sounds/kits/crocell/rimshot_v1_b.ogg is excluded by !**/*.ogg
  • assets/sounds/kits/crocell/rimshot_v2_a.ogg is excluded by !**/*.ogg
  • assets/sounds/kits/crocell/rimshot_v2_b.ogg is excluded by !**/*.ogg
  • assets/sounds/kits/crocell/rimshot_v3_a.ogg is excluded by !**/*.ogg
  • assets/sounds/kits/crocell/rimshot_v3_b.ogg is excluded by !**/*.ogg
  • assets/sounds/kits/crocell/rimshot_v4_a.ogg is excluded by !**/*.ogg
  • assets/sounds/kits/crocell/rimshot_v4_b.ogg is excluded by !**/*.ogg
  • assets/sounds/kits/crocell/sidestick_v1_a.ogg is excluded by !**/*.ogg
  • assets/sounds/kits/crocell/sidestick_v1_b.ogg is excluded by !**/*.ogg
  • assets/sounds/kits/crocell/sidestick_v2_a.ogg is excluded by !**/*.ogg
  • assets/sounds/kits/crocell/sidestick_v2_b.ogg is excluded by !**/*.ogg
  • assets/sounds/kits/crocell/sidestick_v3_a.ogg is excluded by !**/*.ogg
  • assets/sounds/kits/crocell/sidestick_v3_b.ogg is excluded by !**/*.ogg
  • assets/sounds/kits/crocell/sidestick_v4_a.ogg is excluded by !**/*.ogg
  • assets/sounds/kits/crocell/sidestick_v4_b.ogg is excluded by !**/*.ogg
  • assets/sounds/kits/crocell/snare_v1_a.ogg is excluded by !**/*.ogg
  • assets/sounds/kits/crocell/snare_v1_b.ogg is excluded by !**/*.ogg
  • assets/sounds/kits/crocell/snare_v2_a.ogg is excluded by !**/*.ogg
  • assets/sounds/kits/crocell/snare_v2_b.ogg is excluded by !**/*.ogg
  • assets/sounds/kits/crocell/snare_v3_a.ogg is excluded by !**/*.ogg
  • assets/sounds/kits/crocell/snare_v3_b.ogg is excluded by !**/*.ogg
  • assets/sounds/kits/crocell/snare_v4_a.ogg is excluded by !**/*.ogg
  • assets/sounds/kits/crocell/snare_v4_b.ogg is excluded by !**/*.ogg
  • assets/sounds/kits/crocell/splash_v1_a.ogg is excluded by !**/*.ogg
  • assets/sounds/kits/crocell/splash_v1_b.ogg is excluded by !**/*.ogg
  • assets/sounds/kits/crocell/splash_v2_a.ogg is excluded by !**/*.ogg
  • assets/sounds/kits/crocell/splash_v2_b.ogg is excluded by !**/*.ogg
  • assets/sounds/kits/crocell/splash_v3_a.ogg is excluded by !**/*.ogg
  • assets/sounds/kits/crocell/splash_v3_b.ogg is excluded by !**/*.ogg
  • assets/sounds/kits/crocell/splash_v4_a.ogg is excluded by !**/*.ogg
  • assets/sounds/kits/crocell/splash_v4_b.ogg is excluded by !**/*.ogg
  • assets/sounds/kits/crocell/tom1_v1_a.ogg is excluded by !**/*.ogg
  • assets/sounds/kits/crocell/tom1_v1_b.ogg is excluded by !**/*.ogg
  • assets/sounds/kits/crocell/tom1_v2_a.ogg is excluded by !**/*.ogg
  • assets/sounds/kits/crocell/tom1_v2_b.ogg is excluded by !**/*.ogg
  • assets/sounds/kits/crocell/tom1_v3_a.ogg is excluded by !**/*.ogg
  • assets/sounds/kits/crocell/tom1_v3_b.ogg is excluded by !**/*.ogg
  • assets/sounds/kits/crocell/tom1_v4_a.ogg is excluded by !**/*.ogg
  • assets/sounds/kits/crocell/tom1_v4_b.ogg is excluded by !**/*.ogg
  • assets/sounds/kits/crocell/tom2_v1_a.ogg is excluded by !**/*.ogg
  • assets/sounds/kits/crocell/tom2_v1_b.ogg is excluded by !**/*.ogg
  • assets/sounds/kits/crocell/tom2_v2_a.ogg is excluded by !**/*.ogg
  • assets/sounds/kits/crocell/tom2_v2_b.ogg is excluded by !**/*.ogg
  • assets/sounds/kits/crocell/tom2_v3_a.ogg is excluded by !**/*.ogg
  • assets/sounds/kits/crocell/tom2_v3_b.ogg is excluded by !**/*.ogg
  • assets/sounds/kits/crocell/tom2_v4_a.ogg is excluded by !**/*.ogg
  • assets/sounds/kits/crocell/tom2_v4_b.ogg is excluded by !**/*.ogg
  • assets/sounds/kits/virtuosity/bell_v1_a.ogg is excluded by !**/*.ogg
  • assets/sounds/kits/virtuosity/bell_v1_b.ogg is excluded by !**/*.ogg
  • assets/sounds/kits/virtuosity/bell_v2_a.ogg is excluded by !**/*.ogg
  • assets/sounds/kits/virtuosity/bell_v2_b.ogg is excluded by !**/*.ogg
  • assets/sounds/kits/virtuosity/bell_v3_a.ogg is excluded by !**/*.ogg
  • assets/sounds/kits/virtuosity/bell_v3_b.ogg is excluded by !**/*.ogg
  • assets/sounds/kits/virtuosity/china_v1_a.ogg is excluded by !**/*.ogg
  • assets/sounds/kits/virtuosity/china_v1_b.ogg is excluded by !**/*.ogg
  • assets/sounds/kits/virtuosity/china_v2_a.ogg is excluded by !**/*.ogg
  • assets/sounds/kits/virtuosity/china_v2_b.ogg is excluded by !**/*.ogg
  • assets/sounds/kits/virtuosity/china_v3_a.ogg is excluded by !**/*.ogg
  • assets/sounds/kits/virtuosity/china_v3_b.ogg is excluded by !**/*.ogg
  • assets/sounds/kits/virtuosity/crash2_v1_a.ogg is excluded by !**/*.ogg
  • assets/sounds/kits/virtuosity/crash2_v2_a.ogg is excluded by !**/*.ogg
  • assets/sounds/kits/virtuosity/crash2_v3_a.ogg is excluded by !**/*.ogg
  • assets/sounds/kits/virtuosity/crash2_v4_a.ogg is excluded by !**/*.ogg
  • assets/sounds/kits/virtuosity/crash_v1_a.ogg is excluded by !**/*.ogg
  • assets/sounds/kits/virtuosity/crash_v1_b.ogg is excluded by !**/*.ogg
  • assets/sounds/kits/virtuosity/crash_v2_a.ogg is excluded by !**/*.ogg
  • assets/sounds/kits/virtuosity/crash_v2_b.ogg is excluded by !**/*.ogg
  • assets/sounds/kits/virtuosity/crash_v3_a.ogg is excluded by !**/*.ogg
  • assets/sounds/kits/virtuosity/crash_v3_b.ogg is excluded by !**/*.ogg
  • assets/sounds/kits/virtuosity/ftom1_v1_a.ogg is excluded by !**/*.ogg
  • assets/sounds/kits/virtuosity/ftom1_v1_b.ogg is excluded by !**/*.ogg
  • assets/sounds/kits/virtuosity/ftom1_v2_a.ogg is excluded by !**/*.ogg
  • assets/sounds/kits/virtuosity/ftom1_v2_b.ogg is excluded by !**/*.ogg
  • assets/sounds/kits/virtuosity/ftom1_v3_a.ogg is excluded by !**/*.ogg
  • assets/sounds/kits/virtuosity/ftom1_v3_b.ogg is excluded by !**/*.ogg
  • assets/sounds/kits/virtuosity/ftom1_v4_a.ogg is excluded by !**/*.ogg
  • assets/sounds/kits/virtuosity/ftom1_v4_b.ogg is excluded by !**/*.ogg
  • assets/sounds/kits/virtuosity/hhclosed_v1_a.ogg is excluded by !**/*.ogg
  • assets/sounds/kits/virtuosity/hhclosed_v1_b.ogg is excluded by !**/*.ogg
  • assets/sounds/kits/virtuosity/hhclosed_v2_a.ogg is excluded by !**/*.ogg
  • assets/sounds/kits/virtuosity/hhclosed_v2_b.ogg is excluded by !**/*.ogg
  • assets/sounds/kits/virtuosity/hhclosed_v3_a.ogg is excluded by !**/*.ogg
  • assets/sounds/kits/virtuosity/hhclosed_v3_b.ogg is excluded by !**/*.ogg
  • assets/sounds/kits/virtuosity/hhclosed_v4_a.ogg is excluded by !**/*.ogg
  • assets/sounds/kits/virtuosity/hhclosed_v4_b.ogg is excluded by !**/*.ogg
  • assets/sounds/kits/virtuosity/hhopen_v1_a.ogg is excluded by !**/*.ogg
  • assets/sounds/kits/virtuosity/hhopen_v1_b.ogg is excluded by !**/*.ogg
  • assets/sounds/kits/virtuosity/hhopen_v2_a.ogg is excluded by !**/*.ogg
  • assets/sounds/kits/virtuosity/hhopen_v2_b.ogg is excluded by !**/*.ogg
  • assets/sounds/kits/virtuosity/hhopen_v3_a.ogg is excluded by !**/*.ogg
  • assets/sounds/kits/virtuosity/hhopen_v3_b.ogg is excluded by !**/*.ogg
  • assets/sounds/kits/virtuosity/hhopen_v4_a.ogg is excluded by !**/*.ogg
  • assets/sounds/kits/virtuosity/hhopen_v4_b.ogg is excluded by !**/*.ogg
  • assets/sounds/kits/virtuosity/hhpedal_v1_a.ogg is excluded by !**/*.ogg
  • assets/sounds/kits/virtuosity/hhpedal_v1_b.ogg is excluded by !**/*.ogg
  • assets/sounds/kits/virtuosity/hhpedal_v2_a.ogg is excluded by !**/*.ogg
  • assets/sounds/kits/virtuosity/hhpedal_v2_b.ogg is excluded by !**/*.ogg
  • assets/sounds/kits/virtuosity/hhpedal_v3_a.ogg is excluded by !**/*.ogg
  • assets/sounds/kits/virtuosity/hhpedal_v3_b.ogg is excluded by !**/*.ogg
  • assets/sounds/kits/virtuosity/kick_v1_a.ogg is excluded by !**/*.ogg
  • assets/sounds/kits/virtuosity/kick_v1_b.ogg is excluded by !**/*.ogg
  • assets/sounds/kits/virtuosity/kick_v2_a.ogg is excluded by !**/*.ogg
  • assets/sounds/kits/virtuosity/kick_v2_b.ogg is excluded by !**/*.ogg
  • assets/sounds/kits/virtuosity/kick_v3_a.ogg is excluded by !**/*.ogg
  • assets/sounds/kits/virtuosity/kick_v3_b.ogg is excluded by !**/*.ogg
  • assets/sounds/kits/virtuosity/kick_v4_a.ogg is excluded by !**/*.ogg
  • assets/sounds/kits/virtuosity/kick_v4_b.ogg is excluded by !**/*.ogg
  • assets/sounds/kits/virtuosity/ride2_v1_a.ogg is excluded by !**/*.ogg
  • assets/sounds/kits/virtuosity/ride2_v1_b.ogg is excluded by !**/*.ogg
  • assets/sounds/kits/virtuosity/ride2_v2_a.ogg is excluded by !**/*.ogg
  • assets/sounds/kits/virtuosity/ride2_v2_b.ogg is excluded by !**/*.ogg
  • assets/sounds/kits/virtuosity/ride2_v3_a.ogg is excluded by !**/*.ogg
  • assets/sounds/kits/virtuosity/ride2_v3_b.ogg is excluded by !**/*.ogg
  • assets/sounds/kits/virtuosity/ride_v1_a.ogg is excluded by !**/*.ogg
  • assets/sounds/kits/virtuosity/ride_v1_b.ogg is excluded by !**/*.ogg
  • assets/sounds/kits/virtuosity/ride_v2_a.ogg is excluded by !**/*.ogg
  • assets/sounds/kits/virtuosity/ride_v2_b.ogg is excluded by !**/*.ogg
  • assets/sounds/kits/virtuosity/ride_v3_a.ogg is excluded by !**/*.ogg
  • assets/sounds/kits/virtuosity/ride_v3_b.ogg is excluded by !**/*.ogg
  • assets/sounds/kits/virtuosity/rimshot_v1_a.ogg is excluded by !**/*.ogg
  • assets/sounds/kits/virtuosity/rimshot_v1_b.ogg is excluded by !**/*.ogg
  • assets/sounds/kits/virtuosity/rimshot_v2_a.ogg is excluded by !**/*.ogg
  • assets/sounds/kits/virtuosity/rimshot_v2_b.ogg is excluded by !**/*.ogg
  • assets/sounds/kits/virtuosity/rimshot_v3_a.ogg is excluded by !**/*.ogg
  • assets/sounds/kits/virtuosity/rimshot_v3_b.ogg is excluded by !**/*.ogg
  • assets/sounds/kits/virtuosity/rimshot_v4_a.ogg is excluded by !**/*.ogg
  • assets/sounds/kits/virtuosity/rimshot_v4_b.ogg is excluded by !**/*.ogg
  • assets/sounds/kits/virtuosity/sidestick_v1_a.ogg is excluded by !**/*.ogg
  • assets/sounds/kits/virtuosity/sidestick_v1_b.ogg is excluded by !**/*.ogg
  • assets/sounds/kits/virtuosity/sidestick_v2_a.ogg is excluded by !**/*.ogg
  • assets/sounds/kits/virtuosity/sidestick_v2_b.ogg is excluded by !**/*.ogg
  • assets/sounds/kits/virtuosity/sidestick_v3_a.ogg is excluded by !**/*.ogg
  • assets/sounds/kits/virtuosity/sidestick_v3_b.ogg is excluded by !**/*.ogg
  • assets/sounds/kits/virtuosity/sidestick_v4_a.ogg is excluded by !**/*.ogg
  • assets/sounds/kits/virtuosity/sidestick_v4_b.ogg is excluded by !**/*.ogg
  • assets/sounds/kits/virtuosity/snare_v1_a.ogg is excluded by !**/*.ogg
  • assets/sounds/kits/virtuosity/snare_v1_b.ogg is excluded by !**/*.ogg
  • assets/sounds/kits/virtuosity/snare_v2_a.ogg is excluded by !**/*.ogg
  • assets/sounds/kits/virtuosity/snare_v2_b.ogg is excluded by !**/*.ogg
  • assets/sounds/kits/virtuosity/snare_v3_a.ogg is excluded by !**/*.ogg
  • assets/sounds/kits/virtuosity/snare_v3_b.ogg is excluded by !**/*.ogg
  • assets/sounds/kits/virtuosity/snare_v4_a.ogg is excluded by !**/*.ogg
  • assets/sounds/kits/virtuosity/snare_v4_b.ogg is excluded by !**/*.ogg
  • assets/sounds/kits/virtuosity/tom1_v1_a.ogg is excluded by !**/*.ogg
  • assets/sounds/kits/virtuosity/tom1_v1_b.ogg is excluded by !**/*.ogg
  • assets/sounds/kits/virtuosity/tom1_v2_a.ogg is excluded by !**/*.ogg
  • assets/sounds/kits/virtuosity/tom1_v2_b.ogg is excluded by !**/*.ogg
  • assets/sounds/kits/virtuosity/tom1_v3_a.ogg is excluded by !**/*.ogg
  • assets/sounds/kits/virtuosity/tom1_v3_b.ogg is excluded by !**/*.ogg
  • assets/sounds/kits/virtuosity/tom1_v4_a.ogg is excluded by !**/*.ogg
  • assets/sounds/kits/virtuosity/tom1_v4_b.ogg is excluded by !**/*.ogg
  • assets/sounds/kits/virtuosity/tom2_v1_a.ogg is excluded by !**/*.ogg
  • assets/sounds/kits/virtuosity/tom2_v1_b.ogg is excluded by !**/*.ogg
  • assets/sounds/kits/virtuosity/tom2_v2_a.ogg is excluded by !**/*.ogg
  • assets/sounds/kits/virtuosity/tom2_v2_b.ogg is excluded by !**/*.ogg
  • assets/sounds/kits/virtuosity/tom2_v3_a.ogg is excluded by !**/*.ogg
  • assets/sounds/kits/virtuosity/tom2_v3_b.ogg is excluded by !**/*.ogg
  • assets/sounds/kits/virtuosity/tom2_v4_a.ogg is excluded by !**/*.ogg
  • assets/sounds/kits/virtuosity/tom2_v4_b.ogg is excluded by !**/*.ogg

📒 Files selected for processing (110)
  • CHANGELOG.md
  • LICENSE.GPL-3.0
  • LICENSE.LGPL-3.0
  • NOTICE.md
  • README.md
  • assets/engine.js
  • assets/highway3d.js
  • assets/kits.js
  • assets/session.js
  • assets/sounds/12835_0_Chaos_sf2_file.js
  • assets/sounds/12835_0_FluidR3_GM_sf2_file.js
  • assets/sounds/12835_0_JCLive_sf2_file.js
  • assets/sounds/12835_0_SBLive_sf2.js
  • assets/sounds/12836_0_Chaos_sf2_file.js
  • assets/sounds/12836_0_FluidR3_GM_sf2_file.js
  • assets/sounds/12836_0_JCLive_sf2_file.js
  • assets/sounds/12836_0_SBLive_sf2.js
  • assets/sounds/12837_0_Chaos_sf2_file.js
  • assets/sounds/12837_0_FluidR3_GM_sf2_file.js
  • assets/sounds/12837_0_JCLive_sf2_file.js
  • assets/sounds/12837_0_SBLive_sf2.js
  • assets/sounds/12838_0_Chaos_sf2_file.js
  • assets/sounds/12838_0_FluidR3_GM_sf2_file.js
  • assets/sounds/12838_0_JCLive_sf2_file.js
  • assets/sounds/12838_0_SBLive_sf2.js
  • assets/sounds/12840_0_Chaos_sf2_file.js
  • assets/sounds/12840_0_FluidR3_GM_sf2_file.js
  • assets/sounds/12840_0_JCLive_sf2_file.js
  • assets/sounds/12840_0_SBLive_sf2.js
  • assets/sounds/12841_0_Chaos_sf2_file.js
  • assets/sounds/12841_0_FluidR3_GM_sf2_file.js
  • assets/sounds/12841_0_JCLive_sf2_file.js
  • assets/sounds/12841_0_SBLive_sf2.js
  • assets/sounds/12842_0_Chaos_sf2_file.js
  • assets/sounds/12842_0_FluidR3_GM_sf2_file.js
  • assets/sounds/12842_0_JCLive_sf2_file.js
  • assets/sounds/12842_0_SBLive_sf2.js
  • assets/sounds/12843_0_Chaos_sf2_file.js
  • assets/sounds/12843_0_FluidR3_GM_sf2_file.js
  • assets/sounds/12843_0_JCLive_sf2_file.js
  • assets/sounds/12843_0_SBLive_sf2.js
  • assets/sounds/12844_0_Chaos_sf2_file.js
  • assets/sounds/12844_0_FluidR3_GM_sf2_file.js
  • assets/sounds/12844_0_JCLive_sf2_file.js
  • assets/sounds/12844_0_SBLive_sf2.js
  • assets/sounds/12845_0_Chaos_sf2_file.js
  • assets/sounds/12845_0_FluidR3_GM_sf2_file.js
  • assets/sounds/12845_0_JCLive_sf2_file.js
  • assets/sounds/12845_0_SBLive_sf2.js
  • assets/sounds/12846_0_Chaos_sf2_file.js
  • assets/sounds/12846_0_FluidR3_GM_sf2_file.js
  • assets/sounds/12846_0_JCLive_sf2_file.js
  • assets/sounds/12846_0_SBLive_sf2.js
  • assets/sounds/12847_0_Chaos_sf2_file.js
  • assets/sounds/12847_0_FluidR3_GM_sf2_file.js
  • assets/sounds/12847_0_JCLive_sf2_file.js
  • assets/sounds/12847_0_SBLive_sf2.js
  • assets/sounds/12848_0_Chaos_sf2_file.js
  • assets/sounds/12848_0_FluidR3_GM_sf2_file.js
  • assets/sounds/12848_0_JCLive_sf2_file.js
  • assets/sounds/12848_0_SBLive_sf2.js
  • assets/sounds/12849_0_Chaos_sf2_file.js
  • assets/sounds/12849_0_FluidR3_GM_sf2_file.js
  • assets/sounds/12849_0_JCLive_sf2_file.js
  • assets/sounds/12849_0_SBLive_sf2.js
  • assets/sounds/12850_0_Chaos_sf2_file.js
  • assets/sounds/12850_0_FluidR3_GM_sf2_file.js
  • assets/sounds/12850_0_JCLive_sf2_file.js
  • assets/sounds/12850_0_SBLive_sf2.js
  • assets/sounds/12851_0_Chaos_sf2_file.js
  • assets/sounds/12851_0_FluidR3_GM_sf2_file.js
  • assets/sounds/12851_0_JCLive_sf2_file.js
  • assets/sounds/12851_0_SBLive_sf2.js
  • assets/sounds/12852_0_Chaos_sf2_file.js
  • assets/sounds/12852_0_FluidR3_GM_sf2_file.js
  • assets/sounds/12852_0_JCLive_sf2_file.js
  • assets/sounds/12852_0_SBLive_sf2.js
  • assets/sounds/12853_0_Chaos_sf2_file.js
  • assets/sounds/12853_0_FluidR3_GM_sf2_file.js
  • assets/sounds/12853_0_JCLive_sf2_file.js
  • assets/sounds/12853_0_SBLive_sf2.js
  • assets/sounds/12855_0_Chaos_sf2_file.js
  • assets/sounds/12855_0_FluidR3_GM_sf2_file.js
  • assets/sounds/12855_0_JCLive_sf2_file.js
  • assets/sounds/12855_0_SBLive_sf2.js
  • assets/sounds/12857_0_Chaos_sf2_file.js
  • assets/sounds/12857_0_FluidR3_GM_sf2_file.js
  • assets/sounds/12857_0_JCLive_sf2_file.js
  • assets/sounds/12857_0_SBLive_sf2.js
  • assets/sounds/12858_0_Chaos_sf2_file.js
  • assets/sounds/12858_0_FluidR3_GM_sf2_file.js
  • assets/sounds/12858_0_JCLive_sf2_file.js
  • assets/sounds/12858_0_SBLive_sf2.js
  • assets/sounds/12859_0_Chaos_sf2_file.js
  • assets/sounds/12859_0_FluidR3_GM_sf2_file.js
  • assets/sounds/12859_0_JCLive_sf2_file.js
  • assets/sounds/12859_0_SBLive_sf2.js
  • assets/sounds/README.md
  • assets/sounds/WebAudioFontPlayer.js
  • assets/sounds/kits/crocell/kit.json
  • assets/sounds/kits/virtuosity/kit.json
  • plugin.json
  • screen.html
  • screen.js
  • tests/engine.test.js
  • tests/highway3d.test.js
  • tests/kits.test.js
  • tests/screen.test.js
  • tests/session.test.js
  • tools/build_sample_kit.py

You can disable this status message by setting the reviews.review_status to false in the CodeRabbit configuration file.

  • Autofix · Keep fixing CodeRabbit findings and required CI, and resolving merge conflicts

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

@mattromano

Copy link
Copy Markdown
Author

Closing to keep the drums work reviewable: I've narrowed it to scoring (#25) and the 3D highway (#26). Sampled kits and the settings page may come back later as their own smaller PRs.

@mattromano mattromano closed this Oct 15, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant