HOME       ARCHIVE       MUSIC       CDs       PUBLISHERS       BIOGRAPHY   
Lua Scripts for Finale

These scripts use Robert Patterson's RGP Lua user-scripting environment to enhance the native abilities of Finale music software. They can be tweaked to personal taste using any plain text editor and like RGP Lua are completely free. They are provided "as is" without warranty. Many of them now require versioin 0.62 or later of RGP Lua, but since the system is completely free that shouldn't be an obstacle!

Installation instructions are here and the largest public collection of free Lua scripts for Finale is at finalelua.com.

I use the Keyboard Maestro automation system on Mac to invoke these scripts as menu items instantly with simple keystroke combinations. Also visit Finale Superuser for ultra-clever hints on using KM with Finale. Some scripts use the option key to trigger optional behaviour. Getting KM to trigger menu items with an option key is tricky in Finale, so refer to these instructions.

This first set of scripts duplicates Jari Williamsson's original (retired and unsupported) QuickExplode plug-in. Finale's built-in "Explode" command defaults to creating a new staff for the expanded material, and I resent the extra mouse clicks needed to override the default behaviour. Jari's later JWPolyphony plug-in is great but tricky to implement as a one-click utility.
1. Staff Explode
This script explodes a set of chords on one staff into single lines on subsequent staves. The number of staves is determined by the largest number of notes in any chord. It warns if pre-existing music in the destination will be erased. It duplicates all markings from the original and resets the current clef on each destination staff.

By default this script doesn't respace the selected music after it completes. If you want automatic respacing, hold down the option key when selecting the script's menu item. Alternatively, if you want the default behaviour to include spacing then create a configuration file:

If it doesn't exist, create a subfolder called script_settings in the folder containing this script. In that folder create a plain text file called staff_explode.config.txt containing the line:

fix_note_spacing = true -- respace music when the script finishes
If you subsequently hold down the option key, spacing will not be included.
v1.48 (2023/01/12)
2. Staff Explode Pairs
Works like Staff Explode but explodes the chords from one staff into pairs of notes, top to bottom, on subsequent staves. Chords may contain different numbers of notes, the number of destination staves determined by the chord with the largest number of notes.
v1.52 (2023/01/12)
3. Staff Explode Split Pairs
Works like Staff Explode but explodes the chords from one staff into split pairs of notes on subsequent staves (1-3/2-4; 1-4/2-5/3-6; etc). Chords may contain different numbers of notes, the number of pairs determined by the chord with the largest number of notes.
v1.48 (2022/07/14)
4. Staff Explode To Layers
Chords on layer 1 in the selected region are split into independent layers on the same staff. Multiple measures and staves can be selected at once. More than four notes in a chord are deposited on layer 4. As a special case, if a staff contains only single-note entries, they are duplicated to layer 2. Markings on the original are not copied to other layers.
v1.49 (2023/01/12)
Hairpin Creator
This script creates hairpins spanning the currently selected music region. It produces four different menu items as follows:
  • Hairpin Create Crescendo
  • Hairpin Create Diminuendo
  • Hairpin Create Swell (messa di voce)
  • Hairpin Create Unswell (inverse messa di voce)
  • Hairpin Creator Configuration
Hairpins are positioned vertically to avoid colliding with the lowest notes, down-stem tails, articulations and dynamics on each staff in the selection. Dynamics are shifted vertically to match the calculated hairpin positions. Dynamics in the middle of a hairpin span will also be levelled, so giving them an opaque background will make them appear to "sit above" the hairpin. The script also considers trailing notes and dynamics, just beyond the end of the selected music, since a hairpin is typically ends just before the note with the destination dynamic.

