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 require recent versions of the software, but since it's all free that shouldn't be a problem!

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 Nick Mazuck on YouTube 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 on Mac, 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 subsequent JWPolyphony plug-in includes a wealth of other options but is hard 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. If the selected chords contain different numbers of notes, missing notes will be replaced by rests in the destination. It can also explode chords in one layer on each staff into different layers on the same staff, and explode multiple layers from one staff onto successive staves.

Six menu items are created:

  • Staff Explode Singles (single notes onto successive staves)
  • Staff Explode Pairs (note pairs, odd notes omitted from bottom staff)
  • Staff Explode Pairs Up (pairs, odd notes omitted from top staff)
  • Staff Explode Split Pairs (pairs split: 1-3/2-4 | 1-4/2-5/3-6 ... etc)
  • Staff Explode From Layers (multiple layers on one staff to single layers on consecutive staves)
  • Staff Explode To Layers (chords on each staff split into layers on the same staff)
Staff Explode Layers will work on any number of staves at once, and markings from the original are not duplicated to 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.70 (2024/01/26)
Hairpin Creator
This script creates hairpins spanning the currently selected music region. It produces five menu items:
  • Hairpin Create Crescendo
  • Hairpin Create Diminuendo
  • Hairpin Create Swell (messa di voce)
  • Hairpin Create Unswell (inverse messa di voce)
  • Hairpin Creator Configuration
Hairpins are shifted vertically to avoid colliding with the lowest notes, down-stem tails, articulations and dynamics on each staff in the selection. Dynamics are shifted to match the hairpin vertical. Dynamics in the middle of a hairpin will also be levelled, so give them an opaque background 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 normally expected to end just before the note with the destination dynamic. For more information use the ? button in the dialog window.
v0.84 (2024/02/05)
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.

Most of these scripts, if they use confirmation dialogs, provide explanatory notes through an Information button marked: ?

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.12 (2023/10/13)
2. CrossStaff Offset
When crossing notes to adjacent staves the stems of 'crossed' notes can be reversed (on the "wrong"" side of the notehead) and look too far to the right (if shifting downwards) by the width of a notehead, around 24 EVPUs. This script shifts cross-staffed notes horizontally, with a different offset for non-crossed notes, acting on one or all layers. It is also a quick way to reset the horizontal position of all notes to zero.

To repeat your last settings without a confirmation dialog hold down [Shift] when starting the script. Use the ? button in the dialog window for more information.

v1.64 (2024/04/13)
3. Cue Notes Overlay
This script takes music from a nominated layer in the selected staff and creates a Cue version on one or more other staves. It is intended to create cue notes above or below existing "played" material in the destination. If the destination measure is empty a whole-measure rest will be created as a reminder that the cue isn't played. For more information use the ? button in the dialog window.
v0.28 (2024/02/07)
4. Deletion Chooser...
This script presents an alphabetical list of 24 individual types of data to delete, each line beginning with a configurable hotkey. Call the script, type the hotkey and hit [Enter] or [Return]. Half 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)
For more information use the ? button in the dialog window.
v0.99c (2024/05/14)
5. Double Diatonic
Notes and chords in the current music selection are doubled (duplicated) either up or down by the chosen diatonic interval. Affect all layers or just one. To repeat the last action without a confirmation dialog use the Repeat menu or hold down [Shift] when starting the script.

(NOTE that this functionality is also incorporated in Transpose Diatonic below).

v0.15 (2024/03/01)
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 [Shift] when opening the script.

v0.84 (2024/02/08)
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 Mazuck on YouTube. 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. See more information using the ? button in the dialog window.

v0.66 (2024/02/23)
8. Layer Actions
Perform specific actions on individual note layers in the current selection. Each action in the list begins with a configurable hotkey. Open the script, type the hotkey and hit [Return] or [Enter]. To repeat the same action as last time without a confirmation dialog hold down [Shift] when opening the script.


  • Erase Layer
  • Playback Enable
  • Playback Mute
  • Visible
  • Invisible
  • Stems Up
  • Stems Down
  • Stems Default
