Lua Scripts for Finale

These free scripts use Robert Patterson's free 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 are provided "as is" without warranty. Many of them now require version 0.62 or later of RGP Lua, but since the system is free that shouldn't be an obstacle!

The largest public collection of free Lua scripts for Finale is at finalelua.com including comprehensive installation instructions.

I use the commercial Keyboard Maestro automation system on Mac to invoke these scripts as menu items instantly with memorable keystroke combinations. Visit Finale Superuser for clever hints on using KM with Finale. Some scripts use the option or shift key to trigger optional behaviour. Getting KM to detect these modifier keys is tricky in Finale, so if you need that, refer to these instructions.

This first script 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 includes the extra facility provided by the script here but is tricky to implement as a one-click utility.
Staff Explode
This script "explodes" a set of chords on one staff into successive staves either as single notes or pairs of notes. Selected chords may contain different numbers of notes with missing notes replaced by rests in the destination. It can also explode chords in layer 1 on each staff into different layers on the same staff.

Five menu items are provided:

  • Staff Explode Singles (single notes onto successive staves)
  • Staff Explode Pairs (pairs of notes, omitting odd notes from bottom staff)
  • Staff Explode Pairs Up (pairs, but omitting odd notes from top staff)
  • Staff Explode Split Pairs (pairs split: 1-3/2-4 | 1-4/2-5/3-6 ... etc)
  • Staff Explode Layers (splitting chords to layers on each selected staff)
"Staff Explode Layers" will work on any number of staves at once, and markings from the original are not duplicated to the other layers. As a special case, if a staff contains only single-note entries, Explode Layers duplicates them in unison on layer 2 to create standard two-voice notation. All other script actions require a single staff selection and all markings from the original are copied to each destination.

Your choice at Finale -> Settings... -> Edit -> [Automatic Music Spacing] will determine whether or not the notes are RESPACED after each explosion.

v1.58 (2023/05/28)
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 optionally shifted to match the vertical 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 normally ends just before the note with the destination dynamic.

Hairpin right-hand end positions 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 in the Configuration.

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 moving and clicking the mouse.
1. Barline Chooser
Change all barlines in the selection to one of seven styles by keystroke. To repeat the same barline change as last time without a confirmation dialog, select the "Barline Chooser Repeat" menu or hold down the SHIFT key when starting the script.
v0.11 (2023/07/17)
2. Change Note Endings
This plug-in aligns the ends of notes followed by a rest to a specific "duration boundary", making too-short notes longers and greatly improving readability of music with lots of short notes followed by rests. It creates two menu items, `Note Ends Eighths` and `Note Ends Quarters`.
v0.56 (2022/08/04)
3. CrossStaff offset
When creating cross-staff notes the stems of 'crossed' notes can be reversed (on the opposite side of the notehead) and look too far to the right (if shifting downwards) by the width of one notehead, typically 24 EVPU. This script offsets cross-staffed notes horizontally in the selected region, with a different offset for non-crossed notes, acting on any or "all" layers. This is also a quick way to reset the horizontal offset of all selected notes to zero.

When crossing to the staff above try (24,0) or (12,-12).  
When crossing to the staff below try (-24,0) or (-12,12).
To repeat your last settings without a confirmation dialog hold down the SHIFT key when starting the script.
v1.43 (2023/07/31)
4. Cue Notes Create
This script is keyboard-centred requiring minimal mouse action. It takes music from a nominated layer in the selected staff and creates a "Cue" version on one or more other staves. The cue copy is reduced in size and muted, and can duplicate nominated markings from the original. It is copied to the chosen layer with a whole-note rest placed in the original layer. More information is provided through the ? button in the dialog window.
v0.91 (2023/08/11)
5. Deletion Chooser...
This script presents an alphabetical list of 24 types of data to delete, each line beginning with a configurable "hotkey". Call the script, type the hotkey and hit [Enter] or [Return]. Twelve of the datatypes can be filtered by layer.

Delete independently:

Articulations* | Articulations on Rests* | Cross Staff Entries*  
Custom Lines | Dynamics* | Expressions (Not Dynamics)*  
Expressions (All)* | Expressions (Measure-Attached) | Glissandos 
Hairpins | Lyrics* | MIDI Continuous Data | MIDI Note Data*  
Note Position Offsets* | Notehead Modifications* | Secondary Beam Breaks*  
Slurs | Smart Shapes (Note Attached) | Smart Shapes (Measure Attached) 
Smart Shapes (Beat Attached) | Smart Shapes (All) | Staff Styles 
Tuplets* | User Selected...
(* = filter by layer)
To delete the same data as last time without a confirmation dialog, hold down the SHIFT key when starting the script.
v0.82 (2023/08/16)
6. Gracenote Slash
This script duplicates Jari Williamsson's original 2017 JWGraceNoteSlash plug-in so it can be incorporated into modern operating systems through RGPLua.

A Configuration menu item is provided to change the script's parameters. They can also be changed by holding down either the SHIFT or ALT (option) key when calling the script.

