Skip to content

Releases: opensheetmusicdisplay/opensheetmusicdisplay

1.9.7

19 Feb 12:54

Choose a tag to compare

See Changelog:

1.9.7 (2026-02-19)

Bug Fixes

  • 8va/OctaveShift: Fix 8xa start and end timestamp and visual display shifted when backup nodes or multiple voices involved (#1645, PR #1647) (33d6b40)
  • 8va/OctaveShift: Fix octave shift that goes over multiple systems/lines not always going to the end of the staffline in systems in-between (PR #1646) (15c07e5)
  • Beams: Enable secondary beam breaks (#1071). E.g. break between 16ths and triplet 16ths if given in MusicXML (73a88c5)
  • BPM: <metronome><per-minute> is now parsed correctly if the value contains text in addition to numbers (e.g. "c. 108" instead of just "108") (#1175) (be8fc24)
  • Layout: For multiple rest measures, fix crowded notes: Correctly calculate space required by multirest measures (#1329) (cc6ed00)
  • Layout: Respect system label length. Fix crowded notes when instrument name label very long (#1329) (e94876e)
  • Multiple Rest Measures: Fix multiple rest element / line too close to ending barline for end repeat barline etc (#1329) (1e2710e)
  • MusicXML/direction-type: Multiple <direction-type> nodes within a single <direction> node can now be read (#1175) (1f9b9a8)

1.9.6

13 Feb 18:02

Choose a tag to compare

See Changelog:

1.9.6 (2026-02-13)

Bug Fixes

  • Cursor/Repetition: Fix cursor.next() not respecting repetitions. Fix left repeat barline not respecting instructions like clef (shifted to left). Fix double thin barline after "to coda" etc (PR #1644) (90f704b)
  • Demo/PDF: Improve PDF export. Add SVG option. Fix invisible notes being visible, fix broken unicode characters (e.g. Chinese characters or Vietnamese accents) (#1184, #1296) (f097116)
  • Grace Notes: Fix grace note fingering positioning for multiple grace notes with fingering (PR #1642) (0204800)

Features

  • MeasureNumbers: Add CSS class 'measure-number' to measure number labels (PR #1643) (6fe46ae)
  • Repetition: Add EngravingRule CursorIgnoreRepetitions (default false). Restores behavior of previous versions (cursor ignores repetitions) (#1644) (6801c02)

1.9.5

29 Jan 17:17

Choose a tag to compare

See Changelog:

1.9.5 (2026-01-29)

Bug Fixes

  • Beams: Fix beams not fully covering stem of last note (~1 px missing) (#1593) (a03ce79)
  • DrawFromMeasure: Fix some clef changes not respected when starting to render from a later measure instead of first (#1079) (e.g. option drawFromMeasureNumber: 9) (d62b2c5)
  • Transposing: Fix transposition from complex key signatures like c# major with >6 sharps/flats leading to unexpected key signature (1b2aece)
  • Transposing: Prefer sharps for transposing to sharp key signature and vice versa for flats (#1345). Prefer given accidental if it doesn't conflict with new keysignature (partly revert behavior change in recent fix for #1639) (69506f8)
  • Transposing: Transposing back and forth doesn't change accidentals anymore (#1639, #1383) (transposing back to original key signature keeps original accidentals) (39796fe)

1.9.4

19 Jan 01:37

Choose a tag to compare

See Changelog:

Bug Fixes

  • Accent: Fix unnecessary spacing being added on notes with accents, to not increase spacing to next note (de0a9c8)
  • Accidentals: Fix alternating naturals with sharps or flats not always showing naturals. Fix some unnecessary accidentals shown elsewhere (#1564) (ac14c4a)
  • Beams: Fix beams changing on re-render (e.g. changing slope -> render() not idempotent) (#1636, #1594) (1848fda)
  • Crescendo/Decrescendo: Fix overlaps and wrong end.x in multi-staff scores (#1477) (088bb8a)
  • Tuplet: Fix some horizontal misalignment of multi-voice tuplet notes with simultaneous notes due to denominator/tick fraction differences (PR #1631) (8497ce7)
  • Words: Fix words direction not rendered when first staff/instrument invisible/hidden (#1621) (793836e)

Features

  • Mxl: Able to osmd.load() an mxl file blob (#1629) (a595712)
  • Notehead None: Make note(head) invisible when notehead='none' given in XML (PR #1633) (1f0319c)

1.9.3

24 Nov 13:20

Choose a tag to compare

1.9.2

11 Aug 14:09

Choose a tag to compare

See Changelog

Bug Fixes

  • Error: Fix a rare null error in VexFlowConverter (Killer Queen) (8e964ea)

Features

  • GraphicalNote: Add function setColor() to be able to set color for notehead, stem, beams, accidentals, etc (#1620). Add helper functions getNoteheadSVGs, getFlagSVG, getModifierSVGs (2f7857a)
  • GraphicalNote: Add option to color lyrics to setColor(). Add getLyricsSVGs() function (#1620) (f393a3f)
  • Tuplet: Read ratioed value from tuplet attribute ("show-number: both" = true) (#1601) (76d43ab)

1.9.1

05 Aug 14:26

Choose a tag to compare

See Changelog

Bug Fixes

  • autoResize/Demo: Fix scrolling back to the top of the page after autoResize and demo option changes (#1316). E.g. enabling dark mode or resizing doesn't change scroll position. (82b7bd2)
  • Barlines: Support heavy-heavy barline in MusicXML (DoubleHeavy/DoubleBold) (#1598) (13353db)
  • Color: Fix color not applied for MoodExpression, UnknownExpression and ContinuousDynamicExpression (#1610) (5337e4a)
  • Color: Fix note and notehead color and transparency read incorrectly when alpha given (#1602) (length 9, e.g. #12345600) (e1e7bd2)
  • Cursor: Fix Iterator.CurrentRelativeInMeasureTimestamp not updated correctly sometimes after cursor.previous() (cde10c2)
  • Direction Nodes: Read multiple direction-type elements within a direction node (#1616). Fixes e.g. an extra metronome mark or words direction not rendered. (4b6c70c)
  • Fingering: Fix fingerings reversed in rare situations in bottom staff (#1587) (0a367e1)
  • Tabs: Fix TabSlide causing a return instead of continue in the draw method, e.g. skipping the draw of connectors and closing of SVG groups (8f5f496)
  • Tuplet: Fix access error if rules.TupletsRatioed = true used (#1601) (90a2976)
  • Voice: Fix a voice's voice entries not including rest notes. Fixes rest notes not invisible when setting all notes of a voice invisible (#1612) (24de99f)

Features

  • ChordSymbols: Allow chord symbols below staff, and with numerals only (#1596). Fix error when only numeral, not root given (7139301)
  • Cursor: Add nextMeasure() and previousMeasure() as helper methods (4357ac6)
  • GraphicalNote: Add setVisible() to make a note invisible (temporarily) without a re-render (#1612) (93759fb)
  • GraphicalNote: Add getSlurSVGs(). setVisible(): Add applyToSlurs option so slurs can be hidden. Make second parameter VisibilityOptions object (#1612) (41be7b2)
  • GraphicalNote: Able to get ledger line SVGs. Add group and ids to ledger line SVG nodes (#1612). Make them invisible on note.setVisible(false) (c387eb4)
  • GraphicalNote: Add getTieSVGs(). Make ties invisible in setVisible(false, true) (#1612) (2nd parameter is applyToTies) (3d17922)
  • Options: Add option not to render first tempo expression (e.g. "Allegro"): Rules.RenderFirstTempoExpression = false (#1611) (03a6a4b)
  • Piano: Able to show left hand only and right hand only (#1599). Add Staff.Visible attribute (0d77f5e)
  • SVG: Add SVG group for metronome mark (vf-stavetempo), and a subgroup for just the text (vf-bpm) (7f99ccf)
  • Tuplet: Add Tuplet.Ratioed field, so that the ratioed setting can also be changed per tuplet instead of via general TupletsRatioed rule (#1601) (ad45fa5)

1.9.0

20 Mar 19:40

Choose a tag to compare

1.8.9

15 Jul 16:08

Choose a tag to compare

1.8.8

18 Mar 22:41

Choose a tag to compare