A collection of REAPER plugins and scripts developed for specific compositional and performance needs. JSFX plugins are real-time audio/MIDI processors; Lua scripts are utility actions for project management. All free to use and modify.
These plugins and scripts are provided as-is. If you find any bugs or issues, please report them.
Index
JSFX
Audio to Sine — Pitch Follower
Lua
Fix all items into new project sub-folder
Toggle Mute Automation in Time Selection
JSFX Plugins
MIDI Sustain Pedal Handler JSFX
Emulates sustain pedal behaviour for any MIDI-triggered plugin that doesn’t natively respond to CC64. When the sustain pedal is pressed, the plugin intercepts Note Off messages and holds them in a buffer. When the pedal is released, all held Note Off messages are sent, stopping the sustained notes. Useful, for example, with ReaSamplOmatic5000 or other samplers that ignore the sustain pedal. The plugin also blocks CC64 from passing downstream, preventing conflicts with other effects in the chain.
HOW IT WORKS
CC64 ≥ 64 → holds Note Offs · CC64 < 64 → releases all held notes · CC64 blocked in output
MIDI Saw Generator JSFX
A minimal audio oscillator controlled by MIDI. Generates a sawtooth wave at a configurable frequency, activated by a specific MIDI note. When the chosen note is pressed the saw wave plays; when the note is released, it stops. All other MIDI notes are ignored. Designed for sub-audio and low-frequency applications but works across the full spectrum.
PARAMETERS
MIDI Note trigger — which note activates the oscillator (0–127)Frequency — saw wave frequency in Hz (0.1–200)
Audio to MIDI Gate JSFX
Converts audio input level into MIDI Note On/Off messages. When the incoming signal exceeds the threshold, the plugin sends a Note On; when it drops below, it sends a Note Off after a configurable hold time. Includes a fade envelope via CC7 (volume) for smooth attack and release transitions, making it ideal for sidechain-triggered samplers or any setup where audio energy should control MIDI instruments.
PARAMETERS
MIDI Note — note to send (0–127)Threshold — gate open level in dBMIDI Channel — output channel (1–16)Velocity — Note On velocityHold time — minimum gate duration in ms
Audio to Sine — Pitch Follower JSFX
Detects the pitch of the incoming audio signal via autocorrelation and generates a sine wave that follows it in real time. The output is a clean sinusoid at the detected frequency, with an optional pitch shift of up to ±24 semitones. An audio gate controls when the sine is active, based on input level. Designed for monophonic sources — voice, single instruments, feedback systems.
PARAMETERS
Threshold — gate level in dBHold time — gate hold in msPitch Shift — ±24 semitonesSmoothing — pitch tracking smoothness (0–1)Min / Max Freq — detection range in HzOutput Volume — sine output level
MIDI Random Rhythm Generator JSFX
Listens for a specific MIDI input note and, while it is held, generates a rhythmic stream of Note On/Off messages on a different output note. The rhythm can range from perfectly metronomic to completely chaotic. Includes an integrated sustain pedal handler, so the generated pattern continues correctly even when using a sustain pedal. The input note is blocked from output — only the generated pattern passes through.
PARAMETERS
Input Note — which note triggers the pattern (0–127)Input Channel — 0 = all, or specific channelOutput Note — note sent in the patternOutput Channel — output MIDI channelVelocity — output note velocitySpeed — base tempo (slow ↔ fast)Irregularity — rhythmic chaos (metronomic ↔ chaotic)
Hyperbass Pitch Detector BETA JSFX
A pitch detector optimised for very low frequencies, down to 10 Hz. Uses zero-crossing detection with a 4-pole lowpass filter and sub-sample interpolation for accurate frequency measurement of signals that behave more like individual pulses than continuous waveforms. Includes a real-time graphical display showing detected frequency (3 decimal places), note name with octave, cents deviation with a tuner-style bar, detection confidence, filtered waveform, and a reference row with octave 0 note frequencies.
PARAMETERS
Gate — on/off with threshold in dBMin / Max Freq — detection range (default 10–80 Hz)Analysis Window — number of cycles for analysisSmoothing — reading stability (0.5–0.99)Audio Output — passthrough or muted
Feedback Loop Killer BETA JSFX
Real-time feedback loop detector and suppressor. Place it on the output track to prevent feedback loops caused by microphone and speaker proximity on the same surface. Uses a frequency shifter (Hilbert transform SSB) to break the feedback cycle, combined with adaptive notch filters and a safety limiter. Three detection methods: RMS energy accumulation rate, dominant frequency persistence, and crest factor collapse. Includes a graphical display with gain reduction meter, detection status, and module activity.
PARAMETERS
Freq Shift — shift in Hz to break the feedback loop (default 5 Hz)Limiter Ceiling — safety limiter threshold in dBDetection Speed — reaction speed (1 = fast, 5 = slow)Noise Floor — input noise gate thresholdSolo Mode — isolate individual modules for testing
Lua Scripts (ReaScript)
Fix all items into new project sub-folderLua
Collects all media files used in the current project — even if scattered across different folders and drives — and copies them into a single subfolder inside the project directory. Automatically updates all internal references so the project points to the new file locations. Useful for archiving, transferring, or cleaning up projects that pull media from many sources.
Rename items from DAW
Renames the media file of the selected item both in the DAW display and on disk. Updates all references within the project so nothing breaks. Select an item, run the action, type the new name — the file on disk and every reference in REAPER are updated simultaneously.
Relink Offline Items Lua
Scans all available drives to find and relink media files associated with offline items in the current project. When a project is opened and some items appear offline because the files have been moved or the drive structure has changed, this script searches recursively across all mounted volumes, matches files by name, and restores the connections automatically.
Check Media Paths Lua
Checks whether all media files referenced by the project are located within the project folder or its subfolders, and reports the full path of every file that lives outside the project directory. Available in two versions:
Basic — Scans media items on the timeline only. Fast and straightforward: checks every audio/video file loaded in the arrange view and flags those stored outside the project folder.
Extended — In addition to timeline items, inspects the internal state of every plugin/FX on every track, looking for file references embedded in their configuration — for example, samples loaded in ReaSamplOmatic5000 or other samplers. Catches files that wouldn’t appear as regular items in the arrange view.
Items to MIDI Map Lua
Converts the layout of items across selected tracks into MIDI notes on a destination track. Select any number of tracks, optionally make a time selection, run the script — it prompts for a MIDI pitch for each track, then creates a “MIDI Map” track with notes matching the position and duration of every item. Useful for generating MIDI control data from existing arrangements or for visualising item distributions as note events.
HOW IT WORKS
Select tracks + time selection → run → assign MIDI pitch per track → a “MIDI Map” track is created with the corresponding notes. Re-running overwrites the previous map.
Toggle Mute Automation in Time Selection Lua
Creates mute automation on selected tracks within the current time selection. Run once to mute — the script writes automation points on the Mute envelope so the tracks are silenced only inside the selected region. Run again on the same region to remove the mute points and restore the original state. Works as a toggle: first run = mute, second run = unmute.
HOW IT WORKS
Select tracks + time selection → run → mute automation is written. Run again → automation is removed. Full undo support.
Toggle FX Bypass Automation in Time Selection Lua
Same concept as Toggle Mute, but for FX bypass. Creates bypass automation on every FX of the selected tracks within the time selection. Run once to bypass all FX in the region, run again to remove the bypass and restore the original state. Useful for A/B comparisons or temporarily disabling processing on specific sections without manually editing envelopes.
HOW IT WORKS
Select tracks + time selection → run → FX bypass automation is written on every FX. Run again → bypass removed. Full undo support.
Free Shortcuts Finder Lua
Scans all keyboard shortcut combinations in REAPER’s Main section and generates a complete report of which shortcuts are free and which are occupied. Checks every combination of modifier keys (Ctrl, Shift, Alt, Cmd on Mac) with letters, numbers, function keys, and special keys. The report is printed to the REAPER console and saved as a text file. Detects both default and custom shortcut assignments. Automatically adapts modifier names for macOS.
HOW IT WORKS
Run the action → report appears in the Console and is saved to Free_Shortcuts_Report.txt in the REAPER resource folder. Groups results by modifier combination, showing occupied shortcuts with their action names and free ones in a compact list.
Installation
JSFX Plugins
Copy the .jsfx file into REAPER’s Effects folder. To find it: Options → Show REAPER resource path, then open the Effects directory. After copying, the plugin will appear in the FX browser — search by name. If it doesn’t show up, right-click the FX list and select Rescan.
Lua Scripts
In REAPER, go to Actions → Show action list → New action → Load ReaScript, then select the .lua file. The script will be available as an action — you can assign it to a toolbar button or keyboard shortcut.
All plugins and scripts are provided as-is, free to use and modify. If you find them useful or build something with them, I’d be happy to hear about it.



