agentsclimarketplace

Ppro bridge

Skill ZeusSheen/ppro-agent-bridge/.claude/skills/ppro-bridge

Drive Adobe Premiere Pro through the ppro-agent-bridge CLI for transcript-driven, closed-loop video editing. Use when asked to inspect a Premiere project, transcribe footage (local Whisper), read transcripts, export frames or OTIO timelines, import media or transcripts, place clips or sentence-level cuts on the timeline, or assemble a rough cut / best-take edit from talking-head footage. Requires the broker running and the Agent Bridge UXP panel loaded in Premiere.From its SKILL.md

Install
npx -y skills add ZeusSheen/ppro-agent-bridge --skill ppro-bridge

Assembled from the repository path, not quoted from the project. Check it against their README if it does not work.

2 things to look at

  • no licenseNo license file was found in the repository. Code published without one is not open source by default, so using it at work is a question for whoever answers licensing questions where you are.
  • 1 stars1 stars. Stars are a popularity signal and not a quality one, but at this level it is likely that nobody has read this closely except its author, and you would be relying on your own review.

SKILL.md

6.9 KB, ~1.6k tokens by cl100k_base, as published. Nobody here has run it

Premiere Pro Agent Bridge (v0.2)

Control a live Premiere Pro session via CLI. Architecture: python ppro.py <action> → local broker (127.0.0.1:8017) → UXP panel inside Premiere. Every command prints one JSON object; exit code 0 = success.

Working directory for all commands: the cli/ folder of this repository.

Preconditions (check before anything else)

Run python ppro.py ping. If it fails: the broker isn't running (python broker.py in broker/, separate terminal, keep open) or the panel isn't loaded (UXP Developer Tool → Load; Premiere: Window → UXP Plugins → Agent Bridge). Report the failure instead of retrying blindly. transcribe.py works without Premiere.

Commands

CommandPurpose
python ppro.py pingLiveness check
python ppro.py get_project / get_sequenceActive project / sequence info
python ppro.py list_transcriptsEvery project clip + hasTranscript flag
python ppro.py export_transcript --output f.json [--item "name"]Export a clip's Premiere transcript
python transcribe.py <media file> --output f.json [--language en] [--model large-v3] [--digest]LOCAL Whisper transcription → Adobe-format JSON. GPU auto-detected; on CPU use --model medium
python transcript_digest.py f.json [--json] [--min-conf 0.8]Transcript → sentence list with timecodes
python ppro.py import_transcript --item "name" --file f.jsonAttach a transcript JSON to a clip in Premiere (optional; digest works without it)
python ppro.py export_otio --output f.otioTimeline structure as OpenTimelineIO (includes each clip's source media path)
python ppro.py export_frame --dir d [--at sec] [--width 640] [--height 360]One frame of the program output; real path in resolvedPath
python ppro.py import_media --path f [--path f2 ...]Import media into project root
python ppro.py insert_clip --item "name" [--at sec] [--vtrack N] [--atrack N] [--mode overwrite|insert] [--in sec --out sec] [--label "text"]Place a clip — with --in/--out, only that source range ("cut by sentence")

Track indices are 0-based (0 = V1). --mode overwrite (default) replaces what's under it; insert pushes content rightward. --in/--out come as a pair, in SOURCE seconds. Always pass --label describing the edit intent — it becomes the user's undo-history entry.

Getting a transcript (Whisper-first)

Preferred path — run local Whisper yourself; do not wait for Premiere:

  1. Find the source file path: from the user, or from export_otio (each clip records its media path), or get_project context.
  2. python transcribe.py "<path>" --output tr.json --language en (use zh for Chinese; omit --language to auto-detect). First run downloads model weights.
  3. Whisper confidence values are REAL — --min-conf 0.8 on the digest is a valid quality filter.

Premiere-native transcripts (via export_transcript) are also fine when they already exist, but their confidence field is placeholder 1.0 — judge quality from the text. A transcript exporting ~170 bytes with words: [] and language und-zz is an empty placeholder: treat as "no transcript".

The three layers and their coordinate systems

  1. Semantic — transcript digest: sentences with speaker/start/end in SOURCE-CLIP seconds.
  2. Structure — OTIO export: which source file each timeline clip uses, its source range, its sequence position.
  3. Perceptionexport_frame renders the program output (all tracks composited); --at is SEQUENCE seconds.

Conversion: sequence_time = clip_position + (source_time − source_range_start). The two systems coincide only while a full clip sits at position 0 — never rely on this after the first cut. One source sentence maps to multiple sequence positions if the clip is used more than once: convert per clip instance via OTIO, never a global lookup.

Raw shoot footage: take selection (common case)

Talking-head raw footage (interviews, pieces-to-camera) contains direction chatter and retakes. In the digest, expect and classify:

  • Direction/setup: crew talk that is not part of the piece — framing and positioning instructions, readiness checks, count-ins, prompt/notes handling.
  • False starts / broken takes: a passage that stops abruptly, followed by direction, followed by the SAME passage again.
  • Clean takes: the repeated passage's complete, uninterrupted version — usually the LAST occurrence.

Rules: cut all direction chatter; for repeated passages keep exactly one take, preferring the last complete one (earlier takes exist because they failed); when unsure which take is cleaner, export a frame from each and compare, or ask.

Transcript-driven rough cut: standard workflow

  1. Obtain digest (Whisper-first, above). Read ALL sentences before deciding.
  2. Make every content decision in text first: classify takes, pick sentences, order them, compute total runtime against the user's target.
  3. Merge digest lines that are one spoken sentence split across rows (contiguous timestamps, text flows on) — cut at real sentence boundaries, not row breaks.
  4. Place cuts one sentence-run at a time: insert_clip --in <start> --out <end> --at <running position> --label "<short intent>". Add ~0.15 s breathing room at boundaries; prefer cutting in pauses. Treat timestamps as ±0.2 s.
  5. Verify sparsely: export_frame --at at 1–3 cut points (mid-grimace faces, clipped gestures), not every frame.
  6. Report: chosen sentences with timecodes, skipped material and why, total runtime, undo labels used.

Discipline and limits

  • NEVER edit without a digest or explicit user timecodes — no blind cutting.
  • Proper nouns from ASR are unreliable (names and places are frequently misspelled). Fine for cut decisions; NEVER copy transcript spelling into captions or on-screen text without verification.
  • Speed-remapped clips break the coordinate formula — unsupported; stop and say so.
  • Duplicate clip names resolve to the first match; if ambiguous, ask.
  • Every write lands in Undo history under your --label; range placements are three labelled steps ([1/3]…) — say so when reporting.
  • Do not run write operations on production projects without explicit user confirmation; prefer test projects or copies.
  • If a command errors with a [step name] prefix, report the step verbatim.
  • You cannot trigger Premiere's own Speech-to-Text; you don't need to — use transcribe.py.

What ships with it

Read from the repository

Just SKILL.md. No reference files, no scripts.

Keep looking

Skills are one crate of 326,144. Ordering is by how many stacks a row turns up in, so the top of any crate is what has actually been picked rather than what has the most stars.