@synthetic-ai/premiere-mcp 2.1.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.
Files changed (58) hide show
  1. package/CHANGELOG.md +135 -123
  2. package/LICENSE +21 -21
  3. package/README.md +242 -242
  4. package/cep-plugin/.debug +8 -8
  5. package/cep-plugin/CSInterface.js +92 -92
  6. package/cep-plugin/host.jsx +7 -7
  7. package/cep-plugin/index.html +472 -472
  8. package/cep-plugin/main.js +6 -0
  9. package/cep-plugin/premiere.jsx +24947 -24947
  10. package/dist/bridge/script-builder.js +378 -378
  11. package/dist/index.js +103 -4
  12. package/dist/license.js +38 -0
  13. package/dist/server.js +60 -60
  14. package/dist/tools/advanced.js +357 -357
  15. package/dist/tools/audio-advanced.js +1049 -1049
  16. package/dist/tools/audio.js +42 -42
  17. package/dist/tools/captions.js +27 -27
  18. package/dist/tools/clipboard.js +214 -214
  19. package/dist/tools/color-advanced.js +253 -253
  20. package/dist/tools/discovery.js +291 -291
  21. package/dist/tools/effects.js +285 -285
  22. package/dist/tools/export-presets.js +206 -206
  23. package/dist/tools/export.js +255 -255
  24. package/dist/tools/health.js +10 -10
  25. package/dist/tools/inspection.js +885 -885
  26. package/dist/tools/keyframes.js +369 -369
  27. package/dist/tools/markers.js +89 -89
  28. package/dist/tools/media.js +178 -178
  29. package/dist/tools/metadata.js +94 -94
  30. package/dist/tools/multicam.js +50 -50
  31. package/dist/tools/playback.js +15 -15
  32. package/dist/tools/playhead.js +95 -95
  33. package/dist/tools/project-manager.js +21 -21
  34. package/dist/tools/project.js +149 -149
  35. package/dist/tools/scripting.js +319 -319
  36. package/dist/tools/selection.js +202 -202
  37. package/dist/tools/sequence-advanced.js +379 -379
  38. package/dist/tools/sequence-settings.js +564 -564
  39. package/dist/tools/sequence.js +167 -167
  40. package/dist/tools/source-monitor.js +68 -68
  41. package/dist/tools/text.js +58 -58
  42. package/dist/tools/timeline.js +312 -312
  43. package/dist/tools/track-management.js +446 -446
  44. package/dist/tools/track-targeting.js +635 -635
  45. package/dist/tools/tracks.js +87 -87
  46. package/dist/tools/transitions-motion.js +174 -174
  47. package/dist/tools/transitions.js +111 -111
  48. package/dist/tools/utility.js +606 -606
  49. package/dist/tools/workspace.js +29 -29
  50. package/package.json +66 -66
  51. package/scripts/build-chat-dmg.sh +210 -210
  52. package/scripts/build-chat-zip.sh +291 -291
  53. package/scripts/install-cep-windows.ps1 +99 -99
  54. package/scripts/install-cep.sh +66 -66
  55. package/scripts/install-chat-plugin.bat +67 -67
  56. package/scripts/install-chat-plugin.sh +85 -85
  57. package/scripts/install-windows.bat +95 -95
  58. package/scripts/package.mjs +254 -254
@@ -13,11 +13,11 @@ export function getColorAdvancedTools(bridgeOptions) {
13
13
  required: ["track_index", "clip_index"],
14
14
  },
