morpha-studio-sdk 0.1.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.
@@ -0,0 +1,1030 @@
1
+ import { z } from 'zod';
2
+
3
+ declare const imageLayerSchema: z.ZodObject<{
4
+ id: z.ZodString;
5
+ filename: z.ZodOptional<z.ZodString>;
6
+ name: z.ZodOptional<z.ZodString>;
7
+ x: z.ZodNumber;
8
+ y: z.ZodNumber;
9
+ width: z.ZodNumber;
10
+ height: z.ZodNumber;
11
+ rotation: z.ZodDefault<z.ZodNumber>;
12
+ pivotX: z.ZodDefault<z.ZodNumber>;
13
+ pivotY: z.ZodDefault<z.ZodNumber>;
14
+ fill: z.ZodDefault<z.ZodNullable<z.ZodDiscriminatedUnion<[z.ZodObject<{
15
+ type: z.ZodLiteral<"solid">;
16
+ color: z.ZodString;
17
+ opacity: z.ZodDefault<z.ZodNumber>;
18
+ }, z.core.$strict>, z.ZodObject<{
19
+ type: z.ZodLiteral<"linear">;
20
+ stops: z.ZodArray<z.ZodObject<{
21
+ pos: z.ZodNumber;
22
+ color: z.ZodString;
23
+ opacity: z.ZodDefault<z.ZodNumber>;
24
+ }, z.core.$strict>>;
25
+ angle: z.ZodDefault<z.ZodNumber>;
26
+ }, z.core.$strict>, z.ZodObject<{
27
+ type: z.ZodLiteral<"radial">;
28
+ stops: z.ZodArray<z.ZodObject<{
29
+ pos: z.ZodNumber;
30
+ color: z.ZodString;
31
+ opacity: z.ZodDefault<z.ZodNumber>;
32
+ }, z.core.$strict>>;
33
+ cx: z.ZodDefault<z.ZodNumber>;
34
+ cy: z.ZodDefault<z.ZodNumber>;
35
+ radius: z.ZodDefault<z.ZodNumber>;
36
+ }, z.core.$strict>, z.ZodObject<{
37
+ type: z.ZodLiteral<"mask">;
38
+ layer_id: z.ZodString;
39
+ color: z.ZodString;
40
+ opacity: z.ZodDefault<z.ZodNumber>;
41
+ }, z.core.$strict>], "type">>>;
42
+ pinned: z.ZodOptional<z.ZodBoolean>;
43
+ is_background: z.ZodOptional<z.ZodBoolean>;
44
+ locked: z.ZodOptional<z.ZodBoolean>;
45
+ hidden: z.ZodOptional<z.ZodBoolean>;
46
+ matte_source_id: z.ZodOptional<z.ZodNullable<z.ZodString>>;
47
+ text: z.ZodOptional<z.ZodString>;
48
+ text_size: z.ZodOptional<z.ZodNumber>;
49
+ font_family: z.ZodOptional<z.ZodString>;
50
+ text_color: z.ZodOptional<z.ZodString>;
51
+ line_height: z.ZodOptional<z.ZodNumber>;
52
+ letter_spacing: z.ZodOptional<z.ZodNumber>;
53
+ text_align: z.ZodOptional<z.ZodEnum<{
54
+ left: "left";
55
+ center: "center";
56
+ right: "right";
57
+ }>>;
58
+ line_beat_frames: z.ZodOptional<z.ZodNumber>;
59
+ spans: z.ZodOptional<z.ZodArray<z.ZodObject<{
60
+ start: z.ZodNumber;
61
+ end: z.ZodNumber;
62
+ bold: z.ZodOptional<z.ZodBoolean>;
63
+ italic: z.ZodOptional<z.ZodBoolean>;
64
+ color: z.ZodOptional<z.ZodString>;
65
+ }, z.core.$strict>>>;
66
+ color_label: z.ZodOptional<z.ZodEnum<{
67
+ red: "red";
68
+ orange: "orange";
69
+ yellow: "yellow";
70
+ green: "green";
71
+ cyan: "cyan";
72
+ blue: "blue";
73
+ violet: "violet";
74
+ magenta: "magenta";
75
+ }>>;
76
+ }, z.core.$strict>;
77
+ declare const videoLayerSchema: z.ZodObject<{
78
+ id: z.ZodString;
79
+ clip: z.ZodString;
80
+ name: z.ZodOptional<z.ZodString>;
81
+ x: z.ZodNumber;
82
+ y: z.ZodNumber;
83
+ width: z.ZodNumber;
84
+ height: z.ZodNumber;
85
+ rotation: z.ZodDefault<z.ZodNumber>;
86
+ pivotX: z.ZodDefault<z.ZodNumber>;
87
+ pivotY: z.ZodDefault<z.ZodNumber>;
88
+ source_in_frame: z.ZodDefault<z.ZodNumber>;
89
+ source_out_frame: z.ZodDefault<z.ZodNullable<z.ZodNumber>>;
90
+ timeline_start_frame: z.ZodDefault<z.ZodNumber>;
91
+ fill: z.ZodDefault<z.ZodNullable<z.ZodDiscriminatedUnion<[z.ZodObject<{
92
+ type: z.ZodLiteral<"solid">;
93
+ color: z.ZodString;
94
+ opacity: z.ZodDefault<z.ZodNumber>;
95
+ }, z.core.$strict>, z.ZodObject<{
96
+ type: z.ZodLiteral<"linear">;
97
+ stops: z.ZodArray<z.ZodObject<{
98
+ pos: z.ZodNumber;
99
+ color: z.ZodString;
100
+ opacity: z.ZodDefault<z.ZodNumber>;
101
+ }, z.core.$strict>>;
102
+ angle: z.ZodDefault<z.ZodNumber>;
103
+ }, z.core.$strict>, z.ZodObject<{
104
+ type: z.ZodLiteral<"radial">;
105
+ stops: z.ZodArray<z.ZodObject<{
106
+ pos: z.ZodNumber;
107
+ color: z.ZodString;
108
+ opacity: z.ZodDefault<z.ZodNumber>;
109
+ }, z.core.$strict>>;
110
+ cx: z.ZodDefault<z.ZodNumber>;
111
+ cy: z.ZodDefault<z.ZodNumber>;
112
+ radius: z.ZodDefault<z.ZodNumber>;
113
+ }, z.core.$strict>, z.ZodObject<{
114
+ type: z.ZodLiteral<"mask">;
115
+ layer_id: z.ZodString;
116
+ color: z.ZodString;
117
+ opacity: z.ZodDefault<z.ZodNumber>;
118
+ }, z.core.$strict>], "type">>>;
119
+ locked: z.ZodOptional<z.ZodBoolean>;
120
+ hidden: z.ZodOptional<z.ZodBoolean>;
121
+ matte_source_id: z.ZodOptional<z.ZodNullable<z.ZodString>>;
122
+ speed_keyframes: z.ZodOptional<z.ZodArray<z.ZodObject<{
123
+ frame: z.ZodNumber;
124
+ rate: z.ZodNumber;
125
+ }, z.core.$strict>>>;
126
+ color_label: z.ZodOptional<z.ZodEnum<{
127
+ red: "red";
128
+ orange: "orange";
129
+ yellow: "yellow";
130
+ green: "green";
131
+ cyan: "cyan";
132
+ blue: "blue";
133
+ violet: "violet";
134
+ magenta: "magenta";
135
+ }>>;
136
+ }, z.core.$strict>;
137
+ declare const textLayerSchema: z.ZodObject<{
138
+ id: z.ZodString;
139
+ text: z.ZodDefault<z.ZodString>;
140
+ name: z.ZodOptional<z.ZodString>;
141
+ x: z.ZodNumber;
142
+ y: z.ZodNumber;
143
+ width: z.ZodNumber;
144
+ height: z.ZodNumber;
145
+ rotation: z.ZodDefault<z.ZodNumber>;
146
+ pivotX: z.ZodDefault<z.ZodNumber>;
147
+ pivotY: z.ZodDefault<z.ZodNumber>;
148
+ font_family: z.ZodDefault<z.ZodString>;
149
+ text_size: z.ZodOptional<z.ZodNumber>;
150
+ text_autofit: z.ZodOptional<z.ZodEnum<{
151
+ shrink: "shrink";
152
+ wrap: "wrap";
153
+ }>>;
154
+ text_color: z.ZodOptional<z.ZodString>;
155
+ fill: z.ZodDefault<z.ZodNullable<z.ZodDiscriminatedUnion<[z.ZodObject<{
156
+ type: z.ZodLiteral<"solid">;
157
+ color: z.ZodString;
158
+ opacity: z.ZodDefault<z.ZodNumber>;
159
+ }, z.core.$strict>, z.ZodObject<{
160
+ type: z.ZodLiteral<"linear">;
161
+ stops: z.ZodArray<z.ZodObject<{
162
+ pos: z.ZodNumber;
163
+ color: z.ZodString;
164
+ opacity: z.ZodDefault<z.ZodNumber>;
165
+ }, z.core.$strict>>;
166
+ angle: z.ZodDefault<z.ZodNumber>;
167
+ }, z.core.$strict>, z.ZodObject<{
168
+ type: z.ZodLiteral<"radial">;
169
+ stops: z.ZodArray<z.ZodObject<{
170
+ pos: z.ZodNumber;
171
+ color: z.ZodString;
172
+ opacity: z.ZodDefault<z.ZodNumber>;
173
+ }, z.core.$strict>>;
174
+ cx: z.ZodDefault<z.ZodNumber>;
175
+ cy: z.ZodDefault<z.ZodNumber>;
176
+ radius: z.ZodDefault<z.ZodNumber>;
177
+ }, z.core.$strict>, z.ZodObject<{
178
+ type: z.ZodLiteral<"mask">;
179
+ layer_id: z.ZodString;
180
+ color: z.ZodString;
181
+ opacity: z.ZodDefault<z.ZodNumber>;
182
+ }, z.core.$strict>], "type">>>;
183
+ line_height: z.ZodOptional<z.ZodNumber>;
184
+ letter_spacing: z.ZodOptional<z.ZodNumber>;
185
+ text_align: z.ZodOptional<z.ZodEnum<{
186
+ left: "left";
187
+ center: "center";
188
+ right: "right";
189
+ }>>;
190
+ text_valign: z.ZodOptional<z.ZodEnum<{
191
+ top: "top";
192
+ middle: "middle";
193
+ bottom: "bottom";
194
+ }>>;
195
+ font_weight: z.ZodOptional<z.ZodNumber>;
196
+ font_style: z.ZodOptional<z.ZodEnum<{
197
+ italic: "italic";
198
+ normal: "normal";
199
+ }>>;
200
+ text_transform: z.ZodOptional<z.ZodEnum<{
201
+ none: "none";
202
+ uppercase: "uppercase";
203
+ lowercase: "lowercase";
204
+ }>>;
205
+ stroke_width: z.ZodOptional<z.ZodNumber>;
206
+ stroke_color: z.ZodOptional<z.ZodString>;
207
+ text_shadow: z.ZodOptional<z.ZodNullable<z.ZodObject<{
208
+ offsetX: z.ZodNumber;
209
+ offsetY: z.ZodNumber;
210
+ blur: z.ZodNumber;
211
+ color: z.ZodString;
212
+ }, z.core.$strip>>>;
213
+ matte_source_id: z.ZodOptional<z.ZodNullable<z.ZodString>>;
214
+ locked: z.ZodOptional<z.ZodBoolean>;
215
+ hidden: z.ZodOptional<z.ZodBoolean>;
216
+ color_label: z.ZodOptional<z.ZodEnum<{
217
+ red: "red";
218
+ orange: "orange";
219
+ yellow: "yellow";
220
+ green: "green";
221
+ cyan: "cyan";
222
+ blue: "blue";
223
+ violet: "violet";
224
+ magenta: "magenta";
225
+ }>>;
226
+ }, z.core.$strict>;
227
+ type TextLayer = z.infer<typeof textLayerSchema>;
228
+ declare const easingSchema: z.ZodEnum<{
229
+ linear: "linear";
230
+ easeIn: "easeIn";
231
+ easeOut: "easeOut";
232
+ easeInOut: "easeInOut";
233
+ outQuart: "outQuart";
234
+ outExpo: "outExpo";
235
+ outBack: "outBack";
236
+ inBack: "inBack";
237
+ inOutBack: "inOutBack";
238
+ cubicBezier: "cubicBezier";
239
+ hold: "hold";
240
+ }>;
241
+ declare const layerStyleSchema: z.ZodObject<{
242
+ borderRadius: z.ZodOptional<z.ZodNumber>;
243
+ borderWidth: z.ZodOptional<z.ZodNumber>;
244
+ borderColor: z.ZodOptional<z.ZodString>;
245
+ boxShadow: z.ZodOptional<z.ZodString>;
246
+ fit: z.ZodOptional<z.ZodEnum<{
247
+ cover: "cover";
248
+ contain: "contain";
249
+ stretch: "stretch";
250
+ }>>;
251
+ anchorX: z.ZodOptional<z.ZodNumber>;
252
+ anchorY: z.ZodOptional<z.ZodNumber>;
253
+ tintColor: z.ZodOptional<z.ZodString>;
254
+ tintStrength: z.ZodOptional<z.ZodNumber>;
255
+ alphaMask: z.ZodOptional<z.ZodObject<{
256
+ type: z.ZodDefault<z.ZodLiteral<"linear">>;
257
+ angle: z.ZodDefault<z.ZodNumber>;
258
+ stops: z.ZodArray<z.ZodObject<{
259
+ offset: z.ZodNumber;
260
+ alpha: z.ZodNumber;
261
+ }, z.core.$strict>>;
262
+ }, z.core.$strict>>;
263
+ flipX: z.ZodOptional<z.ZodBoolean>;
264
+ flipY: z.ZodOptional<z.ZodBoolean>;
265
+ blur: z.ZodOptional<z.ZodNumber>;
266
+ brightness: z.ZodOptional<z.ZodNumber>;
267
+ contrast: z.ZodOptional<z.ZodNumber>;
268
+ saturation: z.ZodOptional<z.ZodNumber>;
269
+ hueRotate: z.ZodOptional<z.ZodNumber>;
270
+ blend_mode: z.ZodOptional<z.ZodEnum<{
271
+ color: "color";
272
+ normal: "normal";
273
+ saturation: "saturation";
274
+ multiply: "multiply";
275
+ screen: "screen";
276
+ overlay: "overlay";
277
+ darken: "darken";
278
+ lighten: "lighten";
279
+ "color-dodge": "color-dodge";
280
+ "color-burn": "color-burn";
281
+ "hard-light": "hard-light";
282
+ "soft-light": "soft-light";
283
+ difference: "difference";
284
+ exclusion: "exclusion";
285
+ hue: "hue";
286
+ luminosity: "luminosity";
287
+ }>>;
288
+ chroma_key: z.ZodOptional<z.ZodObject<{
289
+ color: z.ZodDefault<z.ZodString>;
290
+ similarity: z.ZodDefault<z.ZodNumber>;
291
+ smoothness: z.ZodDefault<z.ZodNumber>;
292
+ }, z.core.$strip>>;
293
+ }, z.core.$strict>;
294
+ declare const projectSchema: z.ZodPipe<z.ZodTransform<unknown, unknown>, z.ZodObject<{
295
+ project_id: z.ZodString;
296
+ name: z.ZodOptional<z.ZodString>;
297
+ schema_version: z.ZodLiteral<2>;
298
+ image_layers: z.ZodDefault<z.ZodArray<z.ZodObject<{
299
+ id: z.ZodString;
300
+ filename: z.ZodOptional<z.ZodString>;
301
+ name: z.ZodOptional<z.ZodString>;
302
+ x: z.ZodNumber;
303
+ y: z.ZodNumber;
304
+ width: z.ZodNumber;
305
+ height: z.ZodNumber;
306
+ rotation: z.ZodDefault<z.ZodNumber>;
307
+ pivotX: z.ZodDefault<z.ZodNumber>;
308
+ pivotY: z.ZodDefault<z.ZodNumber>;
309
+ fill: z.ZodDefault<z.ZodNullable<z.ZodDiscriminatedUnion<[z.ZodObject<{
310
+ type: z.ZodLiteral<"solid">;
311
+ color: z.ZodString;
312
+ opacity: z.ZodDefault<z.ZodNumber>;
313
+ }, z.core.$strict>, z.ZodObject<{
314
+ type: z.ZodLiteral<"linear">;
315
+ stops: z.ZodArray<z.ZodObject<{
316
+ pos: z.ZodNumber;
317
+ color: z.ZodString;
318
+ opacity: z.ZodDefault<z.ZodNumber>;
319
+ }, z.core.$strict>>;
320
+ angle: z.ZodDefault<z.ZodNumber>;
321
+ }, z.core.$strict>, z.ZodObject<{
322
+ type: z.ZodLiteral<"radial">;
323
+ stops: z.ZodArray<z.ZodObject<{
324
+ pos: z.ZodNumber;
325
+ color: z.ZodString;
326
+ opacity: z.ZodDefault<z.ZodNumber>;
327
+ }, z.core.$strict>>;
328
+ cx: z.ZodDefault<z.ZodNumber>;
329
+ cy: z.ZodDefault<z.ZodNumber>;
330
+ radius: z.ZodDefault<z.ZodNumber>;
331
+ }, z.core.$strict>, z.ZodObject<{
332
+ type: z.ZodLiteral<"mask">;
333
+ layer_id: z.ZodString;
334
+ color: z.ZodString;
335
+ opacity: z.ZodDefault<z.ZodNumber>;
336
+ }, z.core.$strict>], "type">>>;
337
+ pinned: z.ZodOptional<z.ZodBoolean>;
338
+ is_background: z.ZodOptional<z.ZodBoolean>;
339
+ locked: z.ZodOptional<z.ZodBoolean>;
340
+ hidden: z.ZodOptional<z.ZodBoolean>;
341
+ matte_source_id: z.ZodOptional<z.ZodNullable<z.ZodString>>;
342
+ text: z.ZodOptional<z.ZodString>;
343
+ text_size: z.ZodOptional<z.ZodNumber>;
344
+ font_family: z.ZodOptional<z.ZodString>;
345
+ text_color: z.ZodOptional<z.ZodString>;
346
+ line_height: z.ZodOptional<z.ZodNumber>;
347
+ letter_spacing: z.ZodOptional<z.ZodNumber>;
348
+ text_align: z.ZodOptional<z.ZodEnum<{
349
+ left: "left";
350
+ center: "center";
351
+ right: "right";
352
+ }>>;
353
+ line_beat_frames: z.ZodOptional<z.ZodNumber>;
354
+ spans: z.ZodOptional<z.ZodArray<z.ZodObject<{
355
+ start: z.ZodNumber;
356
+ end: z.ZodNumber;
357
+ bold: z.ZodOptional<z.ZodBoolean>;
358
+ italic: z.ZodOptional<z.ZodBoolean>;
359
+ color: z.ZodOptional<z.ZodString>;
360
+ }, z.core.$strict>>>;
361
+ color_label: z.ZodOptional<z.ZodEnum<{
362
+ red: "red";
363
+ orange: "orange";
364
+ yellow: "yellow";
365
+ green: "green";
366
+ cyan: "cyan";
367
+ blue: "blue";
368
+ violet: "violet";
369
+ magenta: "magenta";
370
+ }>>;
371
+ }, z.core.$strict>>>;
372
+ video_layers: z.ZodDefault<z.ZodArray<z.ZodObject<{
373
+ id: z.ZodString;
374
+ clip: z.ZodString;
375
+ name: z.ZodOptional<z.ZodString>;
376
+ x: z.ZodNumber;
377
+ y: z.ZodNumber;
378
+ width: z.ZodNumber;
379
+ height: z.ZodNumber;
380
+ rotation: z.ZodDefault<z.ZodNumber>;
381
+ pivotX: z.ZodDefault<z.ZodNumber>;
382
+ pivotY: z.ZodDefault<z.ZodNumber>;
383
+ source_in_frame: z.ZodDefault<z.ZodNumber>;
384
+ source_out_frame: z.ZodDefault<z.ZodNullable<z.ZodNumber>>;
385
+ timeline_start_frame: z.ZodDefault<z.ZodNumber>;
386
+ fill: z.ZodDefault<z.ZodNullable<z.ZodDiscriminatedUnion<[z.ZodObject<{
387
+ type: z.ZodLiteral<"solid">;
388
+ color: z.ZodString;
389
+ opacity: z.ZodDefault<z.ZodNumber>;
390
+ }, z.core.$strict>, z.ZodObject<{
391
+ type: z.ZodLiteral<"linear">;
392
+ stops: z.ZodArray<z.ZodObject<{
393
+ pos: z.ZodNumber;
394
+ color: z.ZodString;
395
+ opacity: z.ZodDefault<z.ZodNumber>;
396
+ }, z.core.$strict>>;
397
+ angle: z.ZodDefault<z.ZodNumber>;
398
+ }, z.core.$strict>, z.ZodObject<{
399
+ type: z.ZodLiteral<"radial">;
400
+ stops: z.ZodArray<z.ZodObject<{
401
+ pos: z.ZodNumber;
402
+ color: z.ZodString;
403
+ opacity: z.ZodDefault<z.ZodNumber>;
404
+ }, z.core.$strict>>;
405
+ cx: z.ZodDefault<z.ZodNumber>;
406
+ cy: z.ZodDefault<z.ZodNumber>;
407
+ radius: z.ZodDefault<z.ZodNumber>;
408
+ }, z.core.$strict>, z.ZodObject<{
409
+ type: z.ZodLiteral<"mask">;
410
+ layer_id: z.ZodString;
411
+ color: z.ZodString;
412
+ opacity: z.ZodDefault<z.ZodNumber>;
413
+ }, z.core.$strict>], "type">>>;
414
+ locked: z.ZodOptional<z.ZodBoolean>;
415
+ hidden: z.ZodOptional<z.ZodBoolean>;
416
+ matte_source_id: z.ZodOptional<z.ZodNullable<z.ZodString>>;
417
+ speed_keyframes: z.ZodOptional<z.ZodArray<z.ZodObject<{
418
+ frame: z.ZodNumber;
419
+ rate: z.ZodNumber;
420
+ }, z.core.$strict>>>;
421
+ color_label: z.ZodOptional<z.ZodEnum<{
422
+ red: "red";
423
+ orange: "orange";
424
+ yellow: "yellow";
425
+ green: "green";
426
+ cyan: "cyan";
427
+ blue: "blue";
428
+ violet: "violet";
429
+ magenta: "magenta";
430
+ }>>;
431
+ }, z.core.$strict>>>;
432
+ text_layers: z.ZodDefault<z.ZodArray<z.ZodObject<{
433
+ id: z.ZodString;
434
+ text: z.ZodDefault<z.ZodString>;
435
+ name: z.ZodOptional<z.ZodString>;
436
+ x: z.ZodNumber;
437
+ y: z.ZodNumber;
438
+ width: z.ZodNumber;
439
+ height: z.ZodNumber;
440
+ rotation: z.ZodDefault<z.ZodNumber>;
441
+ pivotX: z.ZodDefault<z.ZodNumber>;
442
+ pivotY: z.ZodDefault<z.ZodNumber>;
443
+ font_family: z.ZodDefault<z.ZodString>;
444
+ text_size: z.ZodOptional<z.ZodNumber>;
445
+ text_autofit: z.ZodOptional<z.ZodEnum<{
446
+ shrink: "shrink";
447
+ wrap: "wrap";
448
+ }>>;
449
+ text_color: z.ZodOptional<z.ZodString>;
450
+ fill: z.ZodDefault<z.ZodNullable<z.ZodDiscriminatedUnion<[z.ZodObject<{
451
+ type: z.ZodLiteral<"solid">;
452
+ color: z.ZodString;
453
+ opacity: z.ZodDefault<z.ZodNumber>;
454
+ }, z.core.$strict>, z.ZodObject<{
455
+ type: z.ZodLiteral<"linear">;
456
+ stops: z.ZodArray<z.ZodObject<{
457
+ pos: z.ZodNumber;
458
+ color: z.ZodString;
459
+ opacity: z.ZodDefault<z.ZodNumber>;
460
+ }, z.core.$strict>>;
461
+ angle: z.ZodDefault<z.ZodNumber>;
462
+ }, z.core.$strict>, z.ZodObject<{
463
+ type: z.ZodLiteral<"radial">;
464
+ stops: z.ZodArray<z.ZodObject<{
465
+ pos: z.ZodNumber;
466
+ color: z.ZodString;
467
+ opacity: z.ZodDefault<z.ZodNumber>;
468
+ }, z.core.$strict>>;
469
+ cx: z.ZodDefault<z.ZodNumber>;
470
+ cy: z.ZodDefault<z.ZodNumber>;
471
+ radius: z.ZodDefault<z.ZodNumber>;
472
+ }, z.core.$strict>, z.ZodObject<{
473
+ type: z.ZodLiteral<"mask">;
474
+ layer_id: z.ZodString;
475
+ color: z.ZodString;
476
+ opacity: z.ZodDefault<z.ZodNumber>;
477
+ }, z.core.$strict>], "type">>>;
478
+ line_height: z.ZodOptional<z.ZodNumber>;
479
+ letter_spacing: z.ZodOptional<z.ZodNumber>;
480
+ text_align: z.ZodOptional<z.ZodEnum<{
481
+ left: "left";
482
+ center: "center";
483
+ right: "right";
484
+ }>>;
485
+ text_valign: z.ZodOptional<z.ZodEnum<{
486
+ top: "top";
487
+ middle: "middle";
488
+ bottom: "bottom";
489
+ }>>;
490
+ font_weight: z.ZodOptional<z.ZodNumber>;
491
+ font_style: z.ZodOptional<z.ZodEnum<{
492
+ italic: "italic";
493
+ normal: "normal";
494
+ }>>;
495
+ text_transform: z.ZodOptional<z.ZodEnum<{
496
+ none: "none";
497
+ uppercase: "uppercase";
498
+ lowercase: "lowercase";
499
+ }>>;
500
+ stroke_width: z.ZodOptional<z.ZodNumber>;
501
+ stroke_color: z.ZodOptional<z.ZodString>;
502
+ text_shadow: z.ZodOptional<z.ZodNullable<z.ZodObject<{
503
+ offsetX: z.ZodNumber;
504
+ offsetY: z.ZodNumber;
505
+ blur: z.ZodNumber;
506
+ color: z.ZodString;
507
+ }, z.core.$strip>>>;
508
+ matte_source_id: z.ZodOptional<z.ZodNullable<z.ZodString>>;
509
+ locked: z.ZodOptional<z.ZodBoolean>;
510
+ hidden: z.ZodOptional<z.ZodBoolean>;
511
+ color_label: z.ZodOptional<z.ZodEnum<{
512
+ red: "red";
513
+ orange: "orange";
514
+ yellow: "yellow";
515
+ green: "green";
516
+ cyan: "cyan";
517
+ blue: "blue";
518
+ violet: "violet";
519
+ magenta: "magenta";
520
+ }>>;
521
+ }, z.core.$strict>>>;
522
+ shapes: z.ZodDefault<z.ZodArray<z.ZodObject<{
523
+ id: z.ZodString;
524
+ kind: z.ZodDefault<z.ZodEnum<{
525
+ rect: "rect";
526
+ ellipse: "ellipse";
527
+ triangle: "triangle";
528
+ star: "star";
529
+ pentagon: "pentagon";
530
+ hexagon: "hexagon";
531
+ arrow: "arrow";
532
+ heart: "heart";
533
+ "rounded-rect": "rounded-rect";
534
+ diamond: "diamond";
535
+ parallelogram: "parallelogram";
536
+ trapezoid: "trapezoid";
537
+ semicircle: "semicircle";
538
+ ring: "ring";
539
+ pill: "pill";
540
+ cross: "cross";
541
+ heptagon: "heptagon";
542
+ octagon: "octagon";
543
+ "star-4": "star-4";
544
+ "star-6": "star-6";
545
+ sparkle: "sparkle";
546
+ burst: "burst";
547
+ "arrow-left": "arrow-left";
548
+ "double-arrow": "double-arrow";
549
+ chevron: "chevron";
550
+ "block-arrow-up": "block-arrow-up";
551
+ curve: "curve";
552
+ lightning: "lightning";
553
+ "speech-bubble": "speech-bubble";
554
+ "location-pin": "location-pin";
555
+ checkmark: "checkmark";
556
+ "x-mark": "x-mark";
557
+ shield: "shield";
558
+ cloud: "cloud";
559
+ crescent: "crescent";
560
+ teardrop: "teardrop";
561
+ banner: "banner";
562
+ }>>;
563
+ name: z.ZodOptional<z.ZodString>;
564
+ x: z.ZodNumber;
565
+ y: z.ZodNumber;
566
+ width: z.ZodNumber;
567
+ height: z.ZodNumber;
568
+ fill: z.ZodDiscriminatedUnion<[z.ZodObject<{
569
+ type: z.ZodLiteral<"solid">;
570
+ color: z.ZodString;
571
+ opacity: z.ZodDefault<z.ZodNumber>;
572
+ }, z.core.$strict>, z.ZodObject<{
573
+ type: z.ZodLiteral<"linear">;
574
+ stops: z.ZodArray<z.ZodObject<{
575
+ pos: z.ZodNumber;
576
+ color: z.ZodString;
577
+ opacity: z.ZodDefault<z.ZodNumber>;
578
+ }, z.core.$strict>>;
579
+ angle: z.ZodDefault<z.ZodNumber>;
580
+ }, z.core.$strict>, z.ZodObject<{
581
+ type: z.ZodLiteral<"radial">;
582
+ stops: z.ZodArray<z.ZodObject<{
583
+ pos: z.ZodNumber;
584
+ color: z.ZodString;
585
+ opacity: z.ZodDefault<z.ZodNumber>;
586
+ }, z.core.$strict>>;
587
+ cx: z.ZodDefault<z.ZodNumber>;
588
+ cy: z.ZodDefault<z.ZodNumber>;
589
+ radius: z.ZodDefault<z.ZodNumber>;
590
+ }, z.core.$strict>, z.ZodObject<{
591
+ type: z.ZodLiteral<"mask">;
592
+ layer_id: z.ZodString;
593
+ color: z.ZodString;
594
+ opacity: z.ZodDefault<z.ZodNumber>;
595
+ }, z.core.$strict>], "type">;
596
+ rotation: z.ZodDefault<z.ZodNumber>;
597
+ pivotX: z.ZodDefault<z.ZodNumber>;
598
+ pivotY: z.ZodDefault<z.ZodNumber>;
599
+ locked: z.ZodOptional<z.ZodBoolean>;
600
+ hidden: z.ZodOptional<z.ZodBoolean>;
601
+ matte_source_id: z.ZodOptional<z.ZodNullable<z.ZodString>>;
602
+ color_label: z.ZodOptional<z.ZodEnum<{
603
+ red: "red";
604
+ orange: "orange";
605
+ yellow: "yellow";
606
+ green: "green";
607
+ cyan: "cyan";
608
+ blue: "blue";
609
+ violet: "violet";
610
+ magenta: "magenta";
611
+ }>>;
612
+ points: z.ZodOptional<z.ZodArray<z.ZodObject<{
613
+ x: z.ZodNumber;
614
+ y: z.ZodNumber;
615
+ }, z.core.$strip>>>;
616
+ stroke_width: z.ZodOptional<z.ZodNumber>;
617
+ arrow_head: z.ZodOptional<z.ZodEnum<{
618
+ end: "end";
619
+ none: "none";
620
+ both: "both";
621
+ }>>;
622
+ }, z.core.$strict>>>;
623
+ animations: z.ZodDefault<z.ZodRecord<z.ZodString, z.ZodRecord<z.ZodEnum<{
624
+ opacity: "opacity";
625
+ x: "x";
626
+ y: "y";
627
+ width: "width";
628
+ height: "height";
629
+ rotation: "rotation";
630
+ scale: "scale";
631
+ }> & z.core.$partial, z.ZodArray<z.ZodObject<{
632
+ frame: z.ZodNumber;
633
+ value: z.ZodNumber;
634
+ easing: z.ZodDefault<z.ZodEnum<{
635
+ linear: "linear";
636
+ easeIn: "easeIn";
637
+ easeOut: "easeOut";
638
+ easeInOut: "easeInOut";
639
+ outQuart: "outQuart";
640
+ outExpo: "outExpo";
641
+ outBack: "outBack";
642
+ inBack: "inBack";
643
+ inOutBack: "inOutBack";
644
+ cubicBezier: "cubicBezier";
645
+ hold: "hold";
646
+ }>>;
647
+ bezier: z.ZodOptional<z.ZodTuple<[z.ZodNumber, z.ZodNumber, z.ZodNumber, z.ZodNumber], null>>;
648
+ }, z.core.$strict>>>>>;
649
+ styles: z.ZodDefault<z.ZodRecord<z.ZodString, z.ZodObject<{
650
+ borderRadius: z.ZodOptional<z.ZodNumber>;
651
+ borderWidth: z.ZodOptional<z.ZodNumber>;
652
+ borderColor: z.ZodOptional<z.ZodString>;
653
+ boxShadow: z.ZodOptional<z.ZodString>;
654
+ fit: z.ZodOptional<z.ZodEnum<{
655
+ cover: "cover";
656
+ contain: "contain";
657
+ stretch: "stretch";
658
+ }>>;
659
+ anchorX: z.ZodOptional<z.ZodNumber>;
660
+ anchorY: z.ZodOptional<z.ZodNumber>;
661
+ tintColor: z.ZodOptional<z.ZodString>;
662
+ tintStrength: z.ZodOptional<z.ZodNumber>;
663
+ alphaMask: z.ZodOptional<z.ZodObject<{
664
+ type: z.ZodDefault<z.ZodLiteral<"linear">>;
665
+ angle: z.ZodDefault<z.ZodNumber>;
666
+ stops: z.ZodArray<z.ZodObject<{
667
+ offset: z.ZodNumber;
668
+ alpha: z.ZodNumber;
669
+ }, z.core.$strict>>;
670
+ }, z.core.$strict>>;
671
+ flipX: z.ZodOptional<z.ZodBoolean>;
672
+ flipY: z.ZodOptional<z.ZodBoolean>;
673
+ blur: z.ZodOptional<z.ZodNumber>;
674
+ brightness: z.ZodOptional<z.ZodNumber>;
675
+ contrast: z.ZodOptional<z.ZodNumber>;
676
+ saturation: z.ZodOptional<z.ZodNumber>;
677
+ hueRotate: z.ZodOptional<z.ZodNumber>;
678
+ blend_mode: z.ZodOptional<z.ZodEnum<{
679
+ color: "color";
680
+ normal: "normal";
681
+ saturation: "saturation";
682
+ multiply: "multiply";
683
+ screen: "screen";
684
+ overlay: "overlay";
685
+ darken: "darken";
686
+ lighten: "lighten";
687
+ "color-dodge": "color-dodge";
688
+ "color-burn": "color-burn";
689
+ "hard-light": "hard-light";
690
+ "soft-light": "soft-light";
691
+ difference: "difference";
692
+ exclusion: "exclusion";
693
+ hue: "hue";
694
+ luminosity: "luminosity";
695
+ }>>;
696
+ chroma_key: z.ZodOptional<z.ZodObject<{
697
+ color: z.ZodDefault<z.ZodString>;
698
+ similarity: z.ZodDefault<z.ZodNumber>;
699
+ smoothness: z.ZodDefault<z.ZodNumber>;
700
+ }, z.core.$strip>>;
701
+ }, z.core.$strict>>>;
702
+ layer_order: z.ZodDefault<z.ZodArray<z.ZodString>>;
703
+ groups: z.ZodDefault<z.ZodArray<z.ZodObject<{
704
+ id: z.ZodString;
705
+ name: z.ZodDefault<z.ZodString>;
706
+ pivotX: z.ZodNumber;
707
+ pivotY: z.ZodNumber;
708
+ children: z.ZodDefault<z.ZodArray<z.ZodString>>;
709
+ fill: z.ZodDefault<z.ZodNullable<z.ZodDiscriminatedUnion<[z.ZodObject<{
710
+ type: z.ZodLiteral<"solid">;
711
+ color: z.ZodString;
712
+ opacity: z.ZodDefault<z.ZodNumber>;
713
+ }, z.core.$strict>, z.ZodObject<{
714
+ type: z.ZodLiteral<"linear">;
715
+ stops: z.ZodArray<z.ZodObject<{
716
+ pos: z.ZodNumber;
717
+ color: z.ZodString;
718
+ opacity: z.ZodDefault<z.ZodNumber>;
719
+ }, z.core.$strict>>;
720
+ angle: z.ZodDefault<z.ZodNumber>;
721
+ }, z.core.$strict>, z.ZodObject<{
722
+ type: z.ZodLiteral<"radial">;
723
+ stops: z.ZodArray<z.ZodObject<{
724
+ pos: z.ZodNumber;
725
+ color: z.ZodString;
726
+ opacity: z.ZodDefault<z.ZodNumber>;
727
+ }, z.core.$strict>>;
728
+ cx: z.ZodDefault<z.ZodNumber>;
729
+ cy: z.ZodDefault<z.ZodNumber>;
730
+ radius: z.ZodDefault<z.ZodNumber>;
731
+ }, z.core.$strict>, z.ZodObject<{
732
+ type: z.ZodLiteral<"mask">;
733
+ layer_id: z.ZodString;
734
+ color: z.ZodString;
735
+ opacity: z.ZodDefault<z.ZodNumber>;
736
+ }, z.core.$strict>], "type">>>;
737
+ box_width: z.ZodDefault<z.ZodNumber>;
738
+ box_height: z.ZodDefault<z.ZodNumber>;
739
+ matte_source_id: z.ZodOptional<z.ZodNullable<z.ZodString>>;
740
+ locked: z.ZodOptional<z.ZodBoolean>;
741
+ hidden: z.ZodOptional<z.ZodBoolean>;
742
+ color_label: z.ZodOptional<z.ZodEnum<{
743
+ red: "red";
744
+ orange: "orange";
745
+ yellow: "yellow";
746
+ green: "green";
747
+ cyan: "cyan";
748
+ blue: "blue";
749
+ violet: "violet";
750
+ magenta: "magenta";
751
+ }>>;
752
+ }, z.core.$strict>>>;
753
+ duration_seconds: z.ZodDefault<z.ZodNumber>;
754
+ audio_overlays: z.ZodDefault<z.ZodArray<z.ZodObject<{
755
+ id: z.ZodString;
756
+ filename: z.ZodString;
757
+ startFrame: z.ZodNumber;
758
+ gain: z.ZodDefault<z.ZodNumber>;
759
+ fadeInFrames: z.ZodDefault<z.ZodNumber>;
760
+ fadeOutFrames: z.ZodDefault<z.ZodNumber>;
761
+ endFrame: z.ZodOptional<z.ZodNumber>;
762
+ muted: z.ZodOptional<z.ZodBoolean>;
763
+ soloed: z.ZodOptional<z.ZodBoolean>;
764
+ }, z.core.$strict>>>;
765
+ markers: z.ZodDefault<z.ZodArray<z.ZodObject<{
766
+ id: z.ZodString;
767
+ frame: z.ZodNumber;
768
+ label: z.ZodDefault<z.ZodString>;
769
+ color: z.ZodOptional<z.ZodString>;
770
+ }, z.core.$strict>>>;
771
+ loop: z.ZodDefault<z.ZodArray<z.ZodObject<{
772
+ label: z.ZodOptional<z.ZodString>;
773
+ overrides: z.ZodDefault<z.ZodArray<z.ZodObject<{
774
+ elementId: z.ZodString;
775
+ field: z.ZodString;
776
+ value: z.ZodUnion<readonly [z.ZodString, z.ZodNumber]>;
777
+ }, z.core.$strict>>>;
778
+ }, z.core.$strict>>>;
779
+ loop_start_frame: z.ZodDefault<z.ZodNumber>;
780
+ loop_end_frame: z.ZodDefault<z.ZodNullable<z.ZodNumber>>;
781
+ track_loops: z.ZodDefault<z.ZodRecord<z.ZodString, z.ZodRecord<z.ZodEnum<{
782
+ opacity: "opacity";
783
+ x: "x";
784
+ y: "y";
785
+ width: "width";
786
+ height: "height";
787
+ rotation: "rotation";
788
+ scale: "scale";
789
+ }> & z.core.$partial, z.ZodEnum<{
790
+ hold: "hold";
791
+ loop: "loop";
792
+ "ping-pong": "ping-pong";
793
+ cycle: "cycle";
794
+ }>>>>;
795
+ color_tracks: z.ZodDefault<z.ZodRecord<z.ZodString, z.ZodRecord<z.ZodEnum<{
796
+ fill: "fill";
797
+ }> & z.core.$partial, z.ZodArray<z.ZodObject<{
798
+ frame: z.ZodNumber;
799
+ value: z.ZodDiscriminatedUnion<[z.ZodObject<{
800
+ type: z.ZodLiteral<"solid">;
801
+ color: z.ZodString;
802
+ opacity: z.ZodDefault<z.ZodNumber>;
803
+ }, z.core.$strict>, z.ZodObject<{
804
+ type: z.ZodLiteral<"linear">;
805
+ stops: z.ZodArray<z.ZodObject<{
806
+ pos: z.ZodNumber;
807
+ color: z.ZodString;
808
+ opacity: z.ZodDefault<z.ZodNumber>;
809
+ }, z.core.$strict>>;
810
+ angle: z.ZodDefault<z.ZodNumber>;
811
+ }, z.core.$strict>, z.ZodObject<{
812
+ type: z.ZodLiteral<"radial">;
813
+ stops: z.ZodArray<z.ZodObject<{
814
+ pos: z.ZodNumber;
815
+ color: z.ZodString;
816
+ opacity: z.ZodDefault<z.ZodNumber>;
817
+ }, z.core.$strict>>;
818
+ cx: z.ZodDefault<z.ZodNumber>;
819
+ cy: z.ZodDefault<z.ZodNumber>;
820
+ radius: z.ZodDefault<z.ZodNumber>;
821
+ }, z.core.$strict>, z.ZodObject<{
822
+ type: z.ZodLiteral<"mask">;
823
+ layer_id: z.ZodString;
824
+ color: z.ZodString;
825
+ opacity: z.ZodDefault<z.ZodNumber>;
826
+ }, z.core.$strict>], "type">;
827
+ easing: z.ZodDefault<z.ZodEnum<{
828
+ linear: "linear";
829
+ easeIn: "easeIn";
830
+ easeOut: "easeOut";
831
+ easeInOut: "easeInOut";
832
+ outQuart: "outQuart";
833
+ outExpo: "outExpo";
834
+ outBack: "outBack";
835
+ inBack: "inBack";
836
+ inOutBack: "inOutBack";
837
+ cubicBezier: "cubicBezier";
838
+ hold: "hold";
839
+ }>>;
840
+ bezier: z.ZodOptional<z.ZodTuple<[z.ZodNumber, z.ZodNumber, z.ZodNumber, z.ZodNumber], null>>;
841
+ }, z.core.$strict>>>>>;
842
+ current_version_id: z.ZodDefault<z.ZodNullable<z.ZodString>>;
843
+ last_modified_at: z.ZodDefault<z.ZodNumber>;
844
+ embed_origins: z.ZodDefault<z.ZodArray<z.ZodString>>;
845
+ public_properties: z.ZodDefault<z.ZodArray<z.ZodObject<{
846
+ name: z.ZodString;
847
+ type: z.ZodEnum<{
848
+ number: "number";
849
+ color: "color";
850
+ text: "text";
851
+ image: "image";
852
+ }>;
853
+ layer_id: z.ZodString;
854
+ default_value: z.ZodDefault<z.ZodString>;
855
+ }, z.core.$strict>>>;
856
+ custom_fonts: z.ZodDefault<z.ZodArray<z.ZodObject<{
857
+ family: z.ZodString;
858
+ src: z.ZodString;
859
+ weight: z.ZodOptional<z.ZodNumber>;
860
+ style: z.ZodOptional<z.ZodEnum<{
861
+ italic: "italic";
862
+ normal: "normal";
863
+ }>>;
864
+ }, z.core.$strict>>>;
865
+ canvas_width: z.ZodDefault<z.ZodNumber>;
866
+ canvas_height: z.ZodDefault<z.ZodNumber>;
867
+ }, z.core.$strict>>;
868
+ type Easing = z.infer<typeof easingSchema>;
869
+ type Project = z.infer<typeof projectSchema>;
870
+ type ImageLayer = z.infer<typeof imageLayerSchema>;
871
+ type VideoLayer = z.infer<typeof videoLayerSchema>;
872
+ type LayerStyle = z.infer<typeof layerStyleSchema>;
873
+ declare const migrateProject: (raw: unknown) => Project;
874
+
875
+ type ToolFunction = {
876
+ type: "function";
877
+ function: {
878
+ name: string;
879
+ description: string;
880
+ parameters: Record<string, unknown>;
881
+ };
882
+ };
883
+ type ToolResult = {
884
+ ok: true;
885
+ data?: unknown;
886
+ } | {
887
+ ok: false;
888
+ error: string;
889
+ };
890
+ type ToolOutcome = {
891
+ project: Project;
892
+ result: ToolResult;
893
+ };
894
+ type ToolDispatch<Args = Record<string, unknown>> = (project: Project, args: Args) => ToolOutcome;
895
+ declare const dispatch: Record<string, ToolDispatch<never>>;
896
+ declare const TOOL_DEFINITIONS: ToolFunction[];
897
+
898
+ type BlankProjectOpts = {
899
+ projectId: string;
900
+ name?: string | null;
901
+ /** Defaults to now. The editor placeholder passes 0 as a sentinel. */
902
+ lastModifiedAt?: number;
903
+ canvasWidth?: number;
904
+ canvasHeight?: number;
905
+ };
906
+ declare const blankProject: (opts: BlankProjectOpts) => Project;
907
+
908
+ interface CaptionLine {
909
+ text: string;
910
+ startFrame: number;
911
+ endFrame: number;
912
+ }
913
+ interface TranscriptWordLike {
914
+ word: string;
915
+ start: number;
916
+ end: number;
917
+ }
918
+ declare const transcriptToCaptionLines: (words: ReadonlyArray<TranscriptWordLike>, fps?: number) => CaptionLine[];
919
+ declare const videoElementIdForClip: (project: Project, clip: string) => string | null;
920
+ declare const hasCaptionsForClip: (project: Project, videoElementId: string) => boolean;
921
+ declare const removeCaptionsForClip: (project: Project, videoElementId: string) => {
922
+ project: Project;
923
+ ok: boolean;
924
+ removed: number;
925
+ };
926
+ interface BuildCaptionsResult {
927
+ project: Project;
928
+ ok: boolean;
929
+ error?: string;
930
+ captionsGroupId?: string;
931
+ lineCount?: number;
932
+ }
933
+ declare const buildCaptionsForClip: (project: Project, opts: {
934
+ clip: string;
935
+ lines: CaptionLine[];
936
+ style?: string;
937
+ }) => BuildCaptionsResult;
938
+
939
+ interface RenderFrameOptions {
940
+ /** Project id, served at `${origin}/api/project/<id>`. */
941
+ projectId: string;
942
+ /** Composition frame (0-indexed, 30 fps). Default 0. */
943
+ frame?: number;
944
+ /** Origin serving /render-canvas + /api/project + /clips. Default https://morphastudio.ai */
945
+ origin?: string;
946
+ /** Bearer token for the Morpha account (forwarded to the project/clip fetches). */
947
+ token?: string;
948
+ /** Canvas width in px. Default 1080. */
949
+ width?: number;
950
+ /** Canvas height in px. Default 1920. */
951
+ height?: number;
952
+ /**
953
+ * Browser channel. Defaults to system Chrome ("chrome") so HEVC decodes via
954
+ * the OS decoder (macOS/Windows). Use "chromium" for H.264/VP9/AV1 only.
955
+ */
956
+ channel?: string;
957
+ /**
958
+ * Milliseconds to wait for page load + the render-ready flag. Default 90000.
959
+ * The render page can spend up to ~60s loading + seeking a large
960
+ * non-faststart 4K/HEVC clip on a cold cache (it must read to the moov),
961
+ * so this default leaves headroom above that; raise it for very large clips.
962
+ */
963
+ timeoutMs?: number;
964
+ }
965
+ /**
966
+ * Render one composited frame to a PNG Buffer. The video frame is decoded and
967
+ * every overlay (captions/shapes/text) composited by a REAL browser — no
968
+ * ffmpeg. With the default `channel: "chrome"`, HEVC/AV1/H.264 all decode (HEVC
969
+ * needs the OS decoder, i.e. macOS/Windows). Requires `playwright` installed
970
+ * (optional peer dependency) and Google Chrome available on the machine.
971
+ */
972
+ declare const renderFrame: (opts: RenderFrameOptions) => Promise<Buffer>;
973
+
974
+ interface MorphaClientOptions {
975
+ /** API origin. Default https://morphastudio.ai */
976
+ origin?: string;
977
+ /** Bearer API key (mp_…), sent as `Authorization: Bearer <token>`. Required
978
+ * against a hosted account; omit only when pointing at a dev origin whose
979
+ * auth is bypassed. */
980
+ token?: string;
981
+ /** Custom fetch implementation (tests, proxies, Node <18). Defaults to the
982
+ * global `fetch`. */
983
+ fetch?: typeof fetch;
984
+ }
985
+ /** The outcome of a `callTool` round-trip. `result.ok` may be `false` for a
986
+ * tool-level failure (e.g. a missing asset) — that is a normal, non-throwing
987
+ * outcome the caller inspects; only transport/HTTP errors throw. */
988
+ interface ToolCallResult {
989
+ result: ToolResult;
990
+ /** The project AFTER the tool ran (the server has already persisted it when
991
+ * `result.ok` and the tool changed anything). */
992
+ project: Project;
993
+ /** Tappable link that opens this project in the editor. */
994
+ editorUrl?: string;
995
+ }
996
+ interface MorphaClient {
997
+ /** Fetch a hosted project's JSON (migrated + schema-validated). */
998
+ getProject(projectId: string): Promise<Project>;
999
+ /** The hosted tool catalog (same set you can `callTool`) — OpenAI tool shape:
1000
+ * each entry is `{ type: "function", function: { name, description, parameters } }`. */
1001
+ listTools(): Promise<ToolFunction[]>;
1002
+ /**
1003
+ * Call one tool against a hosted project — the HTTP equivalent of an MCP
1004
+ * `tools/call`. The server loads the project, dispatches the tool, and writes
1005
+ * the result back. Returns `{ result, project, editorUrl }`. Throws only on
1006
+ * transport/HTTP errors; a tool-level failure comes back as `result.ok:false`.
1007
+ */
1008
+ callTool(projectId: string, name: string, args?: Record<string, unknown>): Promise<ToolCallResult>;
1009
+ /**
1010
+ * Render one composited frame of a hosted project to a PNG (real browser, no
1011
+ * ffmpeg). Convenience wrapper over the standalone `renderFrame()` with this
1012
+ * client's `origin`/`token` applied; pass `opts` to override width/height/
1013
+ * channel/timeoutMs.
1014
+ */
1015
+ renderFrame(projectId: string, frame?: number, opts?: Omit<RenderFrameOptions, "projectId" | "frame">): Promise<Buffer>;
1016
+ }
1017
+ /**
1018
+ * Create a typed client for a hosted Morpha account. Everything you can do over
1019
+ * MCP, you can do here:
1020
+ *
1021
+ * ```ts
1022
+ * import { createClient } from "morpha-studio-sdk";
1023
+ * const morpha = createClient({ token: process.env.MORPHA_TOKEN });
1024
+ * await morpha.callTool("my-project", "add_text_layer", { text: "HELLO", x: 540, y: 600 });
1025
+ * const png = await morpha.renderFrame("my-project", 150);
1026
+ * ```
1027
+ */
1028
+ declare const createClient: (options?: MorphaClientOptions) => MorphaClient;
1029
+
1030
+ export { type BlankProjectOpts, type CaptionLine, type Easing, type ImageLayer, type LayerStyle, type MorphaClient, type MorphaClientOptions, type Project, type RenderFrameOptions, TOOL_DEFINITIONS, type TextLayer, type ToolCallResult, type ToolDispatch, type ToolFunction, type ToolResult, type TranscriptWordLike, type VideoLayer, blankProject, buildCaptionsForClip, createClient, dispatch, hasCaptionsForClip, migrateProject, projectSchema, removeCaptionsForClip, renderFrame, transcriptToCaptionLines, videoElementIdForClip };