PLN's closed feedback loop: generate candidate loops with a settings profile → grade them on the full quality rubric → score the profile → search for the settings that maximise quality. Auto-tune the composite weights instead of hand-guessing them. WHY: the finder/grader/correlator exist; the composite weights W were "provisional, calibrate with #7". This builds the machine that calibrates them against measured grade — and measures the lift honestly rather than asserting a tuning is better. WHAT: - engine/autotune.py — evaluate(stems, settings) runs the finder with a profile, grades every produced candidate on the FULL rubric (grade.py adds dc / level / bass-mono / bar-consistency — features the finder's own score does NOT use, so tuning pulls in signal beyond seam/zc), aggregates objective = mean_grade × coverage. search() sweeps random|grid and always includes the current defaults (loops.W) as a baseline row so the report shows lift, not just a number. - autotune.py — CLI (--stems glob --n --method --max-stems); PII-safe aggregated leaderboard (counts, never filenames). - engine/loops.py — analyze_stem now accepts an optional `weights` override (defaults unchanged); the grid is preloaded once per stem (weight-independent) so the sweep is cheap — a scarcity-minded speedup. VALIDATION: - 4/4 mocked harness unit tests (aggregation, empty-set, ranked+baseline-included, weights threaded through to the finder). - Real end-to-end run, 2 drums stems × 8 configs: baseline objective 0.690 → best 0.763 (+10.5%); the defaults ranked LAST of 8 — the search found real lift. NOT DONE ON PURPOSE: the finder defaults (loops.W) are UNCHANGED. The winning profile (seam 0.4, zc 0.05, bars=(4,8)) is from a 2-stem sample AND seam/zc are in both the finder score and the grade (a confound) — so it's suggestive, not a mandate. Remaining for #19: recall-vs-provenance-GT as an anti-gaming 2nd objective, per-stem-role tuning (vocals=chops want different weights than drums), a full-corpus + demo-corpus campaign, an extract-once/score-many speedup, THEN adopt a validated profile as the default.
| Name |
Last commit
|
Last update |
|---|---|---|
| armada | Loading commit data... | |
| blocks | Loading commit data... | |
| blog | Loading commit data... | |
| copycat | Loading commit data... | |
| gifts | Loading commit data... | |
| lib-parvagues | Loading commit data... | |
| live | Loading commit data... | |
| output | Loading commit data... | |
| releases | Loading commit data... | |
| sandbox | Loading commit data... | |
| study | Loading commit data... | |
| test | Loading commit data... | |
| tools | Loading commit data... | |
| utils | Loading commit data... | |
| viz | Loading commit data... | |
| .gitignore | Loading commit data... | |
| BootTidal.hs | Loading commit data... | |
| BootTidal.hs.broken | Loading commit data... | |
| BootTidal.visuals.broken.hs | Loading commit data... | |
| CLAUDE.md | Loading commit data... | |
| LICENSE | Loading commit data... | |
| PatchBay_MultiChannel.xml | Loading commit data... | |
| PatchBay_Perf.xml | Loading commit data... | |
| PatchBay_Perf5.1.xml | Loading commit data... | |
| README.md | Loading commit data... | |
| backlog.md | Loading commit data... | |
| bullet_train.tidal | Loading commit data... | |
| collide.sh | Loading commit data... | |
| debug.tidal | Loading commit data... | |
| didacticpatternvisualizer.pde | Loading commit data... | |
| hello.sc | Loading commit data... | |
| init_midi.sh | Loading commit data... | |
| intro.md | Loading commit data... | |
| library.txt | Loading commit data... | |
| link_jack.sh | Loading commit data... | |
| link_samples.sh | Loading commit data... | |
| link_samples_all.txt | Loading commit data... | |
| main_fairbanks.scd | Loading commit data... | |
| notes.md | Loading commit data... | |
| perf-tray.py | Loading commit data... | |
| perf.sh | Loading commit data... | |
| samples.txt | Loading commit data... | |
| start_and_midi.scd | Loading commit data... | |
| test.tidal | Loading commit data... |