# Piano OMR Browser Lab
Experimental adaptation of Partsong (Paul Fremantle), GNU AGPL v3.
https://github.com/pzfreo/partsong
Reference revision d9682ff3e7803f102a4ffae878109caaa4c884c9.
The inference worker, runner.py and onnxruntime.py derive from Partsong.
Changes: separate inference worker with synchronous shared-memory RPC; no JSPI; CPU WASM inference.
homr by Christian Liebhardt (AGPL-3.0), pinned source revision 863eb3c6487f3c6fe50267fb71613f05162bb7c5; models from its onnx_checkpoints release.
Other dependencies: ONNX Runtime Web (MIT), Pyodide (MPL-2.0), NumPy, OpenCV, Pillow. See bundled upstream licenses.
Recognition accuracy and iOS performance are experimental. No claim of iPhone validation.

Version 3: PDF import via Mozilla PDF.js (Apache-2.0), sequential multi-page recognition, MusicXML page joining, repeat and numbered-ending expansion, and IndexedDB local score library. PDF.js legacy build 6.5.438 is loaded from jsDelivr on first PDF use. Navigation instructions (D.C./D.S./Coda/Fine), grace notes, dynamics and pedal interpretation remain limited or unsupported. Recognition may omit repeat marks; the converter only follows marks present in MusicXML. Library entries are browser-origin-local and not a cloud backup.

Version 4: raw .musicxml/.xml import to reuse recognised scores; empty ending-marker measures and right-boundary opening repeats are handled. Missing ending closures generate warnings. A subsequent implicit repeat with an ambiguous opening is played once in written order rather than guessed. Imported MusicXML is retained unchanged.

Version 5: recognised-measure numbering, optional notation display via OpenSheetMusicDisplay 2.2.1 (BSD-3-Clause), manual playback range editor, and portable piano-review-v1 project backups. Manual playback plans replace automatic repeat expansion and are stored with library records; original MusicXML is not rewritten. The editor changes measure order, not individual notes or octave instructions.

Opening repeats recognized by homr now export on the left boundary, without creating an empty measure. Missing symbols in recognition are not repaired by this patch. Manual playback-order correction has been removed.

Build 09: preserve two-treble-clef piano grand staves; match entering parts with silent padding; conservative image-based 8-and-dash ottava spans. Unlabelled lines and arbitrary skew are not supported reliably.
