@pixerate/editor 0.84.0 → 0.86.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.
@@ -92,6 +92,12 @@ declare function videoKeyframeFfmpegExpr(prop: VideoAnimatable | undefined, time
92
92
  */
93
93
 
94
94
  type VideoAssetKind = 'video' | 'audio' | 'image';
95
+ /** A spoken word in an asset's transcript, timed in the source (ms). */
96
+ interface VideoTranscriptWord {
97
+ word: string;
98
+ start: number;
99
+ end: number;
100
+ }
95
101
  /** A piece of source media. The project refers to it by id; `src` is whatever the host can load. */
96
102
  interface VideoAsset {
97
103
  id: string;
@@ -108,6 +114,8 @@ interface VideoAsset {
108
114
  hasAudio?: boolean;
109
115
  /** A still to show for a video where its frames cannot be drawn (SVG renders, thumbnails). */
110
116
  poster?: string;
117
+ /** What is said in it, word by word, timed in the source (see `parseVideoTranscript`). */
118
+ transcript?: VideoTranscriptWord[];
111
119
  }
112
120
  type VideoTrackKind = 'video' | 'audio';
113
121
  interface VideoTrack {
@@ -260,6 +268,13 @@ interface VideoMediaClip extends VideoClipBase {
260
268
  in?: number;
261
269
  /** Playback speed (default 1): it uses `duration × speed` of the source. */
262
270
  speed?: number;
271
+ /**
272
+ * A speed ramp: keys mapping clip time to source time after the in point (`v` ms from `in`), so
273
+ * a key's slope is the speed there, a flat stretch is a freeze frame and eased keys ramp between
274
+ * speeds. Never runs backwards. Before the first key and after the last the picture holds. Takes
275
+ * the place of `speed` (see `videoSpeedRampKeys` for building one from speeds).
276
+ */
277
+ timeRemap?: VideoKeyframes;
263
278
  /** Gain (1 = unchanged, default 1), or keyframes. */
264
279
  volume?: VideoAnimatable;
265
280
  /** Silences this clip. */
@@ -336,9 +351,11 @@ declare function parseVideoAnimatable(v: unknown, path: string, range?: {
336
351
  optional?: boolean;
337
352
  }): VideoAnimatable | undefined;
338
353
  declare function parseVideoTransform(v: unknown, path: string): VideoTransform | undefined;
354
+ declare function parseVideoTimeRemap(v: unknown, speed: unknown, path: string): VideoKeyframes | undefined;
339
355
  declare function parseVideoClipAnimation(v: unknown, path: string): VideoClipAnimation | undefined;
340
356
  declare function parseVideoGrade(v: unknown, path: string): VideoGrade | undefined;
341
357
  declare function parseVideoTransition(v: unknown, path: string): VideoTransition | undefined;
358
+ declare function parseVideoTranscriptWords(v: unknown, path: string): VideoTranscriptWord[] | undefined;
342
359
  declare function parseVideoAsset(v: unknown, path?: string): VideoAsset;
343
360
  declare function parseVideoClip(v: unknown, path?: string): VideoClip;
344
361
  declare function parseVideoTrack(v: unknown, path?: string): VideoTrack;
@@ -626,6 +643,18 @@ type VideoEdit = ({
626
643
  clip: string;
627
644
  property: VideoKeyframeProperty;
628
645
  keys: VideoKey[] | null;
646
+ }
647
+ /**
648
+ * A speed ramp: keys mapping clip time to source ms after the in point (see `timeRemap`), or
649
+ * null to play at normal speed from where the ramp started. `duration` sets the clip's new length
650
+ * (default: unchanged); `ripple` moves later material with the change.
651
+ */
652
+ | {
653
+ op: 'set_time_remap';
654
+ clip: string;
655
+ keys: VideoKey[] | null;
656
+ duration?: number;
657
+ ripple?: boolean;
629
658
  } | {
630
659
  op: 'close_gaps';
631
660
  track: string;
@@ -1028,6 +1057,141 @@ declare function videoClipAnimationSpans(clip: VideoClip): {
1028
1057
  */
1029
1058
  declare function videoClipAnimated(clip: VideoClip, project: Pick<VideoProject, 'width' | 'height'>): VideoClip;
1030
1059
 
1060
+ /**
1061
+ * A transcript from text a speech-to-text service or captioning tool wrote: Whisper-style JSON
1062
+ * (`{ segments: [{ words: [{ word, start, end }] }] }` or `{ words: [...] }`, times in seconds, or a
1063
+ * plain `[{ word, start, end }]` array in ms), SubRip (`.srt`) or WebVTT. Captions have no word
1064
+ * timings, so their words are spread evenly across each cue (`approximate: true`). Throws when it
1065
+ * finds no words.
1066
+ */
1067
+ declare function parseVideoTranscript(input: string | unknown): {
1068
+ words: VideoTranscriptWord[];
1069
+ approximate: boolean;
1070
+ };
1071
+ /** A word where it plays on the timeline. */
1072
+ interface VideoTimelineWord {
1073
+ word: string;
1074
+ /** Timeline times (ms). */
1075
+ start: number;
1076
+ end: number;
1077
+ /** The clip that plays it. */
1078
+ clip: string;
1079
+ track: string;
1080
+ /** Its index in the asset's transcript. */
1081
+ index: number;
1082
+ }
1083
+ /**
1084
+ * The track whose words make the timeline transcript: `track` if given, else the first audio track
1085
+ * with a transcribed clip, else the first video track with one. `null` when nothing is transcribed.
1086
+ */
1087
+ declare function videoTranscriptTrack(project: VideoProject, track?: string): string | null;
1088
+ /**
1089
+ * The words the timeline plays on one track, in order: each transcribed media clip's words whose
1090
+ * middle falls inside the stretch of source it plays, moved to timeline time through its in point
1091
+ * and speed and clamped to the clip.
1092
+ */
1093
+ declare function videoTimelineTranscript(project: VideoProject, options?: {
1094
+ track?: string;
1095
+ }): VideoTimelineWord[];
1096
+ /** A stretch of the timeline (ms) and the words in it. */
1097
+ interface VideoTranscriptRange {
1098
+ from: number;
1099
+ to: number;
1100
+ text: string;
1101
+ }
1102
+ /** A word as compared: lower case, without surrounding punctuation. */
1103
+ declare const normalizeVideoWord: (word: string) => string;
1104
+ /** Every place a phrase is said (case and punctuation ignored), as timeline ranges. */
1105
+ declare function findVideoTranscriptText(words: readonly VideoTimelineWord[], query: string): VideoTranscriptRange[];
1106
+ /** Filler words and phrases removed by default. "like" and "so" are left out: too often meant. */
1107
+ declare const VIDEO_DEFAULT_FILLERS: readonly ["um", "umm", "uh", "uhh", "uhm", "erm", "er", "ah", "hmm", "mm", "you know", "i mean"];
1108
+ /** Fillers in the transcript, longest phrase first ("you know" before "you"), as timeline ranges. */
1109
+ declare function findVideoFillers(words: readonly VideoTimelineWord[], fillers?: readonly string[]): VideoTranscriptRange[];
1110
+ interface VideoPauseOptions {
1111
+ /** Shortest gap between words that counts as a pause (ms, default 700). */
1112
+ min?: number;
1113
+ /** Silence to keep next to each word so speech does not sound clipped (ms, default 150). */
1114
+ keep?: number;
1115
+ /** Frame rate to snap the cut inward to (default: none). */
1116
+ fps?: number;
1117
+ }
1118
+ /** Gaps between consecutive words on the same clip longer than `min`, less `keep` either side, as timeline ranges. */
1119
+ declare function findVideoTranscriptPauses(words: readonly VideoTimelineWord[], options?: VideoPauseOptions): VideoTranscriptRange[];
1120
+ /** Ranges sorted and merged where they touch or overlap. */
1121
+ declare function mergeVideoRanges(ranges: readonly {
1122
+ from: number;
1123
+ to: number;
1124
+ }[]): {
1125
+ from: number;
1126
+ to: number;
1127
+ }[];
1128
+ /**
1129
+ * The edits that cut ranges out of the timeline and close them up: one `extract_range` per merged
1130
+ * range, last first, so earlier ranges keep their times. Apply them together as one undo step.
1131
+ */
1132
+ declare function videoRemoveRangesEdits(ranges: readonly {
1133
+ from: number;
1134
+ to: number;
1135
+ }[], tracks?: string[]): VideoEdit[];
1136
+ /** The timeline stretch from word `a` to word `b` (either order), for deleting a selection of words. */
1137
+ declare function videoWordsRange(words: readonly VideoTimelineWord[], a: number, b: number): {
1138
+ from: number;
1139
+ to: number;
1140
+ };
1141
+ /** The edit that attaches a transcript file's text to an asset (see `parseVideoTranscript`). Throws a readable error for text it cannot read. */
1142
+ declare function videoTranscriptEdit(assetId: string, text: string): VideoEdit;
1143
+ /** The word playing at a timeline time, as its index in `words`, or -1. */
1144
+ declare function videoWordAt(words: readonly VideoTimelineWord[], time: number): number;
1145
+
1146
+ /**
1147
+ * Speed ramps and freeze frames: a media clip's `timeRemap` keys map clip time to source time after
1148
+ * its in point. The slope between two keys is the speed there; equal values are a freeze; an eased
1149
+ * segment changes speed smoothly. These helpers read and build them.
1150
+ */
1151
+ /** Where in the source (ms) a media clip is at clip time `clipTime`, through its speed or its ramp. */
1152
+ declare function videoClipSourceTime(clip: VideoMediaClip, clipTime: number): number;
1153
+ /** The speed a media clip plays at at clip time `clipTime` (0 in a freeze), measured over a millisecond. */
1154
+ declare function videoClipSpeedAt(clip: VideoClip, clipTime: number): number;
1155
+ /** One stretch of a ramp: `duration` ms of the clip at `speed`, or easing from `speed` to `toSpeed`. 0 is a freeze. */
1156
+ interface VideoSpeedSegment {
1157
+ duration: number;
1158
+ speed: number;
1159
+ /** Ramp smoothly to this speed by the end of the stretch (default: stay at `speed`). */
1160
+ toSpeed?: number;
1161
+ }
1162
+ /**
1163
+ * Remap keys for stretches of speed, from the clip's start: steady stretches are linear segments,
1164
+ * ramps a cubic-bezier ease that changes the speed evenly from one to the other (the source moves
1165
+ * the average of the two speeds over the stretch). Returns the keys and the source the clip plays.
1166
+ */
1167
+ declare function videoSpeedRampKeys(segments: readonly VideoSpeedSegment[]): {
1168
+ keys: VideoKey[];
1169
+ duration: number;
1170
+ source: number;
1171
+ };
1172
+ /**
1173
+ * Checks remap keys: in time order and never going back in the source, eased segments included
1174
+ * (each is sampled, so a curve that overshoots and would play backwards is caught). Throws a
1175
+ * readable error.
1176
+ */
1177
+ declare function checkVideoTimeRemap(remap: VideoKeyframes, path?: string): void;
1178
+ /** The stretch of source (ms, from the in point) a ramp plays: from its first key's value to its last's. */
1179
+ declare function videoTimeRemapSpan(remap: VideoKeyframes): {
1180
+ from: number;
1181
+ to: number;
1182
+ };
1183
+ /** Clip time and source time pairs tracing a ramp as straight lines (eased stretches sampled every `step` ms), with freezes marked. */
1184
+ declare function videoTimeRemapBreakpoints(remap: VideoKeyframes, step: number): {
1185
+ t: number;
1186
+ v: number;
1187
+ }[];
1188
+ /** The edit that plays a media clip through stretches of speed from the moment it shows at its start (see `videoSpeedRampKeys`). */
1189
+ declare function videoSpeedRampEdit(clip: VideoMediaClip, segments: readonly VideoSpeedSegment[], ripple?: boolean): VideoEdit;
1190
+ /** The edit that holds the frame a media clip shows at clip time `at` for `duration` ms, then plays on (the clip gets longer). */
1191
+ declare function videoFreezeFrameEdit(clip: VideoMediaClip, at: number, duration: number, ripple?: boolean): VideoEdit;
1192
+ /** A slow-motion ramp preset for a clip of `duration` ms: normal speed for half of it, a 500 ms glide down to 0.3×, then 1.5 s at 0.3×. */
1193
+ declare const videoSlowMotionRamp: (duration: number) => VideoSpeedSegment[];
1194
+
1031
1195
  /** Radius of an iris `progress` (0–1) open: from nothing to the frame's corners. */
1032
1196
  declare const videoIrisRadius: (frame: {
1033
1197
  width: number;
@@ -1426,7 +1590,28 @@ interface VideoEditorToolProviderOptions {
1426
1590
  }
1427
1591
  /** A project as agents see it: settings, assets, and each track's clips in order with their times. */
1428
1592
  declare function describeVideoProject(project: VideoProject): {
1429
- assets: VideoAsset[];
1593
+ assets: ({
1594
+ id: string;
1595
+ kind: VideoAssetKind;
1596
+ src: string;
1597
+ name?: string;
1598
+ duration?: number;
1599
+ width?: number;
1600
+ height?: number;
1601
+ hasAudio?: boolean;
1602
+ poster?: string;
1603
+ } | {
1604
+ transcriptWords: number;
1605
+ id: string;
1606
+ kind: VideoAssetKind;
1607
+ src: string;
1608
+ name?: string;
1609
+ duration?: number;
1610
+ width?: number;
1611
+ height?: number;
1612
+ hasAudio?: boolean;
1613
+ poster?: string;
1614
+ })[];
1430
1615
  tracks: {
1431
1616
  clips: ({
1432
1617
  source?: {
@@ -1438,6 +1623,7 @@ declare function describeVideoProject(project: VideoProject): {
1438
1623
  asset: string;
1439
1624
  in?: number;
1440
1625
  speed?: number;
1626
+ timeRemap?: VideoKeyframes;
1441
1627
  volume?: VideoAnimatable;
1442
1628
  muted?: boolean;
1443
1629
  fadeInCurve?: VideoFadeCurve;
@@ -1655,4 +1841,4 @@ declare function videoKeyframeValueEdit(project: VideoProject, clipId: string, p
1655
1841
  */
1656
1842
  declare function videoKeyframeToggleEdit(project: VideoProject, clipId: string, property: VideoKeyframeProperty, time: number): VideoEdit | null;
1657
1843
 
1658
- 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_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_PEAK_BLOCK, VIDEO_PLACEMENT_MODES, VIDEO_TIME_EPSILON, VIDEO_TRANSFORM_PROPERTIES, VIDEO_TRANSITION_LABELS, VIDEO_TRANSITION_TYPES, VIDEO_WIPE_DIRECTIONS, type VideoAnimatable, type VideoAsset, type VideoAssetKind, type VideoAudioLevel, type VideoAudioPeaks, VideoAudioPeaksCache, type VideoAudioPeaksLoader, type VideoAudioSource, type VideoBlendMode, type VideoCanvasContext, type VideoClip, type VideoClipAnimation, type VideoClipAnimationEffect, type VideoClipDragInput, type VideoClipDragMode, type VideoClipDragPlan, type VideoClipLocation, type VideoClipType, type VideoColorClip, type VideoEase, type VideoEdit, type VideoEditOp, type VideoEditOutcome, type VideoEditResult, VideoEditorController, type VideoEditorOptions, type VideoEditorState, type VideoEditorToolProviderOptions, type VideoEdlOptions, type VideoFadeCurve, type VideoFfmpegExport, type VideoFfmpegOptions, type VideoFit, type VideoFrame, type VideoGap, type VideoGrade, type VideoGradeControl, type VideoGradePreset, type VideoGradeStep, type VideoIssue, type VideoIssueCode, type VideoIssueSeverity, type VideoKey, type VideoKeyframeProperty, type VideoKeyframeRow, type VideoKeyframes, type VideoLayer, type VideoLoudnessMeasurement, type VideoLoudnessTarget, type VideoMarker, type VideoMediaClip, type VideoMediaProbe, type VideoPlacementMode, VideoPreviewEngine, type VideoPreviewImage, type VideoPreviewMedia, type VideoPreviewOptions, type VideoPreviewSource, type VideoProject, type VideoRect, type VideoRulerTick, type VideoSilenceOptions, type VideoSnapOptions, type VideoSvgOptions, type VideoTextClip, type VideoTrack, type VideoTrackKind, type VideoTransform, type VideoTransition, type VideoTransitionType, type VideoWaveformMode, type VideoWipeDirection, allVideoClipIds, applyVideoEdits, applyVideoGrade, buildVideoAudioPeaks, checkVideoProject, createVideoEditorToolProvider, createVideoProject, decodeVideoAudioPeaks, describeVideoProject, drawVideoFrame, ffmpegFilterValue, findVideoAudioSilences, findVideoClip, findVideoGaps, formatVideoSeconds, formatVideoTimecode, formatVideoTimecodeFrames, isVideoDropFrameRate, isVideoKeyframes, nextFreeVideoSlot, normalizeVideoGrade, parseVideoAnimatable, parseVideoAsset, parseVideoClip, parseVideoClipAnimation, parseVideoGrade, parseVideoKeyframes, parseVideoLoudnessMeasurement, parseVideoMarker, parseVideoProject, parseVideoTrack, parseVideoTransform, parseVideoTransition, placeVideoRect, planVideoClipDrag, probeVideoMedia, removeVideoKey, retimeVideoAnimatable, setVideoKey, snapToVideoFrame, snapVideoTime, sortVideoKeys, sortedVideoClips, splitVideoAnimatable, toVideoEdl, toVideoFfmpeg, toVideoLoudnessMeasure, videoAssetDropEdit, videoAssetHasSound, videoAssetKindOf, videoAssetMap, videoAudioLevels, videoAudioPeakRange, videoAudioPeakSpans, videoAudioPeaksDuration, videoClipAfter, videoClipAnimated, videoClipAnimationProperties, videoClipAnimationSpans, videoClipBefore, videoClipEnd, videoClipHandles, videoClipKeyframes, videoClipLabel, videoClipOverhang, videoClipShowsWaveform, videoClipSoundGain, videoClipSourceRange, videoClipSpeed, videoClipTint, videoClipWaveform, videoClipWaveformPath, videoClipsAt, videoContactSheetSvg, videoDragLabel, videoDropTracks, videoEaseBezier, videoEaseProgress, videoFadeCurveGain, videoFrameAt, videoFrameDuration, videoFrameToSvg, videoFrames, videoGradeCssFilter, videoGradeFfmpegFilters, videoGradeGainsFilterId, videoGradePreset, videoGradeStepMatrix, videoGradeStepSvgValues, videoGradeSteps, videoGradeSvgDefs, videoGradeSvgFilter, videoHourFrames, videoIrisRadius, videoIssueKey, videoKeyframeBreakpoints, videoKeyframeFfmpegExpr, videoKeyframeRows, videoKeyframeToggleEdit, videoKeyframeValueEdit, videoKeysOf, videoOverlap, videoPeakDb, videoProjectDuration, videoProjectSvg, videoRulerTicks, videoSnapPoints, videoTextStyle, videoTimecodeFrames, videoTitleFrame, videoTrackSyncLocked, videoTransformAt, videoTransitionAudioCurve, videoTransitionEase, videoTransitionHasDirection, videoValueAt, videoWaveformPath, videoWipeRect };
1844
+ 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_PEAK_BLOCK, VIDEO_PLACEMENT_MODES, VIDEO_TIME_EPSILON, VIDEO_TRANSFORM_PROPERTIES, VIDEO_TRANSITION_LABELS, VIDEO_TRANSITION_TYPES, VIDEO_WIPE_DIRECTIONS, type VideoAnimatable, type VideoAsset, type VideoAssetKind, type VideoAudioLevel, type VideoAudioPeaks, VideoAudioPeaksCache, type VideoAudioPeaksLoader, type VideoAudioSource, type VideoBlendMode, type VideoCanvasContext, type VideoClip, type VideoClipAnimation, type VideoClipAnimationEffect, type VideoClipDragInput, type VideoClipDragMode, type VideoClipDragPlan, type VideoClipLocation, type VideoClipType, type VideoColorClip, type VideoEase, type VideoEdit, type VideoEditOp, type VideoEditOutcome, type VideoEditResult, VideoEditorController, type VideoEditorOptions, type VideoEditorState, type VideoEditorToolProviderOptions, type VideoEdlOptions, type VideoFadeCurve, type VideoFfmpegExport, type VideoFfmpegOptions, type VideoFit, type VideoFrame, type VideoGap, type VideoGrade, type VideoGradeControl, type VideoGradePreset, type VideoGradeStep, type VideoIssue, type VideoIssueCode, type VideoIssueSeverity, type VideoKey, type VideoKeyframeProperty, type VideoKeyframeRow, type VideoKeyframes, type VideoLayer, type VideoLoudnessMeasurement, type VideoLoudnessTarget, type VideoMarker, type VideoMediaClip, type VideoMediaProbe, type VideoPauseOptions, type VideoPlacementMode, VideoPreviewEngine, type VideoPreviewImage, type VideoPreviewMedia, type VideoPreviewOptions, type VideoPreviewSource, type VideoProject, type VideoRect, type VideoRulerTick, 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 VideoWaveformMode, type VideoWipeDirection, allVideoClipIds, applyVideoEdits, applyVideoGrade, buildVideoAudioPeaks, checkVideoProject, checkVideoTimeRemap, createVideoEditorToolProvider, createVideoProject, decodeVideoAudioPeaks, describeVideoProject, drawVideoFrame, ffmpegFilterValue, findVideoAudioSilences, findVideoClip, findVideoFillers, findVideoGaps, findVideoTranscriptPauses, findVideoTranscriptText, formatVideoSeconds, formatVideoTimecode, formatVideoTimecodeFrames, isVideoDropFrameRate, isVideoKeyframes, mergeVideoRanges, nextFreeVideoSlot, normalizeVideoGrade, normalizeVideoWord, parseVideoAnimatable, parseVideoAsset, parseVideoClip, parseVideoClipAnimation, parseVideoGrade, parseVideoKeyframes, parseVideoLoudnessMeasurement, parseVideoMarker, parseVideoProject, parseVideoTimeRemap, parseVideoTrack, parseVideoTranscript, parseVideoTranscriptWords, parseVideoTransform, parseVideoTransition, placeVideoRect, planVideoClipDrag, probeVideoMedia, removeVideoKey, retimeVideoAnimatable, setVideoKey, snapToVideoFrame, snapVideoTime, sortVideoKeys, sortedVideoClips, splitVideoAnimatable, toVideoEdl, toVideoFfmpeg, toVideoLoudnessMeasure, videoAssetDropEdit, videoAssetHasSound, videoAssetKindOf, videoAssetMap, videoAudioLevels, videoAudioPeakRange, videoAudioPeakSpans, videoAudioPeaksDuration, 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, videoFadeCurveGain, videoFrameAt, videoFrameDuration, videoFrameToSvg, videoFrames, videoFreezeFrameEdit, videoGradeCssFilter, videoGradeFfmpegFilters, videoGradeGainsFilterId, videoGradePreset, videoGradeStepMatrix, videoGradeStepSvgValues, videoGradeSteps, videoGradeSvgDefs, videoGradeSvgFilter, videoHourFrames, videoIrisRadius, videoIssueKey, videoKeyframeBreakpoints, videoKeyframeFfmpegExpr, videoKeyframeRows, videoKeyframeToggleEdit, videoKeyframeValueEdit, videoKeysOf, videoOverlap, videoPeakDb, videoProjectDuration, videoProjectSvg, videoRemoveRangesEdits, videoRulerTicks, videoSlowMotionRamp, videoSnapPoints, videoSpeedRampEdit, videoSpeedRampKeys, videoTextStyle, videoTimeRemapBreakpoints, videoTimeRemapSpan, videoTimecodeFrames, videoTimelineTranscript, videoTitleFrame, videoTrackSyncLocked, videoTranscriptEdit, videoTranscriptTrack, videoTransformAt, videoTransitionAudioCurve, videoTransitionEase, videoTransitionHasDirection, videoValueAt, videoWaveformPath, videoWipeRect, videoWordAt, videoWordsRange };
@@ -92,6 +92,12 @@ declare function videoKeyframeFfmpegExpr(prop: VideoAnimatable | undefined, time
92
92
  */
93
93
 
94
94
  type VideoAssetKind = 'video' | 'audio' | 'image';
95
+ /** A spoken word in an asset's transcript, timed in the source (ms). */
96
+ interface VideoTranscriptWord {
97
+ word: string;
98
+ start: number;
99
+ end: number;
100
+ }
95
101
  /** A piece of source media. The project refers to it by id; `src` is whatever the host can load. */
96
102
  interface VideoAsset {
97
103
  id: string;
@@ -108,6 +114,8 @@ interface VideoAsset {
108
114
  hasAudio?: boolean;
109
115
  /** A still to show for a video where its frames cannot be drawn (SVG renders, thumbnails). */
110
116
  poster?: string;
117
+ /** What is said in it, word by word, timed in the source (see `parseVideoTranscript`). */
118
+ transcript?: VideoTranscriptWord[];
111
119
  }
112
120
  type VideoTrackKind = 'video' | 'audio';
113
121
  interface VideoTrack {
@@ -260,6 +268,13 @@ interface VideoMediaClip extends VideoClipBase {
260
268
  in?: number;
261
269
  /** Playback speed (default 1): it uses `duration × speed` of the source. */
262
270
  speed?: number;
271
+ /**
272
+ * A speed ramp: keys mapping clip time to source time after the in point (`v` ms from `in`), so
273
+ * a key's slope is the speed there, a flat stretch is a freeze frame and eased keys ramp between
274
+ * speeds. Never runs backwards. Before the first key and after the last the picture holds. Takes
275
+ * the place of `speed` (see `videoSpeedRampKeys` for building one from speeds).
276
+ */
277
+ timeRemap?: VideoKeyframes;
263
278
  /** Gain (1 = unchanged, default 1), or keyframes. */
264
279
  volume?: VideoAnimatable;
265
280
  /** Silences this clip. */
@@ -336,9 +351,11 @@ declare function parseVideoAnimatable(v: unknown, path: string, range?: {
336
351
  optional?: boolean;
337
352
  }): VideoAnimatable | undefined;
338
353
  declare function parseVideoTransform(v: unknown, path: string): VideoTransform | undefined;
354
+ declare function parseVideoTimeRemap(v: unknown, speed: unknown, path: string): VideoKeyframes | undefined;
339
355
  declare function parseVideoClipAnimation(v: unknown, path: string): VideoClipAnimation | undefined;
340
356
  declare function parseVideoGrade(v: unknown, path: string): VideoGrade | undefined;
341
357
  declare function parseVideoTransition(v: unknown, path: string): VideoTransition | undefined;
358
+ declare function parseVideoTranscriptWords(v: unknown, path: string): VideoTranscriptWord[] | undefined;
342
359
  declare function parseVideoAsset(v: unknown, path?: string): VideoAsset;
343
360
  declare function parseVideoClip(v: unknown, path?: string): VideoClip;
344
361
  declare function parseVideoTrack(v: unknown, path?: string): VideoTrack;
@@ -626,6 +643,18 @@ type VideoEdit = ({
626
643
  clip: string;
627
644
  property: VideoKeyframeProperty;
628
645
  keys: VideoKey[] | null;
646
+ }
647
+ /**
648
+ * A speed ramp: keys mapping clip time to source ms after the in point (see `timeRemap`), or
649
+ * null to play at normal speed from where the ramp started. `duration` sets the clip's new length
650
+ * (default: unchanged); `ripple` moves later material with the change.
651
+ */
652
+ | {
653
+ op: 'set_time_remap';
654
+ clip: string;
655
+ keys: VideoKey[] | null;
656
+ duration?: number;
657
+ ripple?: boolean;
629
658
  } | {
630
659
  op: 'close_gaps';
631
660
  track: string;
@@ -1028,6 +1057,141 @@ declare function videoClipAnimationSpans(clip: VideoClip): {
1028
1057
  */
1029
1058
  declare function videoClipAnimated(clip: VideoClip, project: Pick<VideoProject, 'width' | 'height'>): VideoClip;
1030
1059
 
1060
+ /**
1061
+ * A transcript from text a speech-to-text service or captioning tool wrote: Whisper-style JSON
1062
+ * (`{ segments: [{ words: [{ word, start, end }] }] }` or `{ words: [...] }`, times in seconds, or a
1063
+ * plain `[{ word, start, end }]` array in ms), SubRip (`.srt`) or WebVTT. Captions have no word
1064
+ * timings, so their words are spread evenly across each cue (`approximate: true`). Throws when it
1065
+ * finds no words.
1066
+ */
1067
+ declare function parseVideoTranscript(input: string | unknown): {
1068
+ words: VideoTranscriptWord[];
1069
+ approximate: boolean;
1070
+ };
1071
+ /** A word where it plays on the timeline. */
1072
+ interface VideoTimelineWord {
1073
+ word: string;
1074
+ /** Timeline times (ms). */
1075
+ start: number;
1076
+ end: number;
1077
+ /** The clip that plays it. */
1078
+ clip: string;
1079
+ track: string;
1080
+ /** Its index in the asset's transcript. */
1081
+ index: number;
1082
+ }
1083
+ /**
1084
+ * The track whose words make the timeline transcript: `track` if given, else the first audio track
1085
+ * with a transcribed clip, else the first video track with one. `null` when nothing is transcribed.
1086
+ */
1087
+ declare function videoTranscriptTrack(project: VideoProject, track?: string): string | null;
1088
+ /**
1089
+ * The words the timeline plays on one track, in order: each transcribed media clip's words whose
1090
+ * middle falls inside the stretch of source it plays, moved to timeline time through its in point
1091
+ * and speed and clamped to the clip.
1092
+ */
1093
+ declare function videoTimelineTranscript(project: VideoProject, options?: {
1094
+ track?: string;
1095
+ }): VideoTimelineWord[];
1096
+ /** A stretch of the timeline (ms) and the words in it. */
1097
+ interface VideoTranscriptRange {
1098
+ from: number;
1099
+ to: number;
1100
+ text: string;
1101
+ }
1102
+ /** A word as compared: lower case, without surrounding punctuation. */
1103
+ declare const normalizeVideoWord: (word: string) => string;
1104
+ /** Every place a phrase is said (case and punctuation ignored), as timeline ranges. */
1105
+ declare function findVideoTranscriptText(words: readonly VideoTimelineWord[], query: string): VideoTranscriptRange[];
1106
+ /** Filler words and phrases removed by default. "like" and "so" are left out: too often meant. */
1107
+ declare const VIDEO_DEFAULT_FILLERS: readonly ["um", "umm", "uh", "uhh", "uhm", "erm", "er", "ah", "hmm", "mm", "you know", "i mean"];
1108
+ /** Fillers in the transcript, longest phrase first ("you know" before "you"), as timeline ranges. */
1109
+ declare function findVideoFillers(words: readonly VideoTimelineWord[], fillers?: readonly string[]): VideoTranscriptRange[];
1110
+ interface VideoPauseOptions {
1111
+ /** Shortest gap between words that counts as a pause (ms, default 700). */
1112
+ min?: number;
1113
+ /** Silence to keep next to each word so speech does not sound clipped (ms, default 150). */
1114
+ keep?: number;
1115
+ /** Frame rate to snap the cut inward to (default: none). */
1116
+ fps?: number;
1117
+ }
1118
+ /** Gaps between consecutive words on the same clip longer than `min`, less `keep` either side, as timeline ranges. */
1119
+ declare function findVideoTranscriptPauses(words: readonly VideoTimelineWord[], options?: VideoPauseOptions): VideoTranscriptRange[];
1120
+ /** Ranges sorted and merged where they touch or overlap. */
1121
+ declare function mergeVideoRanges(ranges: readonly {
1122
+ from: number;
1123
+ to: number;
1124
+ }[]): {
1125
+ from: number;
1126
+ to: number;
1127
+ }[];
1128
+ /**
1129
+ * The edits that cut ranges out of the timeline and close them up: one `extract_range` per merged
1130
+ * range, last first, so earlier ranges keep their times. Apply them together as one undo step.
1131
+ */
1132
+ declare function videoRemoveRangesEdits(ranges: readonly {
1133
+ from: number;
1134
+ to: number;
1135
+ }[], tracks?: string[]): VideoEdit[];
1136
+ /** The timeline stretch from word `a` to word `b` (either order), for deleting a selection of words. */
1137
+ declare function videoWordsRange(words: readonly VideoTimelineWord[], a: number, b: number): {
1138
+ from: number;
1139
+ to: number;
1140
+ };
1141
+ /** The edit that attaches a transcript file's text to an asset (see `parseVideoTranscript`). Throws a readable error for text it cannot read. */
1142
+ declare function videoTranscriptEdit(assetId: string, text: string): VideoEdit;
1143
+ /** The word playing at a timeline time, as its index in `words`, or -1. */
1144
+ declare function videoWordAt(words: readonly VideoTimelineWord[], time: number): number;
1145
+
1146
+ /**
1147
+ * Speed ramps and freeze frames: a media clip's `timeRemap` keys map clip time to source time after
1148
+ * its in point. The slope between two keys is the speed there; equal values are a freeze; an eased
1149
+ * segment changes speed smoothly. These helpers read and build them.
1150
+ */
1151
+ /** Where in the source (ms) a media clip is at clip time `clipTime`, through its speed or its ramp. */
1152
+ declare function videoClipSourceTime(clip: VideoMediaClip, clipTime: number): number;
1153
+ /** The speed a media clip plays at at clip time `clipTime` (0 in a freeze), measured over a millisecond. */
1154
+ declare function videoClipSpeedAt(clip: VideoClip, clipTime: number): number;
1155
+ /** One stretch of a ramp: `duration` ms of the clip at `speed`, or easing from `speed` to `toSpeed`. 0 is a freeze. */
1156
+ interface VideoSpeedSegment {
1157
+ duration: number;
1158
+ speed: number;
1159
+ /** Ramp smoothly to this speed by the end of the stretch (default: stay at `speed`). */
1160
+ toSpeed?: number;
1161
+ }
1162
+ /**
1163
+ * Remap keys for stretches of speed, from the clip's start: steady stretches are linear segments,
1164
+ * ramps a cubic-bezier ease that changes the speed evenly from one to the other (the source moves
1165
+ * the average of the two speeds over the stretch). Returns the keys and the source the clip plays.
1166
+ */
1167
+ declare function videoSpeedRampKeys(segments: readonly VideoSpeedSegment[]): {
1168
+ keys: VideoKey[];
1169
+ duration: number;
1170
+ source: number;
1171
+ };
1172
+ /**
1173
+ * Checks remap keys: in time order and never going back in the source, eased segments included
1174
+ * (each is sampled, so a curve that overshoots and would play backwards is caught). Throws a
1175
+ * readable error.
1176
+ */
1177
+ declare function checkVideoTimeRemap(remap: VideoKeyframes, path?: string): void;
1178
+ /** The stretch of source (ms, from the in point) a ramp plays: from its first key's value to its last's. */
1179
+ declare function videoTimeRemapSpan(remap: VideoKeyframes): {
1180
+ from: number;
1181
+ to: number;
1182
+ };
1183
+ /** Clip time and source time pairs tracing a ramp as straight lines (eased stretches sampled every `step` ms), with freezes marked. */
1184
+ declare function videoTimeRemapBreakpoints(remap: VideoKeyframes, step: number): {
1185
+ t: number;
1186
+ v: number;
1187
+ }[];
1188
+ /** The edit that plays a media clip through stretches of speed from the moment it shows at its start (see `videoSpeedRampKeys`). */
1189
+ declare function videoSpeedRampEdit(clip: VideoMediaClip, segments: readonly VideoSpeedSegment[], ripple?: boolean): VideoEdit;
1190
+ /** The edit that holds the frame a media clip shows at clip time `at` for `duration` ms, then plays on (the clip gets longer). */
1191
+ declare function videoFreezeFrameEdit(clip: VideoMediaClip, at: number, duration: number, ripple?: boolean): VideoEdit;
1192
+ /** A slow-motion ramp preset for a clip of `duration` ms: normal speed for half of it, a 500 ms glide down to 0.3×, then 1.5 s at 0.3×. */
1193
+ declare const videoSlowMotionRamp: (duration: number) => VideoSpeedSegment[];
1194
+
1031
1195
  /** Radius of an iris `progress` (0–1) open: from nothing to the frame's corners. */
1032
1196
  declare const videoIrisRadius: (frame: {
1033
1197
  width: number;
@@ -1426,7 +1590,28 @@ interface VideoEditorToolProviderOptions {
1426
1590
  }
1427
1591
  /** A project as agents see it: settings, assets, and each track's clips in order with their times. */
1428
1592
  declare function describeVideoProject(project: VideoProject): {
1429
- assets: VideoAsset[];
1593
+ assets: ({
1594
+ id: string;
1595
+ kind: VideoAssetKind;
1596
+ src: string;
1597
+ name?: string;
1598
+ duration?: number;
1599
+ width?: number;
1600
+ height?: number;
1601
+ hasAudio?: boolean;
1602
+ poster?: string;
1603
+ } | {
1604
+ transcriptWords: number;
1605
+ id: string;
1606
+ kind: VideoAssetKind;
1607
+ src: string;
1608
+ name?: string;
1609
+ duration?: number;
1610
+ width?: number;
1611
+ height?: number;
1612
+ hasAudio?: boolean;
1613
+ poster?: string;
1614
+ })[];
1430
1615
  tracks: {
1431
1616
  clips: ({
1432
1617
  source?: {
@@ -1438,6 +1623,7 @@ declare function describeVideoProject(project: VideoProject): {
1438
1623
  asset: string;
1439
1624
  in?: number;
1440
1625
  speed?: number;
1626
+ timeRemap?: VideoKeyframes;
1441
1627
  volume?: VideoAnimatable;
1442
1628
  muted?: boolean;
1443
1629
  fadeInCurve?: VideoFadeCurve;
@@ -1655,4 +1841,4 @@ declare function videoKeyframeValueEdit(project: VideoProject, clipId: string, p
1655
1841
  */
1656
1842
  declare function videoKeyframeToggleEdit(project: VideoProject, clipId: string, property: VideoKeyframeProperty, time: number): VideoEdit | null;
1657
1843
 
1658
- 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_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_PEAK_BLOCK, VIDEO_PLACEMENT_MODES, VIDEO_TIME_EPSILON, VIDEO_TRANSFORM_PROPERTIES, VIDEO_TRANSITION_LABELS, VIDEO_TRANSITION_TYPES, VIDEO_WIPE_DIRECTIONS, type VideoAnimatable, type VideoAsset, type VideoAssetKind, type VideoAudioLevel, type VideoAudioPeaks, VideoAudioPeaksCache, type VideoAudioPeaksLoader, type VideoAudioSource, type VideoBlendMode, type VideoCanvasContext, type VideoClip, type VideoClipAnimation, type VideoClipAnimationEffect, type VideoClipDragInput, type VideoClipDragMode, type VideoClipDragPlan, type VideoClipLocation, type VideoClipType, type VideoColorClip, type VideoEase, type VideoEdit, type VideoEditOp, type VideoEditOutcome, type VideoEditResult, VideoEditorController, type VideoEditorOptions, type VideoEditorState, type VideoEditorToolProviderOptions, type VideoEdlOptions, type VideoFadeCurve, type VideoFfmpegExport, type VideoFfmpegOptions, type VideoFit, type VideoFrame, type VideoGap, type VideoGrade, type VideoGradeControl, type VideoGradePreset, type VideoGradeStep, type VideoIssue, type VideoIssueCode, type VideoIssueSeverity, type VideoKey, type VideoKeyframeProperty, type VideoKeyframeRow, type VideoKeyframes, type VideoLayer, type VideoLoudnessMeasurement, type VideoLoudnessTarget, type VideoMarker, type VideoMediaClip, type VideoMediaProbe, type VideoPlacementMode, VideoPreviewEngine, type VideoPreviewImage, type VideoPreviewMedia, type VideoPreviewOptions, type VideoPreviewSource, type VideoProject, type VideoRect, type VideoRulerTick, type VideoSilenceOptions, type VideoSnapOptions, type VideoSvgOptions, type VideoTextClip, type VideoTrack, type VideoTrackKind, type VideoTransform, type VideoTransition, type VideoTransitionType, type VideoWaveformMode, type VideoWipeDirection, allVideoClipIds, applyVideoEdits, applyVideoGrade, buildVideoAudioPeaks, checkVideoProject, createVideoEditorToolProvider, createVideoProject, decodeVideoAudioPeaks, describeVideoProject, drawVideoFrame, ffmpegFilterValue, findVideoAudioSilences, findVideoClip, findVideoGaps, formatVideoSeconds, formatVideoTimecode, formatVideoTimecodeFrames, isVideoDropFrameRate, isVideoKeyframes, nextFreeVideoSlot, normalizeVideoGrade, parseVideoAnimatable, parseVideoAsset, parseVideoClip, parseVideoClipAnimation, parseVideoGrade, parseVideoKeyframes, parseVideoLoudnessMeasurement, parseVideoMarker, parseVideoProject, parseVideoTrack, parseVideoTransform, parseVideoTransition, placeVideoRect, planVideoClipDrag, probeVideoMedia, removeVideoKey, retimeVideoAnimatable, setVideoKey, snapToVideoFrame, snapVideoTime, sortVideoKeys, sortedVideoClips, splitVideoAnimatable, toVideoEdl, toVideoFfmpeg, toVideoLoudnessMeasure, videoAssetDropEdit, videoAssetHasSound, videoAssetKindOf, videoAssetMap, videoAudioLevels, videoAudioPeakRange, videoAudioPeakSpans, videoAudioPeaksDuration, videoClipAfter, videoClipAnimated, videoClipAnimationProperties, videoClipAnimationSpans, videoClipBefore, videoClipEnd, videoClipHandles, videoClipKeyframes, videoClipLabel, videoClipOverhang, videoClipShowsWaveform, videoClipSoundGain, videoClipSourceRange, videoClipSpeed, videoClipTint, videoClipWaveform, videoClipWaveformPath, videoClipsAt, videoContactSheetSvg, videoDragLabel, videoDropTracks, videoEaseBezier, videoEaseProgress, videoFadeCurveGain, videoFrameAt, videoFrameDuration, videoFrameToSvg, videoFrames, videoGradeCssFilter, videoGradeFfmpegFilters, videoGradeGainsFilterId, videoGradePreset, videoGradeStepMatrix, videoGradeStepSvgValues, videoGradeSteps, videoGradeSvgDefs, videoGradeSvgFilter, videoHourFrames, videoIrisRadius, videoIssueKey, videoKeyframeBreakpoints, videoKeyframeFfmpegExpr, videoKeyframeRows, videoKeyframeToggleEdit, videoKeyframeValueEdit, videoKeysOf, videoOverlap, videoPeakDb, videoProjectDuration, videoProjectSvg, videoRulerTicks, videoSnapPoints, videoTextStyle, videoTimecodeFrames, videoTitleFrame, videoTrackSyncLocked, videoTransformAt, videoTransitionAudioCurve, videoTransitionEase, videoTransitionHasDirection, videoValueAt, videoWaveformPath, videoWipeRect };
1844
+ 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_PEAK_BLOCK, VIDEO_PLACEMENT_MODES, VIDEO_TIME_EPSILON, VIDEO_TRANSFORM_PROPERTIES, VIDEO_TRANSITION_LABELS, VIDEO_TRANSITION_TYPES, VIDEO_WIPE_DIRECTIONS, type VideoAnimatable, type VideoAsset, type VideoAssetKind, type VideoAudioLevel, type VideoAudioPeaks, VideoAudioPeaksCache, type VideoAudioPeaksLoader, type VideoAudioSource, type VideoBlendMode, type VideoCanvasContext, type VideoClip, type VideoClipAnimation, type VideoClipAnimationEffect, type VideoClipDragInput, type VideoClipDragMode, type VideoClipDragPlan, type VideoClipLocation, type VideoClipType, type VideoColorClip, type VideoEase, type VideoEdit, type VideoEditOp, type VideoEditOutcome, type VideoEditResult, VideoEditorController, type VideoEditorOptions, type VideoEditorState, type VideoEditorToolProviderOptions, type VideoEdlOptions, type VideoFadeCurve, type VideoFfmpegExport, type VideoFfmpegOptions, type VideoFit, type VideoFrame, type VideoGap, type VideoGrade, type VideoGradeControl, type VideoGradePreset, type VideoGradeStep, type VideoIssue, type VideoIssueCode, type VideoIssueSeverity, type VideoKey, type VideoKeyframeProperty, type VideoKeyframeRow, type VideoKeyframes, type VideoLayer, type VideoLoudnessMeasurement, type VideoLoudnessTarget, type VideoMarker, type VideoMediaClip, type VideoMediaProbe, type VideoPauseOptions, type VideoPlacementMode, VideoPreviewEngine, type VideoPreviewImage, type VideoPreviewMedia, type VideoPreviewOptions, type VideoPreviewSource, type VideoProject, type VideoRect, type VideoRulerTick, 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 VideoWaveformMode, type VideoWipeDirection, allVideoClipIds, applyVideoEdits, applyVideoGrade, buildVideoAudioPeaks, checkVideoProject, checkVideoTimeRemap, createVideoEditorToolProvider, createVideoProject, decodeVideoAudioPeaks, describeVideoProject, drawVideoFrame, ffmpegFilterValue, findVideoAudioSilences, findVideoClip, findVideoFillers, findVideoGaps, findVideoTranscriptPauses, findVideoTranscriptText, formatVideoSeconds, formatVideoTimecode, formatVideoTimecodeFrames, isVideoDropFrameRate, isVideoKeyframes, mergeVideoRanges, nextFreeVideoSlot, normalizeVideoGrade, normalizeVideoWord, parseVideoAnimatable, parseVideoAsset, parseVideoClip, parseVideoClipAnimation, parseVideoGrade, parseVideoKeyframes, parseVideoLoudnessMeasurement, parseVideoMarker, parseVideoProject, parseVideoTimeRemap, parseVideoTrack, parseVideoTranscript, parseVideoTranscriptWords, parseVideoTransform, parseVideoTransition, placeVideoRect, planVideoClipDrag, probeVideoMedia, removeVideoKey, retimeVideoAnimatable, setVideoKey, snapToVideoFrame, snapVideoTime, sortVideoKeys, sortedVideoClips, splitVideoAnimatable, toVideoEdl, toVideoFfmpeg, toVideoLoudnessMeasure, videoAssetDropEdit, videoAssetHasSound, videoAssetKindOf, videoAssetMap, videoAudioLevels, videoAudioPeakRange, videoAudioPeakSpans, videoAudioPeaksDuration, 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, videoFadeCurveGain, videoFrameAt, videoFrameDuration, videoFrameToSvg, videoFrames, videoFreezeFrameEdit, videoGradeCssFilter, videoGradeFfmpegFilters, videoGradeGainsFilterId, videoGradePreset, videoGradeStepMatrix, videoGradeStepSvgValues, videoGradeSteps, videoGradeSvgDefs, videoGradeSvgFilter, videoHourFrames, videoIrisRadius, videoIssueKey, videoKeyframeBreakpoints, videoKeyframeFfmpegExpr, videoKeyframeRows, videoKeyframeToggleEdit, videoKeyframeValueEdit, videoKeysOf, videoOverlap, videoPeakDb, videoProjectDuration, videoProjectSvg, videoRemoveRangesEdits, videoRulerTicks, videoSlowMotionRamp, videoSnapPoints, videoSpeedRampEdit, videoSpeedRampKeys, videoTextStyle, videoTimeRemapBreakpoints, videoTimeRemapSpan, videoTimecodeFrames, videoTimelineTranscript, videoTitleFrame, videoTrackSyncLocked, videoTranscriptEdit, videoTranscriptTrack, videoTransformAt, videoTransitionAudioCurve, videoTransitionEase, videoTransitionHasDirection, videoValueAt, videoWaveformPath, videoWipeRect, videoWordAt, videoWordsRange };