尚未检测到更新。GitHub 发布版本后会显示在这里。
个人 GitHub 账号下公开仓库的所有者可以登录并验证所有权,自行管理介绍,无需管理员批准。
登录并生成验证文件,在 30 分钟内将其提交到此仓库的默认分支。其他分支或分叉仓库中的文件无效。然后在下方检查文件,即可无需管理员批准直接管理项目。请保留文件以维持管理权限。
如需登录,将前往登录页面。登录后请回到此处,再次点击所选的验证按钮。
在项目文件夹中运行 /nomorevibe verify,即可验证所有权并自行管理介绍。
一分钟完成验证Re-score a piece for the players you actually have: an AI arranger plans, plain code checks every note (EvoHacks 2026)
翻译准备中
取自仓库 README
正在加载完整 README。 以下为已保存的摘录。
Re-score a piece for the players you actually have. The library holds six public-domain string-quartet excerpts with precomputed AI plans; you can also upload your own MusicXML. Give it a score (MusicXML) and your roster ("no horns, one bassoon, three altos, the second trumpet is a beginner"). An AI arranger decides which lines carry the piece and who covers each one; plain code transposes every part and checks every note against every player's range before anything prints.
Built in 27 hours for EvoHacks 2026 (theme: AI for Automation).查看完整 README ↗Re-score a piece for the players you actually have. The library holds six public-domain string-quartet excerpts with precomputed AI plans; you can also upload your own MusicXML. Give it a score (MusicXML) and your roster ("no horns, one bassoon, three altos, the second trumpet is a beginner"). An AI arranger decides which lines carry the piece and who covers each one; plain code transposes every part and checks every note against every player's range before anything prints.
Live: https://cover-part.vercel.app
Built in 27 hours for EvoHacks 2026 (theme: AI for Automation).
Small school, church, camp and community ensembles rarely have the instruments a published arrangement assumes. Today the director rewrites parts by hand in notation software: deciding what matters, who covers it, transposing for B♭ and E♭ instruments, and checking that nobody is asked for a note they can't play. It is slow, fiddly work that comes back every time the roster or the music changes.
MusicXML ──► music21 summarizes each line, 4 bars at a time ──► Claude plans the cover (JSON)
│
per-player parts (written pitch) + MIDI ◄── execute + check every note ◄── validate (→ revise)
claude-opus-5-5) finds the melody from the music, not from which line is on top: in the Dvořák "American" Lento the theme passes from the first violin to the cello at bar 11, and the AI follows it. It can also get this wrong (see the results below). It decides what to keep and what to drop when there are fewer players than lines, who covers each line based on register and idiom, and where a hand-off should happen. It returns a JSON plan with a reason for every decision.The baseline is deliberately not a strawman. It treats the highest line as the melody and the lowest as the bass, ranks the rest by activity, and gives each line to the free player whose range fits best, with octave shifts. It keeps a line with the same player while that player still fits it, and any player left without a line doubles the melody or the bass. Custom bands on the site get this plan, live. Both planners go through the same checker and the same deterministic repairs. The AI additionally gets its revision loop: the checker sends back problems it can't repair, and a revision is kept only if it leaves fewer problems in total.
Six CC0 excerpts × four rosters = 24 pairs (python -m coverpart.report, results in web/public/demos/comparison.json). For each pair the AI wrote 3 independent plans; each went through the same revision loop and repairs, and the checker kept the one with the fewest problems. It picked a plan other than the first in 11 of 24 pairs.
| Metric | AI (best of 3) | Rule-based baseline | AI better / worse / tie |
|---|---|---|---|
| Melody identified (bars of the reference melody the planner itself labels "melody") | 71% | 54% | 15 / 0 / 9 |
| Reference melody kept | 99% | 96% | 2 / 1 / 21 |
| Harmonic bass preserved (share of time the cover's lowest note has the original's bass pitch class) | 97% | 87% | 21 / 1 / 2 |
| Notes sounding under the bass line (measured per moment against the original; the original itself scores 0) | 4.0 | 14.7 | 20 / 0 / 4 |
| First draft only (the first plan the AI wrote, before any choice), after the same octave repair: notes still needing a fold | 3.1 | 4.2 | 7 / 3 / 14 |
| Single notes octave-folded in the final parts | 0.9 | 4.2 | 9 / 1 / 14 |
| Times a line changes hands between players | 2.3 | 2.6 | 10 / 8 / 6 |
| Line-bars left out (one bar of one original line that nobody plays) | 6.4 | 4.2 | 0 / 7 / 17 |
What this does and doesn't show:
Co-Authored-By: Claude trailer.engine/coverpart/arranger_rules.md) stay as Claude Code wrote them. Ryan isn't a musician and chose not to rewrite them./api/arrange). AI plans are precomputed for the 4 preset bands; live AI for custom bands would need an API key, which isn't enabled.#/why): live demos of the problem and of why both a simple rule and a bare AI fall short, plus the full scoreboard.uv venv .venv && uv pip install --python .venv/bin/python music21 anthropic fastapi "uvicorn[standard]" pytest
cd engine && ../.venv/bin/python -m pytest -q tests # engine invariants
../.venv/bin/python -m coverpart.cli build # precompute demos into web/public/demos
../.venv/bin/uvicorn coverpart.api:app --port 8000 # the engine API (custom bands)
cd ../web && npm install && npm run dev
The AI planner uses the Anthropic API when ANTHROPIC_API_KEY is set (structured outputs), and otherwise uses a local claude -p CLI.
Excerpts come from the OpenScore String Quartets corpus (CC0): Haydn Op. 76 No. 3 "Emperor" (theme and Var. II) and Op. 20 No. 2, Dvořák Op. 96 "American" (I and II), and Fanny Hensel's String Quartet in E♭ (Romanza). The reference melody maps in corpus/manifest.json were made by reading the notes, before any plan was generated.