playrig 0.1.0 → 0.1.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/AGENTS.md CHANGED
@@ -4,10 +4,10 @@ Playrig lets you control After Effects and Premiere Pro. You write a job script,
4
4
 
5
5
  | Edition | App | Job language | Job global |
6
6
  |---|---|---|---|
7
- | Playrig for After Effects (`ae`) | After Effects | ExtendScript (ES3), `.jsx` | `PLAYRIG` (`BRIDGE` is an alias) |
8
- | Playrig for Premiere Pro (`pr`) | Premiere Pro 25.6+ | modern JS in an async function body (`await` works), `.js` | `PLAYRIG` (`BRIDGE` is an alias), plus `ppro` (the `premierepro` module), `alert`, `confirm` |
7
+ | `playrig-ae` (`ae`) | After Effects | ExtendScript (ES3), `.jsx` | `PLAYRIG` (`BRIDGE` is an alias) |
8
+ | `playrig-pr` (`pr`) | Premiere Pro 25.6+ | modern JS in an async function body (`await` works), `.js` | `PLAYRIG` (`BRIDGE` is an alias), plus `ppro` (the `premierepro` module), `alert`, `confirm` |
9
9
 
10
- Only the editions the user installed work. Check which app is open and that its panel is started before submitting anything (with no panel answering, a job ends with "No result ... Is the app open with the Playrig panel started?").
10
+ Playrig supports macOS only for now. Only the editions the user installed work. Check which app is open and that its panel is started before submitting anything (with no panel answering, a job ends with "No result ... Is the app open with the Playrig panel started?").
11
11
 
12
12
  ## Submit a job
13
13
 
package/README.md CHANGED
@@ -2,17 +2,17 @@
2
2
 
3
3
  Playrig lets Claude, Codex or any coding agent control After Effects and Premiere Pro, so you can "vibe edit" your videos while keeping the control and sophistication these apps give you out of the box.
4
4
 
5
- It is one product with two editions: **Playrig for After Effects** and **Playrig for Premiere Pro**. Install one, or both.
5
+ Playrig is one product made of separate packages: **`playrig`** (the command-line tool), **`playrig-ae`** (the After Effects panel) and **`playrig-pr`** (the Premiere Pro panel). Install the ones you need.
6
6
 
7
7
  ## Install
8
8
 
9
- Requires Node 18 or newer.
9
+ Requires macOS and Node 18 or newer. Windows is not supported yet.
10
10
 
11
11
  ```bash
12
12
  npm install -g playrig # the CLI: `playrig`, short alias `prg`
13
13
 
14
- playrig install ae # Playrig for After Effects: panel into After Effects' ScriptUI Panels folder
15
- playrig install pr # Playrig for Premiere Pro: builds "Playrig (PR).ccx" and opens the Creative Cloud installer
14
+ playrig install ae # playrig-ae: panel into After Effects' ScriptUI Panels folder
15
+ playrig install pr # playrig-pr: builds "Playrig (PR).ccx" and opens the Creative Cloud installer
16
16
  playrig install skills # optional: agent skills (video workflow, recipes, scoring) into ./.claude/skills (--global for ~/.claude/skills)
17
17
  playrig install all # whatever applies of the above
18
18
  ```
@@ -1,4 +1,4 @@
1
- # Playrig for After Effects
1
+ # playrig-ae
2
2
 
3
3
  A folder-based link between Claude and a live After Effects project (AE 2026, macOS and Windows).
4
4
  Claude writes an ExtendScript job into a watched folder; a dockable panel runs it in your open project and writes back a log, errors, project inspection and PNG frames. You only render the final output.
@@ -41,7 +41,7 @@ Upgrading from "AE Bridge": delete `AE Bridge.jsx` and `AE Bridge lib/`; saved s
41
41
  ## The panel
42
42
 
43
43
  ```
44
- Playrig for After Effects ● Idle ⏻ ⚙
44
+ playrig-ae ● Idle ⏻ ⚙
45
45
  Motion_Videos_AI (open project)
46
46
 
47
47
  Recent jobs 35 jobs
@@ -51,7 +51,7 @@ Status Action Time
51
51
  (summary of the selected job) [Details...]
52
52
  ```
53
53
 
54
- - **Power icon**: grey = stopped, green = running. **Gear**: Playrig for After Effects Settings (General: bridge folder, Start automatically, Back up the project file before each job; About).
54
+ - **Power icon**: grey = stopped, green = running. **Gear**: playrig-ae Settings (General: bridge folder, Start automatically, Back up the project file before each job; About).
55
55
  - **Recent jobs is per project**: it shows the jobs of the project that is open (read from `EDIT_LOGS/results/` beside the `.aep`) and switches when you open another project, even while the bridge is stopped. Latest 50, newest first. For an unsaved project only this session's jobs show ("Save the project to keep its job history with it").
