Skip to main content

finale-file-parser

A parser for Finale music notation files (.mus/.musx).

Finale was discontinued in 2024 and its format is proprietary and undocumented. This project reads those files and converts them to MusicXML, so scores that only exist as .mus or .musx can be migrated, analysed or archived.

Installing

From source, which works today regardless of what is on PyPI:

uv tool install git+https://github.com/jsawruk/finale-file-parser     # the `finale-parser` command
pip install git+https://github.com/jsawruk/finale-file-parser         # or as a library

Once a release is on PyPI, the shorter form works too:

uv tool install finale-file-parser
pip install finale-file-parser

Python 3.12 or newer. The only runtime dependency is defusedxml.

Converting scores

finale-parser convert score.mus                 # writes score.musicxml beside it
finale-parser convert score.musx -o out.musicxml
finale-parser convert ./scores -o ./converted   # a whole tree, layout preserved

A batch does not stop at the first bad file: what fails is reported and skipped, the rest are converted, and the exit status is non-zero if anything was skipped. Existing output is never overwritten unless you pass --force.

finale-parser inspect score.mus     # what the file is, and what was read from it

inspect prints the detected version and the shape of the score — parts, measures, events, pitches.

A .mus is read by reverse engineering, so a converted score can be missing things the original had — part names come out positional, for instance. What is and is not carried is recorded in UNTRANSLATED in src/finale_file_parser/enigma/mus_document.py.

How well does it read a file?

Of the 639 documents in the maintainer's test corpus, 631 build a score: 401 of 401 .musx, 99 of 99 Finale 2011 .mus, and 131 of 139 Finale 2001–2005 .mus. The eight are the files rather than the reader — six are blank scores the parser refuses deliberately, one is a mirror, one an incomplete export.

That corpus is licensed material and is not in this repository, so those sweeps do not run in CI — they are skipped on any checkout without a corpus. CI verifies lint, formatting, mypy --strict, and every test that does not need one.

Requirements for development

  • uv (Python environment + package manager)
  • Python 3.12+ (uv can install this for you)

Getting started

make install     # create the virtual environment and install dependencies
make check       # run lint, format-check, type-check, and tests

Development

This project uses a single command surface — run make help to see every target. All code quality checks run together via make check, which is also what Continuous Integration (CI) runs on every push and pull request.

Contributor and AI-assistant conventions for this repo live in CLAUDE.md; design notes and decisions live in docs/.

make check is what CI runs, but a CI checkout has no corpus, so the corpus sweeps skip there. A green CI run verifies less than a green local run on a machine that has one.

License

MIT — see LICENSE.

The format knowledge this project rests on came from elsewhere, and two modules were written from third-party work: the PKWARE DCL decompressor is a port of Mark Adler's blast.c, and the score.dat cipher parameters were taken from denigma. THIRD-PARTY-NOTICES.md carries those notices; docs/REFERENCES.md records every source consulted.

The reference documents vendored in docs/ are third-party works reproduced for research and scholarship, and are not covered by this project's MIT license. They are documentation only — no published package contains them.

Metadata

Release files for finale-file-parser 0.1.0

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for finale-file-parser 0.1.0
File Size Uploaded
finale_file_parser-0.1.0.tar.gz 115.2 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for finale-file-parser 0.1.0
File Interpreter ABI Platform
finale_file_parser-0.1.0-py3-none-any.whl Python 3 none any Details

Total release size: 245.4 kB

Release files / finale_file_parser-0.1.0.tar.gz

Download URL finale_file_parser-0.1.0.tar.gz
Size 115.2 kB
Tags Source
SHA-256 checksum
How to use checksums
79d47ce8f63bc9f4364e0e825f96e5185af344746c10975c282d6877d872767a
BLAKE2b-256 checksum
How to use checksums
458c0bb9cd1ea89a787893d1175c5fa810485f059849205b818a57d69285a65a
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via uv/0.9.22 {"installer":{"name":"uv","version":"0.9.22","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"macOS","version":null,"id":null,"libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}

Release files / finale_file_parser-0.1.0-py3-none-any.whl

Download URL finale_file_parser-0.1.0-py3-none-any.whl
Size 130.2 kB
Tags Python 3
SHA-256 checksum
How to use checksums
b2b662df64b2269496e86e83fbcdb4fee41c9b634962fb4680e3e9a93757433d
BLAKE2b-256 checksum
How to use checksums
5c11c6f5e5bb7e029c63e61c520409a33f86eacece1349319afef7715a20aa82
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via uv/0.9.22 {"installer":{"name":"uv","version":"0.9.22","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"macOS","version":null,"id":null,"libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}

Release history Release notifications | RSS feed

0.4.0

2 release files

0.3.0

2 release files

0.2.0

2 release files

This release

0.1.0 This release

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page