@synthetic-ai/premiere-mcp 2.0.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.
Files changed (104) hide show
  1. package/CHANGELOG.md +73 -0
  2. package/LICENSE +21 -0
  3. package/README.md +242 -0
  4. package/cep-plugin/.debug +8 -0
  5. package/cep-plugin/CSInterface.js +70 -0
  6. package/cep-plugin/CSXS/manifest.xml +49 -0
  7. package/cep-plugin/host.jsx +7 -0
  8. package/cep-plugin/index.html +419 -0
  9. package/cep-plugin/main.js +327 -0
  10. package/cep-plugin/premiere.jsx +24947 -0
  11. package/cep-plugin/synthetic-logo.png +0 -0
  12. package/dist/bridge/file-bridge.d.ts +29 -0
  13. package/dist/bridge/file-bridge.js +145 -0
  14. package/dist/bridge/script-builder.d.ts +19 -0
  15. package/dist/bridge/script-builder.js +408 -0
  16. package/dist/http-server.d.ts +21 -0
  17. package/dist/http-server.js +140 -0
  18. package/dist/index.d.ts +3 -0
  19. package/dist/index.js +70 -0
  20. package/dist/resources/extendscript-reference.d.ts +2 -0
  21. package/dist/resources/extendscript-reference.js +219 -0
  22. package/dist/server.d.ts +4 -0
  23. package/dist/server.js +276 -0
  24. package/dist/tools/advanced.d.ts +530 -0
  25. package/dist/tools/advanced.js +923 -0
  26. package/dist/tools/audio-advanced.d.ts +847 -0
  27. package/dist/tools/audio-advanced.js +1653 -0
  28. package/dist/tools/audio.d.ts +84 -0
  29. package/dist/tools/audio.js +123 -0
  30. package/dist/tools/captions.d.ts +30 -0
  31. package/dist/tools/captions.js +73 -0
  32. package/dist/tools/clipboard.d.ts +153 -0
  33. package/dist/tools/clipboard.js +381 -0
  34. package/dist/tools/color-advanced.d.ts +821 -0
  35. package/dist/tools/color-advanced.js +772 -0
  36. package/dist/tools/discovery.d.ts +128 -0
  37. package/dist/tools/discovery.js +445 -0
  38. package/dist/tools/effects.d.ts +211 -0
  39. package/dist/tools/effects.js +554 -0
  40. package/dist/tools/export-presets.d.ts +333 -0
  41. package/dist/tools/export-presets.js +490 -0
  42. package/dist/tools/export.d.ts +320 -0
  43. package/dist/tools/export.js +618 -0
  44. package/dist/tools/health.d.ts +9 -0
  45. package/dist/tools/health.js +25 -0
  46. package/dist/tools/inspection.d.ts +179 -0
  47. package/dist/tools/inspection.js +1089 -0
  48. package/dist/tools/keyframes.d.ts +253 -0
  49. package/dist/tools/keyframes.js +611 -0
  50. package/dist/tools/markers.d.ts +117 -0
  51. package/dist/tools/markers.js +206 -0
  52. package/dist/tools/media.d.ts +297 -0
  53. package/dist/tools/media.js +493 -0
  54. package/dist/tools/metadata.d.ts +178 -0
  55. package/dist/tools/metadata.js +278 -0
  56. package/dist/tools/multicam.d.ts +199 -0
  57. package/dist/tools/multicam.js +212 -0
  58. package/dist/tools/playback.d.ts +34 -0
  59. package/dist/tools/playback.js +63 -0
  60. package/dist/tools/playhead.d.ts +77 -0
  61. package/dist/tools/playhead.js +185 -0
  62. package/dist/tools/project-manager.d.ts +65 -0
  63. package/dist/tools/project-manager.js +81 -0
  64. package/dist/tools/project.d.ts +390 -0
  65. package/dist/tools/project.js +596 -0
  66. package/dist/tools/scripting.d.ts +98 -0
  67. package/dist/tools/scripting.js +434 -0
  68. package/dist/tools/selection.d.ts +120 -0
  69. package/dist/tools/selection.js +334 -0
  70. package/dist/tools/sequence-advanced.d.ts +84 -0
  71. package/dist/tools/sequence-advanced.js +471 -0
  72. package/dist/tools/sequence-settings.d.ts +397 -0
  73. package/dist/tools/sequence-settings.js +967 -0
  74. package/dist/tools/sequence.d.ts +211 -0
  75. package/dist/tools/sequence.js +378 -0
  76. package/dist/tools/source-monitor.d.ts +95 -0
  77. package/dist/tools/source-monitor.js +180 -0
  78. package/dist/tools/text.d.ts +97 -0
  79. package/dist/tools/text.js +159 -0
  80. package/dist/tools/timeline.d.ts +265 -0
  81. package/dist/tools/timeline.js +575 -0
  82. package/dist/tools/track-management.d.ts +482 -0
  83. package/dist/tools/track-management.js +787 -0
  84. package/dist/tools/track-targeting.d.ts +666 -0
  85. package/dist/tools/track-targeting.js +1318 -0
  86. package/dist/tools/tracks.d.ts +90 -0
  87. package/dist/tools/tracks.js +183 -0
  88. package/dist/tools/transitions-motion.d.ts +788 -0
  89. package/dist/tools/transitions-motion.js +680 -0
  90. package/dist/tools/transitions.d.ts +124 -0
  91. package/dist/tools/transitions.js +267 -0
  92. package/dist/tools/utility.d.ts +469 -0
  93. package/dist/tools/utility.js +1118 -0
  94. package/dist/tools/workspace.d.ts +25 -0
  95. package/dist/tools/workspace.js +61 -0
  96. package/package.json +66 -0
  97. package/scripts/build-chat-dmg.sh +210 -0
  98. package/scripts/build-chat-zip.sh +291 -0
  99. package/scripts/install-cep-windows.ps1 +99 -0
  100. package/scripts/install-cep.sh +66 -0
  101. package/scripts/install-chat-plugin.bat +67 -0
  102. package/scripts/install-chat-plugin.sh +85 -0
  103. package/scripts/install-windows.bat +95 -0
  104. package/scripts/package.mjs +218 -0
