mahlif: Universal Music Notation Interchange Format
מַחֲלִיף (machalif/mahlif) = Hebrew for "exchanger/converter"
Why Mahlif?
Music notation software stores scores in proprietary formats that don't interoperate well. MusicXML exists but loses layout precision. Mahlif provides:
- Mahlif XML — An intermediate format preserving pixel-accurate layout (dx/dy offsets)
- Bidirectional converters for notation software
Format Support
| Format | Import | Export | Notes |
|---|---|---|---|
| Sibelius | ✅ Plugin | 🚧 Plugin | Export ~80% complete |
| LilyPond | — | ✅ CLI | ~70% features |
| MusicXML | ❌ | ❌ | Planned |
| Finale | ❌ | ❌ | Planned |
| Dorico | ❌ | ❌ | Planned |
Current focus: Sibelius → Mahlif XML → LilyPond → PDF
Install
pip install mahlif
# or
uv add mahlif
Quick Start
Export from Sibelius
# Install the export plugin
mahlif sibelius install
Then in Sibelius: Home → Plug-ins → Mahlif → Export to Mahlif XML
Convert to LilyPond
# Convert to LilyPond source
mahlif convert score.mahlif.xml score.ly
# Compile to PDF (requires LilyPond installed)
lilypond score.ly
Python API
from mahlif import parse
from mahlif.lilypond import to_lilypond
score = parse("score.mahlif.xml")
lily_source = to_lilypond(score)
Documentation
See the full documentation for:
- CLI Reference — All commands and options
- Sibelius — Plugin installation, linter, property mapping
- LilyPond — Export features and limitations
- Schema — Mahlif XML format specification
License
Metadata
Release files for mahlif 0.1.0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| mahlif-0.1.0.tar.gz | 99.1 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| mahlif-0.1.0-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 213.4 kB
Release files / mahlif-0.1.0.tar.gz
| Download URL | mahlif-0.1.0.tar.gz |
|---|---|
| Size | 99.1 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
35e6560eac4df061d0f49f13fa1a8076af5d2aee9029ffca35bc17f5460215b2
|
|
BLAKE2b-256 checksum How to use checksums |
12bde8d5563c4ceadd5b82e8b3f4cd29038f1f6a6b101fa46c155ca0a51a8a66
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
uv/0.9.28 {"installer":{"name":"uv","version":"0.9.28","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
|
Release files / mahlif-0.1.0-py3-none-any.whl
| Download URL | mahlif-0.1.0-py3-none-any.whl |
|---|---|
| Size | 114.3 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
526dcbf746a17ee61d553b81eaf8b8cfb25f3e599383645a3ac5b974e86a42d5
|
|
BLAKE2b-256 checksum How to use checksums |
5c47e4ca3a5ca29177c98f9bc606e919af187f2ecab1307e756b9ad8484e6feb
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
uv/0.9.28 {"installer":{"name":"uv","version":"0.9.28","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
|