v0.12 (2024/04/22)
9. Measure Span
Select any number of measures and this script changes their "span" by manipulating the time signatures, either dividing each one into two or combining pairs of measures together.
  • 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.94 (2024/04/30)
10. Meter Set Numeric
This script provides rapid creation of simple or complex time signatures with a few keystrokes. It supports composite numerators like [3+2+3/16] and joins easily with extra composites (e.g. [3+2+3/16]+[1/4]+[5+4/8]). Display Only time signatures can be equally complex and set without mouse action.

At startup the time signature of the first selected measure is shown. To revert to a simple 4/4 with no other options click the Clear All button or type x. To read these script notes click the ? button or type q. To respace notes on completion click the Respace button or type r.

All measures in the current selection will be assigned the new time signature. Use this feature to quickly copy the initial meter across the selection. If just one measure is selected only it will be changed. See more information using the ? button in the dialog window.

v0.84 (2024/04/16)
11. 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.

Holding down [Shift] when opening the script will repeat your last choices without a confirmation dialog. Layer number is "clamped" to a single character so to change layer just type a new number - delete key not needed.

v0.22 (2024/02/03)
12. Music Spacing Hack
There's a couple of Music Spacing options that I change frequently for different spacing scenarios. This little hack uses a couple of hotkeys to do that very quickly, without a mouse and without navigating the whole DocumentDocument OptionsMusic SpacingAvoid Collision of → menu/dialog system.
v0.10 (2024/04/03)
13. Note Ends Quarters/Eighths
This script aligns the ends of notes followed by a rest to a specific "duration boundary", making too-short notes longer and greatly improving readability where lots of short notes are followed by rests. It creates two menu items, Note Ends Quarters and Note Ends Eighths. (Also see Rhythm Reducer below).
v0.56 (2022/08/04)
14. Noteheads Change By Layer
Change notehead shapes on a specific layer of the current selection to one of these options:
Circled | Default | Diamond | Guitar Diamond |  
Hidden | Number | Round | Slash | Square |  
Strikethrough | Triangle | Wedge | X |  
This script produces an ordered list of notehead types, each line beginning with a configurable "hotkey". Call the script, type the hotkey and hit [enter] or [return].

For more information use the ? button in the dialog window.

v0.34 (2024/05/20)
15. Notes Cross-Staff
Selected notes are crossed to the next staff above or below the selection. This mimics Finale's inbuilt TG Tools Cross-Staff plugin, which in my experience malfunctions periodically. This script doesn't, but also offers options for layer filtering, stem reversal, horizontal note shift (to counteract stem reversal), note pattern matching and beam height adjustment.

Hold [Shift] when starting the script to quickly cross staves without a confirmation dialog, with the settings last used. Select Modeless Dialog if you want the dialog window to persist on-screen for repeated use until you click Cancel [Escape]. For more information use the ? button in the configuration window.

v0.95i (2024/05/22)
16. Ostinato Maker
Copy the current selection and paste it consecutively to the right a nominated number of times. The replicas can span barlines ignoring time signatures. The same effect can be achieved with EditPaste Multiple, but this script is simpler to use and works intuitively on the current music selection in a single step.

To repeat the last action without a confirmation dialog hold down [Shift] when starting the script. Independently include or remove articulations, expressions, smartshapes, lyrics or chords from the repeats. Your choice at FinaleSettings...EditAutomatic Music Spacing determines whether or not the music is respaced on completion.

v0.31 (2024/05/27)
17. Pitch: Chord Notes Keep-Delete
Select a note within each chord to either keep or delete, numbered from either the top or bottom of each chord.
[1] deletes (or keeps) the top (or bottom) note
[2] deletes (or keeps) the 2nd note from the top (or bottom)
... (etc.)
v1.36 (2024/04/17)
18. Pitch Changer
This script revives Jari Williamsson's JW Change Pitches 2017 plug-in to work on Macs with non-Intel processors. Identify from and to pitches by note name (a-g or A-G) followed by accidental (b/bb/bbb ... #/##/###) as required. Matching pitches will be changed in every octave.

