Parse and edit REAPER .RPP project files: tracks, items, markers, regions, and render settings as Python objects
Project description
reaproj
Parse and edit REAPER .RPP project files in Python: tracks, items, markers,
regions, and render settings as objects, instead of hand-editing chunk text.
Typical uses: add regions to a project programmatically, batch-change render
settings (output directory, $region naming, format) before a headless
-renderproject render, read item positions and source files for analysis,
or save versioned copies of a session.
Built on rpp (the tokenizer/emitter); reaproj adds the object model on top.
Install
pip install reaproj
Read a project
from reaproj import Project
project = Project.load("Session.RPP")
for track in project.tracks:
for item in track.items:
print(item.position, item.length, item.soffs, item.source_path)
for region in project.regions:
print(region.name, region.start, region.end)
Add regions
project.add_region(12.5, 95.0, "Take 1") # id and GUID handled for you
Configure rendering
from reaproj import RenderBounds
project.render.directory = "Takes"
project.render.pattern = "$region"
project.render.bounds = RenderBounds.ALL_REGIONS
project.render.stems = 0 # master mix
project.render.normalize_enabled = False
project.render.format = "wav24" # or "mp3", or a raw RENDER_CFG base64 payload
Save
project.save() # in place
project.save("Other.RPP") # elsewhere
project.save_next_version() # "Session v2.RPP", "Session v3.RPP", ...
Then render headlessly:
REAPER -renderproject "Session v2.RPP"
Alternatives
- rpp: the underlying low-level parser/emitter; gives you an ElementTree-like view of raw chunks. Use it directly when you need something reaproj doesn't model yet.
- reathon: constructs new REAPER projects from scratch; not aimed at editing existing ones.
- rppxml: RPP parsing via the WDL implementation.
- reapy: controls a running REAPER instance through the ReaScript API; requires REAPER to be open. reaproj works on the files themselves, no REAPER required.
Fidelity
reaproj never touches content it doesn't understand; everything round-trips through the element tree, and numeric values are preserved as strings, never reformatted. Verified on real REAPER 7 projects:
- Emission is idempotent, and the only differences from REAPER's own formatting are cosmetic quoting (quotes dropped on space-free strings; both forms appear in REAPER-authored files).
- REAPER itself loads and headlessly renders reaproj-emitted projects: in an A/B against the original project file, all rendered regions matched in name, count, and byte-identical file size, and the audio difference between the two renders was the same as between two renders of the untouched original (i.e. REAPER's own render-to-render variance from modulated plugins, not a file difference).
License
MIT
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file reaproj-0.1.1.tar.gz.
File metadata
- Download URL: reaproj-0.1.1.tar.gz
- Upload date:
- Size: 7.0 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.14.5
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
44f17d6ad13f6d0da73927de7c97b6951079040e834c3190f868220d450d6841
|
|
| MD5 |
b6068376d5e8ad22b227ee974c535b33
|
|
| BLAKE2b-256 |
e71dae9bbba862772cef44ee07824c201dd64d0492686d20ee25f4152ed316c5
|
File details
Details for the file reaproj-0.1.1-py3-none-any.whl.
File metadata
- Download URL: reaproj-0.1.1-py3-none-any.whl
- Upload date:
- Size: 6.6 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.14.5
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
84eb28e4d7f0a54afac2baae79d5d71764e65020a5a68b5507a49c2470081de9
|
|
| MD5 |
dbca41b2f9da1d1ac24e16d3aad462d7
|
|
| BLAKE2b-256 |
d96f0cfda5bf5d361d59f6672f6a4d5bcee9d237933738d2fe7d8227144c2801
|