{"id":"505f31a2-0497-4fa8-a303-cb23d7b61ef4","slug":"kengraver","kind":"skill","name":"kengraver","summary":"Agent-assisted scanned score transcription to MusicXML: reusable skill, reviewed examples, and regression checks","owner":"katiahayati","repoUrl":"https://github.com/katiahayati/kengraver","license":"MIT","licenseTier":"permissive","trust":"community","stars":2,"match":null,"fewStars":true,"format":"skill","createdAt":"2026-09-07T05:05:12.000Z","addedAt":"2026-10-22T01:50:00.812Z","logoUrl":"https://avatars.githubusercontent.com/u/4028737?v=4","linkOnly":false,"collection":null,"skillPath":null,"categories":["writing"],"tags":[],"runtime":"binary","local":true,"cloudCapable":false,"cloudCapability":"unknown","cloudReadyOnPlatform":false,"needsApiKey":false,"reviewed":false,"syncedAt":"2026-10-26T21:36:37.487Z","sample":false,"url":"https://conduits.dev/tools/kengraver","language":"Python","transports":["stdio"],"install":{},"requirements":{"env":[],"upstreamMayCharge":false},"tools":null,"readme":"# Kengraver\n\nA shareable agent skill for turning scanned sheet music into editable MusicXML:\noptical recognition when useful, visual score reading, explicit transcription\ndata, and rendered proofreading. A second, independently installable skill adds\nword-aligned translation notes for learning vocal music.\n\n## Translation notes for singers\n\n[Score Lyric Gloss — installation and user guide](skills/score-lyric-gloss/README.md)\nadds editable meanings in source-word order without changing the music or original\nlyrics. It is a learning aid, not alternate singable lyrics. Use it with an agent,\nor supply your own translations using the Python-only command-line helper.\nThe guide includes a runnable two-bar example, appearance controls and checks.\n\nIn Codex, ask:\n\n> Use $skill-installer to install skills/score-lyric-gloss from katiahayati/kengraver.\n\nAlready have correct MusicXML? This skill works on its own. Starting with a scan\nor incorrect underlay? Use the transcription workflow below first. Both skills'\noriginal code and instructions are MIT-licensed.\n\n## Score transcription\n\nThis is **not a trained model or a one-click OMR service**. The agent reads and\ncorrects the music; the bundled tools encode and check it. Results depend on the\nmodel, scan and review effort. Successful import can preserve a wrong reading.\n\n## Install the skill\n\nIn Codex, ask:\n\n> Use $skill-installer to install skills/score-transcription from katiahayati/kengraver.\n\nAlternatively, copy the complete `skills/score-transcription` folder into\n`~/.agents/skills/score-transcription`. Do not replace an existing installation\nwithout saving its local changes. Start a new session if it is not discovered.\nSee the [official skills guide](https://learn.chatgpt.com/docs/build-skills).\n\nThen ask, for example:\n\n> Use $score-transcription on this scan. Include all vocal and piano parts and\n> the German lyrics. Page layout and expressive markings are optional. First\n> transcribe a difficult representative passage, compare the render to the scan,\n> and record uncertainties before continuing.\n\nSpecify any playback-instrument preference yourself; voice-to-oboe and a\nparticular lyric language are not universal defaults. Work is remembered through\nscore state files, lessons and tests, not changes to model weights.\n\n## Tools and a reproducible example\n\nTested platform: Ubuntu 24.04 / Linux x86_64 / Python 3.12. Other platforms are\nnot verified. See [setup](skills/score-transcription/references/setup.md) for\nchecksum-pinned MuseScore/Audiveris installation. Binaries are not included.\nOMR is optional; the encoder does not require a cloud account or model API key.\n\nFrom this repository:\n\n```sh\npython3 -m venv .venv\n.venv/bin/pip install -r skills/score-transcription/assets/requirements.txt\n.venv/bin/python -m unittest discover -s tests -v\n.venv/bin/python skills/score-transcription/scripts/scoretool.py build scores/luonnotar/pilot/01-opening.json --out output/opening.musicxml\n.venv/bin/python skills/score-transcription/scripts/scoretool.py compare tests/fixtures/luonnotar/01-opening.musicxml output/opening.musicxml\n```\n\nWith the toolchain installed:\n\n```sh\n.venv/bin/python skills/score-transcription/scripts/scoretool.py render output/opening.musicxml --out output/rendered --tools /path/to/tools\n.venv/bin/python skills/score-transcription/scripts/scoretool.py validate output/opening.musicxml --roundtrip output/rendered/opening.musicxml\n```\n\nCompare the rendered page to the [opening source crop](skills/score-transcription/assets/cases/opening.png).\nThe three JSON excerpts total nine measures, **not the full Luonnotar score**.\nThey are preserved historical pilot data, not the later full-score instrument\nassignment. References were reviewed before the current encoder and must not\nbe regenerated automatically alongside candidates.\n\n## What carries over\n\n- A score-independent encoder/checker, exact rational timing and MusicXML schemas.\n- A workflow for inherited clefs/keys, independent voices, lyric attachment,\n  slashed graces, partial ties, tuplets and measured tremolos.\n- [Lessons](skills/score-transcription/references/lessons.md) from two complete\n  voice-and-piano transcriptions, including a separate accidental audit.\n- Real source crops, reviewed MusicXML and behavioral regression tests.\n\nStructural checks and target-application comparisons are separate from visual\nsource review. The development scores received agent/user review, not independent\nengraver certification. This release does not establish a general accuracy rate\nor equal performance across models. See [supported features and limits](skills/score-transcription/references/tools.md).\n\n## Contributing and rights\n\nReport a problem with a measure location, incoming notation context, source crop\nyou may share, current/expected reading, and tool versions. Add a regression\nwhen the failure is deterministic. Never commit credentials or private scans.\n\nOriginal code and instructions: [MIT](LICENSE). Score excerpts and bundled\nschemas have separate provenance and terms: [third-party notices](THIRD_PARTY_NOTICES.md).\n"}