56
56
  - Select a row to see a one-line summary of what the job did under the list (ScriptUI has no per-row tooltips); **double-click** a row or press **Details...** for the job details window (what happened, action, id, start + duration, project, error, log, frames, returned value, result path). A `*` after an action means it was inferred from the script rather than declared.
57
57
  - Status uses an icon plus the word: ok (green), error (red), rejected (orange), timeout (amber), unknown (grey).
@@ -101,7 +101,7 @@ Rules for writing jobs are in `CLAUDE.md`.
101
101
 
102
102
  ## Project-folder log (travels with the project)
103
103
 
104
- After every job the panel mirrors its work into `EDIT_LOGS/` next to the `.aep` (the same folder name the Playrig for Premiere Pro uses; an older `AE-BRIDGE/` folder is renamed to it on the first job after the update):
104
+ After every job the panel mirrors its work into `EDIT_LOGS/` next to the `.aep` (the same folder name the playrig-pr uses; an older `AE-BRIDGE/` folder is renamed to it on the first job after the update):
105
105
 
106
106
  ```
107
107
  <project folder>/EDIT_LOGS/
@@ -112,7 +112,7 @@ After every job the panel mirrors its work into `EDIT_LOGS/` next to the `.aep`
112
112
  └── assets.ae.md/.json footage (relative paths, MISSING / EXTERNAL flags), comps and fonts, refreshed each job
113
113
  ```
114
114
 
115
- (`assets.ae.*` is named so it never overwrites the Playrig for Premiere Pro's `assets.md` when a Premiere and an AE project share a folder; `JOURNAL.md` is shared and each entry says which job it is. The panel's table and `playrig ae tail` only list results whose `project.path` is the open project.)
115
+ (`assets.ae.*` is named so it never overwrites the playrig-pr's `assets.md` when a Premiere and an AE project share a folder; `JOURNAL.md` is shared and each entry says which job it is. The panel's table and `playrig ae tail` only list results whose `project.path` is the open project.)
116
116
 
117
117
  Move the whole project folder and a new session can read `JOURNAL.md` and `assets.ae.md` to see what was done and what is available. The root folder (`inbox/ out/ done/`) stays the transport; `EDIT_LOGS/` is the durable record. If the project has never been saved it has no folder: `result.sync` says so and the jobs are backfilled after the first job that runs on a saved project. Sync failures never fail a job; they are reported in `result.sync` (and by `aeb`). Footage outside the project folder is flagged EXTERNAL because it won't move with it; collect files into the project folder to make it portable.
118
118
 
@@ -123,7 +123,7 @@ Move the whole project folder and a new session can read `JOURNAL.md` and `asset
123
123
  - `project.dirty` is reported only if the scripting DOM exposes it; otherwise `null`.
124
124
  - Snapshots use `comp.saveFrameToPng` and then wait up to 10 s for the file to exist with non-zero size.
125
125
  - Closing the panel stops polling.
126
- - Project organization (folders/auto-filing, as in the Playrig for Premiere Pro) is deliberately **not** part of the Playrig for After Effects (decided with the user, 2026-10-02).
126
+ - Project organization (folders/auto-filing, as in the playrig-pr) is deliberately **not** part of the playrig-ae (decided with the user, 2026-10-02).
127
127
  - Jobs share one persistent ExtendScript engine (`#targetengine "playrig"`), so globals can leak between jobs.
128
128
 
129
129
  ## Status of verification
