@pixerate/editor 0.91.0 → 0.92.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.
@@ -330,7 +330,28 @@ interface VideoColorClip extends VideoClipBase {
330
330
  type: 'color';
331
331
  color: string;
332
332
  }
333
- type VideoClip = VideoMediaClip | VideoTextClip | VideoColorClip;
333
+ /**
334
+ * A compound clip: a nested sequence (see `VideoProject.sequences`) played as one picture and one
335
+ * sound. It plays the sequence's own time from `in`, at normal speed. Its opacity, transform, blend,
336
+ * grade, fades, transitions and animations apply to the sequence's composite, not to each of its
337
+ * clips; its volume and fades apply to the sequence's mixed sound.
338
+ */
339
+ interface VideoSequenceClip extends VideoClipBase {
340
+ type: 'sequence';
341
+ /** The id of the sequence it plays (in `project.sequences`). */
342
+ sequence: string;
343
+ /** Where in the sequence's time it starts (ms, default 0). */
344
+ in?: number;
345
+ /** Gain on the sequence's sound (1 = unchanged, default 1), or keyframes. */
346
+ volume?: VideoAnimatable;
347
+ /** Silences the sequence's sound. */
348
+ muted?: boolean;
349
+ /** Shape of the sound's fade in (default linear). */
350
+ fadeInCurve?: VideoFadeCurve;
351
+ /** Shape of the sound's fade out (default linear). */
352
+ fadeOutCurve?: VideoFadeCurve;
353
+ }
354
+ type VideoClip = VideoMediaClip | VideoTextClip | VideoColorClip | VideoSequenceClip;
334
355
  type VideoClipType = VideoClip['type'];
335
356
  /**
336
357
  * How a clip is placed where others already are: `refuse` an overlap (the default), `overwrite`
@@ -339,7 +360,7 @@ type VideoClipType = VideoClip['type'];
339
360
  */
340
361
  type VideoPlacementMode = 'refuse' | 'overwrite' | 'insert';
341
362
  declare const VIDEO_PLACEMENT_MODES: readonly ["refuse", "overwrite", "insert"];
