Skip to main content

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

Metadata

Release files for reaproj 0.1.1

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for reaproj 0.1.1
File Size Uploaded
reaproj-0.1.1.tar.gz 7.0 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for reaproj 0.1.1
File Interpreter ABI Platform
reaproj-0.1.1-py3-none-any.whl Python 3 none any Details

Total release size: 13.7 kB

Release files / reaproj-0.1.1.tar.gz

Download URL reaproj-0.1.1.tar.gz
Size 7.0 kB
Tags Source
SHA-256 checksum
How to use checksums
44f17d6ad13f6d0da73927de7c97b6951079040e834c3190f868220d450d6841
BLAKE2b-256 checksum
How to use checksums
e71dae9bbba862772cef44ee07824c201dd64d0492686d20ee25f4152ed316c5
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.2.0 CPython/3.14.5

Release files / reaproj-0.1.1-py3-none-any.whl

Download URL reaproj-0.1.1-py3-none-any.whl
Size 6.6 kB
Tags Python 3
SHA-256 checksum
How to use checksums
84eb28e4d7f0a54afac2baae79d5d71764e65020a5a68b5507a49c2470081de9
BLAKE2b-256 checksum
How to use checksums
d96f0cfda5bf5d361d59f6672f6a4d5bcee9d237933738d2fe7d8227144c2801
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.2.0 CPython/3.14.5

Release history Release notifications | RSS feed

This release

0.1.1 This release

2 release files

0.1.0

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page