reapy
reapy is a nice pythonic wrapper around the quite unpythonic ReaScript Python API for REAPER.
Contents
Installation
- First install from
pip:
pip install python-reapy
- Run:
python -m reapy
Paths to your Python DLL and to reapy configuration scripts get printed.
-
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.
-
Enable
reapydist 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!")
Usage
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()
0.0
>>> RPR.SetEditCurPos(1, True, True)
>>> RPR.GetCursorPosition()
1.0
Note that if you have the SWS extension installed, the additional ReaScript functions it provides will be available in reapy.reascript_api and usable inside and outside REAPER as well.
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
0.0
>>> project.cursor_position = 1
>>> project.cursor_position
1.0
The translation table matches ReaScript functions with their reapy counterparts.
Performance
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 should make use of the reapy.inside_reaper context manager.
>>> import reapy
>>> project = reapy.Project() # Current project
>>> # Unefficient (and useless) call
>>> bpms = [project.bpm for _ in range(1000)] # Takes at least 30 seconds...
>>> # Efficient call
>>> with reapy.inside_reaper():
... bpms = [project.bpm for _ in range(1000)]
...
>>> # Takes only 0.1 second!
Documentation
Check the documentation and especially the API guide and Translation Table for more information.
Contributing
For now, about a half of ReaScript API has a reapy counterpart, the docs are far from great, and many bugs are waiting to be found. Feel free to improve the project by checking the contribution guide!
Author
Roméo Després - RomeoDespres
License
This project is licensed under the MIT License - see the LICENSE.txt file for details.
Release files for python-reapy 0.7.2
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| python-reapy-0.7.2.tar.gz | 202.5 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| python_reapy-0.7.2-py2.py3-none-any.whl | Python 2, Python 3 | none | any | Details |
Total release size: 533.4 kB
Release files / python-reapy-0.7.2.tar.gz
| Download URL | python-reapy-0.7.2.tar.gz |
|---|---|
| Size | 202.5 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
2883d3627e2c76a2a93ade613bdb0244109444d7e645c6cbaac89dc1d674252d
|
|
BLAKE2b-256 checksum How to use checksums |
087503fd5bf2522c8ffa7f72dba28b609f938b5e92e3f4e641638f98de6e4b16
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/1.13.0 pkginfo/1.5.0.1 requests/2.21.0 setuptools/40.8.0 requests-toolbelt/0.9.1 tqdm/4.31.1 CPython/3.7.2
|
Release files / python_reapy-0.7.2-py2.py3-none-any.whl
| Download URL | python_reapy-0.7.2-py2.py3-none-any.whl |
|---|---|
| Size | 330.9 kB |
| Tags | Python 2 Python 3 |
|
SHA-256 checksum How to use checksums |
e3f72932ddd160d6a2cc55a7efff4c946ce33f6db368c19d9a67d355f3066618
|
|
BLAKE2b-256 checksum How to use checksums |
7163a1a29d3db1f7c58f435a3e1dbe71ead5e9c98894fa68e99a18fa53a18a1c
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/1.13.0 pkginfo/1.5.0.1 requests/2.21.0 setuptools/40.8.0 requests-toolbelt/0.9.1 tqdm/4.31.1 CPython/3.7.2
|