Skip to main content
Python Software Foundation 20th Year Anniversary Fundraiser  Donate today!

A pythonic wrapper for REAPER's ReaScript Python API

Project description


reapy is a nice pythonic wrapper around the quite unpythonic ReaScript Python API for REAPER.

Getting Started


  1. First install from pip:
pip install python-reapy
  1. Run:
python -m reapy

Paths to your Python DLL and to reapy configuration scripts get printed.

  1. If you haven't enabled Python in REAPER yet, go to Options > Preferences... > Plug-ins > ReaScript. Check Enable Python for use with ReaScript, and fill Custom path to Python dll directory and Force ReaScript to use specific Python .dll with the directory path and the file name of the Python DLL.

  2. Enable reapy dist API by running the corresponding ReaScript (Actions > Show action list > Reascript : Load... and browse for the script path).

You're all set! You can now import reapy from inside or outside REAPER as any standard Python module.

Instead of creating a new ReaScript containing:

from reaper_python import *
RPR_ShowConsoleMsg("Hello world!")

you can open your usual Python shell and type:

>>> import reapy
>>> reapy.print("Hello world!")


ReaScript API

All ReaScript API functions are available in reapy in the sub-module reapy.reascript_api. Note that in ReaScript Python API, all function names start with "RPR_". That unnecessary pseudo-namespace has been removed in reapy. Thus, you shall call reapy.reascript_api.GetCursorPosition in order to trigger reaper_python.RPR_GetCursorPosition. See example below.

>>> from reapy import reascript_api as RPR
>>> RPR.GetCursorPosition()
>>> RPR.SetEditCurPos(1, True, True)
>>> RPR.GetCursorPosition()

reapy API

The purpose of reapy is to provide a more pythonic API as a substitute for ReaScript API. Below is the reapy way of executing the example above.

>>> import reapy
>>> project = reapy.Project() # Current project
>>> project.cursor_position
>>> project.cursor_position = 1
>>> project.cursor_position

The translation table matches ReaScript functions with their reapy counterparts.


When used from inside REAPER, reapy has almost identical performance than native ReaScript API. Yet when it is used from the outside, the performance is quite worse. More precisely, since external API calls are processed in a defer loop inside REAPER, there can only be around 30 to 60 of them per second.

In a time-critical context, you can make use of the feature. It allows to execute arbitrary code inside REAPER, with input and output sent over the local network.

In the example below, one can see how to make use of Program to improve efficiency. Input parameters are passed to the program as keyword arguments. Required output values are specified as Program positional arguments after code (first positional argument).

Note that the modules reapy and reascript_api (as RPR) are always available in Programs. Any other needed module must be explicitly imported in the code.

>>> import reapy
>>> project = reapy.Project() # Current project
>>> # Unefficient (and useless) call
>>> start = time.time(); bpms = [project.bpm for _ in range(100)] # Takes at least 3 seconds!
>>> # Efficient call
>>> from import Program
>>> code = """
... project = reapy.Project(project_id)
... bpms = [project.bpm for _ in range(100)]
... """
>>> [bpms] = Program(code, "bpms").run(project_id = # Takes 1/30 seconds (= one distant call)


Check the documentation for more information.


Roméo Després - RomeoDespres


This project is licensed under the MIT License - see the LICENSE.txt file for details.

Project details

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Files for python-reapy, version 0.1.0.dev2
Filename, size File type Python version Upload date Hashes
Filename, size python_reapy-0.1.0.dev2-py2.py3-none-any.whl (37.9 kB) File type Wheel Python version py2.py3 Upload date Hashes View
Filename, size python-reapy-0.1.0.dev2.tar.gz (27.1 kB) File type Source Python version None Upload date Hashes View

Supported by

AWS AWS Cloud computing Datadog Datadog Monitoring DigiCert DigiCert EV certificate Facebook / Instagram Facebook / Instagram PSF Sponsor Fastly Fastly CDN Google Google Object Storage and Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Salesforce Salesforce PSF Sponsor Sentry Sentry Error logging StatusPage StatusPage Status page