@@ -1,5 +1,5 @@
1
1
  {
2
- "_about": "Shared, engine-neutral data for the Playrig for After Effects: read by the ExtendScript panel, by aeb (Node) and, later, by a UXP port. Plain JSON on purpose. Labels and summaries are display text only: renaming one renames it for every past and future job.",
2
+ "_about": "Shared, engine-neutral data for the playrig-ae: read by the ExtendScript panel, by aeb (Node) and, later, by a UXP port. Plain JSON on purpose. Labels and summaries are display text only: renaming one renames it for every past and future job.",
3
3
  "logFolder": "EDIT_LOGS",
4
4
  "legacyLogFolder": "AE-BRIDGE",
5
5
  "recipePrefix": "recipe.",
@@ -1,4 +1,4 @@
1
- // DEV ONLY. Developer-facing extras for the Playrig for After Effects panel. This whole file is left out of packaged builds: the panel loads it only
1
+ // DEV ONLY. Developer-facing extras for the playrig-ae panel. This whole file is left out of packaged builds: the panel loads it only
2
2
  // if it exists (File.exists + $.evalFile) and only uses $.global.PlayrigDev when it is defined, so removing the file removes these features
3
3
  // without any other change. Currently: the "Job script" section of the job details window (the script as it was run, for debugging jobs).
4
4
  $.global.PlayrigDev = {
@@ -1,4 +1,4 @@
1
- // Playrig for After Effects panel core: everything the panel needs that is NOT user interface. ES3 only.
1
+ // playrig-ae panel core: everything the panel needs that is NOT user interface. ES3 only.
2
2
  // Loaded once by the panel (lib/ folder) and defines $.global.PlayrigCore. Kept free of ScriptUI on purpose so it can move to a UXP
3
3
  // port nearly unchanged: actions + job-header parsing/inference (data in actions.json), the per-project history reader and the
4
4
  // detail-text builder. File access goes through File/Folder only.
@@ -26,7 +26,7 @@ When the library passes **40 recipes**, `playrig ae lib index` automatically tur
26
26
 
27
27
  For agents and for building whole scenes, the **`use-ae-recipes`** skill (`.claude/skills/use-ae-recipes/`) wraps this: it routes through the index, chains recipes, previews, tunes with you and assembles a master comp. To *add* recipes use **`create-ae-recipe`**.
28
28
 
29
- Needs After Effects open with the Playrig for After Effects panel started (see the edition README). Run from anywhere:
29
+ Needs After Effects open with the playrig-ae panel started (see the edition README). Run from anywhere:
30
30
 
31
31
  ```bash
32
32
  playrig ae lib list <word> # search ids, names, tags, aliases, summaries
@@ -136,7 +136,7 @@ playrig ae lib index # rebuild INDEX.md (+ categories/, inde
136
136
  - Add a category by creating a folder under `recipes/` and (optionally) a line in `categories.json` for its description.
137
137
  - Past 40 recipes the index splits by category automatically (`INDEX_SPLIT_THRESHOLD` in the CLI (`playrig/lib/ae.js`)).
138
138
  - `index.json` is the machine-readable catalogue (all metadata + params + path), for tools that prefer JSON.
139
- - The library is just a folder. Copy it anywhere, or point to it with `--lib <dir>` / `AE_LIBRARY`. The scripts are plain ExtendScript; the Playrig for After Effects is only needed to run them.
139
+ - The library is just a folder. Copy it anywhere, or point to it with `--lib <dir>` / `AE_LIBRARY`. The scripts are plain ExtendScript; the playrig-ae is only needed to run them.
140
140
  - Preview images live **next to the recipe** as `<id>--t<seconds>.png` and are embedded in its `## Preview` block (between `<!-- previews:start -->` and `<!-- previews:end -->` markers, kept up to date by `--save-preview`). Moving or copying a recipe means moving its `.md` and its `<id>--t*.png` files together.
141
141
 
142
142
  ## Things to know
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "playrig-ae",
3
- "version": "0.1.0",
3
+ "version": "0.1.1",
4
4
  "private": true,
5
- "description": "Playrig for After Effects: the ScriptUI panel, motion library and skills. Versioned on its own (tags ae-v*).",
5
+ "description": "playrig-ae: the ScriptUI panel, motion library and skills. Versioned on its own (tags ae-v*).",
6
6
  "license": "SEE LICENSE IN LICENSE"
7
7
  }
@@ -1,5 +1,5 @@
1
1
  #targetengine "playrig"
2
- // Playrig for After Effects: stub. This is the only file in After Effects' ScriptUI Panels folder, so it is also the
2
+ // playrig-ae: stub. This is the only file in After Effects' ScriptUI Panels folder, so it is also the
3
3
  // panel's name in the Window menu. It stays tiny and stable, and loads the real panel (core.jsx) from the newest of:
4
4
  // 1. the user's data folder (<userData>/Playrig/ae/current), where verified updates are installed without admin rights
5
5
  // 2. "Playrig lib" next to this file, the copy that `playrig install ae` put there
@@ -352,16 +352,16 @@
352
352
  }
353
353
 
354
354
  // ------------------------------------------------------------ project-folder sync
355
- // Everything a job produces is mirrored into <project folder>/EDIT_LOGS/ (same folder name as Playrig for Premiere Pro; an older
355
+ // Everything a job produces is mirrored into <project folder>/EDIT_LOGS/ (same folder name as playrig-pr; an older
356
356
  // AE-BRIDGE/ folder is renamed to it on the first job) so the project can move to another machine and the next session can
357
357
  // read what was done and which assets exist.
358
358
  var WS_README = "# EDIT_LOGS\n\n" +
