A MuseScore Studio (v4.7+) plugin that automates the creation of keyswitch notes for VST instruments based on articulation symbols and technique text in the score.
Caution
The MuseScore 4.7 beta changed the order that notes are sent to the VST, but it appears that may be reverted to 4.6.5 behavior. When the final version is released, I'll update the KS plugin logic if needed. Until then, when testing in 4.7, drag the keyswitch staff to the top of each instrument in the Layout panel to send the keyswitch note before the source note.
Keyswitch Creator has two parts:
- A settings panel to manage assigning keyswitch sets to staves, including a map of keyswitches and editors for set creation and global customization.

- A headless plugin that scans a selection (or entire score) and applies keyswitches to the staff directly below the main staff, within the same instrument/part.

-
Download the latest release from the panel on the right. Unzip to your MuseScore Plugins directory. (Documents/MuseScore4/Plugins)
-
Open a score and expand each VST instrument in the Layout panel. Click Add staff at the bottom of each VST instrument.
-
Double-click the first VST instrument name in the score to open Staff properties. Use the arrows at the bottom left to select the last staff in each VST instrument. Customize the staff to your liking and click Apply. Next, use the arrows again to move to the next VST instrument's last staff and apply the same customizations.

-
Click Home > Plugins and enable both Keyswitch Creator and Keyswitch Creator Settings.

-
Open the Keyswitch Creator Settings plugin from the Plugins menu. Select a staff in the left column, then select a keyswitch set on the right to assign/unassign it. Click Save to apply the changes.
Important
Do not assign keyswitch sets to the last staff in each VST instrument (created in Step 2 above).
Tip
Select multiple staves with Cmd/Ctrl+click to quickly assign them to the same keyswitch set.
-
Select part of the score (no selection processes the entire score) with articulations or technique text and run the Keyswitch Creator plugin.
Tip
Set a keyboard shortcut in MuseScore's Preferences > Shortcuts panel. Search for "keyswitch" and define a shortcut. For example, ⌘⇧+K.
Add any of the following text tags (Cmd/Ctrl+T) to the score to customize keyswitch behavior.
Activates a certain keyswitch set on an instrument from that point forward. (Helpful when changing instruments.)
KS:Set="English Horn" or KS:Set Custom-Set
Assigns custom keyswitches based on matching entries in the set's techniqueKeyMap.
KS:Text=CustomTechnique or KS:Text="con sord" KS:Text=legato
In range selections, staff restricts keyswitch processing to the selected staff only (default), part processes all staves of an instrument (like a grand staff). The first tag found at a particular time wins.
KS:Scope=part or KS:Scope=staff
The piano keyboard shows keyswitches in the active set. Hover on a key to view midi note info and keyswitch name.
Note
MuseScore displays midi note 60 as C4 (full range is C-1 to G9). To change note 60 to display as C3 (C-2 to G8) in Keyswitch Creator, set property bool middleCIsC4: false in the Settings plugin file.
Keyswitch sets are implemented in the Set registry as structured json. This makes creating keyswitch sets much faster than a manual interface. Each set name is a top‑level key. Values are either a midi note number (0-127), or string "midi note|velocity". Per set durationPolicy and techniqueAliases can override Global settings.
{
"My Library": {
"articulationKeyMap": {
"staccato": 2,
"tenuto": 3,
"marcato": 4
},
"techniqueKeyMap": {
"normal": 1,
"pizz.": 5,
"sul pont.": "6|99",
"sul tasto": "6|100"
},
"durationPolicy": "fixed", // OPTIONAL OVERRIDE
"techniqueAliases": {
"pizz.": ["pizz", "pluck"] // OPTIONAL OVERRIDE
}
}
}
The Global settings panel allows customization of various options that affect keyswitch creation.
durationPolicy Specifies the duration of keyswitch notes. source uses the source note's value (default). fixed uses a fixed 16th note value. (Configurable in the plugin file.)
formatKeyswitchStaff Auto-format the keyswitch staff for a compact view. (Note name in head, remove stem and flag, and attach to a single staff line.) Use the status bar in the bottom left corner of the score window to see the keyswitch octave.
Important
Because the lines property is read-only in the MuseScore plugin api, set Lines: 1 in Staff properties for keyswitch staves manually, as described in step 3 above.
With auto-formatting (true)
Without auto-formatting (false)
techniqueAliases Match variations on technique spelling.
"techniqueAliases": {
"legato": [
"legato",
"leg.",
"slur",
"slurred"
],
"normal": [
"normal",
"normale",
"norm.",
"nor.",
"ordinary",
"ord.",
"standard",
"std."
]
}
Pinpoint bad JSON formatting like missing quotation marks, commas, or unmatched braces / brackets in the editor windows.
The Reset editor to default button will reset the active editor window to default values. This only affects the current editor on screen.
The Save button writes the registry and global settings values to the computer file system. It also saves the staff => set assignments to the score. This button does not close the Settings window so that when additional sets are added, they become available to assign to a staff.
The Close button just closes the Settings window. It doesn't save any changes.
The Keyswitch Sets folder contains a few example sets to copy/paste into the Registry editor. There's also a Python script that converts Logic Pro articulation set .plist files to .json sets.
Important
When adding sets, use proper JSON formatting with quotation marks, commas, and matched braces / brackets. The error highlighting will help identify issues.
View known issues on GitHub
If you have a suggestion, or find a bug, please report it on GitHub. I don’t promise a fix or tech support, but I’m happy to take a look. 🙂
“If I have seen further, it is by standing on the shoulders of Giants.” ~Isaac Newton
MuseScore Studio and VST instrument developers, wherever they may roam.
v0.9.8 2/14/26
- Add keyswitch update handling
- Skip processing unassigned staves
- Improve python script matching
- Auto-scroll to active set
v0.9.7 2/6/26 Initial release.