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, 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.57 (2023/11/01)
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.92 (2024/04/01)
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.
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
Note that Erase Layer will delete a whole measure even if only part of it is selected. All other actions respect selection boundaries.
v0.06 (2023/10/15)
9. 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.93g (2023/11/15)
10. Meter Set Numeric
This script 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 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. See more information using the ? button in the dialog window.

v0.80 (2023/12/17)
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. 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)
13. 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.29 (2023/11/30)
14. 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, but in my experience it malfunctions sporadically. This script doesn't, but also offers options for layer filtering, stem reversal, horizontal note shift (to counteract stem reversal) and note pattern matching. For more information use the ? button in the configuration window.
v0.83 (2024/04/11)
15. 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 Edit → Paste Multiple but this script is simpler to use and works intuitively on the current music selection in a single step.
v0.30 (2024/03/16)
16. 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.34 (2024/03/01)
17. Pitch Changer
This script revives Jari Williamsson's JW Change Pitches 2017 plug-in to work on modern systems.

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.32 (2024/03/23)
18. 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.14 (2024/03/24)
19. 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 (directly below) offers this facility with extra functionality.

v1.58 (2023/11/22)
20. 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)
21. 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)
22. 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. For more information use the ? button in the dialog window.
v0.57 (2024/01/25)
23. 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)
24. 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)
25. Tuplet Chooser
This script changes the tuplets in the current selection in 18 ways. It shows an ordered list of options, each line starting with a configurable "hotkey". Activate the script, type the hotkey and hit [Enter] or [Return]. The action may also be limited by layer.

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

The layer number is "clamped" to a single character so to change layer just type a new number - [Delete] key not needed.

v0.70 (2023/11/15)
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-23)
Search for:    
search hints