premiere-pro-mcp 1.16.2 → 1.16.4
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/CHANGELOG.md +45 -0
- package/README.md +46 -17
- package/after-effects-cep-plugin/CSXS/manifest.xml +2 -2
- package/artifacts/MCPBridgeCEP.zxp +0 -0
- package/cep-plugin/CSXS/manifest.xml +3 -3
- package/cep-plugin/index.html +1 -1
- package/cep-plugin/updater.cjs +1 -1
- package/dist/bridge/script-builder.js +19 -17
- package/dist/resources/adobe-uxp-coverage.json +52 -0
- package/dist/resources/extendscript-reference.js +2 -2
- package/dist/resources/live-context-resources.js +1 -1
- package/dist/resources/uxp-js-api-inventory.json +10 -10
- package/dist/security/capabilities.js +2 -0
- package/dist/tools/advanced.js +30 -6
- package/dist/tools/metadata.d.ts +26 -0
- package/dist/tools/metadata.js +212 -17
- package/dist/tools/project.js +3 -3
- package/dist/tools/sequence.js +3 -3
- package/dist/tools/source-monitor.d.ts +5 -0
- package/dist/tools/source-monitor.js +66 -5
- package/dist/tools/track-targeting.js +43 -4
- package/dist/tools/uxp-workflows.d.ts +59 -0
- package/dist/tools/uxp-workflows.js +36 -3
- package/dist/tools/uxp.d.ts +150 -0
- package/dist/workflows/agent-instructions.js +12 -0
- package/dist/workflows/catalog.d.ts +8 -2
- package/dist/workflows/catalog.js +9 -0
- package/dist/workflows/tool-packs.js +5 -1
- package/docs/supported-actions.md +7 -7
- package/package.json +4 -4
- package/public-product-manifest.json +2 -2
- package/scripts/generate-marketing-reference.mjs +1 -0
- package/uxp-plugin/commands.cjs +1 -1
- package/uxp-plugin/index.cjs +5 -1
- package/uxp-plugin/manifest.json +1 -1
- package/uxp-plugin/workflows.cjs +255 -0
package/CHANGELOG.md
CHANGED
|
@@ -6,6 +6,51 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/).
|
|
|
6
6
|
|
|
7
7
|
## [Unreleased]
|
|
8
8
|
|
|
9
|
+
## [1.16.4] - 2026-09-20
|
|
10
|
+
|
|
11
|
+
### Added
|
|
12
|
+
|
|
13
|
+
- Claude Fable 5.1 client workflow guidance for Cursor and other compatible MCP
|
|
14
|
+
clients, covering model selection, data-retention opt-in, tool discovery, and
|
|
15
|
+
serialized Premiere verification. (#576)
|
|
16
|
+
- Named Premiere metadata field inspect and update through existing CEP and UXP
|
|
17
|
+
tools, with field readback instead of requiring complete packet dumps. (#577)
|
|
18
|
+
|
|
19
|
+
### Changed
|
|
20
|
+
|
|
21
|
+
- Shared `AGENTS.md` as the canonical repo map for IDE and coding-agent stubs,
|
|
22
|
+
and pin client CEP install commands to the published package. (#582)
|
|
23
|
+
|
|
24
|
+
### Fixed
|
|
25
|
+
|
|
26
|
+
- `set_item_in_out` and `set_source_in_out` pass seconds, not ticks, to
|
|
27
|
+
`ProjectItem.setInPoint`/`setOutPoint` and verify tick readback. A Source
|
|
28
|
+
Monitor readback mismatch restores original marks when possible and otherwise
|
|
29
|
+
reports a partial state. The ExtendScript reference documents those setter
|
|
30
|
+
arguments as seconds. (#579)
|
|
31
|
+
- CEP `create_subsequence` verifies the new sequence without ES5
|
|
32
|
+
`Array.indexOf`, which ExtendScript does not provide. (#579)
|
|
33
|
+
- `ripple_delete` now fails closed when QE sync-lock state cannot be read,
|
|
34
|
+
instead of omitting neighbours and reporting a verified ripple. (#578)
|
|
35
|
+
- Still-image `capture_frame` / `export_frame` AME fallback restores sequence
|
|
36
|
+
in/out only after those marks can be read, so a failed restore cannot leave
|
|
37
|
+
the sequence pinned to one frame. (#580)
|
|
38
|
+
|
|
39
|
+
Automated checks do not establish licensed Premiere or After Effects playback or
|
|
40
|
+
rendered-output verification.
|
|
41
|
+
|
|
42
|
+
## [1.16.3] - 2026-09-18
|
|
43
|
+
|
|
44
|
+
### Changed
|
|
45
|
+
|
|
46
|
+
- Changelog landing intro no longer stacks a large vertical pad on the shared
|
|
47
|
+
public-content main padding.
|
|
48
|
+
- npm minor and patch updates: `@posthog/core` 1.54.2, `@posthog/types` 1.412.1,
|
|
49
|
+
`posthog-node` 5.52.4, `zod` 4.6.5, and `@types/node` 26.6.1.
|
|
50
|
+
|
|
51
|
+
Automated checks do not establish licensed Premiere or After Effects playback or
|
|
52
|
+
rendered-output verification.
|
|
53
|
+
|
|
9
54
|
## [1.16.2] - 2026-09-18
|
|
10
55
|
|
|
11
56
|
### Fixed
|
package/README.md
CHANGED
|
@@ -12,7 +12,7 @@ Free, MIT licensed, local-first, and published to npm as [`premiere-pro-mcp`](ht
|
|
|
12
12
|
|
|
13
13
|
[Website](https://premiere-pro-mcp.com/) · [Recorded demo](https://premiere-pro-mcp.com/demo/) · [Compare servers](https://premiere-pro-mcp.com/compare/) · [Setup guides](https://premiere-pro-mcp.com/blog/how-to-set-up-premiere-pro-mcp/) · [Search tools](https://premiere-pro-mcp.com/tools/) · [Troubleshooting](https://premiere-pro-mcp.com/docs/troubleshooting/) · [Release facts](https://premiere-pro-mcp.com/facts/)
|
|
14
14
|
|
|
15
|
-
Development source: 381 core tools across 56 modules, 4 resources, and
|
|
15
|
+
Development source: 381 core tools across 56 modules, 4 resources, and 19 guided workflows. A connected UXP host adds 95 capability-gated tools.
|
|
16
16
|
|
|
17
17
|
The [completed AE render handoff](docs/after-effects-render-handoff.md) previews and confirms importing one finished render into an existing Premiere bin, with host and file rechecks and an import receipt.
|
|
18
18
|
|
|
@@ -50,7 +50,7 @@ The [completed AE render handoff](docs/after-effects-render-handoff.md) previews
|
|
|
50
50
|
- [Configure your MCP client](#3-configure-your-mcp-client)
|
|
51
51
|
- [Verify the bridge in Premiere Pro](#4-verify-the-bridge-in-premiere-pro)
|
|
52
52
|
- [Clients and capability coverage](#codex-plugin)
|
|
53
|
-
- [Codex plugin](#codex-plugin) · [Claude](#claude) · [GPT-6 Astra tool discovery](#gpt-6-astra-and-agent-tool-discovery)
|
|
53
|
+
- [Codex plugin](#codex-plugin) · [Claude](#claude) · [GPT-6 Astra tool discovery](#gpt-6-astra-and-agent-tool-discovery) · [Claude Fable 5.1](#claude-fable-51)
|
|
54
54
|
- [Windows and macOS capability coverage](#windows-and-macos-capability-coverage)
|
|
55
55
|
- [After Effects MOGRT studio](#after-effects-mogrt-studio)
|
|
56
56
|
- [Collaboration and AI feature boundaries](#collaboration-and-ai-feature-boundaries)
|
|
@@ -108,9 +108,9 @@ The current source exposes 381 core tools for supported workflow steps spanning
|
|
|
108
108
|
|
|
109
109
|
<a id="latest-release"></a>
|
|
110
110
|
|
|
111
|
-
### Latest release: 1.16.
|
|
111
|
+
### Latest release: 1.16.4
|
|
112
112
|
|
|
113
|
-
The published v1.16.
|
|
113
|
+
The published v1.16.3 npm artifact contains **381 core tools**, 379 in its default profile,
|
|
114
114
|
and 474 with a compatible UXP connection. The development catalog above can include
|
|
115
115
|
unreleased work. See the [versioned facts and package provenance](https://premiere-pro-mcp.com/facts/).
|
|
116
116
|
|
|
@@ -160,7 +160,7 @@ if the connection is unavailable.
|
|
|
160
160
|
local Premiere processes. See the generated [supported action catalog](docs/supported-actions.md)
|
|
161
161
|
for individual capability and verification contracts.
|
|
162
162
|
|
|
163
|
-
See the [v1.16.
|
|
163
|
+
See the [v1.16.4 release notes](https://github.com/leancoderkavy/premiere-pro-mcp/releases/tag/v1.16.4)
|
|
164
164
|
for complete details. Live installation in Premiere Pro still requires host verification.
|
|
165
165
|
|
|
166
166
|
### Current MCP protocol support
|
|
@@ -208,7 +208,7 @@ their bins, media rules, and organization rules before a facility uses one.
|
|
|
208
208
|
> ### Install the published package (verify the name)
|
|
209
209
|
>
|
|
210
210
|
> ```bash
|
|
211
|
-
> npm i -g premiere-pro-mcp@1.16.
|
|
211
|
+
> npm i -g premiere-pro-mcp@1.16.4
|
|
212
212
|
> ```
|
|
213
213
|
>
|
|
214
214
|
> This repository publishes only **`premiere-pro-mcp`**. A differently named package (`adobe-premiere-pro-mcp`) may also declare a `premiere-pro-mcp` executable. Before configuring a client, confirm:
|
|
@@ -216,7 +216,7 @@ their bins, media rules, and organization rules before a facility uses one.
|
|
|
216
216
|
> | Check | Expected |
|
|
217
217
|
> | --- | --- |
|
|
218
218
|
> | Package name | `premiere-pro-mcp` (not `adobe-premiere-pro-mcp`) |
|
|
219
|
-
> | Version | `1.16.
|
|
219
|
+
> | Version | `1.16.4` |
|
|
220
220
|
> | Homepage / repo | https://premiere-pro-mcp.com/ · https://github.com/leancoderkavy/premiere-pro-mcp |
|
|
221
221
|
>
|
|
222
222
|
> ```bash
|
|
@@ -229,9 +229,9 @@ their bins, media rules, and organization rules before a facility uses one.
|
|
|
229
229
|
|
|
230
230
|
### Easiest supported path: Claude Desktop
|
|
231
231
|
|
|
232
|
-
1. Download the current [Claude Desktop bundle (`.mcpb`)](https://github.com/leancoderkavy/premiere-pro-mcp/releases/download/v1.16.
|
|
232
|
+
1. Download the current [Claude Desktop bundle (`.mcpb`)](https://github.com/leancoderkavy/premiere-pro-mcp/releases/download/v1.16.4/premiere-pro-mcp-1.16.4.mcpb).
|
|
233
233
|
2. In Claude Desktop, open **Settings > Extensions > Advanced settings > Install Extension**, select the downloaded bundle, and restart Claude Desktop.
|
|
234
|
-
3. Download the separate [signed Premiere connector (`.zxp`)](https://github.com/leancoderkavy/premiere-pro-mcp/releases/download/v1.16.
|
|
234
|
+
3. Download the separate [signed Premiere connector (`.zxp`)](https://github.com/leancoderkavy/premiere-pro-mcp/releases/download/v1.16.4/MCPBridgeCEP.zxp). Open it with your trusted ZXP installer. If your computer has no ZXP installer, use the npm connector installer in **Advanced setup** below.
|
|
235
235
|
4. Restart Premiere, open a project, then open **Window > Extensions > MCP for Adobe Premiere Pro**.
|
|
236
236
|
5. In Claude, enter: `Safely check my Premiere connection with verify_premiere_connection. Make no changes.`
|
|
237
237
|
|
|
@@ -488,6 +488,9 @@ Add to `.cursor/mcp.json` in your project or global config:
|
|
|
488
488
|
}
|
|
489
489
|
```
|
|
490
490
|
|
|
491
|
+
After the server is enabled, select Claude Fable 5.1 in Cursor when you want a
|
|
492
|
+
longer-horizon session. See [Claude Fable 5.1 workflows](docs/claude-fable-5-1.md).
|
|
493
|
+
|
|
491
494
|
</details>
|
|
492
495
|
|
|
493
496
|
<details>
|
|
@@ -528,11 +531,11 @@ From a clone of this repository:
|
|
|
528
531
|
```bash
|
|
529
532
|
codex plugin marketplace add .
|
|
530
533
|
codex plugin add premiere-pro@premiere-pro-mcp
|
|
531
|
-
npx -y premiere-pro-mcp@1.
|
|
534
|
+
npx -y premiere-pro-mcp@1.16.3 --install-cep
|
|
532
535
|
```
|
|
533
536
|
|
|
534
537
|
Restart Premiere Pro and start a new Codex session after installation. The plugin
|
|
535
|
-
launches `premiere-pro-mcp@1.
|
|
538
|
+
launches `premiere-pro-mcp@1.16.3` through `npx`; the separate CEP installation is
|
|
536
539
|
required because the MCP server communicates with the running Premiere host through
|
|
537
540
|
the local bridge.
|
|
538
541
|
|
|
@@ -563,7 +566,7 @@ For Claude Code, add this repository as a marketplace and install the plugin:
|
|
|
563
566
|
Then install the Premiere bridge and start a new Claude Code session:
|
|
564
567
|
|
|
565
568
|
```bash
|
|
566
|
-
npx -y premiere-pro-mcp@1.
|
|
569
|
+
npx -y premiere-pro-mcp@1.16.3 --install-cep
|
|
567
570
|
```
|
|
568
571
|
|
|
569
572
|
The Claude Code package lives in
|
|
@@ -581,6 +584,26 @@ Install the resulting file from `artifacts/` through **Settings > Extensions >
|
|
|
581
584
|
Advanced settings > Install Extension**. The Premiere CEP bridge must still be
|
|
582
585
|
installed separately.
|
|
583
586
|
|
|
587
|
+
### Claude Fable 5.1
|
|
588
|
+
|
|
589
|
+
Use Cursor, Claude Desktop, or Claude Code with Claude Fable 5.1
|
|
590
|
+
(`claude-fable-5-1`) when your account has access. Model selection belongs to the
|
|
591
|
+
client; this server does not run an Anthropic model. Fable 5.1 is optional:
|
|
592
|
+
other Claude models can call the same MCP tools. If Cursor Privacy Mode or an
|
|
593
|
+
Enterprise plan is enabled, an admin must approve Anthropic's Fable data-retention
|
|
594
|
+
policy before the model is available.
|
|
595
|
+
|
|
596
|
+
The server supplies session-aware workflow instructions and bounded tool discovery:
|
|
597
|
+
call `get_capabilities` with `{"tool_query":"transcript","tool_limit":10}` to
|
|
598
|
+
find relevant operations, their descriptions, and backend requirements. Keep
|
|
599
|
+
Premiere mutations serialized even in a long Fable 5.1 session. Image review of
|
|
600
|
+
returned frames is not playback or delivery proof.
|
|
601
|
+
|
|
602
|
+
See [Claude Fable 5.1 workflows](docs/claude-fable-5-1.md) for connection order,
|
|
603
|
+
privacy boundaries, evidence retrieval, Cursor's Opus fallback, and the division
|
|
604
|
+
between MCP and client capabilities. The public walkthrough is
|
|
605
|
+
[How to Use Claude Fable 5.1 with MCP for Adobe Premiere Pro](https://premiere-pro-mcp.com/blog/claude-fable-5-1-premiere-pro-mcp/).
|
|
606
|
+
|
|
584
607
|
### Windows and macOS capability coverage
|
|
585
608
|
|
|
586
609
|
| Surface | Windows | macOS | Verification boundary |
|
|
@@ -1147,13 +1170,13 @@ Track targeting, batch operations, markers, audio levels, motion/transform, meta
|
|
|
1147
1170
|
|
|
1148
1171
|
## MCP Resources
|
|
1149
1172
|
|
|
1150
|
-
The server exposes fourteen LLM context resources and
|
|
1173
|
+
The server exposes fourteen LLM context resources and nineteen workflow prompts:
|
|
1151
1174
|
|
|
1152
1175
|
| Resource URI | Description |
|
|
1153
1176
|
| :----------- | :---------- |
|
|
1154
|
-
| `config://premiere-instructions` | Best practices: workflow order,
|
|
1177
|
+
| `config://premiere-instructions` | Best practices: workflow order, metadata layers, timeline rules, error handling |
|
|
1155
1178
|
| `config://extendscript-reference` | Complete ExtendScript API reference for writing custom scripts |
|
|
1156
|
-
| `config://premiere-workflows` | Machine-readable catalog for rough cuts, dialogue cleanup, captions, and delivery |
|
|
1179
|
+
| `config://premiere-workflows` | Machine-readable catalog for rough cuts, metadata review, dialogue cleanup, captions, and delivery |
|
|
1157
1180
|
| `config://premiere-project-context` | Revisioned local project-context indexing and retrieval workflow |
|
|
1158
1181
|
| `premiere://project/info` | Fresh, path-redacted current-project and active-sequence summary |
|
|
1159
1182
|
| `premiere://project/sequences` | Bounded sequence inventory with stable Premiere IDs |
|
|
@@ -1164,7 +1187,7 @@ The server exposes fourteen LLM context resources and eleven workflow prompts:
|
|
|
1164
1187
|
| `premiere://effects/applied` | Bounded active-timeline component inventory |
|
|
1165
1188
|
| `premiere://transitions/available` | Bounded video/audio transition catalog for planning |
|
|
1166
1189
|
| `premiere://export/presets` | Bounded export-preset names and formats, without native paths |
|
|
1167
|
-
| `premiere://project/metadata` |
|
|
1190
|
+
| `premiere://project/metadata` | Path-redacted project and active-timeline summary — not XMP or Project Metadata XML |
|
|
1168
1191
|
|
|
1169
1192
|
The ten `premiere://` snapshots are read-only CEP bridge requests. They include a
|
|
1170
1193
|
revision token for stale-state detection and omit native media, project-tree, preset,
|
|
@@ -1377,6 +1400,7 @@ premiere-pro-mcp/
|
|
|
1377
1400
|
├── Dockerfile # Multi-stage Docker build for Fly.io
|
|
1378
1401
|
├── fly.toml # Fly.io deployment config
|
|
1379
1402
|
├── RESEARCH.md # API research and implementation status
|
|
1403
|
+
├── AGENTS.md # IDE / coding-agent map
|
|
1380
1404
|
├── CONTRIBUTING.md # Contribution guidelines
|
|
1381
1405
|
├── CHANGELOG.md # Version history
|
|
1382
1406
|
└── LICENSE # MIT License
|
|
@@ -1433,7 +1457,9 @@ by default. Enable them only by setting
|
|
|
1433
1457
|
directories writable by group/other users are refused by both the server and panels;
|
|
1434
1458
|
tightening permissions alone cannot make previously staged commands trustworthy.
|
|
1435
1459
|
On Windows, only the current user, SYSTEM and Administrators may have write access,
|
|
1436
|
-
including inherited grants.
|
|
1460
|
+
including inherited grants. Windows capability and app-container SIDs (`S-1-15-*`)
|
|
1461
|
+
are ignored: they are not logon principals and appear as inherited FullControl on
|
|
1462
|
+
stock `%LOCALAPPDATA%` paths. ACL inspection failures also stop startup. Ancestors must
|
|
1437
1463
|
also prevent other users from replacing the bridge path; a private child inside a
|
|
1438
1464
|
broadly writable parent is insufficient (POSIX sticky temp directories are supported).
|
|
1439
1465
|
Choose a new directory under a private user-owned location if the connector rejects
|
|
@@ -1471,6 +1497,8 @@ Premiere Pro; its npm package is `premiere-pro-mcp`.
|
|
|
1471
1497
|
Install the [Claude Desktop bundle](#easiest-supported-path-claude-desktop), install
|
|
1472
1498
|
the separate signed Premiere connector, restart Premiere, then ask Claude to run
|
|
1473
1499
|
`verify_premiere_connection` with no changes. That first prompt is read-only.
|
|
1500
|
+
Claude Fable 5.1 is an optional client model for Cursor, Claude Desktop, or Claude
|
|
1501
|
+
Code; see [Claude Fable 5.1 workflows](docs/claude-fable-5-1.md).
|
|
1474
1502
|
|
|
1475
1503
|
**Where is the GitHub repository?**
|
|
1476
1504
|
<https://github.com/leancoderkavy/premiere-pro-mcp>. Releases, the signed `.zxp`
|
|
@@ -1596,6 +1624,7 @@ buy prioritized support, roadmap influence, or any claim about unverified host b
|
|
|
1596
1624
|
## Contributing
|
|
1597
1625
|
|
|
1598
1626
|
Contributions are welcome! See [CONTRIBUTING.md](CONTRIBUTING.md) for guidelines.
|
|
1627
|
+
AI agents and IDE assistants should read [AGENTS.md](AGENTS.md).
|
|
1599
1628
|
|
|
1600
1629
|
The evidence-backed [next improvement pull-request roadmap](docs/next-improvement-pr-roadmap.md)
|
|
1601
1630
|
breaks the proposed feature, protocol, reliability, and performance work into ten
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
<?xml version="1.0" encoding="UTF-8"?>
|
|
2
|
-
<ExtensionManifest Version="7.0" ExtensionBundleId="com.mcp.aftereffects.bridge" ExtensionBundleVersion="1.16.
|
|
2
|
+
<ExtensionManifest Version="7.0" ExtensionBundleId="com.mcp.aftereffects.bridge" ExtensionBundleVersion="1.16.4" ExtensionBundleName="MCP for Adobe After Effects">
|
|
3
3
|
<ExtensionList>
|
|
4
|
-
<Extension Id="com.mcp.aftereffects.bridge.panel" Version="1.16.
|
|
4
|
+
<Extension Id="com.mcp.aftereffects.bridge.panel" Version="1.16.4"/>
|
|
5
5
|
</ExtensionList>
|
|
6
6
|
<ExecutionEnvironment>
|
|
7
7
|
<HostList>
|
|
Binary file
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
<?xml version="1.0" encoding="UTF-8"?>
|
|
2
|
-
<ExtensionManifest Version="7.0" ExtensionBundleId="com.mcp.premiere.bridge" ExtensionBundleVersion="1.16.
|
|
2
|
+
<ExtensionManifest Version="7.0" ExtensionBundleId="com.mcp.premiere.bridge" ExtensionBundleVersion="1.16.4" ExtensionBundleName="MCP for Adobe Premiere Pro">
|
|
3
3
|
<ExtensionList>
|
|
4
|
-
<Extension Id="com.mcp.premiere.bridge.panel" Version="1.16.
|
|
5
|
-
<Extension Id="com.mcp.premiere.bridge.headless" Version="1.16.
|
|
4
|
+
<Extension Id="com.mcp.premiere.bridge.panel" Version="1.16.4"/>
|
|
5
|
+
<Extension Id="com.mcp.premiere.bridge.headless" Version="1.16.4"/>
|
|
6
6
|
</ExtensionList>
|
|
7
7
|
<ExecutionEnvironment>
|
|
8
8
|
<HostList>
|
package/cep-plugin/index.html
CHANGED
|
@@ -81,7 +81,7 @@
|
|
|
81
81
|
<section class="update-section" aria-live="polite">
|
|
82
82
|
<div class="update-copy">
|
|
83
83
|
<span class="section-label">MCP updates</span>
|
|
84
|
-
<strong id="updateTitle">Version 1.16.
|
|
84
|
+
<strong id="updateTitle">Version 1.16.4</strong>
|
|
85
85
|
<span id="updateDetail">Checking the global MCP server and connector release…</span>
|
|
86
86
|
</div>
|
|
87
87
|
<button id="btnUpdate" class="button button-update" onclick="handleUpdateClick()" type="button" aria-describedby="updateDetail" disabled>
|
package/cep-plugin/updater.cjs
CHANGED
|
@@ -556,24 +556,26 @@ function __exportStillFrame(outputPath, ticks) {
|
|
|
556
556
|
savedIn = seq.getInPointAsTime().ticks;
|
|
557
557
|
savedOut = seq.getOutPointAsTime().ticks;
|
|
558
558
|
} catch (e) {}
|
|
559
|
-
|
|
560
|
-
//
|
|
561
|
-
|
|
562
|
-
|
|
563
|
-
|
|
564
|
-
|
|
565
|
-
|
|
566
|
-
|
|
567
|
-
|
|
568
|
-
|
|
569
|
-
|
|
570
|
-
seq.exportAsMediaDirect(outputPath, preset, app.encoder.ENCODE_IN_TO_OUT);
|
|
571
|
-
notes.push("AME preset: " + preset);
|
|
572
|
-
} finally {
|
|
559
|
+
// Unreadable in/out cannot be restored. Changing them anyway left the
|
|
560
|
+
// sequence pinned to a one-frame export range after QE-to-AME fallback.
|
|
561
|
+
if (savedIn === null || savedIn === undefined || savedOut === null || savedOut === undefined) {
|
|
562
|
+
notes.push("AME: could not read sequence in/out points, so they were not changed for a one-frame export");
|
|
563
|
+
} else {
|
|
564
|
+
// seq.timebase is ticks-per-frame, but Sequence.setInPoint/setOutPoint take
|
|
565
|
+
// seconds (unlike setPlayerPosition, which takes ticks). Convert before
|
|
566
|
+
// setting the one-frame range or Premiere targets an astronomically large
|
|
567
|
+
// interval and the still export produces no file.
|
|
568
|
+
var frameTicks = parseFloat(seq.timebase);
|
|
569
|
+
var startTicks = parseFloat(atTicks);
|
|
573
570
|
try {
|
|
574
|
-
|
|
575
|
-
|
|
576
|
-
|
|
571
|
+
seq.setInPoint(__ticksToSeconds(startTicks));
|
|
572
|
+
seq.setOutPoint(__ticksToSeconds(startTicks + frameTicks));
|
|
573
|
+
seq.exportAsMediaDirect(outputPath, preset, app.encoder.ENCODE_IN_TO_OUT);
|
|
574
|
+
notes.push("AME preset: " + preset);
|
|
575
|
+
} finally {
|
|
576
|
+
try { seq.setInPoint(__ticksToSeconds(savedIn)); } catch (eIn) {}
|
|
577
|
+
try { seq.setOutPoint(__ticksToSeconds(savedOut)); } catch (eOut) {}
|
|
578
|
+
}
|
|
577
579
|
}
|
|
578
580
|
}
|
|
579
581
|
} catch (eAME) {
|
|
@@ -1003,6 +1003,58 @@
|
|
|
1003
1003
|
"idempotency": "operation_id",
|
|
1004
1004
|
"verificationBoundary": "metadata_readback"
|
|
1005
1005
|
},
|
|
1006
|
+
{
|
|
1007
|
+
"id": "bounded-xmp-field-inspection",
|
|
1008
|
+
"adobeApi": [
|
|
1009
|
+
"Metadata.getProjectMetadata",
|
|
1010
|
+
"Metadata.getXMPMetadata",
|
|
1011
|
+
"Metadata.getProjectColumnsMetadata"
|
|
1012
|
+
],
|
|
1013
|
+
"documentationUrls": [
|
|
1014
|
+
"https://developer.adobe.com/premiere-pro/uxp/ppro-reference/classes/metadata/",
|
|
1015
|
+
"https://developer.adobe.com/premiere-pro/uxp/uxp-api/reference-js/modules/uxp/xmp/xmp-classes/xmp-meta"
|
|
1016
|
+
],
|
|
1017
|
+
"minimumPremiereVersion": "25.6.0",
|
|
1018
|
+
"backend": "uxp",
|
|
1019
|
+
"uxpCommand": "metadata.fields.inspect",
|
|
1020
|
+
"mcpTools": ["manage_metadata_uxp"],
|
|
1021
|
+
"availability": "current",
|
|
1022
|
+
"implementationStatus": "implemented",
|
|
1023
|
+
"verificationStatus": "automated_contract_verified",
|
|
1024
|
+
"liveHostVerificationStatus": "not_run",
|
|
1025
|
+
"mutatesProject": false,
|
|
1026
|
+
"undoable": false,
|
|
1027
|
+
"idempotency": "not_applicable",
|
|
1028
|
+
"verificationBoundary": "bounded_metadata_field_readback"
|
|
1029
|
+
},
|
|
1030
|
+
{
|
|
1031
|
+
"id": "guarded-xmp-field-update",
|
|
1032
|
+
"adobeApi": [
|
|
1033
|
+
"Metadata.getProjectMetadata",
|
|
1034
|
+
"Metadata.getXMPMetadata",
|
|
1035
|
+
"Metadata.createSetProjectMetadataAction",
|
|
1036
|
+
"Metadata.createSetXMPMetadataAction",
|
|
1037
|
+
"Project.lockedAccess",
|
|
1038
|
+
"Project.executeTransaction"
|
|
1039
|
+
],
|
|
1040
|
+
"documentationUrls": [
|
|
1041
|
+
"https://developer.adobe.com/premiere-pro/uxp/ppro-reference/classes/metadata/",
|
|
1042
|
+
"https://developer.adobe.com/premiere-pro/uxp/ppro-reference/classes/project/",
|
|
1043
|
+
"https://developer.adobe.com/premiere-pro/uxp/uxp-api/reference-js/modules/uxp/xmp/xmp-classes/xmp-meta"
|
|
1044
|
+
],
|
|
1045
|
+
"minimumPremiereVersion": "25.6.0",
|
|
1046
|
+
"backend": "uxp",
|
|
1047
|
+
"uxpCommand": "metadata.fields.update",
|
|
1048
|
+
"mcpTools": ["manage_metadata_uxp"],
|
|
1049
|
+
"availability": "current",
|
|
1050
|
+
"implementationStatus": "implemented",
|
|
1051
|
+
"verificationStatus": "automated_contract_verified",
|
|
1052
|
+
"liveHostVerificationStatus": "not_run",
|
|
1053
|
+
"mutatesProject": true,
|
|
1054
|
+
"undoable": true,
|
|
1055
|
+
"idempotency": "operation_id",
|
|
1056
|
+
"verificationBoundary": "metadata_field_readback"
|
|
1057
|
+
},
|
|
1006
1058
|
{
|
|
1007
1059
|
"id": "bounded-project-columns-metadata-inspection",
|
|
1008
1060
|
"adobeApi": [
|
|
@@ -48,8 +48,8 @@ export const EXTENDSCRIPT_REFERENCE = [
|
|
|
48
48
|
"item.createBin(name) - ProjectItem (new bin)",
|
|
49
49
|
"item.createSmartBin(name, query)",
|
|
50
50
|
"item.createSubClip(name, startTicks, endTicks, hasHardBoundaries, takeVideo, takeAudio)",
|
|
51
|
-
"item.setInPoint(
|
|
52
|
-
"item.setOutPoint(
|
|
51
|
+
"item.setInPoint(seconds, mediaType)",
|
|
52
|
+
"item.setOutPoint(seconds, mediaType)",
|
|
53
53
|
"item.getInPoint(mediaType) - Time",
|
|
54
54
|
"item.getOutPoint(mediaType) - Time",
|
|
55
55
|
"item.setOverridePixelAspectRatio(num, den)",
|
|
@@ -486,7 +486,7 @@ export function getLiveContextResources(bridgeOptions) {
|
|
|
486
486
|
{
|
|
487
487
|
name: "premiere-project-metadata",
|
|
488
488
|
uri: "premiere://project/metadata",
|
|
489
|
-
description: "Read-only project and active-timeline metadata
|
|
489
|
+
description: "Read-only path-redacted project and active-timeline summary. Not Premiere project-metadata XML or XMP; use get_metadata parse_fields, manage_metadata_uxp inspect_fields, or inspect_project_panel_metadata_uxp for named clip fields.",
|
|
490
490
|
read: (uri) => projectMetadata(uri, "premiere://project/metadata"),
|
|
491
491
|
},
|
|
492
492
|
];
|
|
@@ -13,8 +13,8 @@
|
|
|
13
13
|
},
|
|
14
14
|
"stats": {
|
|
15
15
|
"total": 3406,
|
|
16
|
-
"mapped":
|
|
17
|
-
"unmapped":
|
|
16
|
+
"mapped": 20,
|
|
17
|
+
"unmapped": 3386,
|
|
18
18
|
"manifestOnly": 0
|
|
19
19
|
},
|
|
20
20
|
"manifestOnly": [],
|
|
@@ -16257,7 +16257,7 @@
|
|
|
16257
16257
|
{
|
|
16258
16258
|
"symbol": "uxp.XMPConst",
|
|
16259
16259
|
"kind": "class",
|
|
16260
|
-
"coverage": "
|
|
16260
|
+
"coverage": "mapped"
|
|
16261
16261
|
},
|
|
16262
16262
|
{
|
|
16263
16263
|
"symbol": "uxp.XMPDateTime",
|
|
@@ -16402,12 +16402,12 @@
|
|
|
16402
16402
|
{
|
|
16403
16403
|
"symbol": "uxp.XMPMeta",
|
|
16404
16404
|
"kind": "class",
|
|
16405
|
-
"coverage": "
|
|
16405
|
+
"coverage": "mapped"
|
|
16406
16406
|
},
|
|
16407
16407
|
{
|
|
16408
16408
|
"symbol": "uxp.XMPMeta.[[construct]]",
|
|
16409
16409
|
"kind": "constructor",
|
|
16410
|
-
"coverage": "
|
|
16410
|
+
"coverage": "mapped"
|
|
16411
16411
|
},
|
|
16412
16412
|
{
|
|
16413
16413
|
"symbol": "uxp.XMPMeta.appendArrayItem",
|
|
@@ -16497,7 +16497,7 @@
|
|
|
16497
16497
|
{
|
|
16498
16498
|
"symbol": "uxp.XMPMeta.getProperty",
|
|
16499
16499
|
"kind": "method",
|
|
16500
|
-
"coverage": "
|
|
16500
|
+
"coverage": "mapped"
|
|
16501
16501
|
},
|
|
16502
16502
|
{
|
|
16503
16503
|
"symbol": "uxp.XMPMeta.getQualifier",
|
|
@@ -16517,7 +16517,7 @@
|
|
|
16517
16517
|
{
|
|
16518
16518
|
"symbol": "uxp.XMPMeta.iterator",
|
|
16519
16519
|
"kind": "method",
|
|
16520
|
-
"coverage": "
|
|
16520
|
+
"coverage": "mapped"
|
|
16521
16521
|
},
|
|
16522
16522
|
{
|
|
16523
16523
|
"symbol": "uxp.XMPMeta.registerNamespace",
|
|
@@ -16527,7 +16527,7 @@
|
|
|
16527
16527
|
{
|
|
16528
16528
|
"symbol": "uxp.XMPMeta.serialize",
|
|
16529
16529
|
"kind": "method",
|
|
16530
|
-
"coverage": "
|
|
16530
|
+
"coverage": "mapped"
|
|
16531
16531
|
},
|
|
16532
16532
|
{
|
|
16533
16533
|
"symbol": "uxp.XMPMeta.serializeToArray",
|
|
@@ -16547,7 +16547,7 @@
|
|
|
16547
16547
|
{
|
|
16548
16548
|
"symbol": "uxp.XMPMeta.setProperty",
|
|
16549
16549
|
"kind": "method",
|
|
16550
|
-
"coverage": "
|
|
16550
|
+
"coverage": "mapped"
|
|
16551
16551
|
},
|
|
16552
16552
|
{
|
|
16553
16553
|
"symbol": "uxp.XMPMeta.setQualifier",
|
|
@@ -17047,7 +17047,7 @@
|
|
|
17047
17047
|
{
|
|
17048
17048
|
"symbol": "uxp.xmp",
|
|
17049
17049
|
"kind": "variable",
|
|
17050
|
-
"coverage": "
|
|
17050
|
+
"coverage": "mapped"
|
|
17051
17051
|
}
|
|
17052
17052
|
]
|
|
17053
17053
|
}
|
package/dist/tools/advanced.js
CHANGED
|
@@ -77,14 +77,26 @@ export function getAdvancedTools(bridgeOptions) {
|
|
|
77
77
|
var ti;
|
|
78
78
|
for (ti = 0; ti < vN; ti++) {
|
|
79
79
|
if (result.trackType === "video" && ti === result.trackIndex) continue;
|
|
80
|
-
var slv =
|
|
81
|
-
try {
|
|
80
|
+
var slv = null;
|
|
81
|
+
try {
|
|
82
|
+
var qv = qeTrackFor("video", ti);
|
|
83
|
+
if (qv && typeof qv.isSyncLocked === "function") slv = !!qv.isSyncLocked();
|
|
84
|
+
} catch (e1) { slv = null; }
|
|
85
|
+
if (slv === null) {
|
|
86
|
+
return __error("Ripple delete refused; nothing was changed. Could not read isSyncLocked() on video track " + ti + ". Pass scope 'own_track' to shift only the clip's track (this will desync other tracks).");
|
|
87
|
+
}
|
|
82
88
|
if (slv) addPart("video", ti, false);
|
|
83
89
|
}
|
|
84
90
|
for (ti = 0; ti < aN; ti++) {
|
|
85
91
|
if (result.trackType === "audio" && ti === result.trackIndex) continue;
|
|
86
|
-
var sla =
|
|
87
|
-
try {
|
|
92
|
+
var sla = null;
|
|
93
|
+
try {
|
|
94
|
+
var qa = qeTrackFor("audio", ti);
|
|
95
|
+
if (qa && typeof qa.isSyncLocked === "function") sla = !!qa.isSyncLocked();
|
|
96
|
+
} catch (e2) { sla = null; }
|
|
97
|
+
if (sla === null) {
|
|
98
|
+
return __error("Ripple delete refused; nothing was changed. Could not read isSyncLocked() on audio track " + ti + ". Pass scope 'own_track' to shift only the clip's track (this will desync other tracks).");
|
|
99
|
+
}
|
|
88
100
|
if (sla) addPart("audio", ti, false);
|
|
89
101
|
}
|
|
90
102
|
`
|
|
@@ -92,11 +104,23 @@ export function getAdvancedTools(bridgeOptions) {
|
|
|
92
104
|
|
|
93
105
|
// A locked participating track cannot be edited; shifting the others
|
|
94
106
|
// without it would silently desync, so refuse rather than half-ripple.
|
|
107
|
+
// Unreadable lock state is the same risk as an unread sync lock.
|
|
95
108
|
var lockedList = [];
|
|
96
109
|
var pi;
|
|
97
110
|
for (pi = 0; pi < parts.length; pi++) {
|
|
98
|
-
var lk =
|
|
99
|
-
try {
|
|
111
|
+
var lk = null;
|
|
112
|
+
try {
|
|
113
|
+
if (typeof parts[pi].domTrack.isLocked === "function") lk = !!parts[pi].domTrack.isLocked();
|
|
114
|
+
} catch (eDomLock) { lk = null; }
|
|
115
|
+
if (lk === null) {
|
|
116
|
+
try {
|
|
117
|
+
var ql = qeTrackFor(parts[pi].type, parts[pi].index);
|
|
118
|
+
if (ql && typeof ql.isLocked === "function") lk = !!ql.isLocked();
|
|
119
|
+
} catch (e3) { lk = null; }
|
|
120
|
+
}
|
|
121
|
+
if (lk === null) {
|
|
122
|
+
return __error("Ripple delete refused; nothing was changed. Could not read isLocked() on " + parts[pi].type + " track " + parts[pi].index + ". Unlock them or use scope 'own_track' (which will desync other tracks).");
|
|
123
|
+
}
|
|
100
124
|
if (lk) lockedList.push(parts[pi].type + " track " + parts[pi].index);
|
|
101
125
|
}
|
|
102
126
|
if (lockedList.length) {
|
package/dist/tools/metadata.d.ts
CHANGED
|
@@ -9,6 +9,14 @@ export declare function getMetadataTools(bridgeOptions: BridgeOptions): {
|
|
|
9
9
|
type: string;
|
|
10
10
|
description: string;
|
|
11
11
|
};
|
|
12
|
+
parse_fields: {
|
|
13
|
+
type: string;
|
|
14
|
+
description: string;
|
|
15
|
+
};
|
|
16
|
+
include_sensitive: {
|
|
17
|
+
type: string;
|
|
18
|
+
description: string;
|
|
19
|
+
};
|
|
12
20
|
include_project_metadata: {
|
|
13
21
|
type: string;
|
|
14
22
|
description: string;
|
|
@@ -22,6 +30,8 @@ export declare function getMetadataTools(bridgeOptions: BridgeOptions): {
|
|
|
22
30
|
};
|
|
23
31
|
handler: (args: {
|
|
24
32
|
item_id: string;
|
|
33
|
+
parse_fields?: boolean;
|
|
34
|
+
include_sensitive?: boolean;
|
|
25
35
|
include_project_metadata?: boolean;
|
|
26
36
|
include_xmp_metadata?: boolean;
|
|
27
37
|
}) => Promise<import("../bridge/file-bridge.js").CommandResult>;
|
|
@@ -43,6 +53,19 @@ export declare function getMetadataTools(bridgeOptions: BridgeOptions): {
|
|
|
43
53
|
type: string;
|
|
44
54
|
description: string;
|
|
45
55
|
};
|
|
56
|
+
packet: {
|
|
57
|
+
type: string;
|
|
58
|
+
enum: string[];
|
|
59
|
+
description: string;
|
|
60
|
+
};
|
|
61
|
+
field_namespace: {
|
|
62
|
+
type: string;
|
|
63
|
+
description: string;
|
|
64
|
+
};
|
|
65
|
+
expected_value: {
|
|
66
|
+
type: string;
|
|
67
|
+
description: string;
|
|
68
|
+
};
|
|
46
69
|
metadata_xml: {
|
|
47
70
|
type: string;
|
|
48
71
|
description: string;
|
|
@@ -62,6 +85,9 @@ export declare function getMetadataTools(bridgeOptions: BridgeOptions): {
|
|
|
62
85
|
item_id: string;
|
|
63
86
|
field_name?: string;
|
|
64
87
|
value?: string;
|
|
88
|
+
packet?: string;
|
|
89
|
+
field_namespace?: string;
|
|
90
|
+
expected_value?: string;
|
|
65
91
|
metadata_xml?: string;
|
|
66
92
|
updated_fields?: string[];
|
|
67
93
|
}) => Promise<import("../bridge/file-bridge.js").CommandResult>;
|