@synthetic-ai/premiere-mcp 2.2.0 β 2.3.0-dev.0
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 +135 -135
- package/LICENSE +21 -21
- package/README.md +242 -242
- package/cep-plugin/.debug +8 -8
- package/cep-plugin/CSInterface.js +92 -92
- package/cep-plugin/host.jsx +7 -7
- package/cep-plugin/index.html +472 -472
- package/cep-plugin/main.js +6 -0
- package/cep-plugin/premiere.jsx +24947 -24947
- package/dist/bridge/script-builder.js +378 -378
- package/dist/license.js +38 -0
- package/dist/server.js +60 -60
- package/dist/tools/advanced.js +357 -357
- package/dist/tools/audio-advanced.js +1049 -1049
- package/dist/tools/audio.js +42 -42
- package/dist/tools/captions.js +27 -27
- package/dist/tools/clipboard.js +214 -214
- package/dist/tools/color-advanced.js +253 -253
- package/dist/tools/discovery.js +291 -291
- package/dist/tools/effects.js +285 -285
- package/dist/tools/export-presets.js +206 -206
- package/dist/tools/export.js +255 -255
- package/dist/tools/health.js +10 -10
- package/dist/tools/inspection.js +885 -885
- package/dist/tools/keyframes.js +369 -369
- package/dist/tools/markers.js +89 -89
- package/dist/tools/media.js +178 -178
- package/dist/tools/metadata.js +94 -94
- package/dist/tools/multicam.js +50 -50
- package/dist/tools/playback.js +15 -15
- package/dist/tools/playhead.js +95 -95
- package/dist/tools/project-manager.js +21 -21
- package/dist/tools/project.js +149 -149
- package/dist/tools/scripting.js +319 -319
- package/dist/tools/selection.js +202 -202
- package/dist/tools/sequence-advanced.js +379 -379
- package/dist/tools/sequence-settings.js +564 -564
- package/dist/tools/sequence.js +167 -167
- package/dist/tools/source-monitor.js +68 -68
- package/dist/tools/text.js +58 -58
- package/dist/tools/timeline.js +312 -312
- package/dist/tools/track-management.js +446 -446
- package/dist/tools/track-targeting.js +635 -635
- package/dist/tools/tracks.js +87 -87
- package/dist/tools/transitions-motion.js +174 -174
- package/dist/tools/transitions.js +111 -111
- package/dist/tools/utility.js +606 -606
- package/dist/tools/workspace.js +29 -29
- package/package.json +66 -66
- package/scripts/build-chat-dmg.sh +210 -210
- package/scripts/build-chat-zip.sh +291 -291
- package/scripts/install-cep-windows.ps1 +99 -99
- package/scripts/install-cep.sh +66 -66
- package/scripts/install-chat-plugin.bat +67 -67
- package/scripts/install-chat-plugin.sh +85 -85
- package/scripts/install-windows.bat +95 -95
- package/scripts/package.mjs +254 -254
package/dist/tools/workspace.js
CHANGED
|
@@ -6,24 +6,24 @@ export function getWorkspaceTools(bridgeOptions) {
|
|
|
6
6
|
description: "List all available workspace layouts in Premiere Pro",
|
|
7
7
|
parameters: {},
|
|
8
8
|
handler: async () => {
|
|
9
|
-
const script = buildToolScript(`
|
|
10
|
-
var list = [];
|
|
11
|
-
try {
|
|
12
|
-
if (typeof app.getWorkspaces === "function") {
|
|
13
|
-
var workspaces = app.getWorkspaces();
|
|
14
|
-
if (workspaces) {
|
|
15
|
-
for (var i = 0; i < workspaces.length; i++) {
|
|
16
|
-
list.push(workspaces[i]);
|
|
17
|
-
}
|
|
18
|
-
return __result({ workspaces: list, count: list.length });
|
|
19
|
-
}
|
|
20
|
-
}
|
|
21
|
-
} catch (e) {}
|
|
22
|
-
return __result({
|
|
23
|
-
workspaces: list,
|
|
24
|
-
count: 0,
|
|
25
|
-
note: "Workspace enumeration is not available in this Premiere Pro version (app.getWorkspaces is undocumented and unsupported here)."
|
|
26
|
-
});
|
|
9
|
+
const script = buildToolScript(`
|
|
10
|
+
var list = [];
|
|
11
|
+
try {
|
|
12
|
+
if (typeof app.getWorkspaces === "function") {
|
|
13
|
+
var workspaces = app.getWorkspaces();
|
|
14
|
+
if (workspaces) {
|
|
15
|
+
for (var i = 0; i < workspaces.length; i++) {
|
|
16
|
+
list.push(workspaces[i]);
|
|
17
|
+
}
|
|
18
|
+
return __result({ workspaces: list, count: list.length });
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
} catch (e) {}
|
|
22
|
+
return __result({
|
|
23
|
+
workspaces: list,
|
|
24
|
+
count: 0,
|
|
25
|
+
note: "Workspace enumeration is not available in this Premiere Pro version (app.getWorkspaces is undocumented and unsupported here)."
|
|
26
|
+
});
|
|
27
27
|
`);
|
|
28
28
|
return sendCommand(script, bridgeOptions);
|
|
29
29
|
},
|
|
@@ -41,17 +41,17 @@ export function getWorkspaceTools(bridgeOptions) {
|
|
|
41
41
|
required: ["name"],
|
|
42
42
|
},
|
|
43
43
|
handler: async (args) => {
|
|
44
|
-
const script = buildToolScript(`
|
|
45
|
-
try {
|
|
46
|
-
if (typeof app.setWorkspace !== "function") {
|
|
47
|
-
return __error("Setting the workspace is not available in this Premiere Pro version (app.setWorkspace is undocumented and unsupported here).");
|
|
48
|
-
}
|
|
49
|
-
var result = app.setWorkspace("${escapeForExtendScript(args.name)}");
|
|
50
|
-
if (result === false) return __error("Failed to set workspace: ${escapeForExtendScript(args.name)}");
|
|
51
|
-
return __result({ set: true, workspace: "${escapeForExtendScript(args.name)}" });
|
|
52
|
-
} catch (e) {
|
|
53
|
-
return __error("Failed to set workspace '${escapeForExtendScript(args.name)}': " + (e && e.message ? e.message : e));
|
|
54
|
-
}
|
|
44
|
+
const script = buildToolScript(`
|
|
45
|
+
try {
|
|
46
|
+
if (typeof app.setWorkspace !== "function") {
|
|
47
|
+
return __error("Setting the workspace is not available in this Premiere Pro version (app.setWorkspace is undocumented and unsupported here).");
|
|
48
|
+
}
|
|
49
|
+
var result = app.setWorkspace("${escapeForExtendScript(args.name)}");
|
|
50
|
+
if (result === false) return __error("Failed to set workspace: ${escapeForExtendScript(args.name)}");
|
|
51
|
+
return __result({ set: true, workspace: "${escapeForExtendScript(args.name)}" });
|
|
52
|
+
} catch (e) {
|
|
53
|
+
return __error("Failed to set workspace '${escapeForExtendScript(args.name)}': " + (e && e.message ? e.message : e));
|
|
54
|
+
}
|
|
55
55
|
`);
|
|
56
56
|
return sendCommand(script, bridgeOptions);
|
|
57
57
|
},
|
package/package.json
CHANGED
|
@@ -1,66 +1,66 @@
|
|
|
1
|
-
{
|
|
2
|
-
"name": "@synthetic-ai/premiere-mcp",
|
|
3
|
-
"version": "2.
|
|
4
|
-
"description": "MCP server for controlling Adobe Premiere Pro via CEP/ExtendScript
|
|
5
|
-
"main": "dist/index.js",
|
|
6
|
-
"type": "module",
|
|
7
|
-
"bin": {
|
|
8
|
-
"premiere-mcp": "dist/index.js"
|
|
9
|
-
},
|
|
10
|
-
"files": [
|
|
11
|
-
"dist/**/*.js",
|
|
12
|
-
"dist/**/*.d.ts",
|
|
13
|
-
"cep-plugin",
|
|
14
|
-
"scripts",
|
|
15
|
-
"README.md",
|
|
16
|
-
"LICENSE",
|
|
17
|
-
"CHANGELOG.md"
|
|
18
|
-
],
|
|
19
|
-
"scripts": {
|
|
20
|
-
"build": "tsc",
|
|
21
|
-
"dev": "tsc --watch",
|
|
22
|
-
"start": "node dist/index.js",
|
|
23
|
-
"start:http": "node dist/http-server.js",
|
|
24
|
-
"test": "vitest run",
|
|
25
|
-
"test:watch": "vitest",
|
|
26
|
-
"test:coverage": "vitest run --coverage",
|
|
27
|
-
"install-cep": "bash scripts/install-cep.sh"
|
|
28
|
-
},
|
|
29
|
-
"repository": {
|
|
30
|
-
"type": "git",
|
|
31
|
-
"url": "git+https://github.com/matiasEltrece/premiere-pro-mcp.git"
|
|
32
|
-
},
|
|
33
|
-
"homepage": "https://synthetic.com.ar",
|
|
34
|
-
"bugs": {
|
|
35
|
-
"url": "https://synthetic.com.ar"
|
|
36
|
-
},
|
|
37
|
-
"author": "Synthetic",
|
|
38
|
-
"keywords": [
|
|
39
|
-
"mcp",
|
|
40
|
-
"model-context-protocol",
|
|
41
|
-
"adobe",
|
|
42
|
-
"premiere-pro",
|
|
43
|
-
"video-editing",
|
|
44
|
-
"ai",
|
|
45
|
-
"extendscript",
|
|
46
|
-
"cep",
|
|
47
|
-
"claude",
|
|
48
|
-
"windsurf",
|
|
49
|
-
"cursor",
|
|
50
|
-
"automation"
|
|
51
|
-
],
|
|
52
|
-
"license": "MIT",
|
|
53
|
-
"engines": {
|
|
54
|
-
"node": ">=18.0.0"
|
|
55
|
-
},
|
|
56
|
-
"dependencies": {
|
|
57
|
-
"@modelcontextprotocol/sdk": "^1.12.1",
|
|
58
|
-
"zod": "^3.23.0"
|
|
59
|
-
},
|
|
60
|
-
"devDependencies": {
|
|
61
|
-
"@types/node": "^22.10.0",
|
|
62
|
-
"javascript-obfuscator": "^4.2.2",
|
|
63
|
-
"typescript": "^5.7.0",
|
|
64
|
-
"vitest": "^4.0.18"
|
|
65
|
-
}
|
|
66
|
-
}
|
|
1
|
+
{
|
|
2
|
+
"name": "@synthetic-ai/premiere-mcp",
|
|
3
|
+
"version": "2.3.0-dev.0",
|
|
4
|
+
"description": "MCP server for controlling Adobe Premiere Pro via CEP/ExtendScript \u00e2\u20ac\u201d 437 tools for AI-driven video editing",
|
|
5
|
+
"main": "dist/index.js",
|
|
6
|
+
"type": "module",
|
|
7
|
+
"bin": {
|
|
8
|
+
"premiere-mcp": "dist/index.js"
|
|
9
|
+
},
|
|
10
|
+
"files": [
|
|
11
|
+
"dist/**/*.js",
|
|
12
|
+
"dist/**/*.d.ts",
|
|
13
|
+
"cep-plugin",
|
|
14
|
+
"scripts",
|
|
15
|
+
"README.md",
|
|
16
|
+
"LICENSE",
|
|
17
|
+
"CHANGELOG.md"
|
|
18
|
+
],
|
|
19
|
+
"scripts": {
|
|
20
|
+
"build": "tsc",
|
|
21
|
+
"dev": "tsc --watch",
|
|
22
|
+
"start": "node dist/index.js",
|
|
23
|
+
"start:http": "node dist/http-server.js",
|
|
24
|
+
"test": "vitest run",
|
|
25
|
+
"test:watch": "vitest",
|
|
26
|
+
"test:coverage": "vitest run --coverage",
|
|
27
|
+
"install-cep": "bash scripts/install-cep.sh"
|
|
28
|
+
},
|
|
29
|
+
"repository": {
|
|
30
|
+
"type": "git",
|
|
31
|
+
"url": "git+https://github.com/matiasEltrece/premiere-pro-mcp.git"
|
|
32
|
+
},
|
|
33
|
+
"homepage": "https://synthetic.com.ar",
|
|
34
|
+
"bugs": {
|
|
35
|
+
"url": "https://synthetic.com.ar"
|
|
36
|
+
},
|
|
37
|
+
"author": "Synthetic",
|
|
38
|
+
"keywords": [
|
|
39
|
+
"mcp",
|
|
40
|
+
"model-context-protocol",
|
|
41
|
+
"adobe",
|
|
42
|
+
"premiere-pro",
|
|
43
|
+
"video-editing",
|
|
44
|
+
"ai",
|
|
45
|
+
"extendscript",
|
|
46
|
+
"cep",
|
|
47
|
+
"claude",
|
|
48
|
+
"windsurf",
|
|
49
|
+
"cursor",
|
|
50
|
+
"automation"
|
|
51
|
+
],
|
|
52
|
+
"license": "MIT",
|
|
53
|
+
"engines": {
|
|
54
|
+
"node": ">=18.0.0"
|
|
55
|
+
},
|
|
56
|
+
"dependencies": {
|
|
57
|
+
"@modelcontextprotocol/sdk": "^1.12.1",
|
|
58
|
+
"zod": "^3.23.0"
|
|
59
|
+
},
|
|
60
|
+
"devDependencies": {
|
|
61
|
+
"@types/node": "^22.10.0",
|
|
62
|
+
"javascript-obfuscator": "^4.2.2",
|
|
63
|
+
"typescript": "^5.7.0",
|
|
64
|
+
"vitest": "^4.0.18"
|
|
65
|
+
}
|
|
66
|
+
}
|
|
@@ -1,210 +1,210 @@
|
|
|
1
|
-
#!/usr/bin/env bash
|
|
2
|
-
# Build a macOS DMG for the Premiere Pro AI Chat plugin.
|
|
3
|
-
# The DMG contains the plugin folder + an installer script.
|
|
4
|
-
|
|
5
|
-
set -e
|
|
6
|
-
|
|
7
|
-
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
|
8
|
-
PROJECT_ROOT="$(dirname "$SCRIPT_DIR")"
|
|
9
|
-
PLUGIN_SRC="$PROJECT_ROOT/chat-plugin"
|
|
10
|
-
BUILD_DIR="$PROJECT_ROOT/build"
|
|
11
|
-
DMG_NAME="Premiere-Pro-AI-Chat"
|
|
12
|
-
DMG_VOLUME="Premiere Pro AI Chat"
|
|
13
|
-
VERSION="1.0.0"
|
|
14
|
-
|
|
15
|
-
echo "========================================"
|
|
16
|
-
echo " Building DMG: $DMG_NAME v$VERSION"
|
|
17
|
-
echo "========================================"
|
|
18
|
-
echo ""
|
|
19
|
-
|
|
20
|
-
# Clean previous DMG staging (preserve other build artifacts)
|
|
21
|
-
rm -rf "$BUILD_DIR/dmg-staging"
|
|
22
|
-
mkdir -p "$BUILD_DIR/dmg-staging"
|
|
23
|
-
|
|
24
|
-
STAGING="$BUILD_DIR/dmg-staging"
|
|
25
|
-
|
|
26
|
-
# ---- Copy plugin files ----
|
|
27
|
-
echo "Copying plugin files..."
|
|
28
|
-
mkdir -p "$STAGING/Premiere Pro AI Chat.cep"
|
|
29
|
-
cp -R "$PLUGIN_SRC/"* "$STAGING/Premiere Pro AI Chat.cep/"
|
|
30
|
-
echo "β Plugin files copied"
|
|
31
|
-
|
|
32
|
-
# ---- Create installer script inside DMG ----
|
|
33
|
-
cat > "$STAGING/Install Plugin.command" << 'INSTALLER_EOF'
|
|
34
|
-
#!/usr/bin/env bash
|
|
35
|
-
# Premiere Pro AI Chat β One-click Installer
|
|
36
|
-
|
|
37
|
-
set -e
|
|
38
|
-
|
|
39
|
-
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
|
40
|
-
PLUGIN_NAME="com.ppro.ai.chat"
|
|
41
|
-
PLUGIN_SRC="$SCRIPT_DIR/Premiere Pro AI Chat.cep"
|
|
42
|
-
CEP_DIR="$HOME/Library/Application Support/Adobe/CEP/extensions"
|
|
43
|
-
|
|
44
|
-
echo ""
|
|
45
|
-
echo "ββββββββββββββββββββββββββββββββββββββββββββ"
|
|
46
|
-
echo "β Premiere Pro AI Chat β Installer β"
|
|
47
|
-
echo "ββββββββββββββββββββββββββββββββββββββββββββ"
|
|
48
|
-
echo ""
|
|
49
|
-
|
|
50
|
-
# Verify source
|
|
51
|
-
if [ ! -d "$PLUGIN_SRC" ]; then
|
|
52
|
-
echo "β Error: Plugin files not found."
|
|
53
|
-
echo " Make sure you're running this from the DMG."
|
|
54
|
-
exit 1
|
|
55
|
-
fi
|
|
56
|
-
|
|
57
|
-
# Create CEP directory
|
|
58
|
-
mkdir -p "$CEP_DIR"
|
|
59
|
-
|
|
60
|
-
# Remove old installation
|
|
61
|
-
if [ -d "$CEP_DIR/$PLUGIN_NAME" ] || [ -L "$CEP_DIR/$PLUGIN_NAME" ]; then
|
|
62
|
-
echo "Removing previous installation..."
|
|
63
|
-
rm -rf "$CEP_DIR/$PLUGIN_NAME"
|
|
64
|
-
fi
|
|
65
|
-
|
|
66
|
-
# Copy plugin
|
|
67
|
-
echo "Installing plugin..."
|
|
68
|
-
cp -R "$PLUGIN_SRC" "$CEP_DIR/$PLUGIN_NAME"
|
|
69
|
-
echo "β Plugin installed to: $CEP_DIR/$PLUGIN_NAME"
|
|
70
|
-
|
|
71
|
-
# Enable unsigned extensions
|
|
72
|
-
echo "Enabling unsigned CEP extensions..."
|
|
73
|
-
for ver in 9 10 11 12; do
|
|
74
|
-
defaults write com.adobe.CSXS.$ver PlayerDebugMode 1 2>/dev/null || true
|
|
75
|
-
done
|
|
76
|
-
echo "β Debug mode enabled"
|
|
77
|
-
|
|
78
|
-
echo ""
|
|
79
|
-
echo "ββββββββββββββββββββββββββββββββββββββββββββ"
|
|
80
|
-
echo " β Installation complete!"
|
|
81
|
-
echo ""
|
|
82
|
-
echo " Next steps:"
|
|
83
|
-
echo " 1. Restart Premiere Pro (if running)"
|
|
84
|
-
echo " 2. Go to: Window β Extensions β AI Chat"
|
|
85
|
-
echo " 3. Enter your Claude or Gemini API key"
|
|
86
|
-
echo " 4. Start chatting!"
|
|
87
|
-
echo "ββββββββββββββββββββββββββββββββββββββββββββ"
|
|
88
|
-
echo ""
|
|
89
|
-
echo "Press any key to close..."
|
|
90
|
-
read -n 1 -s
|
|
91
|
-
INSTALLER_EOF
|
|
92
|
-
|
|
93
|
-
chmod +x "$STAGING/Install Plugin.command"
|
|
94
|
-
echo "β Installer script created"
|
|
95
|
-
|
|
96
|
-
# ---- Create README ----
|
|
97
|
-
cat > "$STAGING/README.txt" << 'README_EOF'
|
|
98
|
-
Premiere Pro AI Chat Plugin
|
|
99
|
-
============================
|
|
100
|
-
|
|
101
|
-
An embedded AI chat panel for Adobe Premiere Pro.
|
|
102
|
-
Control your edits with natural language using Claude or Gemini.
|
|
103
|
-
|
|
104
|
-
INSTALLATION
|
|
105
|
-
============
|
|
106
|
-
|
|
107
|
-
Option 1: Double-click "Install Plugin.command"
|
|
108
|
-
- This will copy the plugin to your Adobe CEP extensions folder
|
|
109
|
-
- It will enable unsigned extensions automatically
|
|
110
|
-
|
|
111
|
-
Option 2: Manual Install
|
|
112
|
-
- Copy the "Premiere Pro AI Chat.cep" folder to:
|
|
113
|
-
~/Library/Application Support/Adobe/CEP/extensions/com.ppro.ai.chat
|
|
114
|
-
- Enable unsigned extensions by running in Terminal:
|
|
115
|
-
defaults write com.adobe.CSXS.11 PlayerDebugMode 1
|
|
116
|
-
|
|
117
|
-
USAGE
|
|
118
|
-
=====
|
|
119
|
-
|
|
120
|
-
1. Open Premiere Pro
|
|
121
|
-
2. Go to: Window β Extensions β AI Chat
|
|
122
|
-
3. Choose Claude or Gemini as your AI provider
|
|
123
|
-
4. Enter your API key
|
|
124
|
-
5. Start chatting! The AI can:
|
|
125
|
-
- Query your project (clips, sequences, tracks)
|
|
126
|
-
- Edit your timeline (add clips, effects, transitions)
|
|
127
|
-
- Export sequences
|
|
128
|
-
- And much more
|
|
129
|
-
|
|
130
|
-
REQUIREMENTS
|
|
131
|
-
============
|
|
132
|
-
|
|
133
|
-
- macOS 10.14+
|
|
134
|
-
- Adobe Premiere Pro 2020 (v14.0) or later
|
|
135
|
-
- Claude API key (console.anthropic.com) or
|
|
136
|
-
Gemini API key (aistudio.google.com)
|
|
137
|
-
|
|
138
|
-
SUPPORT
|
|
139
|
-
=======
|
|
140
|
-
|
|
141
|
-
GitHub: https://github.com/ppmcp/premiere-pro-mcp
|
|
142
|
-
Issues: https://github.com/ppmcp/premiere-pro-mcp/issues
|
|
143
|
-
README_EOF
|
|
144
|
-
|
|
145
|
-
echo "β README created"
|
|
146
|
-
|
|
147
|
-
# ---- Create Uninstaller ----
|
|
148
|
-
cat > "$STAGING/Uninstall Plugin.command" << 'UNINSTALL_EOF'
|
|
149
|
-
#!/usr/bin/env bash
|
|
150
|
-
set -e
|
|
151
|
-
|
|
152
|
-
PLUGIN_NAME="com.ppro.ai.chat"
|
|
153
|
-
CEP_DIR="$HOME/Library/Application Support/Adobe/CEP/extensions"
|
|
154
|
-
|
|
155
|
-
echo ""
|
|
156
|
-
echo "Uninstalling Premiere Pro AI Chat..."
|
|
157
|
-
|
|
158
|
-
if [ -d "$CEP_DIR/$PLUGIN_NAME" ] || [ -L "$CEP_DIR/$PLUGIN_NAME" ]; then
|
|
159
|
-
rm -rf "$CEP_DIR/$PLUGIN_NAME"
|
|
160
|
-
echo "β Plugin removed."
|
|
161
|
-
else
|
|
162
|
-
echo "Plugin not found β nothing to remove."
|
|
163
|
-
fi
|
|
164
|
-
|
|
165
|
-
echo ""
|
|
166
|
-
echo "Press any key to close..."
|
|
167
|
-
read -n 1 -s
|
|
168
|
-
UNINSTALL_EOF
|
|
169
|
-
|
|
170
|
-
chmod +x "$STAGING/Uninstall Plugin.command"
|
|
171
|
-
echo "β Uninstaller created"
|
|
172
|
-
|
|
173
|
-
# ---- Build DMG ----
|
|
174
|
-
echo ""
|
|
175
|
-
echo "Building DMG..."
|
|
176
|
-
|
|
177
|
-
DMG_PATH="$BUILD_DIR/$DMG_NAME-v$VERSION.dmg"
|
|
178
|
-
TEMP_DMG="$BUILD_DIR/temp.dmg"
|
|
179
|
-
|
|
180
|
-
# Create a temporary DMG
|
|
181
|
-
hdiutil create -srcfolder "$STAGING" \
|
|
182
|
-
-volname "$DMG_VOLUME" \
|
|
183
|
-
-format UDRW \
|
|
184
|
-
-fs HFS+ \
|
|
185
|
-
-size 20m \
|
|
186
|
-
"$TEMP_DMG" \
|
|
187
|
-
-quiet
|
|
188
|
-
|
|
189
|
-
# Convert to compressed read-only DMG
|
|
190
|
-
hdiutil convert "$TEMP_DMG" \
|
|
191
|
-
-format UDZO \
|
|
192
|
-
-imagekey zlib-level=9 \
|
|
193
|
-
-o "$DMG_PATH" \
|
|
194
|
-
-quiet
|
|
195
|
-
|
|
196
|
-
rm -f "$TEMP_DMG"
|
|
197
|
-
|
|
198
|
-
echo "β DMG built: $DMG_PATH"
|
|
199
|
-
|
|
200
|
-
# Get file size
|
|
201
|
-
DMG_SIZE=$(du -h "$DMG_PATH" | cut -f1 | xargs)
|
|
202
|
-
|
|
203
|
-
echo ""
|
|
204
|
-
echo "========================================"
|
|
205
|
-
echo " β Build complete!"
|
|
206
|
-
echo ""
|
|
207
|
-
echo " File: $DMG_PATH"
|
|
208
|
-
echo " Size: $DMG_SIZE"
|
|
209
|
-
echo "========================================"
|
|
210
|
-
echo ""
|
|
1
|
+
#!/usr/bin/env bash
|
|
2
|
+
# Build a macOS DMG for the Premiere Pro AI Chat plugin.
|
|
3
|
+
# The DMG contains the plugin folder + an installer script.
|
|
4
|
+
|
|
5
|
+
set -e
|
|
6
|
+
|
|
7
|
+
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
|
8
|
+
PROJECT_ROOT="$(dirname "$SCRIPT_DIR")"
|
|
9
|
+
PLUGIN_SRC="$PROJECT_ROOT/chat-plugin"
|
|
10
|
+
BUILD_DIR="$PROJECT_ROOT/build"
|
|
11
|
+
DMG_NAME="Premiere-Pro-AI-Chat"
|
|
12
|
+
DMG_VOLUME="Premiere Pro AI Chat"
|
|
13
|
+
VERSION="1.0.0"
|
|
14
|
+
|
|
15
|
+
echo "========================================"
|
|
16
|
+
echo " Building DMG: $DMG_NAME v$VERSION"
|
|
17
|
+
echo "========================================"
|
|
18
|
+
echo ""
|
|
19
|
+
|
|
20
|
+
# Clean previous DMG staging (preserve other build artifacts)
|
|
21
|
+
rm -rf "$BUILD_DIR/dmg-staging"
|
|
22
|
+
mkdir -p "$BUILD_DIR/dmg-staging"
|
|
23
|
+
|
|
24
|
+
STAGING="$BUILD_DIR/dmg-staging"
|
|
25
|
+
|
|
26
|
+
# ---- Copy plugin files ----
|
|
27
|
+
echo "Copying plugin files..."
|
|
28
|
+
mkdir -p "$STAGING/Premiere Pro AI Chat.cep"
|
|
29
|
+
cp -R "$PLUGIN_SRC/"* "$STAGING/Premiere Pro AI Chat.cep/"
|
|
30
|
+
echo "β Plugin files copied"
|
|
31
|
+
|
|
32
|
+
# ---- Create installer script inside DMG ----
|
|
33
|
+
cat > "$STAGING/Install Plugin.command" << 'INSTALLER_EOF'
|
|
34
|
+
#!/usr/bin/env bash
|
|
35
|
+
# Premiere Pro AI Chat β One-click Installer
|
|
36
|
+
|
|
37
|
+
set -e
|
|
38
|
+
|
|
39
|
+
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
|
40
|
+
PLUGIN_NAME="com.ppro.ai.chat"
|
|
41
|
+
PLUGIN_SRC="$SCRIPT_DIR/Premiere Pro AI Chat.cep"
|
|
42
|
+
CEP_DIR="$HOME/Library/Application Support/Adobe/CEP/extensions"
|
|
43
|
+
|
|
44
|
+
echo ""
|
|
45
|
+
echo "ββββββββββββββββββββββββββββββββββββββββββββ"
|
|
46
|
+
echo "β Premiere Pro AI Chat β Installer β"
|
|
47
|
+
echo "ββββββββββββββββββββββββββββββββββββββββββββ"
|
|
48
|
+
echo ""
|
|
49
|
+
|
|
50
|
+
# Verify source
|
|
51
|
+
if [ ! -d "$PLUGIN_SRC" ]; then
|
|
52
|
+
echo "β Error: Plugin files not found."
|
|
53
|
+
echo " Make sure you're running this from the DMG."
|
|
54
|
+
exit 1
|
|
55
|
+
fi
|
|
56
|
+
|
|
57
|
+
# Create CEP directory
|
|
58
|
+
mkdir -p "$CEP_DIR"
|
|
59
|
+
|
|
60
|
+
# Remove old installation
|
|
61
|
+
if [ -d "$CEP_DIR/$PLUGIN_NAME" ] || [ -L "$CEP_DIR/$PLUGIN_NAME" ]; then
|
|
62
|
+
echo "Removing previous installation..."
|
|
63
|
+
rm -rf "$CEP_DIR/$PLUGIN_NAME"
|
|
64
|
+
fi
|
|
65
|
+
|
|
66
|
+
# Copy plugin
|
|
67
|
+
echo "Installing plugin..."
|
|
68
|
+
cp -R "$PLUGIN_SRC" "$CEP_DIR/$PLUGIN_NAME"
|
|
69
|
+
echo "β Plugin installed to: $CEP_DIR/$PLUGIN_NAME"
|
|
70
|
+
|
|
71
|
+
# Enable unsigned extensions
|
|
72
|
+
echo "Enabling unsigned CEP extensions..."
|
|
73
|
+
for ver in 9 10 11 12; do
|
|
74
|
+
defaults write com.adobe.CSXS.$ver PlayerDebugMode 1 2>/dev/null || true
|
|
75
|
+
done
|
|
76
|
+
echo "β Debug mode enabled"
|
|
77
|
+
|
|
78
|
+
echo ""
|
|
79
|
+
echo "ββββββββββββββββββββββββββββββββββββββββββββ"
|
|
80
|
+
echo " β Installation complete!"
|
|
81
|
+
echo ""
|
|
82
|
+
echo " Next steps:"
|
|
83
|
+
echo " 1. Restart Premiere Pro (if running)"
|
|
84
|
+
echo " 2. Go to: Window β Extensions β AI Chat"
|
|
85
|
+
echo " 3. Enter your Claude or Gemini API key"
|
|
86
|
+
echo " 4. Start chatting!"
|
|
87
|
+
echo "ββββββββββββββββββββββββββββββββββββββββββββ"
|
|
88
|
+
echo ""
|
|
89
|
+
echo "Press any key to close..."
|
|
90
|
+
read -n 1 -s
|
|
91
|
+
INSTALLER_EOF
|
|
92
|
+
|
|
93
|
+
chmod +x "$STAGING/Install Plugin.command"
|
|
94
|
+
echo "β Installer script created"
|
|
95
|
+
|
|
96
|
+
# ---- Create README ----
|
|
97
|
+
cat > "$STAGING/README.txt" << 'README_EOF'
|
|
98
|
+
Premiere Pro AI Chat Plugin
|
|
99
|
+
============================
|
|
100
|
+
|
|
101
|
+
An embedded AI chat panel for Adobe Premiere Pro.
|
|
102
|
+
Control your edits with natural language using Claude or Gemini.
|
|
103
|
+
|
|
104
|
+
INSTALLATION
|
|
105
|
+
============
|
|
106
|
+
|
|
107
|
+
Option 1: Double-click "Install Plugin.command"
|
|
108
|
+
- This will copy the plugin to your Adobe CEP extensions folder
|
|
109
|
+
- It will enable unsigned extensions automatically
|
|
110
|
+
|
|
111
|
+
Option 2: Manual Install
|
|
112
|
+
- Copy the "Premiere Pro AI Chat.cep" folder to:
|
|
113
|
+
~/Library/Application Support/Adobe/CEP/extensions/com.ppro.ai.chat
|
|
114
|
+
- Enable unsigned extensions by running in Terminal:
|
|
115
|
+
defaults write com.adobe.CSXS.11 PlayerDebugMode 1
|
|
116
|
+
|
|
117
|
+
USAGE
|
|
118
|
+
=====
|
|
119
|
+
|
|
120
|
+
1. Open Premiere Pro
|
|
121
|
+
2. Go to: Window β Extensions β AI Chat
|
|
122
|
+
3. Choose Claude or Gemini as your AI provider
|
|
123
|
+
4. Enter your API key
|
|
124
|
+
5. Start chatting! The AI can:
|
|
125
|
+
- Query your project (clips, sequences, tracks)
|
|
126
|
+
- Edit your timeline (add clips, effects, transitions)
|
|
127
|
+
- Export sequences
|
|
128
|
+
- And much more
|
|
129
|
+
|
|
130
|
+
REQUIREMENTS
|
|
131
|
+
============
|
|
132
|
+
|
|
133
|
+
- macOS 10.14+
|
|
134
|
+
- Adobe Premiere Pro 2020 (v14.0) or later
|
|
135
|
+
- Claude API key (console.anthropic.com) or
|
|
136
|
+
Gemini API key (aistudio.google.com)
|
|
137
|
+
|
|
138
|
+
SUPPORT
|
|
139
|
+
=======
|
|
140
|
+
|
|
141
|
+
GitHub: https://github.com/ppmcp/premiere-pro-mcp
|
|
142
|
+
Issues: https://github.com/ppmcp/premiere-pro-mcp/issues
|
|
143
|
+
README_EOF
|
|
144
|
+
|
|
145
|
+
echo "β README created"
|
|
146
|
+
|
|
147
|
+
# ---- Create Uninstaller ----
|
|
148
|
+
cat > "$STAGING/Uninstall Plugin.command" << 'UNINSTALL_EOF'
|
|
149
|
+
#!/usr/bin/env bash
|
|
150
|
+
set -e
|
|
151
|
+
|
|
152
|
+
PLUGIN_NAME="com.ppro.ai.chat"
|
|
153
|
+
CEP_DIR="$HOME/Library/Application Support/Adobe/CEP/extensions"
|
|
154
|
+
|
|
155
|
+
echo ""
|
|
156
|
+
echo "Uninstalling Premiere Pro AI Chat..."
|
|
157
|
+
|
|
158
|
+
if [ -d "$CEP_DIR/$PLUGIN_NAME" ] || [ -L "$CEP_DIR/$PLUGIN_NAME" ]; then
|
|
159
|
+
rm -rf "$CEP_DIR/$PLUGIN_NAME"
|
|
160
|
+
echo "β Plugin removed."
|
|
161
|
+
else
|
|
162
|
+
echo "Plugin not found β nothing to remove."
|
|
163
|
+
fi
|
|
164
|
+
|
|
165
|
+
echo ""
|
|
166
|
+
echo "Press any key to close..."
|
|
167
|
+
read -n 1 -s
|
|
168
|
+
UNINSTALL_EOF
|
|
169
|
+
|
|
170
|
+
chmod +x "$STAGING/Uninstall Plugin.command"
|
|
171
|
+
echo "β Uninstaller created"
|
|
172
|
+
|
|
173
|
+
# ---- Build DMG ----
|
|
174
|
+
echo ""
|
|
175
|
+
echo "Building DMG..."
|
|
176
|
+
|
|
177
|
+
DMG_PATH="$BUILD_DIR/$DMG_NAME-v$VERSION.dmg"
|
|
178
|
+
TEMP_DMG="$BUILD_DIR/temp.dmg"
|
|
179
|
+
|
|
180
|
+
# Create a temporary DMG
|
|
181
|
+
hdiutil create -srcfolder "$STAGING" \
|
|
182
|
+
-volname "$DMG_VOLUME" \
|
|
183
|
+
-format UDRW \
|
|
184
|
+
-fs HFS+ \
|
|
185
|
+
-size 20m \
|
|
186
|
+
"$TEMP_DMG" \
|
|
187
|
+
-quiet
|
|
188
|
+
|
|
189
|
+
# Convert to compressed read-only DMG
|
|
190
|
+
hdiutil convert "$TEMP_DMG" \
|
|
191
|
+
-format UDZO \
|
|
192
|
+
-imagekey zlib-level=9 \
|
|
193
|
+
-o "$DMG_PATH" \
|
|
194
|
+
-quiet
|
|
195
|
+
|
|
196
|
+
rm -f "$TEMP_DMG"
|
|
197
|
+
|
|
198
|
+
echo "β DMG built: $DMG_PATH"
|
|
199
|
+
|
|
200
|
+
# Get file size
|
|
201
|
+
DMG_SIZE=$(du -h "$DMG_PATH" | cut -f1 | xargs)
|
|
202
|
+
|
|
203
|
+
echo ""
|
|
204
|
+
echo "========================================"
|
|
205
|
+
echo " β Build complete!"
|
|
206
|
+
echo ""
|
|
207
|
+
echo " File: $DMG_PATH"
|
|
208
|
+
echo " Size: $DMG_SIZE"
|
|
209
|
+
echo "========================================"
|
|
210
|
+
echo ""
|