@pixerate/editor 0.89.0 → 0.91.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.
@@ -98,6 +98,15 @@ interface VideoTranscriptWord {
98
98
  start: number;
99
99
  end: number;
100
100
  }
101
+ /** A smaller copy of an asset's media for the preview (see `VideoAsset.proxies`). */
102
+ interface VideoAssetProxy {
103
+ /** Its size as a fraction of the original (0.5 = half width and height). */
104
+ scale: number;
105
+ /** What the preview loads instead of the original. */
106
+ src: string;
107
+ width?: number;
108
+ height?: number;
109
+ }
101
110
  /** A piece of source media. The project refers to it by id; `src` is whatever the host can load. */
102
111
  interface VideoAsset {
103
112
  id: string;
@@ -116,6 +125,12 @@ interface VideoAsset {
116
125
  poster?: string;
117
126
  /** What is said in it, word by word, timed in the source (see `parseVideoTranscript`). */
118
127
  transcript?: VideoTranscriptWord[];
128
+ /**
129
+ * Smaller copies of a video for smooth editing (see `videoProxyFfmpeg`). The preview plays the
130
+ * one its preview scale picks; exports and EDLs always use `src`. A proxy must have the same
131
+ * length and timing as the original.
132
+ */
133
+ proxies?: VideoAssetProxy[];
119
134
  }
120
135
  type VideoTrackKind = 'video' | 'audio';
121
136
  interface VideoTrack {
@@ -369,6 +384,7 @@ declare function parseVideoGradeLut(v: unknown, path: string): VideoGradeLut | u
369
384
  declare function parseVideoTransition(v: unknown, path: string): VideoTransition | undefined;
370
385
  declare function parseVideoTranscriptWords(v: unknown, path: string): VideoTranscriptWord[] | undefined;
371
386
  declare function parseVideoAsset(v: unknown, path?: string): VideoAsset;
387
+ declare function parseVideoAssetProxies(v: unknown, path: string): VideoAssetProxy[] | undefined;
372
388
  declare function parseVideoClip(v: unknown, path?: string): VideoClip;
373
389
  declare function parseVideoTrack(v: unknown, path?: string): VideoTrack;
374
390
  declare function parseVideoMarker(v: unknown, path?: string): VideoMarker;
@@ -1671,6 +1687,8 @@ interface VideoFfmpegExport {
1671
1687
  }
1672
1688
  /** Escapes a value for a filter option inside a filtergraph (option level, then graph level). */
1673
1689
  declare const ffmpegFilterValue: (s: string) => string;
1690
+ /** Quotes an argument for a POSIX shell when it needs it. */
1691
+ declare const videoShellQuote: (s: string) => string;
1674
1692
  /**
1675
1693
  * The project as an ffmpeg command: each clip an input trimmed to what it plays (plus transition
1676
1694
  * overlap), scaled and placed as `videoFrameAt` places it, faded, and overlaid on a background in
@@ -1686,18 +1704,250 @@ declare function toVideoFfmpeg(project: VideoProject, options?: VideoFfmpegOptio
1686
1704
  */
1687
1705
  declare function toVideoLoudnessMeasure(project: VideoProject, options?: Pick<VideoFfmpegOptions, 'resolve' | 'loudness'>): VideoFfmpegExport;
1688
1706
 
1707
+ /**
1708
+ * How large a picture the preview plays: `full` (the original), a fraction (0.5 = half size, using
1709
+ * the smallest proxy at least that large), or `auto` (what the preview canvas shows).
1710
+ */
1711
+ type VideoPreviewScale = 'auto' | 'full' | number;
1712
+ /** The scales a preview-scale control offers, besides `auto` and `full`. */
1713
+ declare const VIDEO_PROXY_SCALES: readonly [0.5, 0.25];
1714
+ /** The proxy the preview plays at `scale` (0–1]: the smallest at least that large, else `null` (play the original). */
1715
+ declare function videoAssetProxy(asset: Pick<VideoAsset, 'proxies'> | undefined, scale: number): VideoAssetProxy | null;
1716
+ /** The `src` the preview plays for an asset at `scale`: a proxy's, or the original's. */
1717
+ declare const videoPreviewSrc: (asset: VideoAsset | undefined, scale: number, fallback?: string) => string;
1718
+ /** A preview scale as a fraction: `full` is 1, `auto` is `shown` (the canvas's resolution, at most 1). */
1719
+ declare function resolveVideoPreviewScale(scale: VideoPreviewScale | undefined, shown: number): number;
1720
+ interface VideoProxyOptions {
1721
+ /** Size of the proxy as a fraction of the original (default 0.5). */
1722
+ scale?: number;
1723
+ /** Output file (default: the source's name with `.proxy-50.mp4`, for scale 0.5). */
1724
+ output?: string;
1725
+ /** The path or URL ffmpeg should open (default the asset's `src`). */
1726
+ resolve?: (asset: VideoAsset) => string;
1727
+ /** Frames between keyframes (default 12): short, so seeking and scrubbing decode little. */
1728
+ gop?: number;
1729
+ /** x264 quality (default 28: small files; proxies are for editing, not viewing). */
1730
+ crf?: number;
1731
+ }
1732
+ /** A proxy's file name next to `src`: `clip.mov` at 0.5 → `clip.proxy-50.mp4`. */
1733
+ declare function videoProxyName(src: string, scale?: number): string;
1734
+ /** An ffmpeg command making an asset's proxy, and the proxy entry to add once it exists. */
1735
+ interface VideoProxyCommand {
1736
+ asset: string;
1737
+ args: string[];
1738
+ /** One shell line. */
1739
+ command: string;
1740
+ /** The entry for `VideoAsset.proxies` (its `src` is the output; map it to a URL the preview can load if needed). */
1741
+ proxy: VideoAssetProxy;
1742
+ }
1743
+ /**
1744
+ * The ffmpeg command for a proxy of a video asset: scaled to `scale` (even sizes), H.264 with a
1745
+ * short keyframe interval (`gop`) and no B-frames so seeking is cheap, `fastdecode`, the sound
1746
+ * kept as AAC, and `faststart` so a browser can play it while it loads.
1747
+ */
1748
+ declare function videoProxyFfmpeg(asset: VideoAsset, options?: VideoProxyOptions): VideoProxyCommand;
1749
+ /** Commands for every video asset (or those listed) without a proxy at `scale`. */
1750
+ declare function videoProxyPlan(project: VideoProject, options?: VideoProxyOptions & {
1751
+ assets?: readonly string[];
1752
+ output?: never;
1753
+ }): VideoProxyCommand[];
1754
+ /** The choices a preview-size control offers, with labels: `value` round-trips through `parseVideoPreviewScale`. */
1755
+ declare const VIDEO_PREVIEW_SCALE_OPTIONS: readonly {
1756
+ value: string;
1757
+ label: string;
1758
+ scale: VideoPreviewScale;
1759
+ }[];
1760
+ /** A preview-size control's value back as a scale (`auto` for anything unknown). */
1761
+ declare const parseVideoPreviewScale: (value: string) => VideoPreviewScale;
1762
+ /** Whether any asset has proxies (so a preview-size control is worth showing). */
1763
+ declare const videoProjectHasProxies: (project: VideoProject) => boolean;
1764
+
1765
+ /**
1766
+ * A cache of decoded source frames for the preview, with prefetch ahead of the playhead, after the
1767
+ * way Blender's sequencer caches strips: scrubbing and stepping show cached frames at once instead
1768
+ * of waiting for a `<video>` to seek. It is host-side and optional: give a `VideoFrameCache` to the
1769
+ * controller (`frameCache`) or the preview engine.
1770
+ *
1771
+ * Frames are keyed by the file the preview plays (the asset's `src`, or the proxy it picks) and the
1772
+ * source frame, not by clip: every clip of an asset shares them, and edits never invalidate them.
1773
+ * Eviction removes the frames furthest from the playhead, counting frames behind it (against the
1774
+ * play direction) as further, and never touches the prefetch window.
1775
+ */
1776
+
1777
+ /** The source frame showing at a source time (ms) on an `fps` grid: a frame shows from its start. */
1778
+ declare const videoSourceFrame: (sourceTime: number, fps: number) => number;
1779
+ /** The middle of a source frame (ms): where a decoder should seek, away from the frame's edges. */
1780
+ declare const videoSourceFrameTime: (frame: number, fps: number) => number;
1781
+ /** A cache key: the file and the source frame. */
1782
+ declare const videoFrameCacheKey: (src: string, frame: number) => string;
1783
+ /** A frame the preview will need: the file, the source frame and when on the timeline it shows. */
1784
+ interface VideoFrameRequest {
1785
+ key: string;
1786
+ src: string;
1787
+ frame: number;
1788
+ /** Where to seek in the source (ms): the middle of the frame. */
1789
+ sourceTime: number;
1790
+ /** When it shows on the timeline (ms). */
1791
+ time: number;
1792
+ }
1793
+ /** The video layers' source frames at timeline `time`, as the preview would play them. */
1794
+ declare function videoFrameRequestsAt(project: VideoProject, time: number, srcFor?: (layer: VideoLayer) => string | undefined): VideoFrameRequest[];
1795
+ /**
1796
+ * The frames to have ready from `time` over the next `window` ms (backwards with `direction` -1),
1797
+ * a frame apart, nearest first, each key once.
1798
+ */
1799
+ declare function planVideoPrefetch(project: VideoProject, time: number, options?: {
1800
+ window?: number;
1801
+ direction?: 1 | -1;
1802
+ srcFor?: (layer: VideoLayer) => string | undefined;
1803
+ }): VideoFrameRequest[];
1804
+ /** A cached frame's bookkeeping for eviction. */
1805
+ interface VideoCacheEntryInfo {
1806
+ key: string;
1807
+ /** When it last showed (or will show) on the timeline (ms). */
1808
+ time: number;
1809
+ bytes: number;
1810
+ }
1811
+ /**
1812
+ * Which entries to drop to get under `maxBytes`: never those in the prefetch window
1813
+ * (`protect`), then the furthest from the playhead first, with frames behind it (against
1814
+ * `direction`) counted `behind` times as far (default 2), so the way you are going is kept.
1815
+ */
1816
+ declare function videoCacheEvictions(entries: readonly VideoCacheEntryInfo[], options: {
1817
+ playhead: number;
1818
+ maxBytes: number;
1819
+ direction?: 1 | -1;
1820
+ behind?: number;
1821
+ protect?: ReadonlySet<string>;
1822
+ }): string[];
1823
+ /** A decoded frame: anything `drawImage` takes, with its size (`close` is called when it is evicted). */
1824
+ interface VideoDecodedFrame {
1825
+ image: CanvasImageSource & {
1826
+ close?: () => void;
1827
+ };
1828
+ width: number;
1829
+ height: number;
1830
+ }
1831
+ /** Decodes the frame of `src` at a source time (ms). */
1832
+ type VideoFrameDecoder = (src: string, sourceTime: number) => Promise<VideoDecodedFrame>;
1833
+ interface VideoFrameCacheOptions {
1834
+ /** How frames are decoded for prefetch (default in a browser: `createVideoElementDecoder()`; elsewhere none, so only frames the preview hands over are kept). */
1835
+ decode?: VideoFrameDecoder | null;
1836
+ /** Memory budget in bytes (4 a pixel; default 512 MB). */
1837
+ maxBytes?: number;
1838
+ /** How far ahead of the playhead to prefetch (ms, default 2000; 0 turns prefetch off). */
1839
+ prefetch?: number;
1840
+ /** How much further frames behind the playhead count when evicting (default 2). */
1841
+ behind?: number;
1842
+ /** Frames decoded at once (default 2). */
1843
+ concurrency?: number;
1844
+ /** Copies a ready media element's current picture (default `createImageBitmap`), to keep frames the preview has shown. */
1845
+ capture?: (source: CanvasImageSource) => Promise<VideoDecodedFrame | null>;
1846
+ }
1847
+ /** The cache's state, for a status line and agents. */
1848
+ interface VideoFrameCacheStats {
1849
+ frames: number;
1850
+ bytes: number;
1851
+ maxBytes: number;
1852
+ hits: number;
1853
+ misses: number;
1854
+ /** Frames being decoded or waiting to be. */
1855
+ pending: number;
1856
+ prefetch: number;
1857
+ }
1858
+ /**
1859
+ * Decoded source frames for the preview, filled ahead of the playhead and evicted by distance from
1860
+ * it (see the module notes). `VideoPreviewEngine` calls `update` as the playhead moves, draws hits
1861
+ * from `get` while paused or while an element seeks, and hands over frames it has shown.
1862
+ */
1863
+ declare class VideoFrameCache {
1864
+ private readonly options;
1865
+ private readonly entries;
1866
+ private readonly inFlight;
1867
+ private queue;
1868
+ private protect;
1869
+ private readonly listeners;
1870
+ private playhead;
1871
+ private direction;
1872
+ private hits;
1873
+ private misses;
1874
+ private bytes;
1875
+ private generation;
1876
+ private destroyed;
1877
+ private srcFor;
1878
+ readonly maxBytes: number;
1879
+ readonly prefetch: number;
1880
+ private readonly decode;
1881
+ constructor(options?: VideoFrameCacheOptions);
1882
+ /** The cached frame of `src` showing at a source time (ms), on the project's `fps` grid. Counts a hit or a miss. */
1883
+ get(src: string, sourceTime: number, fps: number): CanvasImageSource | undefined;
1884
+ /** Whether a frame is cached, without counting it. */
1885
+ has(src: string, sourceTime: number, fps: number): boolean;
1886
+ /** Keeps a decoded frame (replacing any with the same key), then evicts to the budget. */
1887
+ put(request: Pick<VideoFrameRequest, 'key' | 'time'>, frame: VideoDecodedFrame): void;
1888
+ /** Keeps what a ready media element shows now as the frame of `src` at `sourceTime` (async; does nothing if it is cached). */
1889
+ capture(src: string, sourceTime: number, fps: number, time: number, source: CanvasImageSource): void;
1890
+ /**
1891
+ * Follows the playhead: protects the prefetch window, evicts to the budget, and queues the
1892
+ * window's missing frames for decoding (nearest first). `srcFor` gives the file a layer plays.
1893
+ */
1894
+ update(project: VideoProject, time: number, options?: {
1895
+ playing?: boolean;
1896
+ direction?: 1 | -1;
1897
+ srcFor?: (layer: VideoLayer) => string | undefined;
1898
+ }): void;
1899
+ /**
1900
+ * The stretches of the timeline whose video frames are all cached, between `from` and `to` (ms),
1901
+ * for the files the preview last played (its `srcFor`, e.g. proxies) unless `srcFor` is given.
1902
+ * `step` (ms, at least a frame) samples more coarsely.
1903
+ */
1904
+ cachedRanges(project: VideoProject, options?: {
1905
+ from?: number;
1906
+ to?: number;
1907
+ srcFor?: (layer: VideoLayer) => string | undefined;
1908
+ step?: number;
1909
+ }): {
1910
+ start: number;
1911
+ end: number;
1912
+ }[];
1913
+ stats(): VideoFrameCacheStats;
1914
+ /** Called when frames arrive or leave. */
1915
+ subscribe(listener: () => void): () => void;
1916
+ /** Drops every frame (closing them) and the queue. */
1917
+ clear(): void;
1918
+ /** Clears and stops decoding for good. */
1919
+ destroy(): void;
1920
+ private pump;
1921
+ private evict;
1922
+ private drop;
1923
+ private emit;
1924
+ }
1925
+ /**
1926
+ * A browser decoder for prefetch: one hidden, muted `<video>` per file, seeking to each requested
1927
+ * time in turn and copying the picture with `createImageBitmap` once it is presented
1928
+ * (`requestVideoFrameCallback` where the browser has it, else `seeked`). Media from another origin
1929
+ * needs CORS, as for scopes.
1930
+ */
1931
+ declare function createVideoElementDecoder(options?: {
1932
+ createVideo?: () => HTMLVideoElement;
1933
+ timeout?: number;
1934
+ }): VideoFrameDecoder;
1935
+
1689
1936
  /** What a preview follows: a `VideoEditorController` fits. */
1690
1937
  interface VideoPreviewSource {
1691
1938
  getState(): {
1692
1939
  project: VideoProject;
1693
1940
  time: number;
1694
1941
  playing: boolean;
1942
+ previewScale?: VideoPreviewScale;
1695
1943
  };
1696
1944
  subscribe(listener: () => void): () => void;
1697
1945
  /** Where to publish the drawn pixels (a controller has one), for scopes and agents. */
1698
1946
  previewPixels?: VideoPreviewPixels;
1699
1947
  /** Where grades' LUTs load from (a controller has one). */
1700
1948
  luts?: VideoLutCache;
1949
+ /** Decoded source frames with prefetch (a controller has one when the host gives it). */
1950
+ frameCache?: VideoFrameCache | null;
1701
1951
  }
1702
1952
  /** The parts of a media element the preview drives (so tests can pass fakes). */
1703
1953
  interface VideoPreviewMedia {
@@ -1726,6 +1976,8 @@ interface VideoPreviewImage {
1726
1976
  interface VideoPreviewOptions {
1727
1977
  /** Canvas pixels per frame pixel (default: fits the canvas's displayed width at the device pixel ratio, at most 1). */
1728
1978
  resolution?: number;
1979
+ /** How large a picture to play, overriding the source's `previewScale` (see `VideoPreviewScale`). */
1980
+ previewScale?: VideoPreviewScale;
1729
1981
  /** How far (ms) a playing element may drift from the timeline before it is re-seeked (default 200). */
1730
1982
  tolerance?: number;
1731
1983
  /** Makes media and image elements (default `document.createElement`). */
@@ -1745,6 +1997,11 @@ interface VideoPreviewOptions {
1745
1997
  * tool (default: the source's `previewPixels`). `null` publishes nothing.
1746
1998
  */
1747
1999
  pixels?: VideoPreviewPixels | null;
2000
+ /**
2001
+ * Decoded source frames to draw while paused, scrubbing or waiting for a seek, prefetched ahead
2002
+ * of the playhead (default: the source's `frameCache`; `null` uses none).
2003
+ */
2004
+ frameCache?: VideoFrameCache | null;
1748
2005
  /** Where grades' LUTs load from (default: the source's `luts`). Without one, LUTs are left out. */
1749
2006
  luts?: VideoLutCache | null;
1750
2007
  /**
@@ -1776,6 +2033,11 @@ declare class VideoPreviewEngine {
1776
2033
  private drawn;
1777
2034
  private complete;
1778
2035
  private readonly lutCache;
2036
+ private readonly frameCache;
2037
+ private readonly unsubscribeFrames;
2038
+ private srcFor;
2039
+ private playing;
2040
+ private fps;
1779
2041
  private readonly unsubscribeLuts;
1780
2042
  private scratchCanvas;
1781
2043
  constructor(source: VideoPreviewSource, canvas: {
@@ -1794,6 +2056,8 @@ declare class VideoPreviewEngine {
1794
2056
  update(): void;
1795
2057
  private redraw;
1796
2058
  private sourceFor;
2059
+ /** Canvas pixels per frame pixel: the option, else the displayed width at the device pixel ratio (at most 1). */
2060
+ private resolutionFor;
1797
2061
  private draw;
1798
2062
  /** A grade's LUT once loaded; while it loads (or if it fails) the frame is drawn without it and counts as incomplete. */
1799
2063
  private readonly lutFor;
@@ -1820,6 +2084,13 @@ interface VideoEditorOptions {
1820
2084
  audioPeaks?: VideoAudioPeaksCache | VideoAudioPeaksLoader;
1821
2085
  /** Where grades' LUT files (`.cube`) come from: a shared cache, or a loader (default: `fetch` each `src`). */
1822
2086
  luts?: VideoLutCache | VideoLutLoader;
2087
+ /** How large a picture the preview plays (default `auto`: a proxy as large as the canvas shows, if the asset has one). */
2088
+ previewScale?: VideoPreviewScale;
2089
+ /**
2090
+ * Decoded source frames with prefetch for the preview (see `VideoFrameCache`): scrubbing and
2091
+ * stepping then show cached frames at once. Host-side and optional (default none).
2092
+ */
2093
+ frameCache?: VideoFrameCache;
1823
2094
  }
1824
2095
  /** A snapshot of the editor. The same object is returned until something changes. */
1825
2096
  interface VideoEditorState {
@@ -1843,6 +2114,8 @@ interface VideoEditorState {
1843
2114
  canRedo: boolean;
1844
2115
  undoLabel: string;
1845
2116
  redoLabel: string;
2117
+ /** How large a picture the preview plays: `auto`, `full` or a fraction that picks a proxy. */
2118
+ previewScale: VideoPreviewScale;
1846
2119
  /** Bumped on every change. */
1847
2120
  revision: number;
1848
2121
  }
@@ -1863,10 +2136,13 @@ declare class VideoEditorController {
1863
2136
  readonly previewPixels: VideoPreviewPixels;
1864
2137
  /** Grades' LUTs, loaded on demand for the preview, SVG frames and agents. */
1865
2138
  readonly luts: VideoLutCache;
2139
+ /** The host's frame cache, if it gave one (the preview fills and reads it). */
2140
+ readonly frameCache: VideoFrameCache | null;
1866
2141
  private project;
1867
2142
  private issues;
1868
2143
  private selection;
1869
2144
  private readOnly;
2145
+ private previewScale;
1870
2146
  private error;
1871
2147
  private revision;
1872
2148
  private applying;
@@ -1901,6 +2177,12 @@ declare class VideoEditorController {
1901
2177
  clearHistory?: boolean;
1902
2178
  }): VideoEditResult;
1903
2179
  setReadOnly(readOnly: boolean): void;
2180
+ /**
2181
+ * Sets how large a picture the preview plays: `full` (the originals), a fraction such as 0.5
2182
+ * (the smallest proxy at least that large, else the original) or `auto` (as large as the canvas
2183
+ * shows). A view setting, not part of the project: no undo step.
2184
+ */
2185
+ setPreviewScale(scale: VideoPreviewScale): void;
1904
2186
  /** Selects clips (unknown ids are dropped). `add` toggles them into the current selection. */
1905
2187
  select(clips: readonly string[] | null, options?: {
1906
2188
  add?: boolean;
@@ -1984,6 +2266,7 @@ declare function describeVideoProject(project: VideoProject): {
1984
2266
  height?: number;
1985
2267
  hasAudio?: boolean;
1986
2268
  poster?: string;
2269
+ proxies?: VideoAssetProxy[];
1987
2270
  } | {
1988
2271
  transcriptWords: number;
1989
2272
  id: string;
@@ -1995,6 +2278,7 @@ declare function describeVideoProject(project: VideoProject): {
1995
2278
  height?: number;
1996
2279
  hasAudio?: boolean;
1997
2280
  poster?: string;
2281
+ proxies?: VideoAssetProxy[];
1998
2282
  })[];
1999
2283
  tracks: {
2000
2284
  clips: ({
@@ -2230,4 +2514,4 @@ declare function videoKeyframeToggleEdit(project: VideoProject, clipId: string,
2230
2514
  */
2231
2515
  declare function videoLutEdits(project: VideoProject, clips: readonly string[], lut: VideoGradeLut | null): VideoEdit[];
2232
2516
 
2233
- 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_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 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 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, 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 VideoPreviewSnapshot, type VideoPreviewSource, type VideoProject, 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, createVideoProject, decodeVideoAudioPeaks, describeVideoProject, drawVideoFrame, ffmpegFilterValue, findVideoAudioSilences, findVideoClip, findVideoFillers, findVideoGaps, findVideoTranscriptPauses, findVideoTranscriptText, formatVideoSeconds, formatVideoTimecode, formatVideoTimecodeFrames, isVideoDropFrameRate, isVideoKeyframes, mergeVideoRanges, nextFreeVideoSlot, normalizeVideoGrade, normalizeVideoGradeLut, normalizeVideoWord, parseVideoAnimatable, parseVideoAsset, parseVideoClip, parseVideoClipAnimation, parseVideoCubeLut, parseVideoGrade, parseVideoGradeLut, parseVideoKeyframes, parseVideoLoudnessMeasurement, parseVideoMarker, parseVideoProject, parseVideoTimeRemap, parseVideoTrack, parseVideoTranscript, parseVideoTranscriptWords, parseVideoTransform, parseVideoTransition, placeVideoRect, planVideoClipDrag, probeVideoMedia, readVideoScopesPanel, removeVideoKey, retimeVideoAnimatable, setVideoKey, snapToVideoFrame, snapVideoTime, sortVideoKeys, sortedVideoClips, splitVideoAnimatable, summarizeVideoScopes, toVideoEdl, toVideoFfmpeg, toVideoLoudnessMeasure, videoAssetDropEdit, videoAssetHasSound, videoAssetKindOf, videoAssetMap, videoAudioLevels, videoAudioPeakRange, videoAudioPeakSpans, videoAudioPeaksDuration, 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, videoFrameDuration, 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, videoProjectDuration, videoProjectSvg, videoRemoveRangesEdits, videoRulerTicks, videoScopeImage, videoSlowMotionRamp, videoSnapPoints, 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 };
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 };