Home About Projects + Experiences Other Interests

Open-source MuseScore plugins

Usage guide

Practical steps for this open-source MuseScore 4 plugin suite: Git-backed scores, where files live, happy-path editing, and how to recover when your score and GitHub diverge—including the measure-level LCS diff workflow over score XML. Source and issues on GitHub.

← Back to project overview

What this workflow assumes

.../MuseScore4/Plugins   ← plugin .qml files live here
.../MuseScore4/Scores    ← git repo; commit .mscz here

Plugins you use

Daily flow (you’re the only one changing the score)

  1. Open Scores/<Name>.mscz in MuseScore.
  2. Edit and save in MuseScore.
  3. Run Plugins → Commit to GitHub. It stages <Name>.mscz, commits, and pushes when the remote is not ahead.

When the remote might have new commits

Before committing, use pull so you don’t trample remote work.

  1. Open Scores/<Name>.mscz.
  2. Run Plugins → Pull from GitHub.
    • If pull succeeds: you’re up to date — keep editing, then Commit to GitHub.
    • If pull can’t merge: the plugin aborts the merge, extracts the remote’s .mscz into a - Copy tree, and tells you to run MuseScore Diff.

MuseScore Diff (reconcile local vs remote)

For a score named Name, the important paths are:

On run, the diff flow ensures local XML exists (unzips from .mscz if needed), checks the - Copy file exists, then generates the diff score and opens it. After you edit in the diff score, use the review UI’s Save to Main to write the reconciled result back into Name.mscz and leave Name_diff.log.txt as the marker that you’re done diffing.

Why LCS? Aligning measures with a longest-common-subsequence–style pass keeps the diff stable and reviewable directly in notation.

Commit after a diff

When Name_diff.log.txt exists, Commit to GitHub takes the “I've finished the merge review” path: it can force-push Name.mscz and then removes the marker file so it isn’t reused by mistake.

If there is no diff marker and the remote is ahead, the commit plugin may extract the remote score and prompt you to run MuseScore Diff first instead of pushing blindly.

First-time setup (Commit to GitHub)

On first use you may be asked for a GitHub repo URL. The plugin clones to a temp directory and moves only the .git directory into Scores so your working tree stays in the scores folder.

Temporary files you can ignore or delete

Generated helpers under Plugins/ (timestamped .bat, PowerShell, etc.) are meant to be ephemeral. The README in the repo lists names like musescore-git-push-*.bat, musescore-diff.ps1, and similar — safe to remove if you’re tidying up.

Troubleshooting quick list

Full README on GitHub →