15
15
  handler: async (args) => {
16
- const script = buildToolScript(`
17
- var result = lumetriGetAll(${args.track_index}, ${args.clip_index});
18
- var parsed = JSON.parse(result);
19
- if (!parsed.success) return __error(parsed.error);
20
- return __result(parsed.data);
16
+ const script = buildToolScript(`
17
+ var result = lumetriGetAll(${args.track_index}, ${args.clip_index});
18
+ var parsed = JSON.parse(result);
19
+ if (!parsed.success) return __error(parsed.error);
20
+ return __result(parsed.data);
21
21
  `);
22
22
  return sendCommand(script, bridgeOptions);
23
23
  },
@@ -34,11 +34,11 @@ export function getColorAdvancedTools(bridgeOptions) {
34
34
  required: ["track_index", "clip_index", "value"],
35
35
  },
36
36
  handler: async (args) => {
37
- const script = buildToolScript(`
38
- var result = lumetriSetExposure(${args.track_index}, ${args.clip_index}, ${args.value});
39
- var parsed = JSON.parse(result);
40
- if (!parsed.success) return __error(parsed.error);
41
- return __result(parsed.data);
37
+ const script = buildToolScript(`
38
+ var result = lumetriSetExposure(${args.track_index}, ${args.clip_index}, ${args.value});
39
+ var parsed = JSON.parse(result);
40
+ if (!parsed.success) return __error(parsed.error);
41
+ return __result(parsed.data);
42
42
  `);
43
43
  return sendCommand(script, bridgeOptions);
44
44
  },
@@ -55,11 +55,11 @@ export function getColorAdvancedTools(bridgeOptions) {
55
55
  required: ["track_index", "clip_index", "value"],
56
56
  },
57
57
  handler: async (args) => {
58
- const script = buildToolScript(`
59
- var result = lumetriSetContrast(${args.track_index}, ${args.clip_index}, ${args.value});
60
- var parsed = JSON.parse(result);
61
- if (!parsed.success) return __error(parsed.error);
62
- return __result(parsed.data);
58
+ const script = buildToolScript(`
59
+ var result = lumetriSetContrast(${args.track_index}, ${args.clip_index}, ${args.value});
60
+ var parsed = JSON.parse(result);
61
+ if (!parsed.success) return __error(parsed.error);
62
+ return __result(parsed.data);
63
63
  `);
64
64
  return sendCommand(script, bridgeOptions);
65
65
  },
@@ -76,11 +76,11 @@ export function getColorAdvancedTools(bridgeOptions) {
76
76
  required: ["track_index", "clip_index", "value"],
77
77
  },
78
78
  handler: async (args) => {
79
- const script = buildToolScript(`
80
- var result = lumetriSetHighlights(${args.track_index}, ${args.clip_index}, ${args.value});
81
- var parsed = JSON.parse(result);
82
- if (!parsed.success) return __error(parsed.error);
83
- return __result(parsed.data);
79
+ const script = buildToolScript(`
80
+ var result = lumetriSetHighlights(${args.track_index}, ${args.clip_index}, ${args.value});
81
+ var parsed = JSON.parse(result);
82
+ if (!parsed.success) return __error(parsed.error);
83
+ return __result(parsed.data);
84
84
  `);
85
85
  return sendCommand(script, bridgeOptions);
86
86
  },
@@ -97,11 +97,11 @@ export function getColorAdvancedTools(bridgeOptions) {
97
97
  required: ["track_index", "clip_index", "value"],
98
98
  },
99
99
  handler: async (args) => {
100
- const script = buildToolScript(`
101
- var result = lumetriSetShadows(${args.track_index}, ${args.clip_index}, ${args.value});
102
- var parsed = JSON.parse(result);
103
- if (!parsed.success) return __error(parsed.error);
104
- return __result(parsed.data);
100
+ const script = buildToolScript(`
101
+ var result = lumetriSetShadows(${args.track_index}, ${args.clip_index}, ${args.value});
102
+ var parsed = JSON.parse(result);
103
+ if (!parsed.success) return __error(parsed.error);
104
+ return __result(parsed.data);
105
105
  `);
106
106
  return sendCommand(script, bridgeOptions);
107
107
  },
@@ -118,11 +118,11 @@ export function getColorAdvancedTools(bridgeOptions) {
118
118
  required: ["track_index", "clip_index", "value"],
119
119
  },
120
120
  handler: async (args) => {
121
- const script = buildToolScript(`
122
- var result = lumetriSetWhites(${args.track_index}, ${args.clip_index}, ${args.value});
123
- var parsed = JSON.parse(result);
124
- if (!parsed.success) return __error(parsed.error);
125
- return __result(parsed.data);
121
+ const script = buildToolScript(`
122
+ var result = lumetriSetWhites(${args.track_index}, ${args.clip_index}, ${args.value});
123
+ var parsed = JSON.parse(result);
124
+ if (!parsed.success) return __error(parsed.error);
125
+ return __result(parsed.data);
126
126
  `);
127
127
  return sendCommand(script, bridgeOptions);
128
128
  },
@@ -139,11 +139,11 @@ export function getColorAdvancedTools(bridgeOptions) {
139
139
  required: ["track_index", "clip_index", "value"],
140
140
  },
141
141
  handler: async (args) => {
142
- const script = buildToolScript(`
143
- var result = lumetriSetBlacks(${args.track_index}, ${args.clip_index}, ${args.value});
144
- var parsed = JSON.parse(result);
145
- if (!parsed.success) return __error(parsed.error);
146
- return __result(parsed.data);
142
+ const script = buildToolScript(`
143
+ var result = lumetriSetBlacks(${args.track_index}, ${args.clip_index}, ${args.value});
144
+ var parsed = JSON.parse(result);
145
+ if (!parsed.success) return __error(parsed.error);
146
+ return __result(parsed.data);
147
147
  `);
148
148
  return sendCommand(script, bridgeOptions);
149
149
  },
@@ -160,11 +160,11 @@ export function getColorAdvancedTools(bridgeOptions) {
160
160
  required: ["track_index", "clip_index", "value"],
161
161
  },
162
162
  handler: async (args) => {
163
- const script = buildToolScript(`
164
- var result = lumetriSetTemperature(${args.track_index}, ${args.clip_index}, ${args.value});
165
- var parsed = JSON.parse(result);
166
- if (!parsed.success) return __error(parsed.error);
167
- return __result(parsed.data);
163
+ const script = buildToolScript(`
164
+ var result = lumetriSetTemperature(${args.track_index}, ${args.clip_index}, ${args.value});
165
+ var parsed = JSON.parse(result);
166
+ if (!parsed.success) return __error(parsed.error);
167
+ return __result(parsed.data);
168
168
  `);
169
169
  return sendCommand(script, bridgeOptions);
170
170
  },
@@ -181,11 +181,11 @@ export function getColorAdvancedTools(bridgeOptions) {
181
181
  required: ["track_index", "clip_index", "value"],
182
182
  },
183
183
  handler: async (args) => {
184
- const script = buildToolScript(`
185
- var result = lumetriSetTint(${args.track_index}, ${args.clip_index}, ${args.value});
186
- var parsed = JSON.parse(result);
187
- if (!parsed.success) return __error(parsed.error);
188
- return __result(parsed.data);
184
+ const script = buildToolScript(`
185
+ var result = lumetriSetTint(${args.track_index}, ${args.clip_index}, ${args.value});
186
+ var parsed = JSON.parse(result);
187
+ if (!parsed.success) return __error(parsed.error);
188
+ return __result(parsed.data);
189
189
  `);
190
190
  return sendCommand(script, bridgeOptions);
191
191
  },
@@ -202,11 +202,11 @@ export function getColorAdvancedTools(bridgeOptions) {
202
202
  required: ["track_index", "clip_index", "value"],
203
203
  },
204
204
  handler: async (args) => {
205
- const script = buildToolScript(`
206
- var result = lumetriSetSaturation(${args.track_index}, ${args.clip_index}, ${args.value});
207
- var parsed = JSON.parse(result);
208
- if (!parsed.success) return __error(parsed.error);
209
- return __result(parsed.data);
205
+ const script = buildToolScript(`
206
+ var result = lumetriSetSaturation(${args.track_index}, ${args.clip_index}, ${args.value});
207
+ var parsed = JSON.parse(result);
208
+ if (!parsed.success) return __error(parsed.error);
209
+ return __result(parsed.data);
210
210
  `);
211
211
  return sendCommand(script, bridgeOptions);
212
212
  },
@@ -223,11 +223,11 @@ export function getColorAdvancedTools(bridgeOptions) {
223
223
  required: ["track_index", "clip_index", "value"],
224
224
  },
225
225
  handler: async (args) => {
226
- const script = buildToolScript(`
227
- var result = lumetriSetVibrance(${args.track_index}, ${args.clip_index}, ${args.value});
228
- var parsed = JSON.parse(result);
229
- if (!parsed.success) return __error(parsed.error);
230
- return __result(parsed.data);
226
+ const script = buildToolScript(`
227
+ var result = lumetriSetVibrance(${args.track_index}, ${args.clip_index}, ${args.value});
228
+ var parsed = JSON.parse(result);
229
+ if (!parsed.success) return __error(parsed.error);
230
+ return __result(parsed.data);
231
231
  `);
232
232
  return sendCommand(script, bridgeOptions);
233
233
  },
@@ -244,11 +244,11 @@ export function getColorAdvancedTools(bridgeOptions) {
244
244
  required: ["track_index", "clip_index", "value"],
245
245
  },
246
246
  handler: async (args) => {
247
- const script = buildToolScript(`
248
- var result = lumetriSetFadedFilm(${args.track_index}, ${args.clip_index}, ${args.value});
249
- var parsed = JSON.parse(result);
250
- if (!parsed.success) return __error(parsed.error);
251
- return __result(parsed.data);
247
+ const script = buildToolScript(`
248
+ var result = lumetriSetFadedFilm(${args.track_index}, ${args.clip_index}, ${args.value});
249
+ var parsed = JSON.parse(result);
250
+ if (!parsed.success) return __error(parsed.error);
251
+ return __result(parsed.data);
252
252
  `);
253
253
  return sendCommand(script, bridgeOptions);
254
254
  },
@@ -265,11 +265,11 @@ export function getColorAdvancedTools(bridgeOptions) {
265
265
  required: ["track_index", "clip_index", "value"],
266
266
  },
267
267
  handler: async (args) => {
268
- const script = buildToolScript(`
269
- var result = lumetriSetSharpen(${args.track_index}, ${args.clip_index}, ${args.value});
270
- var parsed = JSON.parse(result);
271
- if (!parsed.success) return __error(parsed.error);
272
- return __result(parsed.data);
268
+ const script = buildToolScript(`
269
+ var result = lumetriSetSharpen(${args.track_index}, ${args.clip_index}, ${args.value});
270
+ var parsed = JSON.parse(result);
271
+ if (!parsed.success) return __error(parsed.error);
272
+ return __result(parsed.data);
273
273
  `);
274
274
  return sendCommand(script, bridgeOptions);
275
275
  },
@@ -289,56 +289,56 @@ export function getColorAdvancedTools(bridgeOptions) {
289
289
  },
290
290
  handler: async (args) => {
291
291
  const safeChannel = args.channel.replace(/"/g, '\\"');
292
- const script = buildToolScript(`
293
- var seq = app.project.activeSequence;
294
- if (!seq) return __error("No active sequence");
295
- var track = seq.videoTracks[${args.track_index}];
296
- if (!track || ${args.clip_index} >= track.clips.numItems) return __error("Track or clip not found");
297
- var clip = track.clips[${args.clip_index}];
298
- var lumetri = null;
299
- for (var i = 0; i < clip.components.numItems; i++) {
300
- if (clip.components[i].displayName === "Lumetri Color" || clip.components[i].matchName === "AE.ADBE Lumetri") {
301
- lumetri = clip.components[i]; break;
302
- }
303
- }
304
- if (!lumetri) {
305
- app.enableQE();
306
- clip.addVideoEffect(qe.project.getVideoEffectByName("Lumetri Color"));
307
- for (var i = 0; i < clip.components.numItems; i++) {
308
- if (clip.components[i].displayName === "Lumetri Color") { lumetri = clip.components[i]; break; }
309
- }
310
- if (!lumetri) return __error("Could not find or add Lumetri Color to clip");
311
- }
312
- var channelMap = { luma: "Luma Curve", red: "Red Curve", green: "Green Curve", blue: "Blue Curve" };
313
- var curvePropName = channelMap["${safeChannel}"] || "Luma Curve";
314
- var curveProp = null;
315
- for (var p = 0; p < lumetri.properties.numItems; p++) {
316
- var group = lumetri.properties[p];
317
- if (group.properties) {
318
- for (var sp = 0; sp < group.properties.numItems; sp++) {
319
- if (group.properties[sp].displayName === curvePropName) {
320
- curveProp = group.properties[sp]; break;
321
- }
322
- }
323
- }
324
- if (group.displayName === curvePropName) { curveProp = group; break; }
325
- if (curveProp) break;
326
- }
327
- if (!curveProp) return __error("Could not find curve property: " + curvePropName + ". Ensure Lumetri Color is applied.");
328
- var normIn = ${args.input_value} / 255;
329
- var normOut = ${args.output_value} / 255;
330
- try {
331
- var currentVal = curveProp.getValue(0, 0);
332
- if (Array.isArray(currentVal)) {
333
- currentVal.push(normIn, normOut);
334
- curveProp.setValue(currentVal, true);
335
- } else {
336
- curveProp.setValue([0, 0, normIn, normOut, 1, 1], true);
337
- }
338
- return __result({ set: true, channel: "${safeChannel}", input: ${args.input_value}, output: ${args.output_value}, normalized: { in: normIn, out: normOut } });
339
- } catch(e) {
340
- return __error("Could not set curve point: " + e.toString() + ". Try using lumetri_auto_color or setting curves manually.");
341
- }
292
+ const script = buildToolScript(`
293
+ var seq = app.project.activeSequence;
294
+ if (!seq) return __error("No active sequence");
295
+ var track = seq.videoTracks[${args.track_index}];
296
+ if (!track || ${args.clip_index} >= track.clips.numItems) return __error("Track or clip not found");
297
+ var clip = track.clips[${args.clip_index}];
298
+ var lumetri = null;
299
+ for (var i = 0; i < clip.components.numItems; i++) {
300
+ if (clip.components[i].displayName === "Lumetri Color" || clip.components[i].matchName === "AE.ADBE Lumetri") {
301
+ lumetri = clip.components[i]; break;
302
+ }
303
+ }
304
+ if (!lumetri) {
305
+ app.enableQE();
306
+ clip.addVideoEffect(qe.project.getVideoEffectByName("Lumetri Color"));
307
+ for (var i = 0; i < clip.components.numItems; i++) {
308
+ if (clip.components[i].displayName === "Lumetri Color") { lumetri = clip.components[i]; break; }
309
+ }
310
+ if (!lumetri) return __error("Could not find or add Lumetri Color to clip");
311
+ }
312
+ var channelMap = { luma: "Luma Curve", red: "Red Curve", green: "Green Curve", blue: "Blue Curve" };
313
+ var curvePropName = channelMap["${safeChannel}"] || "Luma Curve";
314
+ var curveProp = null;
315
+ for (var p = 0; p < lumetri.properties.numItems; p++) {
316
+ var group = lumetri.properties[p];
317
+ if (group.properties) {
318
+ for (var sp = 0; sp < group.properties.numItems; sp++) {
319
+ if (group.properties[sp].displayName === curvePropName) {
320
+ curveProp = group.properties[sp]; break;
321
+ }
322
+ }
323
+ }
324
+ if (group.displayName === curvePropName) { curveProp = group; break; }
325
+ if (curveProp) break;
326
+ }
327
+ if (!curveProp) return __error("Could not find curve property: " + curvePropName + ". Ensure Lumetri Color is applied.");
328
+ var normIn = ${args.input_value} / 255;
329
+ var normOut = ${args.output_value} / 255;
330
+ try {
331
+ var currentVal = curveProp.getValue(0, 0);
332
+ if (Array.isArray(currentVal)) {
333
+ currentVal.push(normIn, normOut);
334
+ curveProp.setValue(currentVal, true);
335
+ } else {
336
+ curveProp.setValue([0, 0, normIn, normOut, 1, 1], true);
337
+ }
338
+ return __result({ set: true, channel: "${safeChannel}", input: ${args.input_value}, output: ${args.output_value}, normalized: { in: normIn, out: normOut } });
339
+ } catch(e) {
340
+ return __error("Could not set curve point: " + e.toString() + ". Try using lumetri_auto_color or setting curves manually.");
341
+ }
342
342
  `);
343
343
  return sendCommand(script, bridgeOptions);
344
344
  },
@@ -357,11 +357,11 @@ export function getColorAdvancedTools(bridgeOptions) {
357
357
  required: ["track_index", "clip_index", "hue", "saturation", "brightness"],
358
358
  },
359
359
  handler: async (args) => {
360
- const script = buildToolScript(`
361
- var result = lumetriSetShadowColor(${args.track_index}, ${args.clip_index}, ${args.hue}, ${args.saturation}, ${args.brightness});
362
- var parsed = JSON.parse(result);
363
- if (!parsed.success) return __error(parsed.error);
364
- return __result(parsed.data);
360
+ const script = buildToolScript(`
361
+ var result = lumetriSetShadowColor(${args.track_index}, ${args.clip_index}, ${args.hue}, ${args.saturation}, ${args.brightness});
362
+ var parsed = JSON.parse(result);
363
+ if (!parsed.success) return __error(parsed.error);
364
+ return __result(parsed.data);
365
365
  `);
366
366
  return sendCommand(script, bridgeOptions);
367
367
  },
@@ -380,11 +380,11 @@ export function getColorAdvancedTools(bridgeOptions) {
380
380
  required: ["track_index", "clip_index", "hue", "saturation", "brightness"],
381
381
  },
382
382
  handler: async (args) => {
383
- const script = buildToolScript(`
384
- var result = lumetriSetMidtoneColor(${args.track_index}, ${args.clip_index}, ${args.hue}, ${args.saturation}, ${args.brightness});
385
- var parsed = JSON.parse(result);
386
- if (!parsed.success) return __error(parsed.error);
387
- return __result(parsed.data);
383
+ const script = buildToolScript(`
384
+ var result = lumetriSetMidtoneColor(${args.track_index}, ${args.clip_index}, ${args.hue}, ${args.saturation}, ${args.brightness});
385
+ var parsed = JSON.parse(result);
386
+ if (!parsed.success) return __error(parsed.error);
387
+ return __result(parsed.data);
388
388
  `);
389
389
  return sendCommand(script, bridgeOptions);
390
390
  },
@@ -403,11 +403,11 @@ export function getColorAdvancedTools(bridgeOptions) {
403
403
  required: ["track_index", "clip_index", "hue", "saturation", "brightness"],
404
404
  },
405
405
  handler: async (args) => {
406
- const script = buildToolScript(`
407
- var result = lumetriSetHighlightColor(${args.track_index}, ${args.clip_index}, ${args.hue}, ${args.saturation}, ${args.brightness});
408
- var parsed = JSON.parse(result);
409
- if (!parsed.success) return __error(parsed.error);
410
- return __result(parsed.data);
406
+ const script = buildToolScript(`
407
+ var result = lumetriSetHighlightColor(${args.track_index}, ${args.clip_index}, ${args.hue}, ${args.saturation}, ${args.brightness});
408
+ var parsed = JSON.parse(result);
409
+ if (!parsed.success) return __error(parsed.error);
410
+ return __result(parsed.data);
411
411
  `);
412
412
  return sendCommand(script, bridgeOptions);
413
413
  },
@@ -424,11 +424,11 @@ export function getColorAdvancedTools(bridgeOptions) {
424
424
  required: ["track_index", "clip_index", "value"],
425
425
  },
426
426
  handler: async (args) => {
427
- const script = buildToolScript(`
428
- var result = lumetriSetVignetteAmount(${args.track_index}, ${args.clip_index}, ${args.value});
429
- var parsed = JSON.parse(result);
430
- if (!parsed.success) return __error(parsed.error);
431
- return __result(parsed.data);
427
+ const script = buildToolScript(`
428
+ var result = lumetriSetVignetteAmount(${args.track_index}, ${args.clip_index}, ${args.value});
429
+ var parsed = JSON.parse(result);
430
+ if (!parsed.success) return __error(parsed.error);
431
+ return __result(parsed.data);
432
432
  `);
433
433
  return sendCommand(script, bridgeOptions);
434
434
  },
@@ -445,11 +445,11 @@ export function getColorAdvancedTools(bridgeOptions) {
445
445
  required: ["track_index", "clip_index", "value"],
446
446
  },
447
447
  handler: async (args) => {
448
- const script = buildToolScript(`
449
- var result = lumetriSetVignetteMidpoint(${args.track_index}, ${args.clip_index}, ${args.value});
450
- var parsed = JSON.parse(result);
451
- if (!parsed.success) return __error(parsed.error);
452
- return __result(parsed.data);
448
+ const script = buildToolScript(`
449
+ var result = lumetriSetVignetteMidpoint(${args.track_index}, ${args.clip_index}, ${args.value});
450
+ var parsed = JSON.parse(result);
451
+ if (!parsed.success) return __error(parsed.error);
452
+ return __result(parsed.data);
453
453
  `);
454
454
  return sendCommand(script, bridgeOptions);
455
455
  },
@@ -466,11 +466,11 @@ export function getColorAdvancedTools(bridgeOptions) {
466
466
  required: ["track_index", "clip_index", "value"],
467
467
  },
468
468
  handler: async (args) => {
469
- const script = buildToolScript(`
470
- var result = lumetriSetVignetteRoundness(${args.track_index}, ${args.clip_index}, ${args.value});
471
- var parsed = JSON.parse(result);
472
- if (!parsed.success) return __error(parsed.error);
473
- return __result(parsed.data);
469
+ const script = buildToolScript(`
470
+ var result = lumetriSetVignetteRoundness(${args.track_index}, ${args.clip_index}, ${args.value});
471
+ var parsed = JSON.parse(result);
472
+ if (!parsed.success) return __error(parsed.error);
473
+ return __result(parsed.data);
474
474
  `);
475
475
  return sendCommand(script, bridgeOptions);
476
476
  },
@@ -487,11 +487,11 @@ export function getColorAdvancedTools(bridgeOptions) {
487
487
  required: ["track_index", "clip_index", "value"],
488
488
  },
489
489
  handler: async (args) => {
490
- const script = buildToolScript(`
491
- var result = lumetriSetVignetteFeather(${args.track_index}, ${args.clip_index}, ${args.value});
492
- var parsed = JSON.parse(result);
493
- if (!parsed.success) return __error(parsed.error);
494
- return __result(parsed.data);
490
+ const script = buildToolScript(`
491
+ var result = lumetriSetVignetteFeather(${args.track_index}, ${args.clip_index}, ${args.value});
492
+ var parsed = JSON.parse(result);
493
+ if (!parsed.success) return __error(parsed.error);
494
+ return __result(parsed.data);
495
495
  `);
496
496
  return sendCommand(script, bridgeOptions);
497
497
  },
@@ -509,11 +509,11 @@ export function getColorAdvancedTools(bridgeOptions) {
509
509
  },
510
510
  handler: async (args) => {
511
511
  const lutPathEsc = args.lut_path.replace(/\\/g, "\\\\").replace(/"/g, '\\"');
512
- const script = buildToolScript(`
513
- var result = lumetriApplyLUT(${args.track_index}, ${args.clip_index}, "${lutPathEsc}");
514
- var parsed = JSON.parse(result);
515
- if (!parsed.success) return __error(parsed.error);
516
- return __result(parsed.data);
512
+ const script = buildToolScript(`
513
+ var result = lumetriApplyLUT(${args.track_index}, ${args.clip_index}, "${lutPathEsc}");
514
+ var parsed = JSON.parse(result);
515
+ if (!parsed.success) return __error(parsed.error);
516
+ return __result(parsed.data);
517
517
  `);
518
518
  return sendCommand(script, bridgeOptions);
519
519
  },
@@ -529,11 +529,11 @@ export function getColorAdvancedTools(bridgeOptions) {
529
529
  required: ["track_index", "clip_index"],
530
530
  },
531
531
  handler: async (args) => {
532
- const script = buildToolScript(`
533
- var result = lumetriRemoveLUT(${args.track_index}, ${args.clip_index});
534
- var parsed = JSON.parse(result);
535
- if (!parsed.success) return __error(parsed.error);
536
- return __result(parsed.data);
532
+ const script = buildToolScript(`
533
+ var result = lumetriRemoveLUT(${args.track_index}, ${args.clip_index});
534
+ var parsed = JSON.parse(result);
535
+ if (!parsed.success) return __error(parsed.error);
536
+ return __result(parsed.data);
537
537
  `);
538
538
  return sendCommand(script, bridgeOptions);
539
539
  },
@@ -549,11 +549,11 @@ export function getColorAdvancedTools(bridgeOptions) {
549
549
  required: ["track_index", "clip_index"],
550
550
  },
551
551
  handler: async (args) => {
552
- const script = buildToolScript(`
553
- var result = lumetriAutoColor(${args.track_index}, ${args.clip_index});
554
- var parsed = JSON.parse(result);
555
- if (!parsed.success) return __error(parsed.error);
556
- return __result(parsed.data);
552
+ const script = buildToolScript(`
553
+ var result = lumetriAutoColor(${args.track_index}, ${args.clip_index});
554
+ var parsed = JSON.parse(result);
555
+ if (!parsed.success) return __error(parsed.error);
556
+ return __result(parsed.data);
557
557
  `);
558
558
  return sendCommand(script, bridgeOptions);
559
559
  },
@@ -569,11 +569,11 @@ export function getColorAdvancedTools(bridgeOptions) {
569
569
  required: ["track_index", "clip_index"],
570
570
  },
571
571
  handler: async (args) => {
572
- const script = buildToolScript(`
573
- var result = lumetriReset(${args.track_index}, ${args.clip_index});
574
- var parsed = JSON.parse(result);
575
- if (!parsed.success) return __error(parsed.error);
576
- return __result(parsed.data);
572
+ const script = buildToolScript(`
573
+ var result = lumetriReset(${args.track_index}, ${args.clip_index});
574
+ var parsed = JSON.parse(result);
575
+ if (!parsed.success) return __error(parsed.error);
576
+ return __result(parsed.data);
577
577
  `);
578
578
  return sendCommand(script, bridgeOptions);
579
579
  },
@@ -589,11 +589,11 @@ export function getColorAdvancedTools(bridgeOptions) {
589
589
  required: ["track_index", "clip_index"],
590
590
  },
591
591
  handler: async (args) => {
592
- const script = buildToolScript(`
593
- var result = lumetriAutoWhiteBalance(${args.track_index}, ${args.clip_index});
594
- var parsed = JSON.parse(result);
595
- if (!parsed.success) return __error(parsed.error);
596
- return __result(parsed.data);
592
+ const script = buildToolScript(`
593
+ var result = lumetriAutoWhiteBalance(${args.track_index}, ${args.clip_index});
594
+ var parsed = JSON.parse(result);
595
+ if (!parsed.success) return __error(parsed.error);
596
+ return __result(parsed.data);
597
597
  `);
598
598
  return sendCommand(script, bridgeOptions);
599
599
  },
@@ -609,11 +609,11 @@ export function getColorAdvancedTools(bridgeOptions) {
609
609
  required: ["track_index", "clip_index"],
610
610
  },
611
611
  handler: async (args) => {
612
- const script = buildToolScript(`
613
- var result = copyColorGrade(${args.track_index}, ${args.clip_index});
614
- var parsed = JSON.parse(result);
615
- if (!parsed.success) return __error(parsed.error);
616
- return __result(parsed.data);
612
+ const script = buildToolScript(`
613
+ var result = copyColorGrade(${args.track_index}, ${args.clip_index});
614
+ var parsed = JSON.parse(result);
615
+ if (!parsed.success) return __error(parsed.error);
616
+ return __result(parsed.data);
617
617
  `);
618
618
  return sendCommand(script, bridgeOptions);
619
619
  },
@@ -629,11 +629,11 @@ export function getColorAdvancedTools(bridgeOptions) {
629
629
  required: ["track_index", "clip_index"],
630
630
  },
631
631
  handler: async (args) => {
632
- const script = buildToolScript(`
633
- var result = pasteColorGrade(${args.track_index}, ${args.clip_index});
634
- var parsed = JSON.parse(result);
635
- if (!parsed.success) return __error(parsed.error);
636
- return __result(parsed.data);
632
+ const script = buildToolScript(`
633
+ var result = pasteColorGrade(${args.track_index}, ${args.clip_index});
634
+ var parsed = JSON.parse(result);
635
+ if (!parsed.success) return __error(parsed.error);
636
+ return __result(parsed.data);
637
637
  `);
638
638
  return sendCommand(script, bridgeOptions);
639
639
  },
@@ -650,11 +650,11 @@ export function getColorAdvancedTools(bridgeOptions) {
650
650
  required: ["src_track_index", "src_clip_index", "dest_track_index"],
651
651
  },
652
652
  handler: async (args) => {
653
- const script = buildToolScript(`
654
- var result = applyColorGradeToAll(${args.src_track_index}, ${args.src_clip_index}, ${args.dest_track_index});
655
- var parsed = JSON.parse(result);
656
- if (!parsed.success) return __error(parsed.error);
657
- return __result(parsed.data);
653
+ const script = buildToolScript(`
654
+ var result = applyColorGradeToAll(${args.src_track_index}, ${args.src_clip_index}, ${args.dest_track_index});
655
+ var parsed = JSON.parse(result);
656
+ if (!parsed.success) return __error(parsed.error);
657
+ return __result(parsed.data);
658
658
  `);
659
659
  return sendCommand(script, bridgeOptions);
660
660
  },
@@ -671,50 +671,50 @@ export function getColorAdvancedTools(bridgeOptions) {
671
671
  },
672
672
  handler: async (args) => {
673
673
  const lutPathEsc = args.lut_path.replace(/\\/g, "\\\\").replace(/"/g, '\\"');
674
- const script = buildToolScript(`
675
- var seq = app.project.activeSequence;
676
- if (!seq) return __error("No active sequence");
677
- var track = seq.videoTracks[${args.track_index}];
678
- if (!track) return __error("Video track not found at index ${args.track_index}");
679
- var lutPath = "${lutPathEsc}";
680
- var lutFile = new File(lutPath);
681
- if (!lutFile.exists) return __error("LUT file not found: " + lutPath);
682
- app.enableQE();
683
- var applied = 0;
684
- var errors = [];
685
- for (var c = 0; c < track.clips.numItems; c++) {
686
- var clip = track.clips[c];
687
- try {
688
- var lumetri = null;
689
- for (var i = 0; i < clip.components.numItems; i++) {
690
- if (clip.components[i].displayName === "Lumetri Color" || clip.components[i].matchName === "AE.ADBE Lumetri") {
691
- lumetri = clip.components[i]; break;
692
- }
693
- }
694
- if (!lumetri) {
695
- clip.addVideoEffect(qe.project.getVideoEffectByName("Lumetri Color"));
696
- for (var i = 0; i < clip.components.numItems; i++) {
697
- if (clip.components[i].displayName === "Lumetri Color") { lumetri = clip.components[i]; break; }
698
- }
699
- }
700
- if (!lumetri) { errors.push("Clip " + c + ": could not add Lumetri"); continue; }
701
- var lutProp = null;
702
- for (var p = 0; p < lumetri.properties.numItems; p++) {
703
- var grp = lumetri.properties[p];
704
- if (grp.properties) {
705
- for (var sp = 0; sp < grp.properties.numItems; sp++) {
706
- if (grp.properties[sp].displayName === "Input LUT" || grp.properties[sp].displayName === "Creative Look") {
707
- lutProp = grp.properties[sp]; break;
708
- }
709
- }
710
- }
711
- if (lutProp) break;
712
- }
713
- if (lutProp) { lutProp.setValue(lutPath, true); applied++; }
714
- else { errors.push("Clip " + c + ": LUT property not found"); }
715
- } catch(e) { errors.push("Clip " + c + ": " + e.toString()); }
716
- }
717
- return __result({ applied: applied, total: track.clips.numItems, errors: errors, lutPath: lutPath });
674
+ const script = buildToolScript(`
675
+ var seq = app.project.activeSequence;
676
+ if (!seq) return __error("No active sequence");
677
+ var track = seq.videoTracks[${args.track_index}];
678
+ if (!track) return __error("Video track not found at index ${args.track_index}");
679
+ var lutPath = "${lutPathEsc}";
680
+ var lutFile = new File(lutPath);
681
+ if (!lutFile.exists) return __error("LUT file not found: " + lutPath);
682
+ app.enableQE();
683
+ var applied = 0;
684
+ var errors = [];
685
+ for (var c = 0; c < track.clips.numItems; c++) {
686
+ var clip = track.clips[c];
687
+ try {
688
+ var lumetri = null;
689
+ for (var i = 0; i < clip.components.numItems; i++) {
690
+ if (clip.components[i].displayName === "Lumetri Color" || clip.components[i].matchName === "AE.ADBE Lumetri") {
691
+ lumetri = clip.components[i]; break;
692
+ }
693
+ }
694
+ if (!lumetri) {
695
+ clip.addVideoEffect(qe.project.getVideoEffectByName("Lumetri Color"));
696
+ for (var i = 0; i < clip.components.numItems; i++) {
697
+ if (clip.components[i].displayName === "Lumetri Color") { lumetri = clip.components[i]; break; }
698
+ }
699
+ }
700
+ if (!lumetri) { errors.push("Clip " + c + ": could not add Lumetri"); continue; }
701
+ var lutProp = null;
702
+ for (var p = 0; p < lumetri.properties.numItems; p++) {
703
+ var grp = lumetri.properties[p];
704
+ if (grp.properties) {
705
+ for (var sp = 0; sp < grp.properties.numItems; sp++) {
706
+ if (grp.properties[sp].displayName === "Input LUT" || grp.properties[sp].displayName === "Creative Look") {
707
+ lutProp = grp.properties[sp]; break;
708
+ }
709
+ }
710
+ }
711
+ if (lutProp) break;
712
+ }
713
+ if (lutProp) { lutProp.setValue(lutPath, true); applied++; }
714
+ else { errors.push("Clip " + c + ": LUT property not found"); }
715
+ } catch(e) { errors.push("Clip " + c + ": " + e.toString()); }
716
+ }
717
+ return __result({ applied: applied, total: track.clips.numItems, errors: errors, lutPath: lutPath });
718
718
  `);
719
719
  return sendCommand(script, bridgeOptions);
720
720
  },
@@ -729,20 +729,20 @@ export function getColorAdvancedTools(bridgeOptions) {
729
729
  required: ["track_index"],
730
730
  },
731
731
  handler: async (args) => {
732
- const script = buildToolScript(`
733
- var seq = app.project.activeSequence;
734
- if (!seq) return __error("No active sequence");
735
- var track = seq.videoTracks[${args.track_index}];
736
- if (!track) return __error("Video track not found at index ${args.track_index}");
737
- var count = 0;
738
- for (var c = 0; c < track.clips.numItems; c++) {
739
- var clip = track.clips[c];
740
- var lumetri = __findIntrinsic(clip, "lumetri");
741
- if (lumetri) {
742
- try { lumetri.remove(); count++; } catch(e) {}
743
- }
744
- }
745
- return __result({ reset: count, total: track.clips.numItems });
732
+ const script = buildToolScript(`
733
+ var seq = app.project.activeSequence;
734
+ if (!seq) return __error("No active sequence");
735
+ var track = seq.videoTracks[${args.track_index}];
736
+ if (!track) return __error("Video track not found at index ${args.track_index}");
737
+ var count = 0;
738
+ for (var c = 0; c < track.clips.numItems; c++) {
739
+ var clip = track.clips[c];
740
+ var lumetri = __findIntrinsic(clip, "lumetri");
741
+ if (lumetri) {
742
+ try { lumetri.remove(); count++; } catch(e) {}
743
+ }
744
+ }
745
+ return __result({ reset: count, total: track.clips.numItems });
746
746
  `);
747
747
  return sendCommand(script, bridgeOptions);
748
748
  },
@@ -758,11 +758,11 @@ export function getColorAdvancedTools(bridgeOptions) {
758
758
  required: ["track_index", "clip_index"],
759
759
  },
760
760
  handler: async (args) => {
761
- const script = buildToolScript(`
762
- var result = getColorInfo(${args.track_index}, ${args.clip_index});
763
- var parsed = JSON.parse(result);
764
- if (!parsed.success) return __error(parsed.error);
765
- return __result(parsed.data);
761
+ const script = buildToolScript(`
762
+ var result = getColorInfo(${args.track_index}, ${args.clip_index});
763
+ var parsed = JSON.parse(result);
764
+ if (!parsed.success) return __error(parsed.error);
765
+ return __result(parsed.data);
766
766
  `);
767
767
  return sendCommand(script, bridgeOptions);
768
768
  },