359
- "Written automatically by Playrig for After Effects next to the .aep. Move this folder together with the project.\n\n" +
359
+ "Written automatically by playrig-ae next to the .aep. Move this folder together with the project.\n\n" +
360
360
  "- `JOURNAL.md`: chronological record of every job (newest last): what ran, status, errors, log, snapshots.\n" +
361
361
  "- `jobs/<id>.jsx` (+ `<id>.json` options): the exact scripts that were run on this project.\n" +
362
362
  "- `results/<id>/`: `result.json` and the PNG snapshots of each job.\n" +
363
363
  "- `assets.ae.md` / `assets.ae.json`: footage, comps and fonts in the project as of the last job (paths relative to the project folder). " +
364
- "(Named `.ae` so they do not overwrite Playrig for Premiere Pro's `assets.md` when both projects share a folder.)\n\n" +
364
+ "(Named `.ae` so they do not overwrite playrig-pr's `assets.md` when both projects share a folder.)\n\n" +
365
365
  "To continue on another system: open the .aep, read `JOURNAL.md` and `assets.ae.md`, re-link any footage marked MISSING, " +
366
366
  "install the listed fonts, then submit new jobs with Playrig as usual. Re-running `jobs/*.jsx` in order rebuilds the scripted work.\n";
367
367
 
