- server: collapse leading slashes so //host/x is never proxied off-host or redirected cross-origin; 1 MB body limit; max 10k anchors; a corrupt alignment.json no longer 500s /api/songs (song falls back to auto with a warning); comments on cookie scope and the loopback inner server - warp (ruling A6): adding/moving a manual anchor removes autos only within 10 s (MIDI) of the new/old position, never past a manual, plus any auto that would break audio monotonicity - page: first anchor clamped at >= 0 s; ruler scrubbing seeks on release; wording for the new auto-removal rule; removed-count excludes the dragged anchor; shows server warnings - manifest: unique tmp name for alignment.json; clear error for a corrupt file - resample test: speed asserted as a ratio to the direct path Co-Authored-By: Claude Opus 5.5 <[email protected]>
STSheets synthetic benchmark
A harness that measures guitar-tab transcription quality without any real recordings. It generates original songs in four tiers (t1a to t1d, from solo guitar up to a full band with a second guitar part), writes them as Guitar Pro files, renders audio with a bundled SoundFont, then runs the pipeline (Demucs source separation, Basic Pitch transcription, tempo and beat detection, tab fingering) and scores the result against the known truth. A song passes when merged-guitar pitch F1 is at least 0.85. Oracle modes feed ground truth to later stages so errors can be attributed to a single stage.
Prerequisites
- Bun
- ffmpeg (and ffprobe) on
PATH
Commands
bun install
bun run fetch-models # downloads the ONNX models into models/
bun test # one test is skipped unless the Demucs drum measurement is enabled by env
bun run bench gen --tiers t1a,t1b,t1c,t1d --seeds 1-5
bun run bench run --tiers t1a,t1b,t1c,t1d --seeds 1-5 \
--modes full,oracle-stems,oracle-tempo,oracle-notes --run-id baseline-2026-10-30
On-disk layout
data/<tier>/<seed>/holdssong.json,truth.gp,mix.wav,mix.mp3andstems/. Git-ignored.runs/<run-id>/<tier>/<seed>/<mode>/holdsnotes.json,out.gpandscore.json. Git-ignored.results/<run-id>.mdand.jsonare the committed reports.
Results
The baseline is in results/baseline-2026-10-30.md (tier summaries plus a per-song appendix) with the raw numbers in the matching .json.
Known caveats
- Vocals are rendered with a GM "Voice Oohs" patch, not real singing, so vocal numbers are indicative only.
- Drums use a heuristic baseline transcriber.
oracle-stemsmode feeds the true per-track stems, which reveals the track count and roles, so part-split F1 under oracle-stems (and the oracle modes built on it) is not meaningful.- The SONiVOX guitar is partly routed to Demucs' piano stem, a synthetic-timbre gap that lowers full-mode guitar scores.
- Fingering (string agreement) is informational, not pass/fail.
Reference songs (alignment)
Team-supplied real recordings and Guitar Pro-exported MIDI live in the git-ignored reference/ directory (never committed).
Register a song with bun run align add <audio> <midi> --id <id> [--title <t>] [--capo "<track name>=9"]; this writes reference/songs.json and guesses a scoring role per MIDI track (unmapped tracks are null).