For transposing instruments on transposing scores select Written Pitch to affect the pitch you see on screen. To repeat the last change without a confirmation dialog use the Pitch Changer Repeat menu or hold down [Shift] when opening the script.

v0.36 (2024/05/19)
19. Pitch Singles Changer
Change up to four specific pitches to other specific pitches. Pitch specification is exact and immutable:
  • First character: note name A-G
    (Lower case will be replaced by upper case)
  • Last character: octave number 0-9
  • In between: accidentals if needed.
    b / bb / bbb / # / ## / ###
    (you can use s instead of #).
v0.16 (2024/05/01)
20. Rest Offsets
This script alters the vertical position of rests. It duplicates Finale's inbuilt "Move Rests..." plug-in but with less mouse activity. It is also a quick way to reset rest positions in every layer, the default setting.

New rests are "floating" and will avoid entries in other layers (if present) using the setting for "Adjust Floating Rests by..." at Finale → Document → Document Options → Layers. This script can stop them "floating", instead "fixing" them to a specific offset from the default position. On transposing staves these "fixed" rests will behave like notes and change position if Display in Concert Pitch is selected.

Note that Rest Slider (immediately below) offers this facility with extra functionality.

v1.58 (2023/11/22)
21. Rest Slider
Slide rests up and down on the nominated layer with continuous visual feedback. This was designed especially to help align rests midway between staves with cross-staff notes. The Mid-Staff Above and Mid-Staff Below buttons achieve this with one click. Cancel the script to leave rests unchanged.
v0.33 (2024/04/10)
22. Rhythm Reducer
This script adjusts the rhythm of the selection to conform to conventional notation rules and Finale's inbuilt quantization rules. This may not always be exactly what you want but is a great expedient for eliminating multiple (unwanted) rests and as a quick check on the suitability of your rhyhthmic choices.
v0.12 (2024/03/10)
23. Selection Refiner
The selected score area can be refined in Finale by measure and either beat or EDU at EditSelect Region.... This script offers a more organic option for precise positioning with slider controls to change the beat and EDU position in each measure, updating the score highlighting as the selection changes. For more information use the ? button in the dialog window.
v0.58 (2024/04/17)
24. 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 NotationSlurs) or TGTools (→ MusicCreate Slurs...).
v0.58 (2024/01/29)
25. 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)
26. Transpose Diatonic
Notes and chords in the current music selection are transposed up or down by the chosen diatonic interval. Affect all layers or just one. To repeat the last action without a confirmation dialog hold down [Shift] when starting the script.

Select Modeless if you prefer the dialog window to float above your score and you can change the score selection while the script remains active. In this mode click Apply [Return] to transpose and Cancel [Escape] to close the window. Cancelling Modeless will apply the next time you use the script.

These key commands are available if a "numeric" field is highlighted:

  • 1-8: interval (unison, 2nd, 3rd, .. 8ve)
  • 0-8: extra octave
  • 0-4: layer number (0 = all layers)
    (delete key not needed in numeric fields)
  • q: show this script information
  • z: toggle Up/Down
  • x: toggle Preserve Existing Notes
  • c: toggle Modeless
(Note that this script includes the functionality of Double Diatonic listed above).
v0.56 (2024/05/03)
27. Tuplet Chooser
This script changes tuplets in the current selection in 24 ways on all or nominated layers. It provides an ordered list of options, each line starting with a configurable hotkey. Start the script, type the hotkey and hit [Return].

To repeat the same tuplet change as last time without a confirmation dialog, select the Tuplet Chooser Repeat menu or hold down [Shift] when starting the script.

v0.74 (2024/04/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 (only slightly modified) venerable script:

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