Skip to main content

Adobe Premiere Pro CLI, Python library, and MCP server. Automate editing, sequencing, and export with LLM-friendly tools for AI agents. Declarative, scriptable, structured JSON output.

Project description

prpr logo

prpr

License: MIT

The missing CLI, Python library, and MCP server for Adobe Premiere Pro.

Declarative. Scriptable. LLM-friendly. Structural sibling of dvr (the same project for DaVinci Resolve) — same namespaces, same routing, same error model.

prpr is a command-line tool, a typed Python library, and a Model Context Protocol (MCP) server for automating Adobe Premiere Pro — editing, sequencing, effects, and export. It drives Premiere's UXP API through a bundled bridge plugin, wraps it in clean idempotent operations with structured JSON output, and makes it usable by humans, scripts, and AI agents (Claude, Cursor, and any MCP-compatible client).

pip install prpr
$ prpr timeline inspect
{
  "name": "Edit_v1",
  "fps": 23.976,
  "duration_frames": 4274,
  "frame_size": {"width": 1920, "height": 1080},
  "tracks": {
    "video": [{"index": 0, "name": "Video 1", "clips": 2, "items": [...]}],
    "audio": [{"index": 0, "name": "Audio 1", "clips": 2, "items": [...]}]
  },
  "markers": [{"name": "start", "start": {"seconds": 1.0}, ...}]
}

How it connects

Premiere has no external scripting socket — its UXP API runs inside the app, and UXP plugins can only dial out. So prpr inverts the connection:

prpr CLI / library / MCP  ──hosts──▶  ws://127.0.0.1:8855  ◀──dials in──  prpr bridge panel (UXP, inside Premiere)

One-time setup:

prpr plugin install     # installs the headless bridge via Adobe's installer
# restart Premiere once so it registers the plugin
prpr doctor --probe     # verify the whole chain

The bridge is headless — a command-entrypoint UXP plugin that starts with Premiere automatically. There's no panel to open or keep open.

Why prpr exists

Premiere's UXP API is powerful but locked inside the app:

  • No external process access. Resolve ships a Python API; Premiere gives you a JavaScript sandbox in a panel.
  • Action/transaction ceremony. Every mutation needs lockedAccess + executeTransaction + action objects.
  • Ticks. Time is measured in 254,016,000,000ths of a second.
  • Silent failures. importFiles() returns false and moves on with its day.
  • No batch operators, no inspection. You loop getVideoTrack(i)getTrackItems(...) → six async getters per clip.

prpr wraps all of it: one inspect() call returns full structured state, mutations are single undoable transactions, every failure decodes into an error with a cause, a fix, and a state snapshot.

Three ways to use it

1. Python library

from prpr import Premiere

p = Premiere()                        # hosts the bridge, launches Premiere if needed

p.project.ensure("MyShow")            # open-or-create ~/Documents/prpr Projects/MyShow.prproj
p.media.import_(["/footage/a.mp4"], bin="Footage")

tl = p.timeline.ensure("Edit_v1")
tl.append("a.mp4")
tl.add_marker(1.0, name="start", note="first pass", color_index=1)

p.effects.set_param("Motion", "Scale", 50, clip_name="a.mp4")     # transforms
p.effects.add_transition("ADBE Film Dissolve", clip_name="a.mp4")

job = p.render.submit(target_dir="/exports", preset="prores-422", wait=True)
print(job.output_path)

2. CLI

$ prpr project ensure MyShow
$ prpr media import /footage/*.mp4 --bin Footage
$ prpr timeline inspect | jq '.tracks.video[].items'
$ prpr render submit --target-dir /exports --preset prores-422 --wait
$ prpr apply spec.yaml            # terraform-style declarative reconcile

3. MCP server (for LLM agents)

$ prpr mcp install-claude     # one-shot Claude Desktop setup
$ prpr mcp serve              # or run the stdio server yourself
$ prpr mcp tools              # introspect the typed tools

dvr ↔ prpr: one convention, two apps

prpr and dvr share naming, routing, output envelopes, and the error model. An agent (or human) that knows one knows the other:

dvr (Resolve) prpr (Premiere)
timeline inspect
media import --bin
render submit --preset render presets .epr presets
render queue ❌ fails: NotSupportedError + fix
page edit ❌ fails: NotSupportedError + fix
effects apply ❌ fails with pointer to Resolve alternative

Operations one app can't perform fail loudly with a structured NotSupportedError explaining why and what to use instead — never silent degradation. The machine-readable support matrix ships in both packages:

$ prpr schema show parity | jq '.operations["render.queue"]'
{"status": "dvr-only", "reason": "no enumerable render queue in UXP"}

Requirements

  • Adobe Premiere Pro 25.6+ (26.x recommended; built and tested against 26.5)
  • Python 3.10+
  • macOS or Windows (daemon mode is macOS/Linux-style Unix sockets; Windows uses direct mode)

Documentation

License

MIT © M Hadi

Project details


Download files

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

Source Distribution

prpr-1.0.0.tar.gz (122.7 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

prpr-1.0.0-py3-none-any.whl (131.8 kB view details)

Uploaded Python 3

File details

Details for the file prpr-1.0.0.tar.gz.

File metadata

  • Download URL: prpr-1.0.0.tar.gz
  • Upload date:
  • Size: 122.7 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for prpr-1.0.0.tar.gz
Algorithm Hash digest
SHA256 6e0918eb0488387465c91dcf770afde72011be54282cb82afa05ce7c5decc15b
MD5 19758f52a666cfa661a10b23c83c1495
BLAKE2b-256 007784c388f2c580a2a6e3064911ea02f0a413e2cb4435930040ce40daa2b712

See more details on using hashes here.

Provenance

The following attestation bundles were made for prpr-1.0.0.tar.gz:

Publisher: release.yml on mhadifilms/prpr

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file prpr-1.0.0-py3-none-any.whl.

File metadata

  • Download URL: prpr-1.0.0-py3-none-any.whl
  • Upload date:
  • Size: 131.8 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for prpr-1.0.0-py3-none-any.whl
Algorithm Hash digest
SHA256 e77a0be9677bf07d7aa37204a7695b546a9a757288920294941abc4fbfe15159
MD5 57484b17022fc1ae82268969557ea5bd
BLAKE2b-256 e14a1ad2fa97db8ca0ef55af440d27966ea7fb3e6a31205b53ab112a3d87c1ab

See more details on using hashes here.

Provenance

The following attestation bundles were made for prpr-1.0.0-py3-none-any.whl:

Publisher: release.yml on mhadifilms/prpr

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page