{"id":43796255,"url":"https://github.com/metaist/mahlif","last_synced_at":"2026-02-05T21:07:17.574Z","repository":{"id":335020290,"uuid":"1143762675","full_name":"metaist/mahlif","owner":"metaist","description":"Universal music notation interchange format with bidirectional converters","archived":false,"fork":false,"pushed_at":"2026-01-28T02:08:57.000Z","size":120,"stargazers_count":0,"open_issues_count":5,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-01-28T17:35:05.776Z","etag":null,"topics":["music","musicxml","notation"],"latest_commit_sha":null,"homepage":"https://docs.metaist.com/mahlif","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/metaist.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":"CONTRIBUTING.md","funding":".github/FUNDING.yml","license":"LICENSE.md","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":"AGENTS.md","dco":null,"cla":null},"funding":{"github":"metaist"}},"created_at":"2026-01-28T00:32:45.000Z","updated_at":"2026-01-28T02:09:01.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/metaist/mahlif","commit_stats":null,"previous_names":["metaist/mahlif"],"tags_count":null,"template":false,"template_full_name":null,"purl":"pkg:github/metaist/mahlif","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/metaist%2Fmahlif","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/metaist%2Fmahlif/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/metaist%2Fmahlif/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/metaist%2Fmahlif/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/metaist","download_url":"https://codeload.github.com/metaist/mahlif/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/metaist%2Fmahlif/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":29134361,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-02-05T20:50:26.975Z","status":"ssl_error","status_checked_at":"2026-02-05T20:49:26.082Z","response_time":65,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.5:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["music","musicxml","notation"],"created_at":"2026-02-05T21:07:16.340Z","updated_at":"2026-02-05T21:07:17.432Z","avatar_url":"https://github.com/metaist.png","language":"Python","funding_links":["https://github.com/sponsors/metaist"],"categories":[],"sub_categories":[],"readme":"# mahlif: Universal Music Notation Interchange Format\n\n\u003cp align=\"center\"\u003e\n  \u003ca href=\"https://github.com/metaist/mahlif/actions/workflows/ci.yaml\"\u003e\u003cimg alt=\"Build\" src=\"https://img.shields.io/github/actions/workflow/status/metaist/mahlif/.github/workflows/ci.yaml?branch=main\u0026logo=github\"/\u003e\u003c/a\u003e\n  \u003ca href=\"https://pypi.org/project/mahlif\"\u003e\u003cimg alt=\"PyPI\" src=\"https://img.shields.io/pypi/v/mahlif.svg?color=blue\" /\u003e\u003c/a\u003e\n  \u003ca href=\"https://pypi.org/project/mahlif\"\u003e\u003cimg alt=\"Supported Python Versions\" src=\"https://img.shields.io/pypi/pyversions/mahlif\" /\u003e\u003c/a\u003e\n\u003c/p\u003e\n\n**מַחֲלִיף** (machalif/mahlif) = Hebrew for \"exchanger/converter\"\n\n\u003e [!WARNING]\n\u003e **Experimental / Pre-release Software**\n\u003e\n\u003e This project is in early development. APIs may change without notice.\n\n## Why Mahlif?\n\nMusic notation software stores scores in proprietary formats that don't interoperate well. MusicXML exists but loses layout precision. Mahlif provides:\n\n1. **Mahlif XML** — An intermediate format preserving pixel-accurate layout (dx/dy offsets)\n2. **Bidirectional converters** for notation software\n\n\u003c!--[[[cog\n# Format support matrix is maintained in docs/index.md\n# Run: cog -r README.md\nimport cog\ncog.outl(\"## Format Support\")\ncog.outl(\"\")\ncog.outl(\"| Format | Import | Export | Notes |\")\ncog.outl(\"|--------|--------|--------|-------|\")\ncog.outl(\"| Sibelius | ✅ Plugin | 🚧 Plugin | Export ~80% complete |\")\ncog.outl(\"| LilyPond | — | ✅ CLI | ~70% features |\")\ncog.outl(\"| MusicXML | ❌ | ❌ | Planned |\")\ncog.outl(\"| Finale | ❌ | ❌ | Planned |\")\ncog.outl(\"| Dorico | ❌ | ❌ | Planned |\")\n]]]--\u003e\n\n## Format Support\n\n| Format   | Import    | Export    | Notes                |\n| -------- | --------- | --------- | -------------------- |\n| Sibelius | ✅ Plugin | 🚧 Plugin | Export ~80% complete |\n| LilyPond | —         | ✅ CLI    | ~70% features        |\n| MusicXML | ❌        | ❌        | Planned              |\n| Finale   | ❌        | ❌        | Planned              |\n| Dorico   | ❌        | ❌        | Planned              |\n\n\u003c!--[[[end]]]--\u003e\n\nCurrent focus: **Sibelius → Mahlif XML → LilyPond → PDF**\n\n## Install\n\n```bash\npip install mahlif\n# or\nuv add mahlif\n```\n\n## Quick Start\n\n### Export from Sibelius\n\n```bash\n# Install the export plugin\nmahlif sibelius install\n```\n\nThen in Sibelius: **Home → Plug-ins → Mahlif → Export to Mahlif XML**\n\n### Convert to LilyPond\n\n```bash\n# Convert to LilyPond source\nmahlif convert score.mahlif.xml score.ly\n\n# Compile to PDF (requires LilyPond installed)\nlilypond score.ly\n```\n\n### Python API\n\n```python\nfrom mahlif import parse\nfrom mahlif.lilypond import to_lilypond\n\nscore = parse(\"score.mahlif.xml\")\nlily_source = to_lilypond(score)\n```\n\n## Documentation\n\nSee the [full documentation](docs/index.md) for:\n\n- [CLI Reference](docs/cli.md) — All commands and options\n- [Sibelius](docs/sibelius.md) — Plugin installation, linter, property mapping\n- [LilyPond](docs/lilypond.md) — Export features and limitations\n- [Schema](docs/schema.md) — Mahlif XML format specification\n\n## License\n\n[MIT License](LICENSE.md)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmetaist%2Fmahlif","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fmetaist%2Fmahlif","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmetaist%2Fmahlif/lists"}