Skip to content


Switch branches/tags

Name already in use

A tag already exists with the provided branch name. Many Git commands accept both tag and branch names, so creating this branch may cause unexpected behavior. Are you sure you want to create this branch?

Latest commit


Git stats


Failed to load latest commit information.
Latest commit message
Commit time


MEI Lilypond Engraving Refinement


mei2ly.xsl transforms MEI to LilyPond and supports already many music elements from MEI and works for checking encoding errors. Basic layout features are implemented for global staff size and page layout.

Check the available options and the list of supported elements and attributes.

For now it uses XSLT 2.0. A possible goal for a later branch is to have an pure XSLT 1.0 version to put on a website, where you can generate a lilypond engraved rendering of a MEI edition on the fly.

And of course you'll need LilyPond for engraving your output. For custom headers and footers you should check and edit ly/


Along comes silly.xsl which Strips Individual Layout for LilyPond. It basically removes layout instructions from your MEI (e.g. stem directions) so LilyPond can do it's job. Using this will give you a fine clean LilyPond code with mei2ly.xsl.


If you want to prevent a MIDI output by LilyPond (which gets triggered by the presence of MIDI attributes) use remidial.xsl to REmove MIDI Attributes for Lilypond. It is called ReMIDIAL because it performs a remedial action. (Yes, it's a bad pun.)

Example ouput

for Debussy_Golliwogg'sCakewalk.mei: Example page

(See more tests here.)

Setting up

On macOS you can use Homebrew to install required packages. Just open a terminal and type:

brew install lilypond saxon