OSMD 2.1.2 brings huge performance improvements: ~40% median speedup, 47% median for large scores 馃殌
See #1716
Thanks to @ishinomaru for the first 2 PRs with the biggest performance gains!
See the Changelog:
2.1.2 (2026-08-06)
Bug Fixes
- Playback: Fix wrong tuplet playback duration from export errors like musx2mxl. Read tuplet note length from time-modification when is un-reduced (5497e15)
Performance Improvements
- 40% median total performance improvement: Compared to OSMD 2.1.1, normal scores render median 40% faster now, 47% even for large scores, where this is the most useful. This aggregates improvements below. See Issue 1716 for more info and graphics. This is on top of the ~50% (2x) performance improvement in OSMD 2.0.0.
- Formatter: Dedupe the duration key computation in evaluate() (PR #1715, minor performance gain) (16b5020)
- Glyph: Cache outline bounding boxes. Median ~20% performance gain (PR #1704) (e9cb6b0)
- Glyph: Cache scaled glyph outline segments for drawing. Median 2.5% speedup, 9% for largest score (PR #1713) (926fc1d), closes 1704/#1712
- Glyph: Memoize glyph width lookups during formatting. Median 5% speedup (PR #1712) (27cff40), closes #1704 #1704
- NoteHead: Re-enable glyph outline caching for noteheads. Median 2% speedup (PR #1711) (b5fc7eb)
- SkyBottomLineCalculator: Remove per-render allocations in updateLines (2-3% speedup in dense scores, PR #1714) (6077f8f)
- VexFlowMeasure: Scope correctNotePositions to its own measure (PR #1703). Improves performance especially for long pieces by 7% to over 40%. (c663e0d)
- VexFlowMeasure: Scope correctNotePositions tab code branch to its own measure (#1703) (ba53f63)
- Visual Regression Tests: Speed up visual regression tests to single seconds (from minutes), make cross-platform (PR #1709, #676) (1a2f910), closes #ff0000