v0.67 (2023/06/19)
7. Hotkey Script Palettes
This script helps navigate the many scripts crowding your RGP Lua menu. It provides access to Lua scripts and Finale menu items through a set of easily configurable palettes (dialog windows) organised by type of activity and triggered by simple "hotkey" keystrokes.

The "Hotkey Palettes" principle is demonstrated expertly by Nick Mazuk at www.youtube.com/@nickmazuk. Scripts are grouped into primary categories like "Intervals", "Layers", "Notes & Chords", "Measure Items" and so on as a set of palettes triggered by keystroke. Primary palettes call up a second layer of palettes containg scripts in related areas, also triggered by keystroke.

Reach hundreds of scripts in your collection using just two keystrokes with the actual hotkeys presented as a visual reminder. Actions you repeat often will link to muscle memory and become easier to recall. More information is provided through the ? button in the dialog window.

v0.49 (2023/07/20)
8. Measure Span
This script changes the "span" of every measure in the selection by either dividing it into two or combining it with the following measure and manipulating the respective time signatures. The settings are arranged so that many measures with different time signatures can be modified at once. It provides three menu items:
Measure Span Join
Measure Span Divide
Measure Span Options...
To configure script settings either select the "Measure Span Options..." menu item, or hold down the shift key when invoking "Join" or "Divide". Full documentation is provided through the ? button in the "Options" dialog window.
v0.93e (2023/09/17)
9. Meter Set Numeric
Meter Set Numeric provides rapid entry of simple or complex time signatures with a few keystrokes. It supports composite numerators like [3+2+3/16] and can join with further composites (e.g. [3+2+3/16]+[1/4]+[5+4/8]). Display only time signatures can be equally complex and set without using a mouse. At startup the time signature of the first selected measure is shown. Click the Clear All button to revert to a simple 4/4 with no other options.

All measures in the current selection will be assigned the new time signature. If just one measure is selected only it will be changed. "Bottom" numbers (denominators) are the usual "note" numbers: 2, 4, 8, 16, 32, 64. "Top" numbers (numerators) are integers, optionally joined by '+' signs for composite meters. More information is provided through the ? button in the dialog window.

v0.70 (2023/07/25)
10. MIDI Note Values
Change the playback MIDI Velocity and Duration (Start/Stop times) of every note in the current music selection on one or all layers. Choose the "MIDI Note Values" menu item to change both at once or set them independently with the"MIDI Note Duration" or "MIDI Note Velocity" menu items.

Hold down the shift or alt (option) keys when invoking a menu item to make the changes using your most recent values without showing any confirmation dialog window (or any other visual confirmation!)

v0.13 (2023/04/07)
11. Noteheads Change By Layer
Change notehead shapes on a specific layer of the current selection to one of these shapes:
X | Diamond | Diamond (Guitar) | Square Triangle | Slash | Wedge
Strikethrough | Circled | Round | Hidden | Number | Default
This script produces an ordered list of notehead types, each line beginning with a configurable "key" code. Call the script, type the key code and hit [Enter] or [Return].

In SMuFL fonts like Finale Maestro, shapes will change according to duration values. Most duration-dependent shapes are not available in Finale's old (non-SMuFL) Maestro and Engraver fonts. "Diamond (Guitar)" is like "Diamond" except quarter notes and shorter use filled diamonds. "Number" lets you specify any shape character as a number including SMuFL numbers like "0xe0e1". Hold down the SHIFT key when starting the script to repeat the same action as the last time without a confirmation dialog.

v0.21 (2023/07/17)
12. Rest offsets
This script alters the vertical position of rests, duplicating Finale's inbuilt "Move Rests..." plug-in but without mouse activity. It is also a quick way to reset rest positions in every layer, the default setting. More information is provided through the ? button in the dialog window.
v1.52 (2023/07/26)
13. Selection Refiner
The selected score area can be refined in Finale by measure and either beat or EDU at "Edit" → "Select Region...". This script offers a more organic option for precise positioning with slider controls to change the beat and EDU position in each measure, continuously updating the score highlighting as the selection changes. More information is provided through the ? button in the dialog window.
v0.41 (2023/08/14)
14. 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 rhythmic patterns then try JW Pattern (→ Performance Notation → Slurs) or TGTools (→ Music → Create Slurs...).
v0.56 (2023/09/16)
15. Stems By Layer
Set stems on a specific layer in the current selection to point up, down or in the "natural" direction.
v0.12 (2023/07/12)
16. 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 exacting mouse clicks. Or else just run this script over the measures concerned.
v0.53 (2022/05/23)
17. Tuplet Chooser
Change the condition of tuplets in the current selection to:
Avoid Staff | Don't Avoid Staff | Flat | Not Flat
Flip | Invisible | Visible | Bracket Unbeamed Only
Bracket Always | Bracket Opposite Beamed Side
Reset (to Default Preferences)
The script provides a list of options, each line beginning with a configurable "hotkey". Open the script, type the hotkey and hit [Enter] or [Return]. Actions may optionally be limited to one of the four music layers. To repeat the same tuplet change as last time without a confirmation dialog, select the "Tuplet Chooser Repeat" menu or hold down the SHIFT key when starting the script.
v0.63 (2023/07/17)
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-23)
Search for:    
search hints