尚未偵測到更新。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.