@@ -5,7 +5,7 @@ description: Add a new recipe (reusable, parameterised After Effects effect, ele
5
5
 
6
6
  # create-ae-recipe
7
7
 
8
- You add one recipe at a time to `<library>/` (one Markdown file per recipe, see `<library>/README.md`). Recipes run in the user's **open** After Effects project through the Playrig for After Effects, so the work is: build it, **look at it**, show the user, iterate, then save it cleanly.
8
+ You add one recipe at a time to `<library>/` (one Markdown file per recipe, see `<library>/README.md`). Recipes run in the user's **open** After Effects project through the playrig-ae, so the work is: build it, **look at it**, show the user, iterate, then save it cleanly.
9
9
 
10
10
  Two entry points, same finish:
11
11
 
@@ -20,7 +20,7 @@ Two entry points, same finish:
20
20
  playrig ae scratch start # remember what's in the project before you add anything
21
21
  ```
22
22
 
23
- - After Effects must be open with the Playrig for After Effects panel started (status `Idle`). If a job times out, tell the user to start the panel.
23
+ - After Effects must be open with the playrig-ae panel started (status `Idle`). If a job times out, tell the user to start the panel.
24
24
  - You are working inside the user's real project. **All experiments go in comps named `SCRATCH-<id>-v<n>`.** Never modify their existing layers/comps. Never save the project. Never run `scratch clean --yes` before reading its list and confirming every item is yours.
25
25
  - Each Playrig job is one Undo step; the user can Edit > Undo.
26
26
  - Fonts: check the requested font is installed (`textInfo.font` via inspect, or a visible substitution in the preview). Default is Inter.
@@ -1,6 +1,6 @@
1
1
  # After Effects patterns for recipes
2
2
 
3
- Everything here was verified in After Effects 26.5 through the Playrig for After Effects while building the library. Scripts are **ExtendScript (ES3)**.
3
+ Everything here was verified in After Effects 26.5 through the playrig-ae while building the library. Scripts are **ExtendScript (ES3)**.
4
4
 
5
5
  ## ES3 rules (the linter `playrig ae lib check` enforces most)
6
6
 
@@ -71,10 +71,10 @@ if (!ae || ae.status !== 'ok') {
71
71
  // Never leave a stale job behind: it would run later when the panel starts.
72
72
  for (const f of [`${id}.jsx`, `${id}.json`, `${id}.jsx.tmp`, `${id}.json.tmp`]) fs.rmSync(path.join(root, 'inbox', f), { force: true });
73
73
  const why = ae ? `job ${ae.status}: ${ae.error && ae.error.message}` : `no answer within ${waitSec}s`;
74
- add('fail', 'After Effects + Playrig for After Effects panel', why, 'Open After Effects, then Window > Playrig and press Start (status "Idle"). First time? Install the panel: playrig install ae, and enable Settings > Scripting & Expressions > "Allow Scripts to Write Files and Access Network"');
74
+ add('fail', 'After Effects + playrig-ae panel', why, 'Open After Effects, then Window > Playrig and press Start (status "Idle"). First time? Install the panel: playrig install ae, and enable Settings > Scripting & Expressions > "Allow Scripts to Write Files and Access Network"');
75
75
  } else {
76
76
  const v = ae.returnValue;
77
- add('ok', 'After Effects + Playrig for After Effects panel', `AE ${v.ae}, panel answering`);
77
+ add('ok', 'After Effects + playrig-ae panel', `AE ${v.ae}, panel answering`);
78
78
  add('ok', 'Open project', `${v.project.path || '(unsaved project)'}${v.project.dirty ? ', unsaved changes' : ''}; ${v.project.items} items, ${v.comps} comps${v.active ? `; active comp: ${v.active}` : ''}`);
79
79
  const missing = Object.entries(v.fonts).filter(([, ok]) => ok === false).map(([n]) => n);
80
80
  const unknown = Object.entries(v.fonts).filter(([, ok]) => ok === null).map(([n]) => n);
@@ -5,13 +5,13 @@ description: Build After Effects scenes and videos from the user's motion librar
5
5
 
6
6
  # use-ae-recipes
7
7
 
8
- You turn a brief into finished comps inside the user's **open** After Effects project by running tested recipes from `<library>/` through the Playrig for After Effects: pick, chain, tune, assemble, show.
8
+ You turn a brief into finished comps inside the user's **open** After Effects project by running tested recipes from `<library>/` through the playrig-ae: pick, chain, tune, assemble, show.
9
9
 
10
10
  Missing or unsuitable recipe? Switch to the **`create-ae-recipe`** skill rather than improvising a one-off. Don't render final output: that stays with the user (render queue / Media Encoder).
11
11
 
12
12
  ## 0. Preflight
13
13
 
14
- - After Effects open, Playrig for After Effects panel started (`Idle`). If a job times out, ask the user to start it.
14
+ - After Effects open, playrig-ae panel started (`Idle`). If a job times out, ask the user to start it.
15
15
  - You are working in their real project. **Create new comps only**; don't touch existing comps/layers unless asked. Never save the project. Every run is one Undo step.
16
16
  - Commands are `playrig ae ...`. Helper-script paths below (`.claude/skills/...`) are relative to the project folder where the skills were installed (`playrig install skills`). `<library>` is the folder printed by `playrig where library`.
17
17
  - For frame review you'll use `.claude/skills/create-ae-recipe/scripts/media` (run its `setup.sh` once if `media check` fails).
@@ -1,4 +1,4 @@
1
- # Playrig for Premiere Pro (UXP) — v0.1 spike
1
+ # playrig-pr (UXP) — v0.1 spike
2
2
 
3
3
  Same folder protocol as the After Effects edition (`inbox/ running/ done/ out/<id>/result.json`), driven by a UXP panel in Premiere Pro 25.6+.
4
4
  Jobs are **modern JavaScript** (async function bodies; `await` works) receiving `PLAYRIG` (`BRIDGE` is an alias), `ppro` (the `premierepro` module), `alert`, `confirm`.
@@ -1,6 +1,6 @@
1
1
  # Adding a music score to Premiere sequences (draft process, for a future skill)
2
2
 
3
- Worked once on "Quadrant Chips Wide/Portrait" (7 s motion pieces). Epidemic Sound MCP + Playrig for Premiere Pro.
3
+ Worked once on "Quadrant Chips Wide/Portrait" (7 s motion pieces). Epidemic Sound MCP + playrig-pr.
4
4
 
5
5
  ## Steps
6
6
  1. **Read the timeline, not just the brief.** Get each sequence's length, frame size and the moments that carry rhythm (here: chip pops every 0.6 s starting 2.6 s). Derive a music brief from them:
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "playrig-pr",
3
- "version": "0.1.0",
3
+ "version": "0.1.1",
4
4
  "private": true,
5
- "description": "Playrig for Premiere Pro: the UXP panel and skills. Versioned on its own (tags pr-v*).",
5
+ "description": "playrig-pr: the UXP panel and skills. Versioned on its own (tags pr-v*).",
6
6
  "license": "SEE LICENSE IN LICENSE"
7
7
  }
@@ -320,7 +320,7 @@ async function collectAssets(project, projDir, sequenceNames) {
320
320
 
321
321
  function assetsMarkdown(a) {
322
322
  const media = a.items.filter((x) => x.kind === "media"), seqs = a.items.filter((x) => x.kind === "sequence");
323
- let s = `# Project assets\n\nGenerated ${a.generatedAt} by Playrig for Premiere Pro. Relative paths are from the .prproj folder (\`${a.projectFolder}\`).\n\n`;
323
+ let s = `# Project assets\n\nGenerated ${a.generatedAt} by playrig-pr. Relative paths are from the .prproj folder (\`${a.projectFolder}\`).\n\n`;
324
324
  s += `## Sequences (${seqs.length})\n\n` + seqs.map((x) => `- ${x.name} (bin ${x.bin})`).join("\n") + "\n\n";
325
325
  s += `## Media (${media.length})\n\n`;
326
326
  for (const x of media) s += `- ${x.name} (bin ${x.bin}): \`${x.relative}\`${x.offline ? " **OFFLINE/MISSING**" : ""}\n`;
@@ -331,7 +331,7 @@ function assetsMarkdown(a) {
331
331
  // ------------------------------------------------------------ project-folder sync
332
332
  const WS_README = `# EDIT_LOGS
333
333
 
334
- Written automatically by the Playrig for Premiere Pro next to the .prproj. Move this folder with the project.
334
+ Written automatically by the playrig-pr next to the .prproj. Move this folder with the project.
335
335
 
336
336
  - \`JOURNAL.md\`: chronological record of every job (newest last).
337
337
  - \`jobs/<id>.js\` (+ \`<id>.json\`): the exact scripts run on this project.
@@ -2,7 +2,7 @@
2
2
  "manifestVersion": 5,
3
3
  "id": "playrig.premiere",
4
4
  "name": "Playrig",
5
- "version": "0.1.0",
5
+ "version": "0.1.1",
6
6
  "main": "index.html",
7
7
  "host": {
8
8
  "app": "premierepro",
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  name: score-video
3
- description: Add a music score plus sound effects to a finished video in Premiere Pro, using Epidemic Sound and the Playrig for Premiere Pro. Derives a music brief from the video's own timeline (mood, BPM from the motion cadence), finds and length-fits a track, picks SFX for the key moments, builds a typewriter bed, ducks the music under the effects with a measured sidechain, and lays everything on separate audio tracks as one undo step. Use when the user asks for a music bed, score, soundtrack, sound design, SFX, or "make it sound good" for a video or sequence, especially motion graphics made in After Effects.
3
+ description: Add a music score plus sound effects to a finished video in Premiere Pro, using Epidemic Sound and the playrig-pr. Derives a music brief from the video's own timeline (mood, BPM from the motion cadence), finds and length-fits a track, picks SFX for the key moments, builds a typewriter bed, ducks the music under the effects with a measured sidechain, and lays everything on separate audio tracks as one undo step. Use when the user asks for a music bed, score, soundtrack, sound design, SFX, or "make it sound good" for a video or sequence, especially motion graphics made in After Effects.
4
4
  ---
5
5
 
6
6
  # score-video
@@ -10,7 +10,7 @@ You turn a finished (or nearly finished) picture into a scored one: music bed +
10
10
  **Ground rules:** work in the user's open Premiere project; add audio only, never touch picture; **never save the project**; every Premiere job is one undo step; downloads go in the project's own music/sound folders; say what you could not verify (you cannot listen: only measure).
11
11
 
12
12
  ## 0. Preflight (before asking anything)
13
- - Playrig for Premiere Pro answering: `playrig pr run "$(playrig where pr)/examples/hello.js" --id pre-$RANDOM`. If not, ask the user to start the panel (Window > Extensions > Playrig, then Start).
13
+ - playrig-pr answering: `playrig pr run "$(playrig where pr)/examples/hello.js" --id pre-$RANDOM`. If not, ask the user to start the panel (Window > Extensions > Playrig, then Start).
14
14
  - Epidemic Sound tools available (`mcp__epidemic-sound__*`, load via ToolSearch: SearchRecordings, EditRecording, PollEditRecordingJob, DownloadRecordingEdit, SearchSoundEffects, DownloadSoundEffect). If missing, say so and stop; do not substitute other sources.
15
15
  - `ffmpeg`, `ffprobe` and `python3` on PATH.
16
16
  - Find the project folder from the job log (`project:` line) and look for its music/sound folders (e.g. `3_MUSIC`, `2_SOUND`). Use them; create `2_SOUND/SFX` if needed.
@@ -1,4 +1,4 @@
1
- // Playrig for Premiere Pro job: lay the score + SFX on one or more sequences as ONE undo step.
1
+ // playrig-pr job: lay the score + SFX on one or more sequences as ONE undo step.
2
2
  // Run: playrig pr run .claude/skills/score-video/scripts/place.js --id place-<rand>
3
3
  // Edit CONFIG first (copy the placements from mix.py's JSON report). Modern JS, `await` works. Never saves the project.
4
4
  const CONFIG = {
package/lib/ae.js CHANGED
@@ -1,5 +1,5 @@
1
1
  'use strict';
2
- // Playrig for After Effects client: submits ExtendScript (.jsx) jobs to the panel, reads results, runs the recipe library.
2
+ // playrig-ae client: submits ExtendScript (.jsx) jobs to the panel, reads results, runs the recipe library.
3
3
 
4
4
  const fs = require('fs');
5
5
  const path = require('path');
package/lib/common.js CHANGED
@@ -11,8 +11,8 @@ const BOOL_FLAGS = new Set(['no-undo', 'json', 'no-snap', 'save-preview', 'full'
11
11
 
12
12
  // The two editions. `ext` is the job file extension the panel watches for.
13
13
  const APPS = {
14
- ae: { id: 'ae', name: 'After Effects', product: 'Playrig for After Effects', ext: '.jsx', legacyDir: 'AE Bridge', legacyEnv: 'AE_BRIDGE_ROOT' },
15
- pr: { id: 'pr', name: 'Premiere Pro', product: 'Playrig for Premiere Pro', ext: '.js', legacyDir: 'Premiere Bridge', legacyEnv: 'PREMIERE_BRIDGE_ROOT' },
14
+ ae: { id: 'ae', name: 'After Effects', product: 'playrig-ae', ext: '.jsx', legacyDir: 'AE Bridge', legacyEnv: 'AE_BRIDGE_ROOT' },
15
+ pr: { id: 'pr', name: 'Premiere Pro', product: 'playrig-pr', ext: '.js', legacyDir: 'Premiere Bridge', legacyEnv: 'PREMIERE_BRIDGE_ROOT' },
16
16
  };
17
17
 
18
18
  const USAGE = `Playrig: let a coding agent control After Effects and Premiere Pro.
package/lib/install.js CHANGED
@@ -134,6 +134,7 @@ function installSkills(flags) {
134
134
 
135
135
  function install(pos, flags) {
136
136
  const what = pos[0];
137
+ if (process.platform !== 'darwin' && what !== 'skills') die('Playrig supports macOS only for now (Windows is not supported yet).', 1);
137
138
  if (what === 'ae') return installAE(flags);
138
139
  if (what === 'pr') return installPR(flags);
139
140
  if (what === 'skills') return installSkills(flags);
package/lib/payload.js CHANGED
@@ -57,4 +57,28 @@ function prPackage(outFile) {
57
57
  return { version: readJSON(path.join(ed, 'plugin', 'manifest.json')).version, file: outFile };
58
58
  }
59
59
 
60
- module.exports = { STUB_API, aePayload, prPackage, zipFolder, editionVersion, readJSON };
60
+ // A download for people who don't use Terminal: the stub, the payload folder and a one-page guide, to drag into ScriptUI Panels.
61
+ const INSTALL_TXT = `playrig-ae: manual install (macOS)
62
+
63
+ 1. Quit After Effects.
64
+ 2. In Finder choose Go > Go to Folder... and paste:
65
+ /Applications/Adobe After Effects <your version>/Scripts/ScriptUI Panels
66
+ 3. Drag Playrig.jsx and the folder "Playrig lib" from this download into that folder.
67
+ Enter your Mac password when asked. If a "Playrig lib" folder is already there, replace it.
68
+ 4. Start After Effects. Open Preferences > Scripting & Expressions and turn on
69
+ "Allow Scripts to Write Files and Access Network".
70
+ 5. Restart After Effects, open Window > Playrig and press Start.
71
+
72
+ Later updates install from the panel: Settings > About > Check for Updates.
73
+ Use of Playrig is covered by LICENSE.txt (inside "Playrig lib").
74
+ `;
75
+ function aeInstallBundle(dest, version) {
76
+ const ed = C.editionDir('ae');
77
+ fs.rmSync(dest, { recursive: true, force: true });
78
+ fs.mkdirSync(dest, { recursive: true });
79
+ aePayload(path.join(dest, 'Playrig lib'), version);
80
+ fs.copyFileSync(path.join(ed, 'panel', 'Playrig.jsx'), path.join(dest, 'Playrig.jsx'));
81
+ fs.writeFileSync(path.join(dest, 'INSTALL.txt'), INSTALL_TXT);
82
+ }
83
+
84
+ module.exports = { aeInstallBundle, STUB_API, aePayload, prPackage, zipFolder, editionVersion, readJSON };
package/lib/pr.js CHANGED
@@ -1,5 +1,5 @@
1
1
  'use strict';
2
- // Playrig for Premiere Pro client: submits JavaScript (.js) jobs to the UXP panel, reads results.
2
+ // playrig-pr client: submits JavaScript (.js) jobs to the UXP panel, reads results.
3
3
 
4
4
  const fs = require('fs');
5
5
  const path = require('path');
package/lib/update.js CHANGED
@@ -77,7 +77,7 @@ async function updateAE(entry, custom) {
77
77
  if (fs.existsSync(path.join(base, 'current'))) fs.renameSync(path.join(base, 'current'), path.join(base, 'previous'));
78
78
  fs.renameSync(fresh, path.join(base, 'current'));
79
79
  } finally { fs.rmSync(tmp, { recursive: true, force: true }); fs.rmSync(fresh, { recursive: true, force: true }); }
80
- console.log(`Playrig for After Effects ${entry.version} installed. Restart After Effects to use it.`);
80
+ console.log(`playrig-ae ${entry.version} installed. Restart After Effects to use it.`);
81
81
  }
82
82
 
83
83
  async function updatePR(entry, custom) {
@@ -92,6 +92,7 @@ async function updatePR(entry, custom) {
92
92
 
93
93
  async function update(pos, flags) {
94
94
  const what = pos[0];
95
+ if (process.platform !== 'darwin' && (what === 'ae' || what === 'pr')) C.die('Playrig supports macOS only for now (Windows is not supported yet).', 1);
95
96
  if (what && !['ae', 'pr', 'cli'].includes(what)) C.die('Usage: playrig update [ae|pr|cli] [--check]');
96
97
  const { feed, custom } = await getFeed();
97
98
  const have = {
@@ -99,7 +100,7 @@ async function update(pos, flags) {
99
100
  pr: C.editionDir('pr') ? P.readJSON(path.join(C.editionDir('pr'), 'plugin', 'manifest.json')).version : null,
100
101
  cli: P.readJSON(path.join(C.CLI_DIR, 'package.json')).version,
101
102
  };
102
- const names = { ae: 'Playrig for After Effects', pr: 'Playrig for Premiere Pro', cli: 'playrig CLI' };
103
+ const names = { ae: 'playrig-ae', pr: 'playrig-pr', cli: 'playrig' };
103
104
  let pending = 0;
104
105
  for (const id of (what ? [what] : ['ae', 'pr', 'cli'])) {
105
106
  const e = feed[id];
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "playrig",
3
- "version": "0.1.0",
3
+ "version": "0.1.1",
4
4
  "description": "Playrig lets Claude, Codex or any coding agent control After Effects and Premiere Pro.",
5
5
  "bin": {
6
6
  "playrig": "bin/playrig.js",
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  name: create-video
3
- description: End-to-end workflow for making a short motion video with Claude across After Effects, Premiere Pro and Epidemic Sound, using the Playrig for After Effects and Playrig for Premiere Pro, in the user's own project layout. Covers brief and storyboard, building scenes in AE (wide AND portrait), keeping AE tidy, rendering, syncing to Premiere sequences, scoring (music + SFX) via score-video, and exporting to the project's final folders. Use at the start of any request to make, animate, recreate, sync, score or export a video, or when the user continues a video already in progress ("update the pills", "sync it with Premiere", "export the video").
3
+ description: End-to-end workflow for making a short motion video with Claude across After Effects, Premiere Pro and Epidemic Sound, using the playrig-ae and playrig-pr, in the user's own project layout. Covers brief and storyboard, building scenes in AE (wide AND portrait), keeping AE tidy, rendering, syncing to Premiere sequences, scoring (music + SFX) via score-video, and exporting to the project's final folders. Use at the start of any request to make, animate, recreate, sync, score or export a video, or when the user continues a video already in progress ("update the pills", "sync it with Premiere", "export the video").
4
4
  ---
5
5
 
6
6
  # create-video
@@ -1,4 +1,4 @@
1
- // Playrig for Premiere Pro job: export sequences immediately with a Media Encoder preset.
1
+ // playrig-pr job: export sequences immediately with a Media Encoder preset.
2
2
  // This job does NOT check for existing files: `ls` the target folder first and never overwrite an existing export without asking.
3
3
  // Finals go to <project>/5_FINAL/Wide and 5_FINAL/Vertical with a _FINAL suffix; drafts to 4_EXPORTS.
4
4
  // Run: playrig pr run <this file> --id export-$(date +%s) --timeout 400
@@ -1,4 +1,4 @@
1
- // Playrig for Premiere Pro job: import AE renders and create one sequence per render (size taken from the clip). Never saves.
1
+ // playrig-pr job: import AE renders and create one sequence per render (size taken from the clip). Never saves.
2
2
  // Run: playrig pr run <this file> --id seq-$(date +%s)
3
3
  const CONFIG = {
4
4
  items: [ // render file -> sequence name
@@ -1,4 +1,4 @@
1
- // Playrig for Premiere Pro job: swap a sequence's picture (V1) and audio clips to NEW files, in place, as one undo step.
1
+ // playrig-pr job: swap a sequence's picture (V1) and audio clips to NEW files, in place, as one undo step.
2
2
  // Overwrite replaces the clip underneath; pad replacement audio to the OLD clip's length so no remnant is left.
3
3
  // (createRemoveItemsAction does not work through Playrig.) Never overwrite a file Premiere has imported: new file names only.
4
4
  // Run: playrig pr run <this file> --id swap-$(date +%s)