Universal music notation interchange format with bidirectional converters
Project description
mahlif: Universal Music Notation Interchange Format
מַחֲלִיף (machalif/mahlif) = Hebrew for "exchanger/converter"
[!WARNING] Experimental / Pre-release Software
This project is in early development. APIs may change without notice.
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
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file mahlif-0.1.0.tar.gz.
File metadata
- Download URL: mahlif-0.1.0.tar.gz
- Upload date:
- Size: 99.1 kB
- Tags: Source
- Uploaded using 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}
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
35e6560eac4df061d0f49f13fa1a8076af5d2aee9029ffca35bc17f5460215b2
|
|
| MD5 |
20bc82cfb4e7f5221e878b6226aa51d5
|
|
| BLAKE2b-256 |
12bde8d5563c4ceadd5b82e8b3f4cd29038f1f6a6b101fa46c155ca0a51a8a66
|
File details
Details for the file mahlif-0.1.0-py3-none-any.whl.
File metadata
- Download URL: mahlif-0.1.0-py3-none-any.whl
- Upload date:
- Size: 114.3 kB
- Tags: Python 3
- Uploaded using 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}
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
526dcbf746a17ee61d553b81eaf8b8cfb25f3e599383645a3ac5b974e86a42d5
|
|
| MD5 |
96d32e7d99f04a446c0d32a3b0efd9e7
|
|
| BLAKE2b-256 |
5c47e4ca3a5ca29177c98f9bc606e919af187f2ecab1307e756b9ad8484e6feb
|