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.
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
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.
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.



