@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.
Files changed (57) hide show
  1. package/CHANGELOG.md +135 -135
  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/license.js +38 -0
  12. package/dist/server.js +60 -60
  13. package/dist/tools/advanced.js +357 -357
  14. package/dist/tools/audio-advanced.js +1049 -1049
  15. package/dist/tools/audio.js +42 -42
  16. package/dist/tools/captions.js +27 -27
  17. package/dist/tools/clipboard.js +214 -214
  18. package/dist/tools/color-advanced.js +253 -253
  19. package/dist/tools/discovery.js +291 -291
  20. package/dist/tools/effects.js +285 -285
  21. package/dist/tools/export-presets.js +206 -206
  22. package/dist/tools/export.js +255 -255
  23. package/dist/tools/health.js +10 -10
  24. package/dist/tools/inspection.js +885 -885
  25. package/dist/tools/keyframes.js +369 -369
  26. package/dist/tools/markers.js +89 -89
  27. package/dist/tools/media.js +178 -178
  28. package/dist/tools/metadata.js +94 -94
  29. package/dist/tools/multicam.js +50 -50
  30. package/dist/tools/playback.js +15 -15
  31. package/dist/tools/playhead.js +95 -95
  32. package/dist/tools/project-manager.js +21 -21
  33. package/dist/tools/project.js +149 -149
  34. package/dist/tools/scripting.js +319 -319
  35. package/dist/tools/selection.js +202 -202
  36. package/dist/tools/sequence-advanced.js +379 -379
  37. package/dist/tools/sequence-settings.js +564 -564
  38. package/dist/tools/sequence.js +167 -167
  39. package/dist/tools/source-monitor.js +68 -68
  40. package/dist/tools/text.js +58 -58
  41. package/dist/tools/timeline.js +312 -312
  42. package/dist/tools/track-management.js +446 -446
  43. package/dist/tools/track-targeting.js +635 -635
  44. package/dist/tools/tracks.js +87 -87
  45. package/dist/tools/transitions-motion.js +174 -174
  46. package/dist/tools/transitions.js +111 -111
  47. package/dist/tools/utility.js +606 -606
  48. package/dist/tools/workspace.js +29 -29
  49. package/package.json +66 -66
  50. package/scripts/build-chat-dmg.sh +210 -210
  51. package/scripts/build-chat-zip.sh +291 -291
  52. package/scripts/install-cep-windows.ps1 +99 -99
  53. package/scripts/install-cep.sh +66 -66
  54. package/scripts/install-chat-plugin.bat +67 -67
  55. package/scripts/install-chat-plugin.sh +85 -85
  56. package/scripts/install-windows.bat +95 -95
  57. package/scripts/package.mjs +254 -254
@@ -15,29 +15,29 @@ export function getMetadataTools(bridgeOptions) {
15
15
  required: ["item_id"],
16
16
  },