342
- declare const VIDEO_CLIP_TYPES: readonly ["media", "text", "color"];
363
+ declare const VIDEO_CLIP_TYPES: readonly ["media", "text", "color", "sequence"];
343
364
  interface VideoMarker {
344
365
  id: string;
345
366
  time: number;
@@ -347,6 +368,17 @@ interface VideoMarker {
347
368
  /** CSS colour. */
348
369
  color?: string;
349
370
  }
371
+ /**
372
+ * A nested sequence: tracks of clips with their own timeline from 0, played inside the project by
373
+ * compound clips (`type: 'sequence'`). Its frame is the project's frame size, transparent where no
374
+ * clip covers it. A sequence may hold compound clips of other sequences, but never itself (directly
375
+ * or through others).
376
+ */
377
+ interface VideoSequence {
378
+ id: string;
379
+ name?: string;
380
+ tracks: VideoTrack[];
381
+ }
350
382
  interface VideoProject {
351
383
  version: 1;
352
384
  name?: string;
@@ -359,6 +391,8 @@ interface VideoProject {
359
391
  background?: string;
360
392
  assets: VideoAsset[];
361
393
  tracks: VideoTrack[];
394
+ /** Nested sequences that compound clips play (see `VideoSequence`). */
395
+ sequences?: VideoSequence[];
362
396
  markers?: VideoMarker[];
363
397
  }
364
398
 
@@ -387,11 +421,14 @@ declare function parseVideoAsset(v: unknown, path?: string): VideoAsset;
387
421
  declare function parseVideoAssetProxies(v: unknown, path: string): VideoAssetProxy[] | undefined;
388
422
  declare function parseVideoClip(v: unknown, path?: string): VideoClip;
389
423
  declare function parseVideoTrack(v: unknown, path?: string): VideoTrack;
424
+ /** A nested sequence `{ id, name, tracks }` (see `VideoSequence`). */
425
+ declare function parseVideoSequence(v: unknown, path?: string): VideoSequence;
390
426
  declare function parseVideoMarker(v: unknown, path?: string): VideoMarker;
391
427
  /**
392
428
  * Reads a project from JSON text or an object, checking every field. Throws an error naming the
393
429
  * first bad field (`tracks[0].clips[2].duration must be greater than 0.`). Ids must be unique
394
- * within assets, tracks, clips and markers. Overlaps and missing media are left to
430
+ * within assets, tracks, sequences, clips (across the project and its sequences) and markers.
431
+ * Overlaps, missing media and sequences, and sequences that contain themselves are left to
395
432
  * `checkVideoProject`, so a project with problems can still be opened and fixed.
396
433
  */
397
434
  declare function parseVideoProject(input: unknown): VideoProject;
@@ -415,7 +452,10 @@ declare const videoClipEnd: (clip: VideoClip) => number;
415
452
  declare const videoTrackSyncLocked: (track: VideoTrack) => boolean;
416
453
  /** Playback speed of a clip (1 for titles and colours). */
417
454
  declare const videoClipSpeed: (clip: VideoClip) => number;
418
- /** The stretch of source a media clip plays (ms), or `null` for titles and colours. */
455
+ /**
456
+ * The stretch of source a media clip plays (ms), or of its sequence's time a compound plays; `null`
457
+ * for titles and colours.
458
+ */
419
459
  declare function videoClipSourceRange(clip: VideoClip): {
420
460
  in: number;
421
461
  out: number;
@@ -449,6 +489,22 @@ declare const formatVideoSeconds: (time: number) => string;
449
489
  /** Whether an asset carries sound: audio, or video not marked `hasAudio: false`. */
450
490
  declare const videoAssetHasSound: (asset: VideoAsset | undefined) => boolean;
451
491
  declare function videoAssetMap(project: VideoProject): Map<string, VideoAsset>;
492
+ declare function videoSequenceMap(project: VideoProject): Map<string, VideoSequence>;
493
+ /** A sequence's length: the end of its last clip (ms). */
494
+ declare function videoSequenceDuration(sequence: Pick<VideoSequence, 'tracks'>): number;
495
+ /** The sequences a sequence's compound clips play directly (ids, in order, without repeats). */
496
+ declare const videoSequenceChildren: (sequence: Pick<VideoSequence, "tracks">) => string[];
497
+ /**
498
+ * A path of sequence ids that leads from `id` back to itself through compound clips (`[a, b, a]`),
499
+ * or `null` when it contains no cycle. Evaluating and exporting skip a compound that would close
500
+ * one, and `checkVideoProject` reports it.
501
+ */
502
+ declare function findVideoSequenceCycle(project: VideoProject, id: string): string[] | null;
503
+ /** Every track with its sequence (`undefined` for the project's own), the project's first. */
504
+ declare function allVideoTracks(project: VideoProject): {
505
+ sequence?: string;
506
+ track: VideoTrack;
507
+ }[];
452
508
  /** A track's clips in timeline order. */
453
509
  declare function sortedVideoClips(track: VideoTrack): VideoClip[];
454
510
  interface VideoClipLocation {
@@ -459,7 +515,14 @@ interface VideoClipLocation {
459
515
  index: number;
460
516
  }
461
517
  declare function findVideoClip(project: VideoProject, id: string): VideoClipLocation | null;
518
+ /** Every clip id in the project, its sequences' clips included (ids are unique across them). */
462
519
  declare function allVideoClipIds(project: VideoProject): string[];
520
+ /** The sequence a clip inside a sequence belongs to, with its track; `null` for clips of the project's own tracks (or no clip). */
521
+ declare function findVideoSequenceClip(project: VideoProject, id: string): {
522
+ sequence: VideoSequence;
523
+ track: VideoTrack;
524
+ clip: VideoClip;
525
+ } | null;
463
526
  /** Total length: the end of the last clip (ms). */
464
527
  declare function videoProjectDuration(project: VideoProject): number;
465
528
  /** The clip that ends where `clip` starts on its track (a cut), if any. */
@@ -469,9 +532,10 @@ declare function videoClipAfter(track: VideoTrack, clip: VideoClip): VideoClip |
469
532
  /**
470
533
  * Timeline time (ms) a clip can run past its edges into source media: before its in point
471
534
  * (`before`) and after its out point (`after`). Unlimited for stills, titles, colours and media
472
- * whose length is unknown.
535
+ * whose length is unknown. A compound's handles are its sequence's time before `in` and after its
536
+ * out point (pass `sequences`; without them they count as unlimited).
473
537
  */
474
- declare function videoClipHandles(clip: VideoClip, assets: Map<string, VideoAsset>): {
538
+ declare function videoClipHandles(clip: VideoClip, assets: Map<string, VideoAsset>, sequences?: Map<string, VideoSequence>): {
475
539
  before: number;
476
540
  after: number;
477
541
  };
@@ -519,13 +583,15 @@ declare function videoClipKeyframes(clip: VideoClip): {
519
583
  keys: ReturnType<typeof videoKeysOf>;
520
584
  }[];
521
585
  type VideoIssueSeverity = 'error' | 'warning' | 'note';
522
- declare const VIDEO_ISSUE_CODES: readonly ["missing-asset", "wrong-track", "overlap", "source-overrun", "transition-without-cut", "transition-too-long", "transition-handles", "fades-too-long", "animations-too-long", "animation-keyed", "keyframes-outside-clip", "unknown-duration", "unused-asset", "marker-past-end", "empty"];
586
+ declare const VIDEO_ISSUE_CODES: readonly ["missing-asset", "missing-sequence", "sequence-cycle", "wrong-track", "overlap", "source-overrun", "transition-without-cut", "transition-too-long", "transition-handles", "fades-too-long", "animations-too-long", "animation-keyed", "keyframes-outside-clip", "unknown-duration", "unused-asset", "unused-sequence", "marker-past-end", "empty"];
523
587
  type VideoIssueCode = (typeof VIDEO_ISSUE_CODES)[number];
524
588
  interface VideoIssue {
525
589
  code: VideoIssueCode;
526
590
  severity: VideoIssueSeverity;
527
591
  /** One sentence saying what is wrong and how to fix it. */
528
592
  message: string;
593
+ /** The sequence whose track it is about (absent for the project's own tracks). */
594
+ sequence?: string;
529
595
  track?: string;
530
596
  clip?: string;
531
597
  asset?: string;
@@ -537,7 +603,8 @@ declare const videoIssueKey: (i: VideoIssue) => string;
537
603
  * Everything wrong with a project, errors first: clips pointing at missing media or sitting on the
538
604
  * wrong kind of track, overlaps, clips running past the end of their source, transitions with no
539
605
  * cut to play over or not enough media either side of it, and softer notes (unused assets, markers
540
- * past the end). Edits never add errors (see `applyVideoEdits`), so errors only come from a loaded file.
606
+ * past the end). Sequences' tracks are checked the same way, and compound clips must play a
607
+ * sequence that exists, does not contain itself and is long enough. Edits never add errors (see `applyVideoEdits`), so errors only come from a loaded file.
541
608
  */
542
609
  declare function checkVideoProject(project: VideoProject): VideoIssue[];
543
610
 
@@ -754,15 +821,29 @@ interface VideoRect {
754
821
  }
755
822
  /** One picture in a frame, in draw order (first is at the back). */
756
823
  interface VideoLayer {
757
- /** The clip it comes from, or `transition:<clip>` for a dip's colour. */
824
+ /**
825
+ * The clip it comes from, or `transition:<clip>` for a dip's colour. Inside a compound clip it is
826
+ * the path of clip ids from the project's own track (`compound/inner`), so the same sequence
827
+ * played twice gives distinct layers.
828
+ */
758
829
  clip: string;
830
+ /** The track it is on (inside a compound: the sequence's track). */
759
831
  track: string;
760
832
  type: VideoClip['type'];
761
833
  /** For media: the asset, its kind and `src`, and the moment of the source to show (ms). */
762
834
  asset?: string;
763
835
  assetKind?: VideoAsset['kind'];
764
836
  src?: string;
837
+ /** For media: the moment of the source to show (ms); for a compound: the moment of its sequence. */
765
838
  sourceTime?: number;
839
+ /** For a compound: the sequence it plays. */
840
+ sequence?: string;
841
+ /**
842
+ * For a compound: the sequence's frame at `sourceTime`, back to front in the sequence's own frame
843
+ * (the project's size, transparent where nothing covers it). They are drawn together as one
844
+ * picture, which this layer's rect, rotation, opacity, blend, grade, wipe and iris then apply to.
845
+ */
846
+ layers?: VideoLayer[];
766
847
  /** 0–1, after fades and transitions. */
767
848
  opacity: number;
768
849
  /** Where the fitted picture sits before rotation (its centre is the rotation centre). */
@@ -796,13 +877,15 @@ interface VideoLayer {
796
877
  }
797
878
  /** One sound playing at a moment. */
798
879
  interface VideoAudioSource {
880
+ /** The clip it comes from (inside a compound: the path of clip ids, `compound/inner`). */
799
881
  clip: string;
882
+ /** The track it is on (inside a compound: the sequence's track). */
800
883
  track: string;
801
884
  asset: string;
802
885
  src: string;
803
886
  /** The moment of the source playing (ms). */
804
887
  sourceTime: number;
805
- /** Gain after clip and track volume, fades and transitions (0 = silent). */
888
+ /** Gain after clip and track volume, fades and transitions, and those of any compound it plays in (0 = silent). */
806
889
  gain: number;
807
890
  speed: number;
808
891
  }
@@ -844,16 +927,23 @@ declare const videoTransitionEase: (progress: number) => number;
844
927
  /** Gain of a fade shape `x` of the way up (0–1); a fade out uses the time left, so it mirrors the fade in. */
845
928
  declare function videoFadeCurveGain(curve: VideoFadeCurve | undefined, x: number): number;
846
929
  /**
847
- * A media clip's own gain at clip time `clipTime` (ms): its volume (or volume keyframes) times its
930
+ * A media or compound clip's own gain at clip time `clipTime` (ms): its volume (or volume keyframes) times its
848
931
  * shaped fades. Leaves out track volume and transitions, which depend on the timeline around it.
849
932
  */
850
933
  declare function videoClipSoundGain(clip: VideoClip, clipTime: number): number;
851
934
  /**
852
935
  * What plays at `time` (ms): the pictures to draw, back to front, with their placement, opacity
853
936
  * and the moment of source each shows, and the sounds with their gain. A pure function of the
854
- * project and the time, so previews, exporters and agents all agree on every frame.
937
+ * project and the time, so previews, exporters and agents all agree on every frame. A compound
938
+ * clip is one layer holding its sequence's frame (`layers`), and its sounds are mixed in with the
939
+ * compound's volume, fades and transitions.
855
940
  */
856
941
  declare function videoFrameAt(project: VideoProject, time: number): VideoFrame;
942
+ /**
943
+ * Every layer of a frame that draws a picture of its own, compounds opened up (each compound's
944
+ * layers in place of it), back to front. Hosts use it to find the media a frame needs.
945
+ */
946
+ declare function videoFrameLeafLayers(layers: readonly VideoLayer[]): VideoLayer[];
857
947
 
858
948
  /**
859
949
  * Sound levels of a piece of audio, small enough to keep for every asset: a pyramid of min / max
@@ -1549,7 +1639,11 @@ interface VideoSvgOptions {
1549
1639
  /** The loaded table of a grade's LUT `src`; drawn as an approximation (curves and a matrix). Without it LUTs are left out. */
1550
1640
  lutFor?: (src: string) => VideoLut | null | undefined;
1551
1641
  }
1552
- /** A frame as standalone SVG: images and posters as `<image>`, video without one as a labelled box. */
1642
+ /**
1643
+ * A frame as standalone SVG: images and posters as `<image>`, video without one as a labelled box.
1644
+ * A compound clip is a `<g>` (isolated, so blends inside it mix only with its own layers) holding
1645
+ * its sequence's layers scaled into its rect, with its opacity, blend, grade filter and clips on it.
1646
+ */
1553
1647
  declare function videoFrameToSvg(frame: VideoFrame, options?: VideoSvgOptions, assets?: VideoProject['assets']): string;
1554
1648
  /** The project at `time` as SVG. */
1555
1649
  declare function videoProjectSvg(project: VideoProject, time: number, options?: VideoSvgOptions): string;
@@ -1571,7 +1665,10 @@ type VideoCanvasContext = Pick<CanvasRenderingContext2D, 'save' | 'restore' | 'f
1571
1665
  lineWidth: number;
1572
1666
  strokeRect(x: number, y: number, w: number, h: number): void;
1573
1667
  };
1574
- /** An offscreen canvas `drawVideoFrame` draws a LUT-graded layer on before running its pixels through the LUT. */
1668
+ /**
1669
+ * An offscreen canvas `drawVideoFrame` draws on: a compound clip's layers before laying them on the
1670
+ * frame as one picture, or a LUT-graded layer before running its pixels through the LUT.
1671
+ */
1575
1672
  interface VideoScratchCanvas {
1576
1673
  canvas: CanvasImageSource;
1577
1674
  ctx: VideoCanvasContext & Pick<CanvasRenderingContext2D, 'getImageData' | 'putImageData' | 'clearRect'>;
@@ -1581,8 +1678,13 @@ interface VideoDrawOptions {
1581
1678
  defineSvgFilter?: (id: string, markup: string) => void;
1582
1679
  /** The loaded table of a grade's LUT `src`, or nothing while it loads (the layer is drawn without it). */
1583
1680
  lutFor?: (src: string) => VideoLut | null | undefined;
1584
- /** A cleared-on-use offscreen canvas of the given canvas-pixel size, for LUT layers (none: LUTs are left out). */
1585
- scratch?: (width: number, height: number) => VideoScratchCanvas | null;
1681
+ /**
1682
+ * An offscreen canvas of the given canvas-pixel size, for compound clips and LUT layers; `slot`
1683
+ * numbers the ones in use at once (a compound inside a compound needs its own), so return the
1684
+ * same canvas for the same slot and a different one for each slot. Without it LUTs are left out
1685
+ * and a compound's layers are drawn straight onto the frame, without its opacity, blend and grade.
1686
+ */
1687
+ scratch?: (width: number, height: number, slot: number) => VideoScratchCanvas | null;
1586
1688
  }
1587
1689
  /**
1588
1690
  * Draws a frame on a 2D canvas scaled by `scale` (canvas pixels per frame pixel). `sourceFor`
@@ -1591,7 +1693,8 @@ interface VideoDrawOptions {
1591
1693
  * balance there refers to an SVG filter, which `options.defineSvgFilter` is given to put in the page
1592
1694
  * (without it, white balance is left out of the canvas). A grade's LUT needs `options.lutFor` and
1593
1695
  * `options.scratch`: the layer is drawn on the scratch canvas, its pixels run through the LUT, and
1594
- * the result is laid on the frame with the layer's opacity and blend.
1696
+ * the result is laid on the frame with the layer's opacity and blend. A compound clip's layers are
1697
+ * drawn on a scratch canvas of their own (transparent), which is then drawn like a picture.
1595
1698
  */
1596
1699
  declare function drawVideoFrame(ctx: VideoCanvasContext, frame: VideoFrame, sourceFor: (layer: VideoLayer) => CanvasImageSource | null, scale?: number, options?: VideoDrawOptions): void;
1597
1700
 
@@ -1608,8 +1711,8 @@ interface VideoEdlOptions {
1608
1711
  /**
1609
1712
  * One track as a CMX 3600 edit decision list, for conforming in another NLE: an event per clip with
1610
1713
  * source and record timecode at the project's frame rate (drop-frame at 29.97 and 59.94), dissolves (`D`) for crossfades, dips and
1611
- * wipes (`W001`), `M2` lines for speed changes, and `* FROM CLIP NAME` comments. Titles and colour
1612
- * clips become black (`BL`) events.
1714
+ * wipes (`W001`), `M2` lines for speed changes, and `* FROM CLIP NAME` comments. Titles, colour
1715
+ * clips and compound clips (not flattened yet) become black (`BL`) events.
1613
1716
  */
1614
1717
  declare function toVideoEdl(project: VideoProject, options?: VideoEdlOptions): string;
1615
1718
  interface VideoFfmpegOptions {
@@ -2005,10 +2108,11 @@ interface VideoPreviewOptions {
2005
2108
  /** Where grades' LUTs load from (default: the source's `luts`). Without one, LUTs are left out. */
2006
2109
  luts?: VideoLutCache | null;
2007
2110
  /**
2008
- * Makes the offscreen canvas LUT-graded layers are drawn on (default: a `<canvas>` with
2009
- * `willReadFrequently`). LUTs run on the CPU, so a lower `resolution` keeps playback smooth.
2111
+ * Makes an offscreen canvas compound clips and LUT-graded layers are drawn on (default: a
2112
+ * `<canvas>` with `willReadFrequently`), once per `slot` (see `VideoDrawOptions.scratch`). LUTs
2113
+ * run on the CPU, so a lower `resolution` keeps playback smooth.
2010
2114
  */
2011
- createScratch?: (width: number, height: number) => VideoScratchCanvas | null;
2115
+ createScratch?: (width: number, height: number, slot: number) => VideoScratchCanvas | null;
2012
2116
  }
2013
2117
  /**
2014
2118
  * Plays a project in the browser: keeps one `<video>` or `<audio>` element per playing clip in step
@@ -2039,7 +2143,7 @@ declare class VideoPreviewEngine {
2039
2143
  private playing;
2040
2144
  private fps;
2041
2145
  private readonly unsubscribeLuts;
2042
- private scratchCanvas;
2146
+ private readonly scratchCanvases;
2043
2147
  constructor(source: VideoPreviewSource, canvas: {
2044
2148
  width: number;
2045
2149
  height: number;
@@ -2254,8 +2358,320 @@ interface VideoEditorToolProviderOptions {
2254
2358
  /** How long `get_video_scopes` waits for the preview to finish drawing a frame (ms, default 5000). */
2255
2359
  framePixelsTimeout?: number;
2256
2360
  }
2257
- /** A project as agents see it: settings, assets, and each track's clips in order with their times. */
2361
+ /** A sequence as agents see it: its length, the sequences it nests, who plays it, and (with `tracks`) its tracks and clips. */
2362
+ declare function describeVideoSequence(project: VideoProject, sequence: VideoSequence, tracks?: boolean): {
2363
+ tracks: {
2364
+ clips: ({
2365
+ source?: {
2366
+ in: number;
2367
+ out: number;
2368
+ } | null | undefined;
2369
+ end: number;
2370
+ type: "media";
2371
+ asset: string;
2372
+ in?: number;
2373
+ speed?: number;
2374
+ timeRemap?: VideoKeyframes;
2375
+ volume?: VideoAnimatable;
2376
+ muted?: boolean;
2377
+ fadeInCurve?: VideoFadeCurve;
2378
+ fadeOutCurve?: VideoFadeCurve;
2379
+ id: string;
2380
+ name?: string;
2381
+ start: number;
2382
+ duration: number;
2383
+ opacity?: VideoAnimatable;
2384
+ transform?: VideoTransform;
2385
+ fit?: VideoFit;
2386
+ blend?: VideoBlendMode;
2387
+ grade?: VideoGrade;
2388
+ animateIn?: VideoClipAnimation;
2389
+ animateOut?: VideoClipAnimation;
2390
+ fadeIn?: number;
2391
+ fadeOut?: number;
2392
+ transition?: VideoTransition;
2393
+ } | {
2394
+ source?: {
2395
+ in: number;
2396
+ out: number;
2397
+ } | null | undefined;
2398
+ end: number;
2399
+ type: "text";
2400
+ text: string;
2401
+ color?: string;
2402
+ fontSize?: number;
2403
+ fontFamily?: string;
2404
+ fontWeight?: number;
2405
+ background?: string;
2406
+ id: string;
2407
+ name?: string;
2408
+ start: number;
2409
+ duration: number;
2410
+ opacity?: VideoAnimatable;
2411
+ transform?: VideoTransform;
2412
+ fit?: VideoFit;
2413
+ blend?: VideoBlendMode;
2414
+ grade?: VideoGrade;
2415
+ animateIn?: VideoClipAnimation;
2416
+ animateOut?: VideoClipAnimation;
2417
+ fadeIn?: number;
2418
+ fadeOut?: number;
2419
+ transition?: VideoTransition;
2420
+ } | {
2421
+ source?: {
2422
+ in: number;
2423
+ out: number;
2424
+ } | null | undefined;
2425
+ end: number;
2426
+ type: "color";
2427
+ color: string;
2428
+ id: string;
2429
+ name?: string;
2430
+ start: number;
2431
+ duration: number;
2432
+ opacity?: VideoAnimatable;
2433
+ transform?: VideoTransform;
2434
+ fit?: VideoFit;
2435
+ blend?: VideoBlendMode;
2436
+ grade?: VideoGrade;
2437
+ animateIn?: VideoClipAnimation;
2438
+ animateOut?: VideoClipAnimation;
2439
+ fadeIn?: number;
2440
+ fadeOut?: number;
2441
+ transition?: VideoTransition;
2442
+ } | {
2443
+ source?: {
2444
+ in: number;
2445
+ out: number;
2446
+ } | null | undefined;
2447
+ end: number;
2448
+ type: "sequence";
2449
+ sequence: string;
2450
+ in?: number;
2451
+ volume?: VideoAnimatable;
2452
+ muted?: boolean;
2453
+ fadeInCurve?: VideoFadeCurve;
2454
+ fadeOutCurve?: VideoFadeCurve;
2455
+ id: string;
2456
+ name?: string;
2457
+ start: number;
2458
+ duration: number;
2459
+ opacity?: VideoAnimatable;
2460
+ transform?: VideoTransform;
2461
+ fit?: VideoFit;
2462
+ blend?: VideoBlendMode;
2463
+ grade?: VideoGrade;
2464
+ animateIn?: VideoClipAnimation;
2465
+ animateOut?: VideoClipAnimation;
2466
+ fadeIn?: number;
2467
+ fadeOut?: number;
2468
+ transition?: VideoTransition;
2469
+ })[];
2470
+ volume?: number | undefined;
2471
+ syncLocked?: boolean | undefined;
2472
+ locked?: boolean | undefined;
2473
+ hidden?: boolean | undefined;
2474
+ muted?: boolean | undefined;
2475
+ name?: string | undefined;
2476
+ id: string;
2477
+ kind: VideoTrackKind;
2478
+ index: number;
2479
+ }[];
2480
+ cycle?: string[] | undefined;
2481
+ duration: number;
2482
+ clipCount: number;
2483
+ nests: string[];
2484
+ usedBy: {
2485
+ track: string;
2486
+ start: number;
2487
+ end: number;
2488
+ source: {
2489
+ in: number;
2490
+ out: number;
2491
+ };
2492
+ inSequence?: string | undefined;
2493
+ clip: string;
2494
+ }[];
2495
+ name?: string | undefined;
2496
+ id: string;
2497
+ } | {
2498
+ trackCount: number;
2499
+ cycle?: string[] | undefined;
2500
+ duration: number;
2501
+ clipCount: number;
2502
+ nests: string[];
2503
+ usedBy: {
2504
+ track: string;
2505
+ start: number;
2506
+ end: number;
2507
+ source: {
2508
+ in: number;
2509
+ out: number;
2510
+ };
2511
+ inSequence?: string | undefined;
2512
+ clip: string;
2513
+ }[];
2514
+ name?: string | undefined;
2515
+ id: string;
2516
+ };
2517
+ /** A project as agents see it: settings, assets, each track's clips in order with their times, and a summary of each sequence. */
2258
2518
  declare function describeVideoProject(project: VideoProject): {
2519
+ markers: VideoMarker[];
2520
+ sequences?: ({
2521
+ tracks: {
2522
+ clips: ({
2523
+ source?: {
2524
+ in: number;
2525
+ out: number;
2526
+ } | null | undefined;
2527
+ end: number;
2528
+ type: "media";
2529
+ asset: string;
2530
+ in?: number;
2531
+ speed?: number;
2532
+ timeRemap?: VideoKeyframes;
2533
+ volume?: VideoAnimatable;
2534
+ muted?: boolean;
2535
+ fadeInCurve?: VideoFadeCurve;
2536
+ fadeOutCurve?: VideoFadeCurve;
2537
+ id: string;
2538
+ name?: string;
2539
+ start: number;
2540
+ duration: number;
2541
+ opacity?: VideoAnimatable;
2542
+ transform?: VideoTransform;
2543
+ fit?: VideoFit;
2544
+ blend?: VideoBlendMode;
2545
+ grade?: VideoGrade;
2546
+ animateIn?: VideoClipAnimation;
2547
+ animateOut?: VideoClipAnimation;
2548
+ fadeIn?: number;
2549
+ fadeOut?: number;
2550
+ transition?: VideoTransition;
2551
+ } | {
2552
+ source?: {
2553
+ in: number;
2554
+ out: number;
2555
+ } | null | undefined;
2556
+ end: number;
2557
+ type: "text";
2558
+ text: string;
2559
+ color?: string;
2560
+ fontSize?: number;
2561
+ fontFamily?: string;
2562
+ fontWeight?: number;
2563
+ background?: string;
2564
+ id: string;
2565
+ name?: string;
2566
+ start: number;
2567
+ duration: number;
2568
+ opacity?: VideoAnimatable;
2569
+ transform?: VideoTransform;
2570
+ fit?: VideoFit;
2571
+ blend?: VideoBlendMode;
2572
+ grade?: VideoGrade;
2573
+ animateIn?: VideoClipAnimation;
2574
+ animateOut?: VideoClipAnimation;
2575
+ fadeIn?: number;
2576
+ fadeOut?: number;
2577
+ transition?: VideoTransition;
2578
+ } | {
2579
+ source?: {
2580
+ in: number;
2581
+ out: number;
2582
+ } | null | undefined;
2583
+ end: number;
2584
+ type: "color";
2585
+ color: string;
2586
+ id: string;
2587
+ name?: string;
2588
+ start: number;
2589
+ duration: number;
2590
+ opacity?: VideoAnimatable;
2591
+ transform?: VideoTransform;
2592
+ fit?: VideoFit;
2593
+ blend?: VideoBlendMode;
2594
+ grade?: VideoGrade;
2595
+ animateIn?: VideoClipAnimation;
2596
+ animateOut?: VideoClipAnimation;
2597
+ fadeIn?: number;
2598
+ fadeOut?: number;
2599
+ transition?: VideoTransition;
2600
+ } | {
2601
+ source?: {
2602
+ in: number;
2603
+ out: number;
2604
+ } | null | undefined;
2605
+ end: number;
2606
+ type: "sequence";
2607
+ sequence: string;
2608
+ in?: number;
2609
+ volume?: VideoAnimatable;
2610
+ muted?: boolean;
2611
+ fadeInCurve?: VideoFadeCurve;
2612
+ fadeOutCurve?: VideoFadeCurve;
2613
+ id: string;
2614
+ name?: string;
2615
+ start: number;
2616
+ duration: number;
2617
+ opacity?: VideoAnimatable;
2618
+ transform?: VideoTransform;
2619
+ fit?: VideoFit;
2620
+ blend?: VideoBlendMode;
2621
+ grade?: VideoGrade;
2622
+ animateIn?: VideoClipAnimation;
2623
+ animateOut?: VideoClipAnimation;
2624
+ fadeIn?: number;
2625
+ fadeOut?: number;
2626
+ transition?: VideoTransition;
2627
+ })[];
2628
+ volume?: number | undefined;
2629
+ syncLocked?: boolean | undefined;
2630
+ locked?: boolean | undefined;
2631
+ hidden?: boolean | undefined;
2632
+ muted?: boolean | undefined;
2633
+ name?: string | undefined;
2634
+ id: string;
2635
+ kind: VideoTrackKind;
2636
+ index: number;
2637
+ }[];
2638
+ cycle?: string[] | undefined;
2639
+ duration: number;
2640
+ clipCount: number;
2641
+ nests: string[];
2642
+ usedBy: {
2643
+ track: string;
2644
+ start: number;
2645
+ end: number;
2646
+ source: {
2647
+ in: number;
2648
+ out: number;
2649
+ };
2650
+ inSequence?: string | undefined;
2651
+ clip: string;
2652
+ }[];
2653
+ name?: string | undefined;
2654
+ id: string;
2655
+ } | {
2656
+ trackCount: number;
2657
+ cycle?: string[] | undefined;
2658
+ duration: number;
2659
+ clipCount: number;
2660
+ nests: string[];
2661
+ usedBy: {
2662
+ track: string;
2663
+ start: number;
2664
+ end: number;
2665
+ source: {
2666
+ in: number;
2667
+ out: number;
2668
+ };
2669
+ inSequence?: string | undefined;
2670
+ clip: string;
2671
+ }[];
2672
+ name?: string | undefined;
2673
+ id: string;
2674
+ })[] | undefined;
2259
2675
  assets: ({
2260
2676
  id: string;
2261
2677
  kind: VideoAssetKind;
@@ -2359,6 +2775,33 @@ declare function describeVideoProject(project: VideoProject): {
2359
2775
  fadeIn?: number;
2360
2776
  fadeOut?: number;
2361
2777
  transition?: VideoTransition;
2778
+ } | {
2779
+ source?: {
2780
+ in: number;
2781
+ out: number;
2782
+ } | null | undefined;
2783
+ end: number;
2784
+ type: "sequence";
2785
+ sequence: string;
2786
+ in?: number;
2787
+ volume?: VideoAnimatable;
2788
+ muted?: boolean;
2789
+ fadeInCurve?: VideoFadeCurve;
2790
+ fadeOutCurve?: VideoFadeCurve;
2791
+ id: string;
2792
+ name?: string;
2793
+ start: number;
2794
+ duration: number;
2795
+ opacity?: VideoAnimatable;
2796
+ transform?: VideoTransform;
2797
+ fit?: VideoFit;
2798
+ blend?: VideoBlendMode;
2799
+ grade?: VideoGrade;
2800
+ animateIn?: VideoClipAnimation;
2801
+ animateOut?: VideoClipAnimation;
2802
+ fadeIn?: number;
2803
+ fadeOut?: number;
2804
+ transition?: VideoTransition;
2362
2805
  })[];
2363
2806
  volume?: number | undefined;
2364
2807
  syncLocked?: boolean | undefined;
@@ -2370,7 +2813,6 @@ declare function describeVideoProject(project: VideoProject): {
2370
2813
  kind: VideoTrackKind;
2371
2814
  index: number;
2372
2815
  }[];
2373
- markers: VideoMarker[];
2374
2816
  background?: string | undefined;
2375
2817
  width: number;
2376
2818
  height: number;
@@ -2415,8 +2857,8 @@ declare const VIDEO_BLEND_MODE_LABELS: Readonly<Record<VideoBlendMode, string>>;
2415
2857
  /** Names for the sound fade curves, for menus. */
2416
2858
  declare const VIDEO_FADE_CURVE_LABELS: Readonly<Record<VideoFadeCurve, string>>;
2417
2859
  declare function videoClipTint(clip: VideoClip, asset?: VideoAsset): string;
2418
- /** A short label for a clip on the timeline. */
2419
- declare function videoClipLabel(clip: VideoClip, asset?: VideoAsset): string;
2860
+ /** A short label for a clip on the timeline (pass the sequence a compound clip plays, for its name). */
2861
+ declare function videoClipLabel(clip: VideoClip, asset?: VideoAsset, sequence?: VideoSequence): string;
2420
2862
  type VideoClipDragMode = 'move' | 'trim-start' | 'trim-end';
2421
2863
  interface VideoClipDragInput {
2422
2864
  clip: string;
@@ -2514,4 +2956,4 @@ declare function videoKeyframeToggleEdit(project: VideoProject, clipId: string,
2514
2956
  */
2515
2957
  declare function videoLutEdits(project: VideoProject, clips: readonly string[], lut: VideoGradeLut | null): VideoEdit[];
2516
2958
 
2517
- export { type CreateVideoProjectOptions, type NewVideoClip, VIDEO_BLEND_MODES, VIDEO_BLEND_MODE_LABELS, VIDEO_CLIP_ANIMATION_DURATION, VIDEO_CLIP_ANIMATION_EFFECTS, VIDEO_CLIP_ANIMATION_LABELS, VIDEO_CLIP_TYPES, VIDEO_DEFAULT_FILLERS, VIDEO_DEFAULT_STILL_DURATION, VIDEO_DEFAULT_TITLE_DURATION, VIDEO_EASE_NAMES, VIDEO_EDIT_OPS, VIDEO_FADE_CURVES, VIDEO_FADE_CURVE_LABELS, VIDEO_FITS, VIDEO_GRADE_CONTROLS, VIDEO_GRADE_PRESETS, VIDEO_GRADE_PRESET_NAMES, VIDEO_ISSUE_CODES, VIDEO_KEYFRAME_LIMITS, VIDEO_KEYFRAME_PROPERTIES, VIDEO_LUT_MAX_SIZE, VIDEO_PEAK_BLOCK, VIDEO_PLACEMENT_MODES, VIDEO_PREVIEW_SCALE_OPTIONS, VIDEO_PROXY_SCALES, VIDEO_SCOPE_KINDS, VIDEO_TIME_EPSILON, VIDEO_TRANSFORM_PROPERTIES, VIDEO_TRANSITION_LABELS, VIDEO_TRANSITION_TYPES, VIDEO_VECTORSCOPE_TARGETS, VIDEO_WIPE_DIRECTIONS, type VideoAnimatable, type VideoAsset, type VideoAssetKind, type VideoAssetProxy, type VideoAudioLevel, type VideoAudioPeaks, VideoAudioPeaksCache, type VideoAudioPeaksLoader, type VideoAudioSource, type VideoBlendMode, type VideoCacheEntryInfo, type VideoCanvasContext, type VideoClip, type VideoClipAnimation, type VideoClipAnimationEffect, type VideoClipDragInput, type VideoClipDragMode, type VideoClipDragPlan, type VideoClipLocation, type VideoClipType, type VideoColorClip, type VideoDecodedFrame, type VideoDrawOptions, type VideoEase, type VideoEdit, type VideoEditOp, type VideoEditOutcome, type VideoEditResult, VideoEditorController, type VideoEditorOptions, type VideoEditorState, type VideoEditorToolProviderOptions, type VideoEdlOptions, type VideoExposureOptions, type VideoExposureStats, type VideoFadeCurve, type VideoFfmpegExport, type VideoFfmpegOptions, type VideoFit, type VideoFrame, VideoFrameCache, type VideoFrameCacheOptions, type VideoFrameCacheStats, type VideoFrameDecoder, type VideoFrameRequest, type VideoGap, type VideoGrade, type VideoGradeControl, type VideoGradeLut, type VideoGradePreset, type VideoGradeSetting, type VideoGradeStep, type VideoHistogram, type VideoIssue, type VideoIssueCode, type VideoIssueSeverity, type VideoKey, type VideoKeyframeProperty, type VideoKeyframeRow, type VideoKeyframes, type VideoLayer, type VideoLoudnessMeasurement, type VideoLoudnessTarget, type VideoLut, VideoLutCache, type VideoLutLoader, type VideoLutSvgApproximation, type VideoMarker, type VideoMediaClip, type VideoMediaProbe, type VideoPauseOptions, type VideoPixels, type VideoPlacementMode, VideoPreviewEngine, type VideoPreviewImage, type VideoPreviewMedia, type VideoPreviewOptions, VideoPreviewPixels, type VideoPreviewScale, type VideoPreviewSnapshot, type VideoPreviewSource, type VideoProject, type VideoProxyCommand, type VideoProxyOptions, type VideoRect, type VideoRulerTick, type VideoScopeImage, type VideoScopeKind, type VideoScopeOptions, type VideoScopeSummary, type VideoScopesPanelReading, type VideoScratchCanvas, type VideoSilenceOptions, type VideoSnapOptions, type VideoSpeedSegment, type VideoSvgOptions, type VideoTextClip, type VideoTimelineWord, type VideoTrack, type VideoTrackKind, type VideoTranscriptRange, type VideoTranscriptWord, type VideoTransform, type VideoTransition, type VideoTransitionType, type VideoVectorscope, type VideoWaveform, type VideoWaveformMode, type VideoWipeDirection, allVideoClipIds, applyVideoEdits, applyVideoGrade, applyVideoLut, applyVideoLutToPixels, buildVideoAudioPeaks, checkVideoProject, checkVideoTimeRemap, createVideoEditorToolProvider, createVideoElementDecoder, createVideoProject, decodeVideoAudioPeaks, describeVideoProject, drawVideoFrame, ffmpegFilterValue, findVideoAudioSilences, findVideoClip, findVideoFillers, findVideoGaps, findVideoTranscriptPauses, findVideoTranscriptText, formatVideoSeconds, formatVideoTimecode, formatVideoTimecodeFrames, isVideoDropFrameRate, isVideoKeyframes, mergeVideoRanges, nextFreeVideoSlot, normalizeVideoGrade, normalizeVideoGradeLut, normalizeVideoWord, parseVideoAnimatable, parseVideoAsset, parseVideoAssetProxies, parseVideoClip, parseVideoClipAnimation, parseVideoCubeLut, parseVideoGrade, parseVideoGradeLut, parseVideoKeyframes, parseVideoLoudnessMeasurement, parseVideoMarker, parseVideoPreviewScale, parseVideoProject, parseVideoTimeRemap, parseVideoTrack, parseVideoTranscript, parseVideoTranscriptWords, parseVideoTransform, parseVideoTransition, placeVideoRect, planVideoClipDrag, planVideoPrefetch, probeVideoMedia, readVideoScopesPanel, removeVideoKey, resolveVideoPreviewScale, retimeVideoAnimatable, setVideoKey, snapToVideoFrame, snapVideoTime, sortVideoKeys, sortedVideoClips, splitVideoAnimatable, summarizeVideoScopes, toVideoEdl, toVideoFfmpeg, toVideoLoudnessMeasure, videoAssetDropEdit, videoAssetHasSound, videoAssetKindOf, videoAssetMap, videoAssetProxy, videoAudioLevels, videoAudioPeakRange, videoAudioPeakSpans, videoAudioPeaksDuration, videoCacheEvictions, videoChroma, videoClipAfter, videoClipAnimated, videoClipAnimationProperties, videoClipAnimationSpans, videoClipBefore, videoClipEnd, videoClipHandles, videoClipKeyframes, videoClipLabel, videoClipOverhang, videoClipShowsWaveform, videoClipSoundGain, videoClipSourceRange, videoClipSourceTime, videoClipSpeed, videoClipSpeedAt, videoClipTint, videoClipWaveform, videoClipWaveformPath, videoClipsAt, videoContactSheetSvg, videoDragLabel, videoDropTracks, videoEaseBezier, videoEaseProgress, videoExposureNotes, videoExposureStats, videoFadeCurveGain, videoFrameAt, videoFrameCacheKey, videoFrameDuration, videoFrameRequestsAt, videoFrameToSvg, videoFrames, videoFreezeFrameEdit, videoGradeCssFilter, videoGradeFfmpegFilters, videoGradeGainsFilterId, videoGradeLook, videoGradePreset, videoGradeStepMatrix, videoGradeStepSvgValues, videoGradeSteps, videoGradeSvgDefs, videoGradeSvgFilter, videoHistogram, videoHistogramImage, videoHourFrames, videoIrisRadius, videoIssueKey, videoKeyframeBreakpoints, videoKeyframeFfmpegExpr, videoKeyframeRows, videoKeyframeToggleEdit, videoKeyframeValueEdit, videoKeysOf, videoLuma, videoLumaWaveform, videoLutEdits, videoLutFromFunction, videoLutSvgApproximation, videoLutSvgPrimitives, videoLutToCube, videoOverlap, videoPeakDb, videoPreviewSrc, videoProjectDuration, videoProjectHasProxies, videoProjectSvg, videoProxyFfmpeg, videoProxyName, videoProxyPlan, videoRemoveRangesEdits, videoRulerTicks, videoScopeImage, videoShellQuote, videoSlowMotionRamp, videoSnapPoints, videoSourceFrame, videoSourceFrameTime, videoSpeedRampEdit, videoSpeedRampKeys, videoTextStyle, videoTimeRemapBreakpoints, videoTimeRemapSpan, videoTimecodeFrames, videoTimelineTranscript, videoTitleFrame, videoTrackSyncLocked, videoTranscriptEdit, videoTranscriptTrack, videoTransformAt, videoTransitionAudioCurve, videoTransitionEase, videoTransitionHasDirection, videoValueAt, videoVectorscope, videoVectorscopeAngle, videoVectorscopeImage, videoVectorscopePoint, videoWaveformImage, videoWaveformPath, videoWipeRect, videoWordAt, videoWordsRange };
2959
+ export { type CreateVideoProjectOptions, type NewVideoClip, VIDEO_BLEND_MODES, VIDEO_BLEND_MODE_LABELS, VIDEO_CLIP_ANIMATION_DURATION, VIDEO_CLIP_ANIMATION_EFFECTS, VIDEO_CLIP_ANIMATION_LABELS, VIDEO_CLIP_TYPES, VIDEO_DEFAULT_FILLERS, VIDEO_DEFAULT_STILL_DURATION, VIDEO_DEFAULT_TITLE_DURATION, VIDEO_EASE_NAMES, VIDEO_EDIT_OPS, VIDEO_FADE_CURVES, VIDEO_FADE_CURVE_LABELS, VIDEO_FITS, VIDEO_GRADE_CONTROLS, VIDEO_GRADE_PRESETS, VIDEO_GRADE_PRESET_NAMES, VIDEO_ISSUE_CODES, VIDEO_KEYFRAME_LIMITS, VIDEO_KEYFRAME_PROPERTIES, VIDEO_LUT_MAX_SIZE, VIDEO_PEAK_BLOCK, VIDEO_PLACEMENT_MODES, VIDEO_PREVIEW_SCALE_OPTIONS, VIDEO_PROXY_SCALES, VIDEO_SCOPE_KINDS, VIDEO_TIME_EPSILON, VIDEO_TRANSFORM_PROPERTIES, VIDEO_TRANSITION_LABELS, VIDEO_TRANSITION_TYPES, VIDEO_VECTORSCOPE_TARGETS, VIDEO_WIPE_DIRECTIONS, type VideoAnimatable, type VideoAsset, type VideoAssetKind, type VideoAssetProxy, type VideoAudioLevel, type VideoAudioPeaks, VideoAudioPeaksCache, type VideoAudioPeaksLoader, type VideoAudioSource, type VideoBlendMode, type VideoCacheEntryInfo, type VideoCanvasContext, type VideoClip, type VideoClipAnimation, type VideoClipAnimationEffect, type VideoClipDragInput, type VideoClipDragMode, type VideoClipDragPlan, type VideoClipLocation, type VideoClipType, type VideoColorClip, type VideoDecodedFrame, type VideoDrawOptions, type VideoEase, type VideoEdit, type VideoEditOp, type VideoEditOutcome, type VideoEditResult, VideoEditorController, type VideoEditorOptions, type VideoEditorState, type VideoEditorToolProviderOptions, type VideoEdlOptions, type VideoExposureOptions, type VideoExposureStats, type VideoFadeCurve, type VideoFfmpegExport, type VideoFfmpegOptions, type VideoFit, type VideoFrame, VideoFrameCache, type VideoFrameCacheOptions, type VideoFrameCacheStats, type VideoFrameDecoder, type VideoFrameRequest, type VideoGap, type VideoGrade, type VideoGradeControl, type VideoGradeLut, type VideoGradePreset, type VideoGradeSetting, type VideoGradeStep, type VideoHistogram, type VideoIssue, type VideoIssueCode, type VideoIssueSeverity, type VideoKey, type VideoKeyframeProperty, type VideoKeyframeRow, type VideoKeyframes, type VideoLayer, type VideoLoudnessMeasurement, type VideoLoudnessTarget, type VideoLut, VideoLutCache, type VideoLutLoader, type VideoLutSvgApproximation, type VideoMarker, type VideoMediaClip, type VideoMediaProbe, type VideoPauseOptions, type VideoPixels, type VideoPlacementMode, VideoPreviewEngine, type VideoPreviewImage, type VideoPreviewMedia, type VideoPreviewOptions, VideoPreviewPixels, type VideoPreviewScale, type VideoPreviewSnapshot, type VideoPreviewSource, type VideoProject, type VideoProxyCommand, type VideoProxyOptions, type VideoRect, type VideoRulerTick, type VideoScopeImage, type VideoScopeKind, type VideoScopeOptions, type VideoScopeSummary, type VideoScopesPanelReading, type VideoScratchCanvas, type VideoSequence, type VideoSequenceClip, type VideoSilenceOptions, type VideoSnapOptions, type VideoSpeedSegment, type VideoSvgOptions, type VideoTextClip, type VideoTimelineWord, type VideoTrack, type VideoTrackKind, type VideoTranscriptRange, type VideoTranscriptWord, type VideoTransform, type VideoTransition, type VideoTransitionType, type VideoVectorscope, type VideoWaveform, type VideoWaveformMode, type VideoWipeDirection, allVideoClipIds, allVideoTracks, applyVideoEdits, applyVideoGrade, applyVideoLut, applyVideoLutToPixels, buildVideoAudioPeaks, checkVideoProject, checkVideoTimeRemap, createVideoEditorToolProvider, createVideoElementDecoder, createVideoProject, decodeVideoAudioPeaks, describeVideoProject, describeVideoSequence, drawVideoFrame, ffmpegFilterValue, findVideoAudioSilences, findVideoClip, findVideoFillers, findVideoGaps, findVideoSequenceClip, findVideoSequenceCycle, findVideoTranscriptPauses, findVideoTranscriptText, formatVideoSeconds, formatVideoTimecode, formatVideoTimecodeFrames, isVideoDropFrameRate, isVideoKeyframes, mergeVideoRanges, nextFreeVideoSlot, normalizeVideoGrade, normalizeVideoGradeLut, normalizeVideoWord, parseVideoAnimatable, parseVideoAsset, parseVideoAssetProxies, parseVideoClip, parseVideoClipAnimation, parseVideoCubeLut, parseVideoGrade, parseVideoGradeLut, parseVideoKeyframes, parseVideoLoudnessMeasurement, parseVideoMarker, parseVideoPreviewScale, parseVideoProject, parseVideoSequence, parseVideoTimeRemap, parseVideoTrack, parseVideoTranscript, parseVideoTranscriptWords, parseVideoTransform, parseVideoTransition, placeVideoRect, planVideoClipDrag, planVideoPrefetch, probeVideoMedia, readVideoScopesPanel, removeVideoKey, resolveVideoPreviewScale, retimeVideoAnimatable, setVideoKey, snapToVideoFrame, snapVideoTime, sortVideoKeys, sortedVideoClips, splitVideoAnimatable, summarizeVideoScopes, toVideoEdl, toVideoFfmpeg, toVideoLoudnessMeasure, videoAssetDropEdit, videoAssetHasSound, videoAssetKindOf, videoAssetMap, videoAssetProxy, videoAudioLevels, videoAudioPeakRange, videoAudioPeakSpans, videoAudioPeaksDuration, videoCacheEvictions, videoChroma, videoClipAfter, videoClipAnimated, videoClipAnimationProperties, videoClipAnimationSpans, videoClipBefore, videoClipEnd, videoClipHandles, videoClipKeyframes, videoClipLabel, videoClipOverhang, videoClipShowsWaveform, videoClipSoundGain, videoClipSourceRange, videoClipSourceTime, videoClipSpeed, videoClipSpeedAt, videoClipTint, videoClipWaveform, videoClipWaveformPath, videoClipsAt, videoContactSheetSvg, videoDragLabel, videoDropTracks, videoEaseBezier, videoEaseProgress, videoExposureNotes, videoExposureStats, videoFadeCurveGain, videoFrameAt, videoFrameCacheKey, videoFrameDuration, videoFrameLeafLayers, videoFrameRequestsAt, videoFrameToSvg, videoFrames, videoFreezeFrameEdit, videoGradeCssFilter, videoGradeFfmpegFilters, videoGradeGainsFilterId, videoGradeLook, videoGradePreset, videoGradeStepMatrix, videoGradeStepSvgValues, videoGradeSteps, videoGradeSvgDefs, videoGradeSvgFilter, videoHistogram, videoHistogramImage, videoHourFrames, videoIrisRadius, videoIssueKey, videoKeyframeBreakpoints, videoKeyframeFfmpegExpr, videoKeyframeRows, videoKeyframeToggleEdit, videoKeyframeValueEdit, videoKeysOf, videoLuma, videoLumaWaveform, videoLutEdits, videoLutFromFunction, videoLutSvgApproximation, videoLutSvgPrimitives, videoLutToCube, videoOverlap, videoPeakDb, videoPreviewSrc, videoProjectDuration, videoProjectHasProxies, videoProjectSvg, videoProxyFfmpeg, videoProxyName, videoProxyPlan, videoRemoveRangesEdits, videoRulerTicks, videoScopeImage, videoSequenceChildren, videoSequenceDuration, videoSequenceMap, videoShellQuote, videoSlowMotionRamp, videoSnapPoints, videoSourceFrame, videoSourceFrameTime, videoSpeedRampEdit, videoSpeedRampKeys, videoTextStyle, videoTimeRemapBreakpoints, videoTimeRemapSpan, videoTimecodeFrames, videoTimelineTranscript, videoTitleFrame, videoTrackSyncLocked, videoTranscriptEdit, videoTranscriptTrack, videoTransformAt, videoTransitionAudioCurve, videoTransitionEase, videoTransitionHasDirection, videoValueAt, videoVectorscope, videoVectorscopeAngle, videoVectorscopeImage, videoVectorscopePoint, videoWaveformImage, videoWaveformPath, videoWipeRect, videoWordAt, videoWordsRange };