Hairpin end positions in Finale are more accurate when attached to these "trailing" notes and dynamics, but this can be a problem if trailing items fall across a barline and especially if they are on a different system from the end of the hairpin. (Elaine Gould - "Behind Bars" pp.103-106 - outlines multiple hairpin scenarios in which they either should or shouldn't "attach" across barlines. Your preferences may differ.)

This script normally works better if dynamic markings are added first. It will find the lowest matching vertical offset for the hairpin, but if you want the hairpin lower than that then first move a dynamic to the lowest point you want. For simple hairpins that don't mess around with trailing barlines and dynamics try selecting dynamics match hairpin and de-selecting the other options.

v0.69 (2023/01/14)
Keyboard Focus
These scripts are designed for quick keyboard control using simple dialog windows for numeric entry. Note that the dialogs open with keyboard focus on the first entry field and it is much quicker to move between fields using the 'Tab' key than by clicking the mouse.
1. CrossStaff offset
When creating cross-staff notes using the option-downarrow shortcut, the stems of 'crossed' notes are reversed (on the wrong side of the notehead) and appear too far to the right (if shifting downwards) by the width of one notehead, typically 24EVPU. This script lets you set a horizontal offset for cross-staff notes in the selected region, with a different offset for non-crossed notes, and specify which layer to act upon (1-4 or "all layers": 0). (This also offers a simple way to reset the horizontal offset of all selected notes to zero).

for crossing to the staff below use (-24,0) or (-12,12)
for crossing to the staff above use (24,0) or (12,-12)
If you want to repeat your last settings without a confirmation dialog, hold down the option key when selecting the script's menu item.
v1.33 (2022/08/05)
2. Rest offsets
Several situations including cross-staff notation (rests should be centred between the staves) require adjusting the vertical offset of rests. This script duplicates the action of the built-in "Move rests..." plug-in but needs no mouse action. It is also a convenient way to reset rest offsets to zero in every layer, the script's default.
v1.40 (2022/09/05)
3. Change MIDI Duration
Change the playback start and stop times for every note in the selected area on one or all layers. To affect playback "Note Durations" must be enabled under "Playback/Record Options".
v1.41 (2022/08/04)
4. Change MIDI Velocity
Change the playback key velocity for every note in the selected area in one or all layers. "Key Velocities" must be enabled under "Playback/Record Options" to affect playback. Note that key velocity will not affect every type of playback especially if Human Playback is active.
v1.21 (2022/08/04)
5. Set Meter Numerically
This script is keyboard focussed with minimal mouse action allowing rapid entry of complex time signatures with a few keystrokes. It supports composite numerators allowing meters like (3+2+3/16) in conjunction with further composites (e.g. (3+2+3/16)+(1/4)+(5+4/8)). Alternate "display-only" time signatures can be equally complex. At startup the script displays the time signature of the first selected measure. Click the "Clear All" button to revert to simple 4/4 with no other options (or, ideally, use a keyboard macro app like Keyboard Maestro to click the button in response to a keystroke!) All measures in the currently selected region will be assigned the new time signature. If one measure is selected only it will be affected. (Unlike the default Finale behaviour of "change every measure until next meter change"). Further instructions are at the start of the script.
v0.57 (2022/05/22)
6. Cue Notes Create
To add cue notes to orchestral scores I've never liked the operation of Finale's inbuilt Add Cue Notes plug-in, and although the TGTools version is better, I prefer less mouse interaction and more concise name handling. This RGPLua version is highly configurable and needs no mouse input. It's pretty self-explanatory but further instructions are at the start of the script.
v0.67 (2023/01/07)
7. Delete selective...
Deletes nominated items from the selected region. Individual menu items are created to independently delete items of type:
Dynamics / Expressions (Not Dynamics) / All Expressions / Expressions (Measure-Attached) /
Articulations / Lyrics / Hairpins / Slurs / Midi Note Data / Midi Continuous Data /
Glissandos / Custom Lines / Smart Shapes (Beat Aligned) / All Smart Shapes /
v0.60 (2023/01/18)
8. Tempo From Beginning
The default setting for new Tempo expressions is that their playback effect starts at their alignment point in the measure. In some circumstances (it's hard to say precisely which) this creates erratic elapsed time results. (Metatool '3' with the Selection Tool). To avoid this, select the Tempo expression, control-click to Edit Expression Assignment then set playback to start from Beginning of Measure. Which is six precise mouse clicks. Or else just run this script over the measures concerned.
v0.53 (2022/05/23)
9. Slur Selection
A good trick in Sibelius is hitting the 'S' key to create a slur across currently selected notes. Activate this script in Finale with a macro hotkey utility to do the same thing. Each layer will be slurred independently, and if there are several runs of notes separated by rests, each run will be slurred separately. If you want to automate slurs on specific note patterns then try JW Tools (JW Pattern -> Performance Notation -> Slurs; built-in to Finale 27.3+) or TGTools (Music -> Create Slurs...).
v0.53 (2022/11/14)
10. Gracenote Slash
This script duplicates Jari Williamsson's original JWGraceNoteSlash plug-in (2017) so it can be incorporated into modern operating systems through RGPLua or similar. An additional Configuration menu item is provided to change the script's default settings. They can also be changed by holding down either the shift or alt (option) key when calling the script.
v0.59 (2023/01/18)
Here are some simple utility scripts: I found an old script by Jari Williamsson that expands the selected staff systems in page view to fill the whole page. Although there are many ways to respace, expand and shrink staff systems, I really like the simplicity of this old script:

v1.0 (2021-22)
Search for:    
search hints