17
17
  handler: async (args) => {
18
- const script = buildToolScript(`
19
- var item = __findProjectItem("${escapeForExtendScript(args.item_id)}");
20
- if (!item) return __error("Item not found");
21
-
22
- var metadata = {};
23
- try {
24
- var xmpBlob = item.getProjectMetadata();
25
- metadata.projectMetadata = xmpBlob;
26
- } catch(e) {}
27
-
28
- try {
29
- var xmpBlob2 = item.getXMPMetadata();
30
- metadata.xmpMetadata = xmpBlob2;
31
- } catch(e) {}
32
-
33
- metadata.name = item.name;
34
- metadata.nodeId = item.nodeId;
35
-
36
- try {
37
- metadata.mediaPath = item.getMediaPath();
38
- } catch(e) {}
39
-
40
- return __result(metadata);
18
+ const script = buildToolScript(`
19
+ var item = __findProjectItem("${escapeForExtendScript(args.item_id)}");
20
+ if (!item) return __error("Item not found");
21
+
22
+ var metadata = {};
23
+ try {
24
+ var xmpBlob = item.getProjectMetadata();
25
+ metadata.projectMetadata = xmpBlob;
26
+ } catch(e) {}
27
+
28
+ try {
29
+ var xmpBlob2 = item.getXMPMetadata();
30
+ metadata.xmpMetadata = xmpBlob2;
31
+ } catch(e) {}
32
+
33
+ metadata.name = item.name;
34
+ metadata.nodeId = item.nodeId;
35
+
36
+ try {
37
+ metadata.mediaPath = item.getMediaPath();
38
+ } catch(e) {}
39
+
40
+ return __result(metadata);
41
41
  `);
42
42
  return sendCommand(script, bridgeOptions);
43
43
  },
@@ -63,13 +63,13 @@ export function getMetadataTools(bridgeOptions) {
63
63
  required: ["item_id", "field_name", "value"],
64
64
  },
65
65
  handler: async (args) => {
66
- const script = buildToolScript(`
67
- var item = __findProjectItem("${escapeForExtendScript(args.item_id)}");
68
- if (!item) return __error("Item not found");
69
-
70
- item.setProjectMetadata("${escapeForExtendScript(args.value)}", "${escapeForExtendScript(args.field_name)}");
71
-
72
- return __result({ updated: true, item: item.name, field: "${escapeForExtendScript(args.field_name)}" });
66
+ const script = buildToolScript(`
67
+ var item = __findProjectItem("${escapeForExtendScript(args.item_id)}");
68
+ if (!item) return __error("Item not found");
69
+
70
+ item.setProjectMetadata("${escapeForExtendScript(args.value)}", "${escapeForExtendScript(args.field_name)}");
71
+
72
+ return __result({ updated: true, item: item.name, field: "${escapeForExtendScript(args.field_name)}" });
73
73
  `);
74
74
  return sendCommand(script, bridgeOptions);
75
75
  },
@@ -91,13 +91,13 @@ export function getMetadataTools(bridgeOptions) {
91
91
  required: ["item_id", "color_index"],
92
92
  },
93
93
  handler: async (args) => {
94
- const script = buildToolScript(`
95
- // Accept both project item IDs/names AND timeline clip nodeIds.
96
- var item = __resolveProjectItemOrTimelineClip("${escapeForExtendScript(args.item_id)}");
97
- if (!item) return __error("Item not found in project tree or timeline: ${escapeForExtendScript(args.item_id)}");
98
-
99
- item.setColorLabel(${args.color_index});
100
- return __result({ updated: true, item: item.name, colorIndex: ${args.color_index} });
94
+ const script = buildToolScript(`
95
+ // Accept both project item IDs/names AND timeline clip nodeIds.
96
+ var item = __resolveProjectItemOrTimelineClip("${escapeForExtendScript(args.item_id)}");
97
+ if (!item) return __error("Item not found in project tree or timeline: ${escapeForExtendScript(args.item_id)}");
98
+
99
+ item.setColorLabel(${args.color_index});
100
+ return __result({ updated: true, item: item.name, colorIndex: ${args.color_index} });
101
101
  `);
102
102
  return sendCommand(script, bridgeOptions);
103
103
  },
@@ -115,12 +115,12 @@ export function getMetadataTools(bridgeOptions) {
115
115
  required: ["item_id"],
116
116
  },
117
117
  handler: async (args) => {
118
- const script = buildToolScript(`
119
- var item = __findProjectItem("${escapeForExtendScript(args.item_id)}");
120
- if (!item) return __error("Item not found");
121
-
122
- var colorIndex = item.getColorLabel();
123
- return __result({ item: item.name, colorIndex: colorIndex });
118
+ const script = buildToolScript(`
119
+ var item = __findProjectItem("${escapeForExtendScript(args.item_id)}");
120
+ if (!item) return __error("Item not found");
121
+
122
+ var colorIndex = item.getColorLabel();
123
+ return __result({ item: item.name, colorIndex: colorIndex });
124
124
  `);
125
125
  return sendCommand(script, bridgeOptions);
126
126
  },
@@ -138,22 +138,22 @@ export function getMetadataTools(bridgeOptions) {
138
138
  required: ["item_id"],
139
139
  },
140
140
  handler: async (args) => {
141
- const script = buildToolScript(`
142
- var item = __findProjectItem("${escapeForExtendScript(args.item_id)}");
143
- if (!item) return __error("Item not found");
144
-
145
- var interp = item.getFootageInterpretation();
146
- if (!interp) return __error("No footage interpretation available");
147
-
148
- return __result({
149
- item: item.name,
150
- alphaUsage: interp.alphaUsage,
151
- fieldType: interp.fieldType,
152
- frameRate: interp.frameRate,
153
- ignoreAlpha: interp.ignoreAlpha,
154
- invertAlpha: interp.invertAlpha,
155
- pixelAspectRatio: interp.pixelAspectRatio
156
- });
141
+ const script = buildToolScript(`
142
+ var item = __findProjectItem("${escapeForExtendScript(args.item_id)}");
143
+ if (!item) return __error("Item not found");
144
+
145
+ var interp = item.getFootageInterpretation();
146
+ if (!interp) return __error("No footage interpretation available");
147
+
148
+ return __result({
149
+ item: item.name,
150
+ alphaUsage: interp.alphaUsage,
151
+ fieldType: interp.fieldType,
152
+ frameRate: interp.frameRate,
153
+ ignoreAlpha: interp.ignoreAlpha,
154
+ invertAlpha: interp.invertAlpha,
155
+ pixelAspectRatio: interp.pixelAspectRatio
156
+ });
157
157
  `);
158
158
  return sendCommand(script, bridgeOptions);
159
159
  },
@@ -179,18 +179,18 @@ export function getMetadataTools(bridgeOptions) {
179
179
  required: ["item_id"],
180
180
  },
181
181
  handler: async (args) => {
182
- const script = buildToolScript(`
183
- var item = __findProjectItem("${escapeForExtendScript(args.item_id)}");
184
- if (!item) return __error("Item not found");
185
-
186
- var interp = item.getFootageInterpretation();
187
- if (!interp) return __error("No footage interpretation available");
188
-
189
- ${args.frame_rate !== undefined ? `interp.frameRate = ${args.frame_rate};` : ""}
190
- ${args.pixel_aspect_ratio !== undefined ? `interp.pixelAspectRatio = ${args.pixel_aspect_ratio};` : ""}
191
-
192
- item.setFootageInterpretation(interp);
193
- return __result({ updated: true, item: item.name });
182
+ const script = buildToolScript(`
183
+ var item = __findProjectItem("${escapeForExtendScript(args.item_id)}");
184
+ if (!item) return __error("Item not found");
185
+
186
+ var interp = item.getFootageInterpretation();
187
+ if (!interp) return __error("No footage interpretation available");
188
+
189
+ ${args.frame_rate !== undefined ? `interp.frameRate = ${args.frame_rate};` : ""}
190
+ ${args.pixel_aspect_ratio !== undefined ? `interp.pixelAspectRatio = ${args.pixel_aspect_ratio};` : ""}
191
+
192
+ item.setFootageInterpretation(interp);
193
+ return __result({ updated: true, item: item.name });
194
194
  `);
195
195
  return sendCommand(script, bridgeOptions);
196
196
  },
@@ -208,12 +208,12 @@ export function getMetadataTools(bridgeOptions) {
208
208
  required: ["item_id"],
209
209
  },
210
210
  handler: async (args) => {
211
- const script = buildToolScript(`
212
- var item = __findProjectItem("${escapeForExtendScript(args.item_id)}");
213
- if (!item) return __error("Item not found");
214
-
215
- var xmp = item.getXMPMetadata();
216
- return __result({ item: item.name, xmpMetadata: xmp });
211
+ const script = buildToolScript(`
212
+ var item = __findProjectItem("${escapeForExtendScript(args.item_id)}");
213
+ if (!item) return __error("Item not found");
214
+
215
+ var xmp = item.getXMPMetadata();
216
+ return __result({ item: item.name, xmpMetadata: xmp });
217
217
  `);
218
218
  return sendCommand(script, bridgeOptions);
219
219
  },
@@ -235,12 +235,12 @@ export function getMetadataTools(bridgeOptions) {
235
235
  required: ["item_id", "xmp_xml"],
236
236
  },
237
237
  handler: async (args) => {
238
- const script = buildToolScript(`
239
- var item = __findProjectItem("${escapeForExtendScript(args.item_id)}");
240
- if (!item) return __error("Item not found");
241
-
242
- item.setXMPMetadata("${escapeForExtendScript(args.xmp_xml)}");
243
- return __result({ updated: true, item: item.name });
238
+ const script = buildToolScript(`
239
+ var item = __findProjectItem("${escapeForExtendScript(args.item_id)}");
240
+ if (!item) return __error("Item not found");
241
+
242
+ item.setXMPMetadata("${escapeForExtendScript(args.xmp_xml)}");
243
+ return __result({ updated: true, item: item.name });
244
244
  `);
245
245
  return sendCommand(script, bridgeOptions);
246
246
  },
@@ -258,17 +258,17 @@ export function getMetadataTools(bridgeOptions) {
258
258
  required: ["item_id"],
259
259
  },
260
260
  handler: async (args) => {
261
- const script = buildToolScript(`
262
- var item = __findProjectItem("${escapeForExtendScript(args.item_id)}");
263
- if (!item) return __error("Item not found");
264
-
265
- var info = { item: item.name };
266
- try { info.colorSpace = item.getColorSpace(); } catch(e) { info.colorSpace = "unknown"; }
267
- try { info.originalColorSpace = item.getOriginalColorSpace(); } catch(e) {}
268
- try { info.embeddedLUT = item.getEmbeddedLUTID(); } catch(e) {}
269
- try { info.inputLUT = item.getInputLUTID(); } catch(e) {}
270
-
271
- return __result(info);
261
+ const script = buildToolScript(`
262
+ var item = __findProjectItem("${escapeForExtendScript(args.item_id)}");
263
+ if (!item) return __error("Item not found");
264
+
265
+ var info = { item: item.name };
266
+ try { info.colorSpace = item.getColorSpace(); } catch(e) { info.colorSpace = "unknown"; }
267
+ try { info.originalColorSpace = item.getOriginalColorSpace(); } catch(e) {}
268
+ try { info.embeddedLUT = item.getEmbeddedLUTID(); } catch(e) {}
269
+ try { info.inputLUT = item.getInputLUTID(); } catch(e) {}
270
+
271
+ return __result(info);
272
272
  `);
273
273
  return sendCommand(script, bridgeOptions);
274
274
  },
@@ -20,11 +20,11 @@ export function getMulticamTools(bridgeOptions) {
20
20
  syncPoint: args.sync_point || "inPoint",
21
21
  };
22
22
  const paramsJson = JSON.stringify(JSON.stringify(params));
23
- const script = buildToolScript(`
24
- var result = createMulticamSequence(${paramsJson});
25
- var parsed = JSON.parse(result);
26
- if (!parsed.success) return __error(parsed.error);
27
- return __result(parsed.data);
23
+ const script = buildToolScript(`
24
+ var result = createMulticamSequence(${paramsJson});
25
+ var parsed = JSON.parse(result);
26
+ if (!parsed.success) return __error(parsed.error);
27
+ return __result(parsed.data);
28
28
  `);
29
29
  return sendCommand(script, bridgeOptions);
30
30
  },
@@ -41,11 +41,11 @@ export function getMulticamTools(bridgeOptions) {
41
41
  required: ["track_index", "time", "angle_index"],
42
42
  },
43
43
  handler: async (args) => {
44
- const script = buildToolScript(`
45
- var result = switchMulticamAngle(${args.track_index}, ${args.time}, ${args.angle_index});
46
- var parsed = JSON.parse(result);
47
- if (!parsed.success) return __error(parsed.error);
48
- return __result(parsed.data);
44
+ const script = buildToolScript(`
45
+ var result = switchMulticamAngle(${args.track_index}, ${args.time}, ${args.angle_index});
46
+ var parsed = JSON.parse(result);
47
+ if (!parsed.success) return __error(parsed.error);
48
+ return __result(parsed.data);
49
49
  `);
50
50
  return sendCommand(script, bridgeOptions);
51
51
  },
@@ -60,11 +60,11 @@ export function getMulticamTools(bridgeOptions) {
60
60
  required: ["sequence_index"],
61
61
  },
62
62
  handler: async (args) => {
63
- const script = buildToolScript(`
64
- var result = flattenMulticam(${args.sequence_index});
65
- var parsed = JSON.parse(result);
66
- if (!parsed.success) return __error(parsed.error);
67
- return __result(parsed.data);
63
+ const script = buildToolScript(`
64
+ var result = flattenMulticam(${args.sequence_index});
65
+ var parsed = JSON.parse(result);
66
+ if (!parsed.success) return __error(parsed.error);
67
+ return __result(parsed.data);
68
68
  `);
69
69
  return sendCommand(script, bridgeOptions);
70
70
  },
@@ -80,11 +80,11 @@ export function getMulticamTools(bridgeOptions) {
80
80
  required: ["track_index", "clip_index"],
81
81
  },
82
82
  handler: async (args) => {
83
- const script = buildToolScript(`
84
- var result = getMulticamAngles(${args.track_index}, ${args.clip_index});
85
- var parsed = JSON.parse(result);
86
- if (!parsed.success) return __error(parsed.error);
87
- return __result(parsed.data);
83
+ const script = buildToolScript(`
84
+ var result = getMulticamAngles(${args.track_index}, ${args.clip_index});
85
+ var parsed = JSON.parse(result);
86
+ if (!parsed.success) return __error(parsed.error);
87
+ return __result(parsed.data);
88
88
  `);
89
89
  return sendCommand(script, bridgeOptions);
90
90
  },
@@ -101,11 +101,11 @@ export function getMulticamTools(bridgeOptions) {
101
101
  },
102
102
  handler: async (args) => {
103
103
  const presetPathEsc = args.preset_path.replace(/\\/g, "\\\\").replace(/"/g, '\\"');
104
- const script = buildToolScript(`
105
- var result = createProxy(${args.project_item_index}, "${presetPathEsc}");
106
- var parsed = JSON.parse(result);
107
- if (!parsed.success) return __error(parsed.error);
108
- return __result(parsed.data);
104
+ const script = buildToolScript(`
105
+ var result = createProxy(${args.project_item_index}, "${presetPathEsc}");
106
+ var parsed = JSON.parse(result);
107
+ if (!parsed.success) return __error(parsed.error);
108
+ return __result(parsed.data);
109
109
  `);
110
110
  return sendCommand(script, bridgeOptions);
111
111
  },
@@ -122,11 +122,11 @@ export function getMulticamTools(bridgeOptions) {
122
122
  },
123
123
  handler: async (args) => {
124
124
  const proxyPathEsc = args.proxy_path.replace(/\\/g, "\\\\").replace(/"/g, '\\"');
125
- const script = buildToolScript(`
126
- var result = attachProxy(${args.project_item_index}, "${proxyPathEsc}");
127
- var parsed = JSON.parse(result);
128
- if (!parsed.success) return __error(parsed.error);
129
- return __result(parsed.data);
125
+ const script = buildToolScript(`
126
+ var result = attachProxy(${args.project_item_index}, "${proxyPathEsc}");
127
+ var parsed = JSON.parse(result);
128
+ if (!parsed.success) return __error(parsed.error);
129
+ return __result(parsed.data);
130
130
  `);
131
131
  return sendCommand(script, bridgeOptions);
132
132
  },
@@ -141,11 +141,11 @@ export function getMulticamTools(bridgeOptions) {
141
141
  required: ["project_item_index"],
142
142
  },
143
143
  handler: async (args) => {
144
- const script = buildToolScript(`
145
- var result = hasProxy(${args.project_item_index});
146
- var parsed = JSON.parse(result);
147
- if (!parsed.success) return __error(parsed.error);
148
- return __result(parsed.data);
144
+ const script = buildToolScript(`
145
+ var result = hasProxy(${args.project_item_index});
146
+ var parsed = JSON.parse(result);
147
+ if (!parsed.success) return __error(parsed.error);
148
+ return __result(parsed.data);
149
149
  `);
150
150
  return sendCommand(script, bridgeOptions);
151
151
  },
@@ -160,11 +160,11 @@ export function getMulticamTools(bridgeOptions) {
160
160
  required: ["project_item_index"],
161
161
  },
162
162
  handler: async (args) => {
163
- const script = buildToolScript(`
164
- var result = getProxyPath(${args.project_item_index});
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 = getProxyPath(${args.project_item_index});
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
  },
@@ -179,11 +179,11 @@ export function getMulticamTools(bridgeOptions) {
179
179
  required: ["enabled"],
180
180
  },
181
181
  handler: async (args) => {
182
- const script = buildToolScript(`
183
- var result = toggleProxies(${args.enabled});
184
- var parsed = JSON.parse(result);
185
- if (!parsed.success) return __error(parsed.error);
186
- return __result(parsed.data);
182
+ const script = buildToolScript(`
183
+ var result = toggleProxies(${args.enabled});
184
+ var parsed = JSON.parse(result);
185
+ if (!parsed.success) return __error(parsed.error);
186
+ return __result(parsed.data);
187
187
  `);
188
188
  return sendCommand(script, bridgeOptions);
189
189
  },
@@ -198,11 +198,11 @@ export function getMulticamTools(bridgeOptions) {
198
198
  required: ["project_item_index"],
199
199
  },
200
200
  handler: async (args) => {
201
- const script = buildToolScript(`
202
- var result = detachProxy(${args.project_item_index});
203
- var parsed = JSON.parse(result);
204
- if (!parsed.success) return __error(parsed.error);
205
- return __result(parsed.data);
201
+ const script = buildToolScript(`
202
+ var result = detachProxy(${args.project_item_index});
203
+ var parsed = JSON.parse(result);
204
+ if (!parsed.success) return __error(parsed.error);
205
+ return __result(parsed.data);
206
206
  `);
207
207
  return sendCommand(script, bridgeOptions);
208
208
  },
@@ -6,10 +6,10 @@ export function getPlaybackTools(bridgeOptions) {
6
6
  description: "Start playback of the active sequence timeline. Uses QE DOM.",
7
7
  parameters: {},
8
8
  handler: async () => {
9
- const script = buildToolScript(`
10
- app.enableQE();
11
- qe.startPlayback();
12
- return __result({ playing: true });
9
+ const script = buildToolScript(`
10
+ app.enableQE();
11
+ qe.startPlayback();
12
+ return __result({ playing: true });
13
13
  `);
14
14
  return sendCommand(script, bridgeOptions);
15
15
  },
@@ -18,10 +18,10 @@ export function getPlaybackTools(bridgeOptions) {
18
18
  description: "Stop playback of the active sequence timeline. Uses QE DOM.",
19
19
  parameters: {},
20
20
  handler: async () => {
21
- const script = buildToolScript(`
22
- app.enableQE();
23
- qe.stopPlayback();
24
- return __result({ stopped: true });
21
+ const script = buildToolScript(`
22
+ app.enableQE();
23
+ qe.stopPlayback();
24
+ return __result({ stopped: true });
25
25
  `);
26
26
  return sendCommand(script, bridgeOptions);
27
27
  },
@@ -39,9 +39,9 @@ export function getPlaybackTools(bridgeOptions) {
39
39
  },
40
40
  handler: async (args) => {
41
41
  const speed = args.speed ?? 1.0;
42
- const script = buildToolScript(`
43
- app.sourceMonitor.play(${speed});
44
- return __result({ playing: true, speed: ${speed} });
42
+ const script = buildToolScript(`
43
+ app.sourceMonitor.play(${speed});
44
+ return __result({ playing: true, speed: ${speed} });
45
45
  `);
46
46
  return sendCommand(script, bridgeOptions);
47
47
  },
@@ -50,10 +50,10 @@ export function getPlaybackTools(bridgeOptions) {
50
50
  description: "Get the current time indicator position in the Source Monitor",
51
51
  parameters: {},
52
52
  handler: async () => {
53
- const script = buildToolScript(`
54
- var pos = app.sourceMonitor.getPosition();
55
- if (!pos) return __error("No clip open in Source Monitor");
56
- return __result({ seconds: __ticksToSeconds(pos.ticks), ticks: pos.ticks });
53
+ const script = buildToolScript(`
54
+ var pos = app.sourceMonitor.getPosition();
55
+ if (!pos) return __error("No clip open in Source Monitor");
56
+ return __result({ seconds: __ticksToSeconds(pos.ticks), ticks: pos.ticks });
57
57
  `);
58
58
  return sendCommand(script, bridgeOptions);
59
59
  },