@@ -0,0 +1,419 @@
1
+ <!DOCTYPE html>
2
+ <html>
3
+ <head>
4
+ <meta charset="utf-8">
5
+ <title>Synthetic Premiere MCP</title>
6
+ <style>
7
+ /* -- Synthetic design system applied to the CEP panel ----------------- */
8
+ /* Dark canvas + purple accent (Premiere MCP brand). Element ids match */
9
+ /* main.js exactly so the bridge logic does not change. */
10
+
11
+ * { margin: 0; padding: 0; box-sizing: border-box; }
12
+
13
+ :root {
14
+ --bg: #080809;
15
+ --surface: rgba(24, 24, 27, 0.6);
16
+ --surface-2: rgba(39, 39, 42, 0.7);
17
+ --border: rgba(63, 63, 70, 0.6);
18
+ --border-soft: rgba(63, 63, 70, 0.35);
19
+ --text: #f4f4f5;
20
+ --text-mute: #a1a1aa;
21
+ --text-dim: #71717a;
22
+ --text-faint: #52525b;
23
+
24
+ --accent: #a855f7; /* purple-500 — Premiere MCP brand */
25
+ --accent-hover: #9333ea; /* purple-600 */
26
+ --accent-soft-bg: rgba(168, 85, 247, 0.12);
27
+ --accent-soft-border: rgba(168, 85, 247, 0.30);
28
+
29
+ --ok: #4ade80; /* green-400 */
30
+ --warn: #fbbf24; /* amber-400 */
31
+ --err: #f87171; /* red-400 */
32
+ --info: #93c5fd; /* blue-300 */
33
+ }
34
+
35
+ html, body { height: 100%; }
36
+ /* Body is a flex column so .synth-footer (margin-top:auto) pins to the
37
+ very bottom. The .synth-header/.synth-footer span edge-to-edge, so
38
+ body padding is 0; the panel content lives inside #panel-content with
39
+ its own padding. */
40
+ body {
41
+ font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Inter", sans-serif;
42
+ background: var(--bg);
43
+ color: var(--text);
44
+ font-size: 12px;
45
+ letter-spacing: -0.005em;
46
+ display: flex;
47
+ flex-direction: column;
48
+ min-height: 100vh;
49
+ margin: 0;
50
+ box-sizing: border-box;
51
+ }
52
+ #panel-content {
53
+ flex: 1;
54
+ padding: 16px;
55
+ display: flex;
56
+ flex-direction: column;
57
+ }
58
+
59
+ /* ─── Synthetic shell — canonical (see synthetic/docs/DESIGN_SYSTEM.md)
60
+ Do NOT edit per-panel. Edit the canonical block in DESIGN_SYSTEM.md
61
+ then copy-paste verbatim. */
62
+ :root {
63
+ --shell-accent: #a855f7; /* purple-500 */
64
+ --shell-accent-dim: rgba(168, 85, 247, 0.12);
65
+ }
66
+ .synth-header,
67
+ .synth-footer {
68
+ display: flex;
69
+ align-items: center;
70
+ justify-content: center;
71
+ gap: 8px;
72
+ padding: 8px 14px;
73
+ flex-shrink: 0;
74
+ text-decoration: none;
75
+ color: inherit;
76
+ font-family: inherit;
77
+ box-sizing: border-box;
78
+ }
79
+ .synth-header {
80
+ background: rgba(24, 24, 27, 0.5);
81
+ border-bottom: 1px solid rgba(63, 63, 70, 0.35);
82
+ cursor: pointer;
83
+ transition: background-color 120ms ease;
84
+ }
85
+ .synth-header:hover { background: rgba(24, 24, 27, 0.7); }
86
+ .synth-header:active { background: rgba(24, 24, 27, 0.85); }
87
+ .synth-header-logo { width: 9px; height: 15px; object-fit: contain; flex-shrink: 0; }
88
+ .synth-header-name {
89
+ font-weight: 700;
90
+ font-size: 12.5px;
91
+ letter-spacing: -0.01em;
92
+ color: #f4f4f5;
93
+ }
94
+ .synth-version-tag {
95
+ display: inline-flex;
96
+ align-items: center;
97
+ padding: 2px 8px;
98
+ border-radius: 999px;
99
+ background: var(--shell-accent-dim);
100
+ border: 1px solid var(--shell-accent);
101
+ font-size: 9px;
102
+ font-weight: 700;
103
+ color: var(--shell-accent);
104
+ letter-spacing: 0.3px;
105
+ text-transform: uppercase;
106
+ }
107
+ .synth-footer {
108
+ margin-top: auto;
109
+ background: rgba(24, 24, 27, 0.5);
110
+ border-top: 1px solid rgba(63, 63, 70, 0.35);
111
+ gap: 6px;
112
+ font-size: 10px;
113
+ letter-spacing: 0.04em;
114
+ text-transform: uppercase;
115
+ color: #71717a;
116
+ }
117
+ .synth-footer-label { color: #71717a; }
118
+ .synth-footer-link {
119
+ display: inline-flex;
120
+ align-items: center;
121
+ gap: 6px;
122
+ padding: 3px 8px;
123
+ border-radius: 999px;
124
+ text-decoration: none;
125
+ color: inherit;
126
+ cursor: pointer;
127
+ transition: background-color 120ms ease;
128
+ }
129
+ .synth-footer-link:hover { background: rgba(255, 255, 255, 0.06); }
130
+ .synth-footer-link:active { background: rgba(255, 255, 255, 0.10); }
131
+ .synth-footer-logo { width: 9px; height: 15px; object-fit: contain; }
132
+ .synth-footer-name {
133
+ color: #a1a1aa;
134
+ font-weight: 600;
135
+ text-transform: none;
136
+ letter-spacing: -0.005em;
137
+ font-size: 11px;
138
+ }
139
+ .synth-footer-link:hover .synth-footer-name { color: #f4f4f5; }
140
+ /* ─── End Synthetic shell ───────────────────────────────────────────── */
141
+
142
+ /* (Old .header / .version-tag / a.header-link rules removed — replaced
143
+ by the canonical .synth-header block above.) */
144
+
145
+ /* -- Hero: product title strip ----------------------------------------- */
146
+ .product {
147
+ display: flex;
148
+ align-items: center;
149
+ gap: 10px;
150
+ background: linear-gradient(135deg, rgba(88, 28, 135, 0.18), rgba(24, 24, 27, 0.2) 60%, rgba(24, 24, 27, 0.05));
151
+ border: 1px solid var(--accent-soft-border);
152
+ border-radius: 12px;
153
+ padding: 10px 12px;
154
+ margin-bottom: 14px;
155
+ }
156
+ .product .mark {
157
+ width: 30px; height: 30px;
158
+ border-radius: 8px;
159
+ background: var(--accent-soft-bg);
160
+ border: 1px solid var(--accent-soft-border);
161
+ display: flex; align-items: center; justify-content: center;
162
+ color: var(--accent);
163
+ flex-shrink: 0;
164
+ }
165
+ .product .mark svg { width: 16px; height: 16px; }
166
+ .product-text { min-width: 0; flex: 1; }
167
+ .product .title { font-weight: 700; font-size: 12.5px; line-height: 1.2; }
168
+ .product .sub { font-size: 10px; color: var(--text-dim); margin-top: 2px; }
169
+ /* Status dot inside the product block — grey by default, turns green
170
+ with a soft halo when the bridge is running (see main.js init). */
171
+ .product-status {
172
+ width: 8px;
173
+ height: 8px;
174
+ border-radius: 50%;
175
+ flex-shrink: 0;
176
+ background: var(--text-faint);
177
+ transition: background 120ms ease, box-shadow 120ms ease;
178
+ }
179
+ .product-status.ok {
180
+ background: var(--ok);
181
+ box-shadow: 0 0 0 3px rgba(74, 222, 128, 0.15);
182
+ }
183
+ .product-status.warn {
184
+ background: var(--warn);
185
+ box-shadow: 0 0 0 3px rgba(251, 191, 36, 0.15);
186
+ }
187
+ .product-status.err {
188
+ background: var(--err);
189
+ box-shadow: 0 0 0 3px rgba(248, 113, 113, 0.15);
190
+ }
191
+
192
+ /* -- Status row -------------------------------------------------------- */
193
+ .status-row {
194
+ display: flex;
195
+ align-items: center;
196
+ gap: 8px;
197
+ font-size: 11.5px;
198
+ color: var(--text-mute);
199
+ margin-bottom: 4px;
200
+ }
201
+ .status-dot {
202
+ width: 8px; height: 8px;
203
+ border-radius: 50%;
204
+ background: var(--text-faint);
205
+ box-shadow: 0 0 0 0 transparent;
206
+ flex-shrink: 0;
207
+ }
208
+ .status-dot.connected {
209
+ background: var(--ok);
210
+ box-shadow: 0 0 0 3px rgba(74, 222, 128, 0.15);
211
+ }
212
+ .status-dot.warning {
213
+ background: var(--warn);
214
+ box-shadow: 0 0 0 3px rgba(251, 191, 36, 0.15);
215
+ }
216
+ .status-dot.error {
217
+ background: var(--err);
218
+ box-shadow: 0 0 0 3px rgba(248, 113, 113, 0.15);
219
+ }
220
+ .status-dot.waiting {
221
+ background: var(--info);
222
+ box-shadow: 0 0 0 3px rgba(147, 197, 253, 0.15);
223
+ }
224
+ #statusText { color: var(--text); font-weight: 500; }
225
+
226
+ .meta {
227
+ font-size: 10.5px;
228
+ color: var(--text-dim);
229
+ margin: 8px 0 14px;
230
+ }
231
+ .meta strong { color: var(--text); font-weight: 600; }
232
+
233
+ /* -- Form -------------------------------------------------------------- */
234
+ label {
235
+ display: block;
236
+ font-size: 10px;
237
+ font-weight: 600;
238
+ letter-spacing: 0.04em;
239
+ text-transform: uppercase;
240
+ color: var(--text-dim);
241
+ margin: 12px 0 6px;
242
+ }
243
+ input[type="text"] {
244
+ width: 100%;
245
+ padding: 8px 10px;
246
+ background: var(--surface);
247
+ border: 1px solid var(--border);
248
+ color: var(--text);
249
+ border-radius: 8px;
250
+ font-size: 11.5px;
251
+ font-family: "Cascadia Code", "Fira Code", ui-monospace, monospace;
252
+ outline: none;
253
+ transition: border-color 120ms ease;
254
+ }
255
+ input[type="text"]:focus {
256
+ border-color: var(--accent);
257
+ background: var(--surface-2);
258
+ }
259
+
260
+ /* -- Buttons (Synthetic primary / secondary) --------------------------- */
261
+ .button-row {
262
+ display: flex;
263
+ gap: 6px;
264
+ margin-top: 12px;
265
+ }
266
+ button {
267
+ flex: 1;
268
+ padding: 8px 10px;
269
+ border: 1px solid transparent;
270
+ border-radius: 8px;
271
+ cursor: pointer;
272
+ font-size: 11.5px;
273
+ font-weight: 600;
274
+ font-family: inherit;
275
+ letter-spacing: -0.005em;
276
+ transition: background-color 120ms ease, border-color 120ms ease, color 120ms ease;
277
+ }
278
+ button:disabled { opacity: 0.4; cursor: not-allowed; }
279
+
280
+ /* Primary (Start) */
281
+ #btnStart {
282
+ background: var(--accent);
283
+ color: #fff;
284
+ }
285
+ #btnStart:hover:not(:disabled) { background: var(--accent-hover); }
286
+
287
+ /* Secondary (Stop, Save) */
288
+ #btnStop, button:not(#btnStart) {
289
+ background: var(--surface);
290
+ color: var(--text);
291
+ border-color: var(--border);
292
+ }
293
+ #btnStop:hover:not(:disabled),
294
+ button:not(#btnStart):hover:not(:disabled) {
295
+ background: var(--surface-2);
296
+ border-color: var(--text-faint);
297
+ }
298
+ #btnStop {
299
+ color: var(--err);
300
+ }
301
+
302
+ /* -- Terminal log ------------------------------------------------------ */
303
+ .log-label {
304
+ display: flex;
305
+ align-items: center;
306
+ justify-content: space-between;
307
+ margin: 14px 0 6px;
308
+ }
309
+ .log-label .l {
310
+ font-size: 10px;
311
+ font-weight: 600;
312
+ letter-spacing: 0.04em;
313
+ text-transform: uppercase;
314
+ color: var(--text-dim);
315
+ }
316
+ .log-label .r {
317
+ font-size: 10px;
318
+ color: var(--text-faint);
319
+ font-family: "Cascadia Code", ui-monospace, monospace;
320
+ }
321
+ #log {
322
+ background: rgba(0, 0, 0, 0.45);
323
+ border: 1px solid var(--border);
324
+ border-radius: 8px;
325
+ padding: 10px;
326
+ max-height: 180px;
327
+ overflow-y: auto;
328
+ font-family: "Cascadia Code", "Fira Code", ui-monospace, monospace;
329
+ font-size: 10.5px;
330
+ line-height: 1.65;
331
+ }
332
+ #log::-webkit-scrollbar { width: 8px; }
333
+ #log::-webkit-scrollbar-track { background: transparent; }
334
+ #log::-webkit-scrollbar-thumb { background: var(--border); border-radius: 4px; }
335
+ #log::-webkit-scrollbar-thumb:hover { background: var(--text-faint); }
336
+ .log-entry { color: var(--text-mute); }
337
+ .log-entry.cmd { color: var(--info); }
338
+ .log-entry.ok { color: var(--ok); }
339
+ .log-entry.err { color: var(--err); }
340
+
341
+ /* (Old .footer / .footer-link / .footer-label rules removed — replaced
342
+ by the canonical .synth-footer block above.) */
343
+ </style>
344
+ </head>
345
+ <body>
346
+ <!-- ── Synthetic shell header (canonical — DO NOT edit per-panel) ── -->
347
+ <a class="synth-header" data-href="https://synthetic.com.ar" href="#" title="Open synthetic.com.ar">
348
+ <img class="synth-header-logo" src="synthetic-logo.png" alt="Synthetic">
349
+ <span class="synth-header-name">Synthetic</span>
350
+ <span class="synth-version-tag">v1.1.1</span>
351
+ </a>
352
+
353
+ <div id="panel-content">
354
+
355
+ <!-- Product strip: Premiere MCP identity in the purple accent. Uses the
356
+ exact lucide Film glyph that the synthetic.com.ar /premiere-mcp page
357
+ renders in the brand strip, so the panel matches the website 1:1. -->
358
+ <div class="product">
359
+ <div class="mark">
360
+ <svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
361
+ <rect width="18" height="18" x="3" y="3" rx="2"></rect>
362
+ <path d="M7 3v18"></path>
363
+ <path d="M3 7.5h4"></path>
364
+ <path d="M3 12h18"></path>
365
+ <path d="M3 16.5h4"></path>
366
+ <path d="M17 3v18"></path>
367
+ <path d="M17 7.5h4"></path>
368
+ <path d="M17 16.5h4"></path>
369
+ </svg>
370
+ </div>
371
+ <div class="product-text">
372
+ <div class="title">Premiere Pro MCP</div>
373
+ <div class="sub">Bridge · 437 tools</div>
374
+ </div>
375
+ <!-- Status dot inside the product block — green = bridge running, grey
376
+ = stopped. Updated alongside #statusDot/#statusText from main.js. -->
377
+ <span id="productStatus" class="product-status" title="Panel ready"></span>
378
+ </div>
379
+
380
+ <!-- Status -->
381
+ <div class="status-row">
382
+ <div class="status-dot" id="statusDot"></div>
383
+ <span id="statusText">Stopped</span>
384
+ </div>
385
+ <div class="meta">Commands processed: <strong id="cmdCount">0</strong></div>
386
+
387
+ <!-- Temp dir field -->
388
+ <label for="tempDir">Temp directory</label>
389
+ <input type="text" id="tempDir" value="">
390
+
391
+ <!-- Controls -->
392
+ <div class="button-row">
393
+ <button id="btnStart" onclick="startBridge()">Start bridge</button>
394
+ <button id="btnStop" onclick="stopBridge()" disabled>Stop</button>
395
+ <button onclick="saveTempDir()">Save</button>
396
+ </div>
397
+
398
+ <!-- Log -->
399
+ <div class="log-label">
400
+ <span class="l">Activity log</span>
401
+ <span class="r">premiere-mcp-bridge</span>
402
+ </div>
403
+ <div id="log"></div>
404
+
405
+ </div><!-- /#panel-content -->
406
+
407
+ <!-- ── Synthetic shell footer (canonical — DO NOT edit per-panel) ── -->
408
+ <footer class="synth-footer">
409
+ <span class="synth-footer-label">Built by</span>
410
+ <a class="synth-footer-link" data-href="https://synthetic.com.ar" href="#" title="Open synthetic.com.ar">
411
+ <img class="synth-footer-logo" src="synthetic-logo.png" alt="Synthetic">
412
+ <span class="synth-footer-name">Synthetic</span>
413
+ </a>
414
+ </footer>
415
+
416
+ <script src="CSInterface.js"></script>
417
+ <script src="main.js"></script>
418
+ </body>
419
+ </html>