@mengine/medeo-tool 1.2.1-alpha.7 → 1.2.1-alpha.8

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.
@@ -1,741 +1,94 @@
1
- //#region src/sandbox/generated/edit-sandbox-api.d.ts
2
- /**
3
- * @generated by gen:sandbox-dts — DO NOT EDIT MANUALLY
4
- *
5
- * Schema version: video-document/v0
6
- * Semantic ops: 20
7
- *
8
- * Boundary: zod `superRefine` / custom refine rules are NOT introspectable and
9
- * do not appear here. Business mutual-exclusion rules surface via runtime
10
- * validation errors (L3 feedback channel).
11
- *
12
- * @example 读取→计算→批量写
13
- * ```ts
14
- * const clips = timeline.clipsInRange(0, 10_000);
15
- * await edit.setVideoClipSpeedShift({
16
- * clips: clips.map((c) => ({ clip_id: c.id, speed_shift: { category: 'linear', mode: 'constant', config: { linear: { speed: 1.5 } } } })),
17
- * });
18
- * ```
19
- *
20
- * @example anchored 删除
21
- * ```ts
22
- * await edit.deleteVideoClips({ clip_ids: ['clip_a'], on_anchored: 'detach' });
23
- * ```
24
- */
25
- /**
26
- * A clip's playback-speed fact, the only thing `SetVideoClipSpeedShift` writes.
27
- */
28
- interface SpeedShift {
29
- category: 'linear' | 'curve';
30
- mode: string;
31
- config: {
32
- linear: {
33
- /**
34
- * @constraint positive
35
- */
36
- speed: number;
37
- };
38
- } | {
39
- curve: {
40
- /**
41
- * @constraint minLength(2)
42
- */
43
- keyframes: {
44
- /**
45
- * @constraint min(0)
46
- * @constraint max(1)
47
- */
48
- position: number;
49
- /**
50
- * @constraint min(0)
51
- */
52
- rate: number;
53
- /**
54
- * Bezier tangent handle (x, y)
55
- */
56
- in_tangent?: {
57
- x: number;
58
- y: number;
59
- };
60
- /**
61
- * Bezier tangent handle (x, y)
62
- */
63
- out_tangent?: {
64
- x: number;
65
- y: number;
66
- };
67
- }[];
68
- };
69
- };
70
- }
71
- /**
72
- * TTS voice summary attached to a speech
73
- */
74
- interface Voice {
75
- /**
76
- * @constraint minLength(1)
77
- */
78
- id: string;
79
- name: string;
80
- }
81
- /**
82
- * A materialized speech-subtree write (speeches + their captions).
83
- */
84
- interface SpeechAssets {
85
- /**
86
- * Materialized speech parts to write
87
- * @constraint minLength(1)
88
- */
89
- speeches: {
90
- /**
91
- * The speech part ID (= side-effect speech_parts[].id)
92
- * @constraint minLength(1)
93
- */
94
- speech_id: string;
95
- /**
96
- * Host video clip part ID the speech anchors to (RFC 02 §4)
97
- * @constraint minLength(1)
98
- */
99
- anchor_part_id: string;
100
- /**
101
- * Offset within the host clip (speech.abs = host.abs + offset_ms)
102
- * @constraint int
103
- * @constraint min(0)
104
- */
105
- offset_ms: number;
106
- /**
107
- * @constraint minLength(1)
108
- */
109
- audio_storage_key: string;
110
- /**
111
- * Duration in milliseconds (> 0)
112
- * @constraint int
113
- * @constraint positive
114
- */
115
- duration_ms: number;
116
- audio_script: string;
117
- /**
118
- * Volume in decibels (-60.0 to 20.0; 0.0 = original, -60 = mute, +20 = max)
119
- * @constraint min(-60)
120
- * @constraint max(20)
121
- */
122
- volume: number;
123
- /**
124
- * TTS voice summary attached to a speech
125
- */
126
- voice: {
127
- /**
128
- * @constraint minLength(1)
129
- */
130
- id: string;
131
- name: string;
132
- };
133
- /**
134
- * @constraint minLength(1)
135
- */
136
- origin_speech_id: string;
137
- /**
138
- * Caption part IDs owned by this speech
139
- */
140
- caption_ids: string[];
141
- }[];
142
- /**
143
- * Materialized caption parts owned by the speeches
144
- */
145
- captions: {
146
- /**
147
- * The caption part ID (= side-effect created_caption_parts[].id)
148
- * @constraint minLength(1)
149
- */
150
- caption_id: string;
151
- /**
152
- * The owning speech part ID
153
- * @constraint minLength(1)
154
- */
155
- speech_part_id: string;
156
- text: string;
157
- /**
158
- * Offset within the host speech (caption.abs = speech.abs + start_ms)
159
- * @constraint int
160
- * @constraint min(0)
161
- */
162
- start_ms: number;
163
- /**
164
- * Duration in milliseconds (> 0)
165
- * @constraint int
166
- * @constraint positive
167
- */
168
- duration_ms: number;
169
- }[];
170
- }
171
- interface MoveVideoClipsInput {
172
- /**
173
- * List of video clips to move to new positions
174
- * @constraint minLength(1)
175
- */
176
- clips: {
177
- /**
178
- * The video clip part ID to move
179
- * @constraint minLength(1)
180
- */
181
- clip_id: string;
182
- /**
183
- * New absolute start time in milliseconds on the timeline
184
- * @constraint int
185
- * @constraint min(0)
186
- */
187
- new_start_ms: number;
188
- /**
189
- * Target track ID to move the clip to (optional)
190
- * @constraint minLength(1)
191
- */
192
- new_track_id?: string;
193
- }[];
194
- }
195
- /**
196
- * Reorder a set of main-track clips relative to a reference clip.
197
- */
198
- interface MoveVideoClipsByAnchorInput {
199
- /**
200
- * Clips to move as one block, keeping their relative order. Need not be contiguous on the track.
201
- * @constraint minLength(1)
202
- */
203
- clip_ids: string[];
204
- /**
205
- * Where the moved block lands: before/after a reference clip, or at the head of the track
206
- */
207
- anchor: {
208
- position: 'before';
209
- /**
210
- * The moved block lands immediately before this clip
211
- * @constraint minLength(1)
212
- */
213
- clip_id: string;
214
- } | {
215
- position: 'after';
216
- /**
217
- * The moved block lands immediately after this clip
218
- * @constraint minLength(1)
219
- */
220
- clip_id: string;
221
- } | {
222
- position: 'track_start';
223
- };
224
- /**
225
- * What happens to speeches anchored to the moved clips (required — see the policy doc)
226
- */
227
- on_anchored: 'follow' | 'keep_absolute';
228
- }
229
- interface DeleteVideoClipsInput {
230
- /**
231
- * List of video clip part IDs to delete from the main track
232
- * @constraint minLength(1)
233
- */
234
- clip_ids: string[];
235
- /**
236
- * How to treat anchored children (default cascade)
237
- */
238
- on_anchored?: 'cascade' | 'detach';
239
- }
240
- /**
241
- * Add video clips to a track.
242
- */
243
- interface AddVideoClipsInput {
244
- /**
245
- * List of video clips to create
246
- * @constraint minLength(1)
247
- */
248
- clips: {
249
- /**
250
- * The media asset ID for the video clip
251
- * @constraint minLength(1)
252
- */
253
- media_id: string;
254
- /**
255
- * Absolute start time in milliseconds on the timeline
256
- * @constraint int
257
- * @constraint min(0)
258
- */
259
- start_ms?: number;
260
- /**
261
- * The source media's intrinsic full length in ms
262
- * @constraint int
263
- * @constraint positive
264
- */
265
- media_duration_ms: number;
266
- /**
267
- * Trim window start in the media (default 0)
268
- * @constraint int
269
- * @constraint min(0)
270
- */
271
- play_in?: number;
272
- /**
273
- * Trim window end in the media (default media_duration_ms)
274
- * @constraint int
275
- * @constraint positive
276
- */
277
- play_out?: number;
278
- /**
279
- * Target track ID (optional, defaults to main track)
280
- * @constraint minLength(1)
281
- */
282
- track_id?: string;
283
- }[];
284
- /**
285
- * Insert new clips before this clip ID
286
- * @constraint minLength(1)
287
- */
288
- before_clip_id?: string;
289
- /**
290
- * Insert new clips after this clip ID
291
- * @constraint minLength(1)
292
- */
293
- after_clip_id?: string;
294
- }
295
- interface AdjustVideoClipVolumeInput {
296
- /**
297
- * List of video clips with their new volume settings
298
- * @constraint minLength(1)
299
- */
300
- clips: {
301
- /**
302
- * The video clip part ID to adjust volume for
303
- * @constraint minLength(1)
304
- */
305
- clip_id: string;
306
- /**
307
- * Volume in decibels (-60.0 to 20.0; 0.0 = original)
308
- * @constraint min(-60)
309
- * @constraint max(20)
310
- */
311
- volume: number;
312
- }[];
1
+ //#region src/sandbox/generated/entity-edit-sandbox-api.d.ts
2
+ /** @generated by gen:sandbox-dts. Entity-native editor contract; DO NOT EDIT. */
3
+ interface AudioMediaAssetFact {
4
+ readonly assetId: string;
5
+ readonly kind: 'audio';
6
+ readonly durationMs: number;
7
+ readonly storageKey: string;
313
8
  }
314
- /**
315
- * Set the playback speed of existing video clips.
316
- */
317
- interface SetVideoClipSpeedShiftInput {
318
- /**
319
- * Video clips with their new speed settings
320
- * @constraint minLength(1)
321
- */
322
- clips: {
323
- /**
324
- * The video clip part ID to set speed for
325
- * @constraint minLength(1)
326
- */
327
- clip_id: string;
328
- /**
329
- * The new speed setting, or null to reset to 1×
330
- */
331
- speed_shift: {
332
- category: 'linear' | 'curve';
333
- mode: string;
334
- config: {
335
- linear: {
336
- /**
337
- * @constraint positive
338
- */
339
- speed: number;
340
- };
341
- } | {
342
- curve: {
343
- /**
344
- * @constraint minLength(2)
345
- */
346
- keyframes: {
347
- /**
348
- * @constraint min(0)
349
- * @constraint max(1)
350
- */
351
- position: number;
352
- /**
353
- * @constraint min(0)
354
- */
355
- rate: number;
356
- /**
357
- * Bezier tangent handle (x, y)
358
- */
359
- in_tangent?: {
360
- x: number;
361
- y: number;
362
- };
363
- /**
364
- * Bezier tangent handle (x, y)
365
- */
366
- out_tangent?: {
367
- x: number;
368
- y: number;
369
- };
370
- }[];
371
- };
372
- };
373
- } | null;
374
- }[];
375
- }
376
- /**
377
- * Replace the media backing existing video clips.
378
- */
379
- interface ReplaceVideoClipContentInput {
380
- /**
381
- * Video clips whose media is being replaced
382
- * @constraint minLength(1)
383
- */
384
- clips: {
385
- /**
386
- * Existing video clip part ID to re-point
387
- * @constraint minLength(1)
388
- */
389
- clip_id: string;
390
- /**
391
- * The new media asset ID
392
- * @constraint minLength(1)
393
- */
394
- origin_media_id: string;
395
- /**
396
- * The new media's intrinsic full length
397
- * @constraint int
398
- * @constraint positive
399
- */
400
- media_duration_ms: number;
401
- /**
402
- * Trim window start in the new media (usually 0)
403
- * @constraint int
404
- * @constraint min(0)
405
- */
406
- play_in: number;
407
- /**
408
- * Trim window end in the new media (usually = media_duration_ms)
409
- * @constraint int
410
- * @constraint positive
411
- */
412
- play_out: number;
413
- /**
414
- * Volume in decibels (-60.0 to 20.0; 0.0 = original, -60 = mute, +20 = max)
415
- * @constraint min(-60)
416
- * @constraint max(20)
417
- */
418
- volume: number;
419
- }[];
420
- }
421
- /**
422
- * Replace a contiguous run of main-track clips with a new run.
423
- */
424
- interface ReplaceVideoClipSequenceInput {
425
- /**
426
- * The clips being replaced: a contiguous main-track run, listed in timeline order
427
- * @constraint minLength(1)
428
- */
429
- old_clip_ids: string[];
430
- /**
431
- * The replacement clips, in the order they take on the track
432
- * @constraint minLength(1)
433
- */
434
- new_clips: {
435
- /**
436
- * The replacement media asset ID. Omit to create an empty placeholder clip.
437
- * @constraint minLength(1)
438
- */
439
- media_id?: string;
440
- /**
441
- * The source media's intrinsic full length in ms
442
- * @constraint int
443
- * @constraint positive
444
- */
445
- media_duration_ms: number;
446
- /**
447
- * Trim window start in the media (default 0)
448
- * @constraint int
449
- * @constraint min(0)
450
- */
451
- play_in?: number;
452
- /**
453
- * Trim window end in the media (default media_duration_ms)
454
- * @constraint int
455
- * @constraint positive
456
- */
457
- play_out?: number;
458
- }[];
459
- /**
460
- * What happens to speeches anchored to the replaced clips (required — see the policy doc)
461
- */
462
- on_anchored: 'remap' | 'cascade';
463
- }
464
- /**
465
- * Re-trim existing video clips (the user-facing "adjust duration" gesture is a trim of the source window).
466
- */
467
- interface AdjustVideoClipDurationInput {
468
- /**
469
- * Video clips with their new trim windows
470
- * @constraint minLength(1)
471
- */
472
- clips: {
473
- /**
474
- * The video clip part ID to re-trim
475
- * @constraint minLength(1)
476
- */
477
- clip_id: string;
478
- /**
479
- * New trim window start in the source media
480
- * @constraint int
481
- * @constraint min(0)
482
- */
483
- play_in: number;
484
- /**
485
- * New trim window end in the source media
486
- * @constraint int
487
- * @constraint positive
488
- */
489
- play_out: number;
490
- }[];
491
- }
492
- /**
493
- * Add speeches (and their captions).
494
- */
495
- interface AddSpeechesInput extends SpeechAssets {}
496
- /**
497
- * Delete speeches with their captions.
498
- */
499
- interface DeleteSpeechesInput {
500
- /**
501
- * Speech part IDs to delete (their captions cascade-delete)
502
- * @constraint minLength(1)
503
- */
504
- speech_ids: string[];
505
- }
506
- /**
507
- * Move speeches in time.
508
- */
509
- interface MoveSpeechesInput {
510
- /**
511
- * Speeches to move to new positions
512
- * @constraint minLength(1)
513
- */
514
- speeches: {
515
- /**
516
- * The speech part ID to move
517
- * @constraint minLength(1)
518
- */
519
- speech_id: string;
520
- /**
521
- * New absolute start time on the timeline
522
- * @constraint int
523
- * @constraint min(0)
524
- */
525
- new_start_ms: number;
526
- }[];
527
- }
528
- /**
529
- * Change a speech's script or voice.
530
- */
531
- interface ChangeSpeechScriptInput extends SpeechAssets {}
532
- interface ChangeSpeechVoiceInput extends SpeechAssets {}
533
- interface AdjustSpeechVolumeInput {
534
- /**
535
- * List of speeches with their new volume settings
536
- * @constraint minLength(1)
537
- */
538
- speeches: {
539
- /**
540
- * The speech part ID to adjust volume for
541
- * @constraint minLength(1)
542
- */
543
- speech_id: string;
544
- /**
545
- * Volume in decibels (-60.0 to 20.0; 0.0 = original)
546
- * @constraint min(-60)
547
- * @constraint max(20)
548
- */
549
- volume: number;
550
- }[];
551
- }
552
- /**
553
- * Toggle caption visibility (the caption track's `is_hidden` flag).
554
- */
555
- interface SetCaptionVisibilityInput {
556
- /**
557
- * Whether the caption track is hidden
558
- */
559
- is_hidden: boolean;
560
- }
561
- /**
562
- * Set the caption visual style.
563
- */
564
- interface SetCaptionStyleInput {
565
- /**
566
- * Font ID referencing a font from the font library
567
- * @constraint minLength(1)
568
- */
569
- font_id?: string;
570
- /**
571
- * Font size in points
572
- * @constraint positive
573
- */
574
- font_size?: number;
575
- /**
576
- * Font color as hex string, e.g. "#FFFFFF"
577
- * @constraint minLength(1)
578
- */
579
- font_color?: string;
580
- /**
581
- * Numeric font weight, e.g. 400 or 700
582
- * @constraint int
583
- */
584
- font_weight?: number;
585
- /**
586
- * Entrance animation preset ID, e.g. "fade" or "none"
587
- */
588
- entrance_animation?: string;
589
- /**
590
- * Entrance animation duration in ms
591
- * @constraint min(0)
592
- */
593
- entrance_animation_duration_ms?: number;
594
- /**
595
- * Outline/stroke color as hex string, e.g. "#000000"
596
- * @constraint minLength(1)
597
- */
598
- stroke_color?: string;
599
- /**
600
- * Outline/stroke width in pixels
601
- * @constraint min(0)
602
- */
603
- stroke_width?: number;
604
- /**
605
- * Caption center X as a fraction (0.0 to 1.0)
606
- */
607
- position_x?: number;
608
- /**
609
- * Caption center Y as a fraction (0.0 to 1.0)
610
- */
611
- position_y?: number;
612
- }
613
- /**
614
- * Set the document BGM.
615
- */
616
- interface SetBgmInput {
617
- /**
618
- * The bgm part ID to write
619
- * @constraint minLength(1)
620
- */
621
- bgm_id: string;
622
- /**
623
- * @constraint minLength(1)
624
- */
625
- audio_storage_key: string;
626
- /**
627
- * The media asset ID
628
- * @constraint minLength(1)
629
- */
630
- origin_media_id: string;
631
- /**
632
- * Volume in decibels (-60.0 to 20.0; 0.0 = original, -60 = mute, +20 = max)
633
- * @constraint min(-60)
634
- * @constraint max(20)
635
- */
636
- volume: number;
637
- }
638
- /**
639
- * Remove the document BGM.
640
- */
641
- interface DeleteBgmInput {
642
- [key: string]: never;
643
- }
644
- interface AdjustBgmVolumeInput {
645
- /**
646
- * List of bgm parts with their new volume settings
647
- * @constraint minLength(1)
648
- */
649
- bgm: {
650
- /**
651
- * The bgm part ID to adjust volume for
652
- * @constraint minLength(1)
653
- */
654
- bgm_id: string;
655
- /**
656
- * Volume in decibels (-60.0 to 20.0; 0.0 = original)
657
- * @constraint min(-60)
658
- * @constraint max(20)
659
- */
660
- volume: number;
661
- }[];
662
- }
663
- /** Agent write surface — one method per SemanticOp kind. */
664
- interface EditApi {
665
- moveVideoClips(input: MoveVideoClipsInput): Promise<void>;
666
- /** Reorder a set of main-track clips relative to a reference clip. */
667
- moveVideoClipsByAnchor(input: MoveVideoClipsByAnchorInput): Promise<void>;
668
- deleteVideoClips(input: DeleteVideoClipsInput): Promise<void>;
669
- /** Add video clips to a track. */
670
- addVideoClips(input: AddVideoClipsInput): Promise<void>;
671
- adjustVideoClipVolume(input: AdjustVideoClipVolumeInput): Promise<void>;
672
- /** Set the playback speed of existing video clips. */
673
- setVideoClipSpeedShift(input: SetVideoClipSpeedShiftInput): Promise<void>;
674
- /** Replace the media backing existing video clips. */
675
- replaceVideoClipContent(input: ReplaceVideoClipContentInput): Promise<void>;
676
- /** Replace a contiguous run of main-track clips with a new run. */
677
- replaceVideoClipSequence(input: ReplaceVideoClipSequenceInput): Promise<void>;
678
- /** Re-trim existing video clips (the user-facing "adjust duration" gesture is a trim of the source window). */
679
- adjustVideoClipDuration(input: AdjustVideoClipDurationInput): Promise<void>;
680
- /** Add speeches (and their captions). */
681
- addSpeeches(input: AddSpeechesInput): Promise<void>;
682
- /** Delete speeches with their captions. */
683
- deleteSpeeches(input: DeleteSpeechesInput): Promise<void>;
684
- /** Move speeches in time. */
685
- moveSpeeches(input: MoveSpeechesInput): Promise<void>;
686
- /** Change a speech's script or voice. */
687
- changeSpeechScript(input: ChangeSpeechScriptInput): Promise<void>;
688
- changeSpeechVoice(input: ChangeSpeechVoiceInput): Promise<void>;
689
- adjustSpeechVolume(input: AdjustSpeechVolumeInput): Promise<void>;
690
- /** Toggle caption visibility (the caption track's `is_hidden` flag). */
691
- setCaptionVisibility(input: SetCaptionVisibilityInput): Promise<void>;
692
- /** Set the caption visual style. */
693
- setCaptionStyle(input: SetCaptionStyleInput): Promise<void>;
694
- /** Set the document BGM. */
695
- setBgm(input: SetBgmInput): Promise<void>;
696
- /** Remove the document BGM. */
697
- deleteBgm(input: DeleteBgmInput): Promise<void>;
698
- adjustBgmVolume(input: AdjustBgmVolumeInput): Promise<void>;
699
- }
700
- type JsonPrimitive = string | number | boolean | null;
701
- type JsonValue = JsonPrimitive | JsonObject | JsonValue[];
702
- interface JsonObject {
703
- [key: string]: JsonValue;
704
- }
705
- type KnownEntityKind = 'axvideo' | 'timeline' | 'track' | 'clip' | 'asset' | 'video' | 'audio' | 'voice' | 'image' | 'sequence-marker' | 'viewport' | 'audio-script' | 'phonetic-script' | 'caption';
706
- type KnownRelationKind = 'timeline-track' | 'track-clip' | 'clip-marker' | 'marker-content' | 'axvideo-marker' | 'marker-timeline' | 'physical-asset' | 'generated' | 'phonetic-script-provenance' | 'caption-provenance' | 'caption-alignment';
707
- interface BoundedNativeSequencePayload extends JsonObject {
708
- /** Use factual recalled coordinates; never invent an end or duration. */
9
+ interface BoundedDerivedSequencePayload extends JsonObject {
709
10
  extent: {
710
11
  kind: 'bounded';
711
12
  start: number;
712
13
  end: number;
713
14
  };
714
- sampling: 'native';
715
- coordinateSpace: JsonValue;
716
- }
717
- interface UnboundedConstantSequencePayload extends JsonObject {
718
- extent: {
719
- kind: 'unbounded';
720
- start: number;
721
- };
722
- sampling: 'constant';
15
+ sampling: 'derived';
723
16
  coordinateSpace: JsonValue;
724
17
  }
725
- interface BoundedDerivedSequencePayload extends JsonObject {
18
+ interface BoundedNativeSequencePayload extends JsonObject {
19
+ /** Factual coordinates from recalled media metadata; never invent an end/duration. */
726
20
  extent: {
727
21
  kind: 'bounded';
728
22
  start: number;
729
23
  end: number;
730
24
  };
731
- sampling: 'derived';
25
+ sampling: 'native';
732
26
  coordinateSpace: JsonValue;
733
27
  }
734
- type ScriptTextSegment = JsonObject & {
735
- segmentId: string;
736
- text: string;
737
- language?: string;
28
+ interface CaptionFontDescriptor {
29
+ readonly system: 'font-library';
30
+ readonly key: string;
31
+ }
32
+ interface CaptionStyleFields {
33
+ readonly font?: CaptionFontDescriptor;
34
+ readonly fontSize?: number;
35
+ readonly fontColor?: string;
36
+ readonly fontWeight?: number;
37
+ readonly entranceAnimation?: string;
38
+ readonly entranceAnimationDurationMs?: number;
39
+ readonly strokeColor?: string;
40
+ readonly strokeWidth?: number;
41
+ readonly positionX?: number;
42
+ readonly positionY?: number;
43
+ }
44
+ type ClipEntityId = EntityId;
45
+ type ClipPlacement = {
46
+ readonly kind: 'sequential';
47
+ readonly order: number;
48
+ } | {
49
+ readonly kind: 'absolute';
50
+ readonly targetRange: SequenceRange<number>;
51
+ } | {
52
+ readonly kind: 'anchored';
53
+ readonly hostClipEntityId: string;
54
+ readonly anchorOffset: number;
738
55
  };
56
+ type CreateEntityInput = { [K in KnownEntityKind]: {
57
+ entity_id?: string;
58
+ entity_kind: K;
59
+ payload: EntityPayloadByKind[K];
60
+ } }[KnownEntityKind];
61
+ interface DeleteBgmInput {
62
+ readonly timelineEntityId: string;
63
+ }
64
+ interface DeleteClipInput {
65
+ readonly clipEntityId: string;
66
+ }
67
+ interface DeleteClipTreeInput {
68
+ readonly clipEntityIds: readonly string[];
69
+ readonly onAnchored: 'cascade' | 'detach';
70
+ }
71
+ interface DeleteEntityInput {
72
+ entity_id: string;
73
+ }
74
+ interface DeleteVoiceoverInput {
75
+ readonly voiceoverClipEntityIds: readonly string[];
76
+ }
77
+ type EmptyRelationKind = 'timeline-track' | 'track-clip' | 'clip-marker' | 'marker-content' | 'axvideo-marker' | 'marker-timeline';
78
+ interface EntityFacade {
79
+ list(): SandboxEntity[];
80
+ get(entityId: string): SandboxEntity | null;
81
+ /** Return every explicitly imported Asset entity for a Memota asset id. */
82
+ findByAssetId(assetId: string): SandboxEntity<'asset'>[];
83
+ create(input: CreateEntityInput): string;
84
+ /** Replace one Entity's owned payload without changing its identity or kind. */
85
+ update(input: UpdateEntityInput): void;
86
+ /** Delete an Entity only after all of its incident Relations have been explicitly unlinked. */
87
+ delete(input: DeleteEntityInput): void;
88
+ /** Import one physical asset without implying a one-to-one media Entity mapping. */
89
+ importAsset(input: ImportAssetInput): string;
90
+ }
91
+ type EntityId = string;
739
92
  interface EntityPayloadByKind {
740
93
  axvideo: BoundedDerivedSequencePayload;
741
94
  timeline: JsonObject;
@@ -744,6 +97,7 @@ interface EntityPayloadByKind {
744
97
  role?: string;
745
98
  };
746
99
  clip: JsonObject;
100
+ /** Asset-owned metadata. Peer media associations belong in physical-asset Relations. */
747
101
  asset: JsonObject;
748
102
  video: BoundedNativeSequencePayload;
749
103
  audio: BoundedNativeSequencePayload;
@@ -765,6 +119,8 @@ interface EntityPayloadByKind {
765
119
  value: number;
766
120
  };
767
121
  timeRemapping?: JsonValue;
122
+ anchorOffset?: number;
123
+ durationPolicy?: 'timeline';
768
124
  };
769
125
  viewport: JsonObject;
770
126
  'audio-script': JsonObject & {
@@ -775,141 +131,364 @@ interface EntityPayloadByKind {
775
131
  };
776
132
  caption: BoundedNativeSequencePayload;
777
133
  }
778
- type CreateEntityInput = { [K in KnownEntityKind]: {
779
- entity_id?: string;
780
- entity_kind: K;
781
- payload: EntityPayloadByKind[K];
782
- } }[KnownEntityKind];
134
+ interface EntityStoreSnapshot {
135
+ revision: number;
136
+ entities: SandboxEntity[];
137
+ relations: SandboxRelation[];
138
+ }
139
+ interface ImageMediaAssetFact {
140
+ readonly assetId: string;
141
+ readonly kind: 'image';
142
+ readonly storageKey?: string;
143
+ }
783
144
  interface ImportAssetInput {
784
145
  asset_id: string;
785
146
  entity_id?: string;
786
147
  payload?: JsonObject;
787
148
  }
788
- interface SandboxEntity<K extends KnownEntityKind = KnownEntityKind> {
789
- entity_id: string;
790
- entity_kind: K;
791
- payload: EntityPayloadByKind[K];
149
+ interface InsertClipInput {
150
+ readonly trackEntityId: string;
151
+ /** Existing Sequence media Entity id. Asset ids and URLs are not content ids. */
152
+ readonly contentEntityId: string;
153
+ readonly sourceRange: SequenceRange<number>;
154
+ readonly duration: SequenceDuration<number>;
155
+ readonly targetRange?: SequenceRange<number>;
156
+ readonly clipPayload?: JsonObject;
157
+ }
158
+ interface InsertMediaClipInput {
159
+ readonly timelineEntityId: string;
160
+ readonly clipEntityId?: string;
161
+ readonly media: VisualMediaAssetFact;
162
+ /** Source/display window in whole milliseconds. Images use this as their finite display span. */
163
+ readonly sourceRange: SequenceRange<number>;
164
+ readonly placement: ClipPlacement;
165
+ readonly volume?: number;
166
+ }
167
+ interface InsertMediaClipsInput {
168
+ readonly timelineEntityId: string;
169
+ readonly clips: readonly ReplacementMediaClipInput[];
170
+ /** One placement decision for the whole input-ordered block. */
171
+ readonly insertion: MediaClipInsertion;
172
+ }
173
+ interface InsertPlacedClipInput {
174
+ readonly trackEntityId: string;
175
+ readonly contentEntityId: string;
176
+ readonly sourceRange: SequenceRange<number>;
177
+ readonly duration: SequenceDuration<number>;
178
+ readonly placement: ClipPlacement;
179
+ readonly clipPayload?: JsonObject;
180
+ /** Stable caller-owned placement identity, when one already exists outside the graph. */
181
+ readonly clipEntityId?: string;
792
182
  }
793
- interface SandboxRelation {
794
- relation_id: string;
795
- relation_kind: KnownRelationKind;
796
- endpoint_0_entity_id: string;
797
- endpoint_1_entity_id: string;
798
- metadata: JsonObject;
799
- trace: JsonObject;
183
+ interface JsonObject {
184
+ [key: string]: JsonValue;
800
185
  }
801
- type EmptyRelationKind = 'timeline-track' | 'track-clip' | 'clip-marker' | 'marker-content' | 'axvideo-marker' | 'marker-timeline';
802
- type LinkRelationInput = {
186
+ type JsonPrimitive = string | number | boolean | null;
187
+ type JsonValue = JsonPrimitive | JsonObject | JsonValue[];
188
+ type KnownEntityKind = 'axvideo' | 'timeline' | 'track' | 'clip' | 'asset' | 'video' | 'audio' | 'voice' | 'image' | 'sequence-marker' | 'viewport' | 'audio-script' | 'phonetic-script' | 'caption';
189
+ type KnownRelationKind = 'timeline-track' | 'track-clip' | 'clip-marker' | 'marker-content' | 'axvideo-marker' | 'marker-timeline' | 'physical-asset' | 'generated' | 'phonetic-script-provenance' | 'caption-provenance' | 'caption-alignment' | 'clip-anchor' | 'audio-script-render';
190
+ interface LinearClipSpeed {
191
+ readonly kind: 'linear';
192
+ readonly rate: number;
193
+ readonly mode?: string;
194
+ }
195
+ interface LinkAudioScriptRenderRelationInput {
196
+ relation_id?: string;
197
+ output_entity_id: string;
198
+ script_entity_id: string;
199
+ trace?: JsonObject;
200
+ }
201
+ interface LinkClipAnchorRelationInput {
202
+ relation_id?: string;
203
+ child_clip_entity_id: string;
204
+ host_clip_entity_id: string;
205
+ trace?: JsonObject;
206
+ }
207
+ interface LinkGeneratedRelationInput {
208
+ relation_id?: string;
209
+ output_entity_id: string;
210
+ input_entity_id: string;
211
+ trace?: JsonObject;
212
+ }
213
+ interface LinkRelationBase {
803
214
  relation_id?: string;
804
- relation_kind: EmptyRelationKind;
805
215
  endpoint_0_entity_id: string;
806
216
  endpoint_1_entity_id: string;
217
+ trace?: JsonObject;
218
+ }
219
+ type LinkRelationInput = (LinkRelationBase & {
220
+ relation_kind: EmptyRelationKind;
807
221
  metadata?: {
808
222
  [key: string]: never;
809
223
  };
810
- trace?: JsonObject;
811
- } | {
812
- relation_id?: string;
813
- relation_kind: 'physical-asset'; /** Canonical endpoint 0 is sequence media; endpoint 1 is Asset. */
814
- endpoint_0_entity_id: string;
815
- endpoint_1_entity_id: string;
224
+ }) | (LinkRelationBase & {
225
+ relation_kind: 'physical-asset';
816
226
  metadata?: JsonObject;
817
- trace?: JsonObject;
818
- } | {
819
- relation_id?: string;
227
+ }) | (LinkRelationBase & {
820
228
  relation_kind: 'phonetic-script-provenance' | 'caption-provenance';
821
- endpoint_0_entity_id: string;
822
- endpoint_1_entity_id: string;
823
229
  metadata: JsonObject & {
824
230
  segmentAlignment: JsonValue;
825
231
  };
826
- trace?: JsonObject;
827
- } | {
828
- relation_id?: string;
232
+ }) | (LinkRelationBase & {
829
233
  relation_kind: 'caption-alignment';
830
- endpoint_0_entity_id: string;
831
- endpoint_1_entity_id: string;
832
234
  metadata: JsonObject & {
833
235
  alignment: JsonValue;
834
236
  };
835
- trace?: JsonObject;
237
+ });
238
+ type MediaClipInsertion = {
239
+ readonly kind: 'before';
240
+ readonly clipEntityId: string;
241
+ } | {
242
+ readonly kind: 'after';
243
+ readonly clipEntityId: string;
244
+ } | {
245
+ readonly kind: 'firstStart';
246
+ readonly startMs: number;
836
247
  };
837
- interface LinkGeneratedRelationInput {
838
- relation_id?: string;
839
- /** Generated output media Entity; persisted as endpoint 0. */
840
- output_entity_id: string;
841
- /** Input media Entity used to generate the output; persisted as endpoint 1. */
842
- input_entity_id: string;
843
- trace?: JsonObject;
248
+ interface MoveClipInput {
249
+ readonly clipEntityId: string;
250
+ readonly trackEntityId: string;
251
+ }
252
+ interface MoveClipsToStartsInput {
253
+ readonly moves: readonly {
254
+ readonly clipEntityId: string;
255
+ readonly newStartMs: number;
256
+ }[];
257
+ /** Absolute-time drags preserve every voiceover's current visible landing. */
258
+ readonly onAnchored: 'keepAbsolute';
844
259
  }
845
- /** Explicit Entity authoring. Assets and media Entities are not one-to-one. */
846
- interface EntityApi {
847
- list(): SandboxEntity[];
848
- get(entityId: string): SandboxEntity | null;
849
- /** Call before importAsset; inspect every match and decide whether to reuse one. */
850
- findByAssetId(assetId: string): SandboxEntity<'asset'>[];
851
- create(input: CreateEntityInput): string;
852
- /** Create only an Asset Entity when no existing match should be reused; this does not infer media. */
853
- importAsset(input: ImportAssetInput): string;
260
+ interface MoveSequentialClipsInput {
261
+ readonly clipEntityIds: readonly string[];
262
+ readonly anchor: SequentialClipAnchor;
263
+ readonly onAnchored: 'follow' | 'keepAbsolute';
264
+ }
265
+ interface MoveVoiceoverInput {
266
+ readonly voiceoverClipEntityId: string;
267
+ /** Absolute requested timeline start; MEngine resolves and persists the host relation. */
268
+ readonly newStartMs: number;
269
+ }
270
+ interface PatchCaptionStyleInput {
271
+ readonly timelineEntityId: string;
272
+ readonly style: CaptionStyleFields;
854
273
  }
855
- /** Incident reads ignore endpoint position; relation semantics preserve it. */
856
- interface RelationApi {
274
+ interface RelationFacade {
857
275
  list(): SandboxRelation[];
276
+ /** Incident lookup is endpoint-agnostic; persisted endpoint positions stay unchanged. */
858
277
  of(entityId: string, relationKind?: KnownRelationKind): SandboxRelation[];
278
+ /** For physical-asset use sequence media as endpoint 0 and Asset as endpoint 1. */
859
279
  link(input: LinkRelationInput): string;
860
- /** Author ordered generated(output,input). */
280
+ /** Author ordered generated(output,input); generic link() deliberately rejects this kind. */
861
281
  linkGenerated(input: LinkGeneratedRelationInput): string;
282
+ /** Author ordered clip-anchor(child,host) without positional endpoint ambiguity. */
283
+ linkClipAnchor(input: LinkClipAnchorRelationInput): string;
284
+ /** Author ordered audio-script-render(output,script) without positional endpoint ambiguity. */
285
+ linkAudioScriptRender(input: LinkAudioScriptRenderRelationInput): string;
286
+ /** Remove a Relation by identity; endpoint replacement is an explicit unlink plus link. */
287
+ unlink(input: UnlinkRelationInput): void;
288
+ }
289
+ interface ReplaceClipContentInput {
290
+ readonly clipEntityId: string;
291
+ /** Existing Sequence media Entity id. Asset ids and URLs are not content ids. */
292
+ readonly contentEntityId: string;
293
+ readonly sourceRange: SequenceRange<number>;
294
+ readonly duration: SequenceDuration<number>;
295
+ readonly targetRange?: SequenceRange<number>;
296
+ readonly timeRemapping?: JsonValue;
297
+ }
298
+ interface ReplaceMediaClipInput {
299
+ readonly clipEntityId: string;
300
+ readonly media: VisualMediaAssetFact;
301
+ readonly sourceRange: SequenceRange<number>;
302
+ }
303
+ interface ReplaceSequentialClipsInput {
304
+ readonly timelineEntityId: string;
305
+ readonly oldClipEntityIds: readonly string[];
306
+ readonly newClips: readonly ReplacementMediaClipInput[];
307
+ readonly onAnchored: 'remap' | 'cascade';
308
+ }
309
+ interface ReplacementMediaClipInput {
310
+ readonly clipEntityId?: string;
311
+ readonly media: VisualMediaAssetFact;
312
+ readonly sourceRange: SequenceRange<number>;
313
+ readonly volume?: number;
862
314
  }
863
- /** Clip hit from `clipsInRange`. */
864
- interface TimelineClipDescriptor {
865
- id: string;
866
- start_ms: number;
867
- end_ms: number;
868
- duration_ms: number;
869
- speed_shift: unknown;
870
- volume: number | undefined;
871
- media_id: string | undefined;
872
- }
873
- /** Part descriptor from `part(id)`. */
874
- interface TimelinePartDescriptor {
875
- id: string;
876
- kind: string;
877
- lane: string;
878
- start_ms: number;
879
- end_ms: number;
880
- duration_ms: number;
881
- part: unknown;
882
- }
883
- /** Opaque VideoDraft projection (full IDL lives in host document types). */
884
- type VideoDraftProjection = {
885
- readonly timeline?: {
886
- readonly duration_ms?: number;
887
- };
888
- readonly [key: string]: unknown;
315
+ interface SandboxEntity<K extends KnownEntityKind = KnownEntityKind> {
316
+ entity_id: string;
317
+ entity_kind: K;
318
+ payload: EntityPayloadByKind[K];
319
+ }
320
+ interface SandboxRelation {
321
+ relation_id: string;
322
+ relation_kind: KnownRelationKind;
323
+ endpoint_0_entity_id: string;
324
+ endpoint_1_entity_id: string;
325
+ metadata: JsonObject;
326
+ trace: JsonObject;
327
+ }
328
+ type ScriptTextSegment = JsonObject & {
329
+ segmentId: string;
330
+ text: string;
331
+ language?: string;
889
332
  };
890
- /** Agent read surface over the forked document. */
333
+ type SequenceDuration<Span = unknown> = {
334
+ readonly mode: 'from-source';
335
+ } | {
336
+ readonly mode: 'fixed';
337
+ readonly value: Span;
338
+ };
339
+ interface SequenceRange<Point = unknown> {
340
+ readonly start: Point;
341
+ readonly end: Point;
342
+ }
343
+ type SequentialClipAnchor = {
344
+ readonly position: 'before' | 'after';
345
+ readonly clipEntityId: string;
346
+ } | {
347
+ readonly position: 'trackStart';
348
+ };
349
+ interface SetBgmInput {
350
+ readonly timelineEntityId: string;
351
+ readonly bgmClipEntityId: string;
352
+ readonly media: AudioMediaAssetFact;
353
+ readonly volume: number;
354
+ }
355
+ interface SetCaptionVisibilityInput {
356
+ readonly timelineEntityId: string;
357
+ readonly hidden: boolean;
358
+ }
359
+ interface SetClipPlacementInput {
360
+ readonly clipEntityId: string;
361
+ readonly placement: ClipPlacement;
362
+ }
363
+ interface SetClipSpeedInput {
364
+ readonly clipEntityId: string;
365
+ readonly timeRemapping: LinearClipSpeed | null;
366
+ }
367
+ interface SetClipVolumeInput {
368
+ readonly clipEntityId: string;
369
+ /** Playback gain in decibels. */
370
+ readonly volume: number;
371
+ }
372
+ interface TrimClipInput {
373
+ readonly clipEntityId: string;
374
+ readonly sourceRange: SequenceRange<number>;
375
+ }
376
+ interface UnboundedConstantSequencePayload extends JsonObject {
377
+ extent: {
378
+ kind: 'unbounded';
379
+ start: number;
380
+ };
381
+ sampling: 'constant';
382
+ coordinateSpace: JsonValue;
383
+ }
384
+ interface UnlinkRelationInput {
385
+ relation_id: string;
386
+ }
387
+ interface UpdateClipInput {
388
+ readonly clipEntityId: string;
389
+ /** Complete replacement for the Clip-owned payload. */
390
+ readonly payload: JsonObject;
391
+ }
392
+ interface UpdateClipMarkerInput {
393
+ readonly clipEntityId: string;
394
+ readonly sourceRange?: SequenceRange<number>;
395
+ /** Passing `undefined` explicitly removes the optional target range. */
396
+ readonly targetRange?: SequenceRange<number> | undefined;
397
+ readonly duration?: SequenceDuration<number>;
398
+ /** Passing `undefined` explicitly removes the optional remapping value. */
399
+ readonly timeRemapping?: JsonValue | undefined;
400
+ }
401
+ interface UpdateEntityInput {
402
+ entity_id: string;
403
+ payload: JsonObject;
404
+ }
405
+ interface VideoMediaAssetFact {
406
+ readonly assetId: string;
407
+ readonly kind: 'video';
408
+ readonly durationMs: number;
409
+ readonly storageKey?: string;
410
+ }
411
+ type VisualMediaAssetFact = ImageMediaAssetFact | VideoMediaAssetFact;
412
+ interface VoiceDescriptor {
413
+ readonly system: 'voice-library';
414
+ readonly key: string;
415
+ readonly name?: string;
416
+ }
417
+ interface VoiceMediaAssetFact {
418
+ /** Stable external speech result id, independent of the placed Clip id. */
419
+ readonly assetId: string;
420
+ readonly kind: 'voice';
421
+ readonly durationMs: number;
422
+ readonly storageKey: string;
423
+ readonly voice: VoiceDescriptor;
424
+ }
425
+ interface VoiceoverCaptionFact {
426
+ /** Stable placed caption identity supplied by the materialized side effect. */
427
+ readonly captionClipEntityId: string;
428
+ readonly text: string;
429
+ readonly startMs: number;
430
+ readonly durationMs: number;
431
+ readonly style?: CaptionStyleFields;
432
+ }
433
+ interface VoiceoverTakeInput {
434
+ readonly timelineEntityId: string;
435
+ /** Stable placed speech identity, distinct from media.assetId. */
436
+ readonly voiceoverClipEntityId: string;
437
+ readonly hostClipEntityId: string;
438
+ readonly anchorOffset: number;
439
+ readonly media: VoiceMediaAssetFact;
440
+ /** Complete spoken text; the editor owns the deterministic local script segment identity. */
441
+ readonly scriptText: string;
442
+ readonly volume: number;
443
+ readonly captions: readonly VoiceoverCaptionFact[];
444
+ }
445
+ interface VoiceoverTakeResult {
446
+ readonly voiceoverClipEntityId: string;
447
+ readonly voiceEntityId: string;
448
+ readonly audioScriptEntityId: string;
449
+ readonly captionClipEntityIds: readonly string[];
450
+ }
451
+ /** Timeline writes accept existing media Entity ids, never Memota asset ids or URLs. */
452
+ interface EditApi {
453
+ insertClip(input: InsertClipInput): ClipEntityId;
454
+ insertPlacedClip(input: InsertPlacedClipInput): ClipEntityId;
455
+ updateClipMarker(input: UpdateClipMarkerInput): void;
456
+ setClipPlacement(input: SetClipPlacementInput): void;
457
+ moveSequentialClips(input: MoveSequentialClipsInput): void;
458
+ moveClip(input: MoveClipInput): void;
459
+ replaceClipContent(input: ReplaceClipContentInput): void;
460
+ insertMediaClip(input: InsertMediaClipInput): ClipEntityId;
461
+ insertMediaClips(input: InsertMediaClipsInput): readonly ClipEntityId[];
462
+ replaceMediaClip(input: ReplaceMediaClipInput): void;
463
+ setClipVolume(input: SetClipVolumeInput): void;
464
+ setClipSpeed(input: SetClipSpeedInput): void;
465
+ trimClip(input: TrimClipInput): void;
466
+ replaceSequentialClips(input: ReplaceSequentialClipsInput): readonly ClipEntityId[];
467
+ deleteClip(input: DeleteClipInput): void;
468
+ deleteClipTree(input: DeleteClipTreeInput): void;
469
+ updateClip(input: UpdateClipInput): void;
470
+ upsertVoiceoverTake(input: VoiceoverTakeInput): VoiceoverTakeResult;
471
+ moveVoiceover(input: MoveVoiceoverInput): void;
472
+ moveClipsToStarts(input: MoveClipsToStartsInput): void;
473
+ deleteVoiceover(input: DeleteVoiceoverInput): void;
474
+ setBgm(input: SetBgmInput): ClipEntityId;
475
+ deleteBgm(input: DeleteBgmInput): void;
476
+ setCaptionVisibility(input: SetCaptionVisibilityInput): void;
477
+ patchCaptionStyle(input: PatchCaptionStyleInput): void;
478
+ }
891
479
  interface TimelineApi {
892
- /** Snapshot the current VideoDraft projection. */
893
- snapshot(): VideoDraftProjection;
894
- /** Clips whose midpoint falls in `[startMs, endMs)`. */
895
- clipsInRange(startMs: number, endMs: number): TimelineClipDescriptor[];
896
- /** Look up a part by id, or null if missing. */
897
- part(id: string): TimelinePartDescriptor | null;
898
- }
899
- /** Opaque checkpoint handle for rollback. */
480
+ snapshot(): EntityStoreSnapshot;
481
+ }
900
482
  interface SandboxCheckpoint {
901
483
  readonly index: number;
902
484
  }
903
485
  declare const edit: EditApi;
904
486
  declare const timeline: TimelineApi;
905
- declare const entities: EntityApi;
906
- declare const relations: RelationApi;
907
- /** Capture a rollback point. */
487
+ declare const entities: EntityFacade;
488
+ declare const relations: RelationFacade;
908
489
  declare function checkpoint(): SandboxCheckpoint;
909
- /** Roll the sandbox document back to a prior checkpoint. */
910
490
  declare function rollbackTo(cp: SandboxCheckpoint): void;
911
- /** Host-injected, pre-materialized facts. Validate each field before use. */
912
491
  declare const inputs: Readonly<Record<string, unknown>>;
913
492
  //#endregion
914
- export type { AddSpeechesInput, AddVideoClipsInput, AdjustBgmVolumeInput, AdjustSpeechVolumeInput, AdjustVideoClipDurationInput, AdjustVideoClipVolumeInput, BoundedDerivedSequencePayload, BoundedNativeSequencePayload, ChangeSpeechScriptInput, ChangeSpeechVoiceInput, CreateEntityInput, DeleteBgmInput, DeleteSpeechesInput, DeleteVideoClipsInput, EditApi, EmptyRelationKind, EntityApi, EntityPayloadByKind, ImportAssetInput, JsonObject, JsonPrimitive, JsonValue, KnownEntityKind, KnownRelationKind, LinkGeneratedRelationInput, LinkRelationInput, MoveSpeechesInput, MoveVideoClipsByAnchorInput, MoveVideoClipsInput, RelationApi, ReplaceVideoClipContentInput, ReplaceVideoClipSequenceInput, SandboxCheckpoint, SandboxEntity, SandboxRelation, ScriptTextSegment, SetBgmInput, SetCaptionStyleInput, SetCaptionVisibilityInput, SetVideoClipSpeedShiftInput, SpeechAssets, SpeedShift, TimelineApi, TimelineClipDescriptor, TimelinePartDescriptor, UnboundedConstantSequencePayload, VideoDraftProjection, Voice, checkpoint, edit, entities, inputs, relations, rollbackTo, timeline };
493
+ export type { AudioMediaAssetFact, BoundedDerivedSequencePayload, BoundedNativeSequencePayload, CaptionFontDescriptor, CaptionStyleFields, ClipEntityId, ClipPlacement, CreateEntityInput, DeleteBgmInput, DeleteClipInput, DeleteClipTreeInput, DeleteEntityInput, DeleteVoiceoverInput, EditApi, EmptyRelationKind, EntityFacade, EntityId, EntityPayloadByKind, EntityStoreSnapshot, ImageMediaAssetFact, ImportAssetInput, InsertClipInput, InsertMediaClipInput, InsertMediaClipsInput, InsertPlacedClipInput, JsonObject, JsonPrimitive, JsonValue, KnownEntityKind, KnownRelationKind, LinearClipSpeed, LinkAudioScriptRenderRelationInput, LinkClipAnchorRelationInput, LinkGeneratedRelationInput, LinkRelationInput, MediaClipInsertion, MoveClipInput, MoveClipsToStartsInput, MoveSequentialClipsInput, MoveVoiceoverInput, PatchCaptionStyleInput, RelationFacade, ReplaceClipContentInput, ReplaceMediaClipInput, ReplaceSequentialClipsInput, ReplacementMediaClipInput, SandboxCheckpoint, SandboxEntity, SandboxRelation, ScriptTextSegment, SequenceDuration, SequenceRange, SequentialClipAnchor, SetBgmInput, SetCaptionVisibilityInput, SetClipPlacementInput, SetClipSpeedInput, SetClipVolumeInput, TimelineApi, TrimClipInput, UnboundedConstantSequencePayload, UnlinkRelationInput, UpdateClipInput, UpdateClipMarkerInput, UpdateEntityInput, VideoMediaAssetFact, VisualMediaAssetFact, VoiceDescriptor, VoiceMediaAssetFact, VoiceoverCaptionFact, VoiceoverTakeInput, VoiceoverTakeResult, checkpoint, edit, entities, inputs, relations, rollbackTo, timeline };
915
494
  //# sourceMappingURL=sandbox-api.d.mts.map