@pixerate/editor 0.234.0 → 0.235.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.
@@ -153,6 +153,13 @@ var _chunkZQIWBJGHcjs = require('../chunk-ZQIWBJGH.cjs');
153
153
 
154
154
 
155
155
  var _chunkDGWOGQJ5cjs = require('../chunk-DGWOGQJ5.cjs');
156
+
157
+
158
+
159
+
160
+
161
+
162
+ var _chunkJWCKJNDRcjs = require('../chunk-JWCKJNDR.cjs');
156
163
  require('../chunk-PY4GWSE2.cjs');
157
164
 
158
165
 
@@ -3454,6 +3461,106 @@ var VideoPreviewEngine = (_class6 = class {
3454
3461
  }
3455
3462
  }, _class6);
3456
3463
 
3464
+ // src/video-editor/sequence.ts
3465
+ var svgUrl = (svg) => svg.trimStart().startsWith("<") ? `data:image/svg+xml;charset=utf-8,${encodeURIComponent(svg)}` : svg;
3466
+ var GROUPS = ["base", "background", "subject", "overlay", "text"];
3467
+ function videoEditsFromSequence(project, sequence, options = {}) {
3468
+ const at = _nullishCoalesce(options.at, () => ( _chunkZQIWBJGHcjs.videoProjectDuration.call(void 0, project)));
3469
+ const W = project.width;
3470
+ const H = project.height;
3471
+ const sx = W / sequence.stage.width;
3472
+ const sy = H / sequence.stage.height;
3473
+ const timing = _chunkJWCKJNDRcjs.effectSequenceTiming.call(void 0, sequence);
3474
+ const provider = options.provider ? { provider: options.provider } : {};
3475
+ const notes = [];
3476
+ const usedClips = new Set(_chunkZQIWBJGHcjs.allVideoClipIds.call(void 0, project));
3477
+ const usedTracks = new Set(project.tracks.map((t) => t.id));
3478
+ const usedAssets = new Set(project.assets.map((a) => a.id));
3479
+ const fresh = (used, base) => {
3480
+ for (let i = 1; ; i++) if (!used.has(`${base}${i}`)) return used.add(`${base}${i}`), `${base}${i}`;
3481
+ };
3482
+ const edits = [];
3483
+ const assets = [];
3484
+ const placeholders = {};
3485
+ const items = [];
3486
+ const placement = (r) => {
3487
+ if (!r) return {};
3488
+ const x = (r.x + r.width / 2) * sx - W / 2;
3489
+ const y = (r.y + r.height / 2) * sy - H / 2;
3490
+ const scale = Math.min(r.width * sx / W, r.height * sy / H);
3491
+ return { transform: { x: Math.round(x * 100) / 100, y: Math.round(y * 100) / 100, scale: Math.round(scale * 1e3) / 1e3 } };
3492
+ };
3493
+ const clipOf = (layer, start, duration, shot) => {
3494
+ const id = fresh(usedClips, "tpl-c");
3495
+ const common = { id, start, duration, ...layer.opacity !== void 0 && layer.opacity < 1 ? { opacity: layer.opacity } : {}, ...layer.fade ? { fadeIn: layer.fade, fadeOut: layer.fade } : {}, ...placement(layer.rect) };
3496
+ const effects = layer.effect ? { effects: [{ id: "fx1", effect: layer.effect, ...provider, ...layer.values ? { values: layer.values } : {} }] } : {};
3497
+ const s = layer.subject;
3498
+ if (!s) return { ...common, type: "effect", effect: layer.effect, ...provider, ...layer.values ? { values: layer.values } : {} };
3499
+ if ("slot" in s) {
3500
+ (placeholders[s.slot] ??= []).push(id);
3501
+ if (layer.effect) notes.push(`Shot ${shot + 1}: the "${s.slot}" slot is a grey placeholder; when you swap in the picture, apply ${layer.effect} to it again (apply_effect).`);
3502
+ return { ...common, type: "color", color: "#475569", name: `Slot "${s.slot}"` };
3503
+ }
3504
+ if ("text" in s) return { ...common, type: "text", text: s.text, ...s.font ? { fontFamily: s.font } : {}, ...typeof s.weight === "number" ? { fontWeight: s.weight } : {}, ...effects };
3505
+ const asset = fresh(usedAssets, "tpl-a");
3506
+ assets.push(asset);
3507
+ if ("video" in s) {
3508
+ notes.push(`Shot ${shot + 1}: a video's length is not known here, so its asset is given the clip's length (${Math.round(duration)} ms); correct it with update_video_asset if it is longer.`);
3509
+ edits.push({ op: "add_asset", asset: { id: asset, kind: "video", src: s.video, duration } });
3510
+ } else edits.push({ op: "add_asset", asset: { id: asset, kind: "image", src: "image" in s ? s.image : svgUrl(s.svg) } });
3511
+ return { ...common, type: "media", asset, fit: "contain", ...effects };
3512
+ };
3513
+ sequence.shots.forEach((shot, i) => {
3514
+ const shotStart = timing.starts[i];
3515
+ const shotEnd = _nullishCoalesce(timing.starts[i + 1], () => ( timing.total));
3516
+ let base;
3517
+ shot.layers.forEach((layer, j) => {
3518
+ const span = _chunkJWCKJNDRcjs.effectLayerSpan.call(void 0, layer, i, timing.starts, timing.total);
3519
+ if (span.end - span.start <= 0) return void notes.push(`Shot ${i + 1}, layer ${j + 1} lasts no time, so it was left out.`);
3520
+ const clip = clipOf(layer, at + span.start, span.end - span.start, i);
3521
+ const isBase = j === 0 && !base && span.start === shotStart && span.end === shotEnd && _chunkJWCKJNDRcjs.effectLayerRole.call(void 0, layer) === "background" && !layer.rect;
3522
+ const item = { group: isBase ? "base" : _chunkJWCKJNDRcjs.effectLayerRole.call(void 0, layer), clip };
3523
+ if (isBase) base = item;
3524
+ items.push(item);
3525
+ });
3526
+ if (!base) {
3527
+ base = { group: "base", clip: { id: fresh(usedClips, "tpl-c"), type: "color", color: "#000000", name: `Shot ${i + 1}`, start: at + shotStart, duration: shotEnd - shotStart } };
3528
+ items.push(base);
3529
+ }
3530
+ if (i > 0 && shot.transition) {
3531
+ base.clip.transition = { type: "effect", duration: _nullishCoalesce(shot.transition.ms, () => ( 800)), effect: { effect: shot.transition.effect, ...provider, ...shot.transition.values ? { values: shot.transition.values } : {} } };
3532
+ if (shot.layers.length > 1) notes.push(`Shot ${i + 1}: its transition blends the clips on the base track; the layers above it cut.`);
3533
+ }
3534
+ const words = (text, y, size, name) => items.push({ group: "text", clip: { id: fresh(usedClips, "tpl-c"), type: "text", text, name, fontSize: Math.round(size), start: at + shotStart, duration: shotEnd - shotStart, transform: { x: 0, y: Math.round(y) } } });
3535
+ if (shot.title) words(shot.title, 0, H * 0.09, "Title");
3536
+ if (shot.caption) words(shot.caption, H * 0.35, H * 0.045, "Caption");
3537
+ if (_optionalChain([shot, 'access', _109 => _109.camera, 'optionalAccess', _110 => _110.in]) !== void 0 || _optionalChain([shot, 'access', _111 => _111.camera, 'optionalAccess', _112 => _112.during]) !== void 0 || _optionalChain([shot, 'access', _113 => _113.camera, 'optionalAccess', _114 => _114.framing])) notes.push(`Shot ${i + 1}: its camera framing and moves were not carried over; set them with set_clip_camera_move on its clips.`);
3538
+ });
3539
+ const lanes = [];
3540
+ for (const group of GROUPS) {
3541
+ const mine = [];
3542
+ for (const item of items.filter((x) => x.group === group).sort((a, b) => a.clip.start - b.clip.start)) {
3543
+ let lane = group === "base" ? mine[0] : mine.find((l) => l.ends.every((e) => e <= item.clip.start + 1e-6));
3544
+ if (!lane) mine.push(lane = { group, id: fresh(usedTracks, "tpl-v"), ends: [], clips: [] });
3545
+ lane.ends.push(item.clip.start + item.clip.duration);
3546
+ lane.clips.push(item);
3547
+ }
3548
+ lanes.push(...mine);
3549
+ }
3550
+ for (const lane of lanes) edits.push({ op: "add_track", track: { id: lane.id, kind: "video", name: `Template ${lane.group}` }, at: 0 });
3551
+ for (const lane of lanes) for (const item of lane.clips) edits.push({ op: "add_clip", track: lane.id, clip: item.clip });
3552
+ return {
3553
+ edits,
3554
+ clips: lanes.flatMap((l) => l.clips.map((c) => c.clip.id)),
3555
+ tracks: lanes.map((l) => l.id).reverse(),
3556
+ assets,
3557
+ start: at,
3558
+ end: at + timing.total,
3559
+ placeholders,
3560
+ notes
3561
+ };
3562
+ }
3563
+
3457
3564
  // src/video-editor/controller.ts
3458
3565
  var VideoEditorController = (_class7 = class _VideoEditorController {
3459
3566
 
@@ -3579,7 +3686,7 @@ var VideoEditorController = (_class7 = class _VideoEditorController {
3579
3686
  this.applying = false;
3580
3687
  }
3581
3688
  this.notify();
3582
- _optionalChain([this, 'access', _109 => _109.onChange, 'optionalCall', _110 => _110(project)]);
3689
+ _optionalChain([this, 'access', _115 => _115.onChange, 'optionalCall', _116 => _116(project)]);
3583
3690
  }
3584
3691
  commit(label, next, merge) {
3585
3692
  const before = this.project;
@@ -3736,7 +3843,7 @@ var VideoEditorController = (_class7 = class _VideoEditorController {
3736
3843
  }
3737
3844
  /** Selects clips (unknown ids are dropped). `add` toggles them into the current selection. */
3738
3845
  select(clips, options = {}) {
3739
- const known = _nullishCoalesce(_optionalChain([clips, 'optionalAccess', _111 => _111.filter, 'call', _112 => _112((id) => _chunkZQIWBJGHcjs.findVideoClip.call(void 0, this.project, id))]), () => ( []));
3846
+ const known = _nullishCoalesce(_optionalChain([clips, 'optionalAccess', _117 => _117.filter, 'call', _118 => _118((id) => _chunkZQIWBJGHcjs.findVideoClip.call(void 0, this.project, id))]), () => ( []));
3740
3847
  let next;
3741
3848
  if (options.add) {
3742
3849
  next = [...this.selection];
@@ -3818,6 +3925,29 @@ var VideoEditorController = (_class7 = class _VideoEditorController {
3818
3925
  if (place) _chunkZQIWBJGHcjs.checkVideoEffectPlace.call(void 0, d, place);
3819
3926
  return d;
3820
3927
  }
3928
+ /**
3929
+ * Fills a provider sequence template and puts it on the timeline at `at` (default the end), on
3930
+ * new tracks above the others (see `videoEditsFromSequence`). Values are checked first and every
3931
+ * problem is refused at once. One undo step. Returns the new tracks, clips and assets, where it
3932
+ * starts and ends, the placeholder clips standing in for open slots, and notes.
3933
+ */
3934
+ async fillTemplate(template, values = {}, options = {}) {
3935
+ const reason = this.readOnlyReason();
3936
+ if (reason) return this.refused(reason);
3937
+ if (options.at !== void 0 && !(Number.isFinite(options.at) && options.at >= 0)) return this.refused(`"at" is a time in ms, 0 or more (got ${options.at}).`);
3938
+ let filled;
3939
+ try {
3940
+ filled = await _chunkJWCKJNDRcjs.fillEffectTemplate.call(void 0, this.effects.provider, template, values, options.name ? { name: options.name } : {});
3941
+ } catch (error) {
3942
+ if (_chunkJAOSL334cjs.isEffectError.call(void 0, error) || error instanceof Error) return this.refused(error.message);
3943
+ throw error;
3944
+ }
3945
+ const made = videoEditsFromSequence(this.getState().project, filled.sequence, { at: options.at, provider: this.effects.provider.id });
3946
+ const r = this.apply(made.edits, `Template ${filled.template.name}`);
3947
+ if (!r.ok) return r;
3948
+ const { edits: _edits, notes, ...rest } = made;
3949
+ return { ok: true, template, ...rest, openSlots: filled.openSlots, notes: [...filled.notes, ...notes] };
3950
+ }
3821
3951
  refused(message) {
3822
3952
  return this.refuse(message);
3823
3953
  }
@@ -3902,7 +4032,7 @@ var VideoEditorController = (_class7 = class _VideoEditorController {
3902
4032
  /** The provider's camera moves for a role (`transition` into a clip, `hold` while it plays), or all of them. Empty without camera support. */
3903
4033
  async cameraMoves(role) {
3904
4034
  const provider = this.effects.provider;
3905
- if (!_optionalChain([provider, 'optionalAccess', _113 => _113.capabilities, 'access', _114 => _114.supportsCamera]) || !provider.cameraView) return [];
4035
+ if (!_optionalChain([provider, 'optionalAccess', _119 => _119.capabilities, 'access', _120 => _120.supportsCamera]) || !provider.cameraView) return [];
3906
4036
  return (await provider.list({ kind: "camera" })).filter((e) => e.kind === "camera" && e.camera && (!role || e.camera.role === role));
3907
4037
  }
3908
4038
  cameraClip(id) {
@@ -3968,8 +4098,8 @@ var VideoEditorController = (_class7 = class _VideoEditorController {
3968
4098
  const current = this.cameraClip(clip);
3969
4099
  const field = _chunkJAOSL334cjs.cameraMoveField.call(void 0, role);
3970
4100
  const other = field === "in" ? "during" : "in";
3971
- if (_optionalChain([current, 'access', _115 => _115.camera, 'optionalAccess', _116 => _116[field]]) === void 0)
3972
- throw new Error(`Clip "${clip}" has no camera "${field}" move to clear${_optionalChain([current, 'access', _117 => _117.camera, 'optionalAccess', _118 => _118[other]]) !== void 0 ? `; it has a "${other}" move (role ${role === "hold" ? "transition" : "hold"})` : ""}.`);
4101
+ if (_optionalChain([current, 'access', _121 => _121.camera, 'optionalAccess', _122 => _122[field]]) === void 0)
4102
+ throw new Error(`Clip "${clip}" has no camera "${field}" move to clear${_optionalChain([current, 'access', _123 => _123.camera, 'optionalAccess', _124 => _124[other]]) !== void 0 ? `; it has a "${other}" move (role ${role === "hold" ? "transition" : "hold"})` : ""}.`);
3973
4103
  const camera = { ...current.camera };
3974
4104
  delete camera[field];
3975
4105
  if (field === "in") delete camera.from;
@@ -4023,7 +4153,7 @@ var VideoEditorController = (_class7 = class _VideoEditorController {
4023
4153
  label,
4024
4154
  clip: clipId
4025
4155
  };
4026
- }).then((r) => r.ok && !r.clip ? { ...r, clip: _nullishCoalesce(_optionalChain([r, 'access', _119 => _119.outcomes, 'access', _120 => _120[0], 'optionalAccess', _121 => _121.clip]), () => ( "")) } : r);
4156
+ }).then((r) => r.ok && !r.clip ? { ...r, clip: _nullishCoalesce(_optionalChain([r, 'access', _125 => _125.outcomes, 'access', _126 => _126[0], 'optionalAccess', _127 => _127.clip]), () => ( "")) } : r);
4027
4157
  }
4028
4158
  /**
4029
4159
  * Changes the values of an effect clip's picture (`target` its id) or of the effect transition
@@ -4039,7 +4169,7 @@ var VideoEditorController = (_class7 = class _VideoEditorController {
4039
4169
  return { edit: { op: "update_clip", clip, set: { values: _chunkZQIWBJGHcjs.checkVideoEffectValues.call(void 0, d2, values, { base: _nullishCoalesce(current.values, () => ( {})), keyframes: true }) } }, label: `Change ${_nullishCoalesce(current.name, () => ( d2.name))}`, clip };
4040
4170
  }
4041
4171
  const t = current.transition;
4042
- if (_optionalChain([t, 'optionalAccess', _122 => _122.type]) !== "effect" || !t.effect) throw new Error(`Clip "${clip}" has no effect transition.`);
4172
+ if (_optionalChain([t, 'optionalAccess', _128 => _128.type]) !== "effect" || !t.effect) throw new Error(`Clip "${clip}" has no effect transition.`);
4043
4173
  const d = await this.describeEffect(t.effect.effect);
4044
4174
  const merged = _chunkZQIWBJGHcjs.checkVideoEffectValues.call(void 0, d, values, { base: _nullishCoalesce(t.effect.values, () => ( {})) });
4045
4175
  return { edit: { op: "set_transition", clip, transition: { ...t, effect: { ...t.effect, values: merged } } }, label: `Change transition ${d.name}`, clip };
@@ -4047,10 +4177,10 @@ var VideoEditorController = (_class7 = class _VideoEditorController {
4047
4177
  }
4048
4178
  /** Keys for one numeric control of a clip effect (clip-relative ms), or `null` to stop animating it (keeping its value at the clip's start). */
4049
4179
  setClipEffectKeyframes(clip, instance, control, keys) {
4050
- const current = _optionalChain([_chunkZQIWBJGHcjs.findVideoClip.call(void 0, this.project, clip), 'optionalAccess', _123 => _123.clip]);
4051
- const was = _optionalChain([current, 'optionalAccess', _124 => _124.effects, 'optionalAccess', _125 => _125.find, 'call', _126 => _126((e) => e.id === instance)]);
4052
- const value = _optionalChain([was, 'optionalAccess', _127 => _127.values, 'optionalAccess', _128 => _128[control]]);
4053
- const plain = keys === null ? _chunkZQIWBJGHcjs.isVideoKeyframes.call(void 0, value) ? _optionalChain([value, 'access', _129 => _129.keys, 'access', _130 => _130[0], 'optionalAccess', _131 => _131.v]) : value : { keys: [...keys].sort((a, b) => a.t - b.t) };
4180
+ const current = _optionalChain([_chunkZQIWBJGHcjs.findVideoClip.call(void 0, this.project, clip), 'optionalAccess', _129 => _129.clip]);
4181
+ const was = _optionalChain([current, 'optionalAccess', _130 => _130.effects, 'optionalAccess', _131 => _131.find, 'call', _132 => _132((e) => e.id === instance)]);
4182
+ const value = _optionalChain([was, 'optionalAccess', _133 => _133.values, 'optionalAccess', _134 => _134[control]]);
4183
+ const plain = keys === null ? _chunkZQIWBJGHcjs.isVideoKeyframes.call(void 0, value) ? _optionalChain([value, 'access', _135 => _135.keys, 'access', _136 => _136[0], 'optionalAccess', _137 => _137.v]) : value : { keys: [...keys].sort((a, b) => a.t - b.t) };
4054
4184
  return this.updateClipEffect(clip, instance, { values: { [control]: _nullishCoalesce(plain, () => ( null)) } });
4055
4185
  }
4056
4186
  /** What plays at `time` (default: the playhead). */
@@ -4105,7 +4235,7 @@ function planVideoToolPlayback(tool, args) {
4105
4235
  const clips = clipsOf(args);
4106
4236
  const track = str2(args.track) ? args.track : void 0;
4107
4237
  const newClip = args.clip && typeof args.clip === "object" ? args.clip : null;
4108
- const time = [args.start, args.at, args.time, args.to, _optionalChain([newClip, 'optionalAccess', _132 => _132.start])].find(num2);
4238
+ const time = [args.start, args.at, args.time, args.to, _optionalChain([newClip, 'optionalAccess', _138 => _138.start])].find(num2);
4109
4239
  const click = (ref) => [{ type: "target", ref }, { type: "press" }, { type: "release" }];
4110
4240
  if (clips.length === 1 && (time !== void 0 || track) && tool !== "split_video_clip") {
4111
4241
  const clip = clips[0];
@@ -4201,10 +4331,10 @@ function videoClipLabel(clip, asset, sequence) {
4201
4331
  if (clip.name) return clip.name;
4202
4332
  if (clip.type === "text") return clip.text.split("\n")[0];
4203
4333
  if (clip.type === "color") return clip.color;
4204
- if (clip.type === "sequence") return `Compound: ${_nullishCoalesce(_optionalChain([sequence, 'optionalAccess', _133 => _133.name]), () => ( clip.sequence))}`;
4334
+ if (clip.type === "sequence") return `Compound: ${_nullishCoalesce(_optionalChain([sequence, 'optionalAccess', _139 => _139.name]), () => ( clip.sequence))}`;
4205
4335
  if (clip.type === "effect") return `Effect: ${clip.effect}`;
4206
4336
  if (clip.type === "adjustment") return `Adjustment${clip.scope === "all" ? " (all tracks)" : clip.scope === "track" ? ` (${clip.targetTrack})` : ""}`;
4207
- const base = _nullishCoalesce(_nullishCoalesce(_optionalChain([asset, 'optionalAccess', _134 => _134.name]), () => ( _optionalChain([asset, 'optionalAccess', _135 => _135.src, 'access', _136 => _136.replace, 'call', _137 => _137(/^.*[\\/]/, "")]))), () => ( clip.asset));
4337
+ const base = _nullishCoalesce(_nullishCoalesce(_optionalChain([asset, 'optionalAccess', _140 => _140.name]), () => ( _optionalChain([asset, 'optionalAccess', _141 => _141.src, 'access', _142 => _142.replace, 'call', _143 => _143(/^.*[\\/]/, "")]))), () => ( clip.asset));
4208
4338
  const speed = _chunkZQIWBJGHcjs.videoClipSpeed.call(void 0, clip);
4209
4339
  return speed !== 1 ? `${base} (${Math.round(speed * 100)}%)` : base;
4210
4340
  }
@@ -4248,7 +4378,7 @@ function videoAssetDropEdit(project, assetId, options = {}) {
4248
4378
  const asset = _chunkZQIWBJGHcjs.videoAssetMap.call(void 0, project).get(assetId);
4249
4379
  if (!asset) return null;
4250
4380
  const kind = asset.kind === "audio" ? "audio" : "video";
4251
- const track = _nullishCoalesce(options.track, () => ( _optionalChain([project, 'access', _138 => _138.tracks, 'access', _139 => _139.find, 'call', _140 => _140((t) => t.kind === kind && !t.locked), 'optionalAccess', _141 => _141.id])));
4381
+ const track = _nullishCoalesce(options.track, () => ( _optionalChain([project, 'access', _144 => _144.tracks, 'access', _145 => _145.find, 'call', _146 => _146((t) => t.kind === kind && !t.locked), 'optionalAccess', _147 => _147.id])));
4252
4382
  if (!track) return null;
4253
4383
  return { op: "add_clip", track, clip: { type: "media", asset: asset.id, ...options.start !== void 0 ? { start: options.start } : {} }, ...options.ripple ? { ripple: true } : {}, ...options.mode && options.mode !== "refuse" ? { mode: options.mode } : {} };
4254
4384
  }
@@ -4297,14 +4427,14 @@ var KEY_LABELS = {
4297
4427
  scale: { label: "Scale", step: 0.05 },
4298
4428
  rotation: { label: "Rotation", step: 1 }
4299
4429
  };
4300
- var animatableOf = (clip, property) => _chunkZQIWBJGHcjs.VIDEO_TRANSFORM_PROPERTIES.includes(property) ? _optionalChain([clip, 'access', _142 => _142.transform, 'optionalAccess', _143 => _143[property]]) : property === "volume" ? clip.type === "media" || clip.type === "sequence" ? clip.volume : void 0 : clip.opacity;
4430
+ var animatableOf = (clip, property) => _chunkZQIWBJGHcjs.VIDEO_TRANSFORM_PROPERTIES.includes(property) ? _optionalChain([clip, 'access', _148 => _148.transform, 'optionalAccess', _149 => _149[property]]) : property === "volume" ? clip.type === "media" || clip.type === "sequence" ? clip.volume : void 0 : clip.opacity;
4301
4431
  var playheadInClip = (clip, time) => Math.round(Math.min(clip.duration, Math.max(0, time - clip.start)));
4302
4432
  function videoKeyframeRows(project, clipId, time) {
4303
4433
  const at = _chunkZQIWBJGHcjs.findVideoClip.call(void 0, project, clipId);
4304
4434
  if (!at) return [];
4305
4435
  const { clip } = at;
4306
4436
  const asset = clip.type === "media" ? _chunkZQIWBJGHcjs.videoAssetMap.call(void 0, project).get(clip.asset) : void 0;
4307
- const visual = !(_optionalChain([asset, 'optionalAccess', _144 => _144.kind]) === "audio" || at.track.kind === "audio");
4437
+ const visual = !(_optionalChain([asset, 'optionalAccess', _150 => _150.kind]) === "audio" || at.track.kind === "audio");
4308
4438
  const audible = clip.type === "media" && _chunkZQIWBJGHcjs.videoAssetHasSound.call(void 0, asset) || clip.type === "sequence";
4309
4439
  const properties = [...visual ? ["opacity"] : [], ...audible ? ["volume"] : [], ...visual ? _chunkZQIWBJGHcjs.VIDEO_TRANSFORM_PROPERTIES : []];
4310
4440
  const clipTime = playheadInClip(clip, time);
@@ -4386,7 +4516,7 @@ function videoAddAdjustmentEdits(project, time, options = {}) {
4386
4516
  const top = project.tracks[0];
4387
4517
  const free = top && top.kind === "video" && !top.locked && !top.clips.some((c) => c.start < start + duration && _chunkZQIWBJGHcjs.videoClipEnd.call(void 0, c) > start);
4388
4518
  const edits = [];
4389
- let track = _optionalChain([top, 'optionalAccess', _145 => _145.id]);
4519
+ let track = _optionalChain([top, 'optionalAccess', _151 => _151.id]);
4390
4520
  if (!free) {
4391
4521
  const ids = new Set(project.tracks.map((t) => t.id));
4392
4522
  let n = 1;
@@ -4403,8 +4533,8 @@ function videoMaskEdit(clip, mask) {
4403
4533
  function videoSkinProtectionEdits(project, clips, amount) {
4404
4534
  const edits = [];
4405
4535
  for (const id of clips) {
4406
- const clip = _optionalChain([_chunkZQIWBJGHcjs.findVideoClip.call(void 0, project, id), 'optionalAccess', _146 => _146.clip]);
4407
- const lut = _optionalChain([clip, 'optionalAccess', _147 => _147.grade, 'optionalAccess', _148 => _148.lut]);
4536
+ const clip = _optionalChain([_chunkZQIWBJGHcjs.findVideoClip.call(void 0, project, id), 'optionalAccess', _152 => _152.clip]);
4537
+ const lut = _optionalChain([clip, 'optionalAccess', _153 => _153.grade, 'optionalAccess', _154 => _154.lut]);
4408
4538
  if (!clip || !lut) continue;
4409
4539
  const { preserveSkinTones: _p, ...rest } = lut;
4410
4540
  const k = Math.min(1, Math.max(0, amount));
@@ -4621,7 +4751,7 @@ function describeVideoProject(project) {
4621
4751
  ...project.background ? { background: project.background } : {},
4622
4752
  assets: project.assets.map(videoAssetOut),
4623
4753
  tracks: describeVideoTracks(project.tracks),
4624
- ..._optionalChain([project, 'access', _149 => _149.sequences, 'optionalAccess', _150 => _150.length]) ? { sequences: project.sequences.map((q) => describeVideoSequence(project, q, false)) } : {},
4754
+ ..._optionalChain([project, 'access', _155 => _155.sequences, 'optionalAccess', _156 => _156.length]) ? { sequences: project.sequences.map((q) => describeVideoSequence(project, q, false)) } : {},
4625
4755
  markers: _nullishCoalesce(project.markers, () => ( []))
4626
4756
  };
4627
4757
  }
@@ -4648,14 +4778,14 @@ function createVideoEditorToolProvider(controller, options = {}) {
4648
4778
  return null;
4649
4779
  };
4650
4780
  const placed = (o) => ({
4651
- ..._optionalChain([o, 'access', _151 => _151.created, 'optionalAccess', _152 => _152.length]) ? { created: o.created } : {},
4652
- ..._optionalChain([o, 'access', _153 => _153.trimmed, 'optionalAccess', _154 => _154.length]) ? { trimmed: o.trimmed } : {},
4653
- ..._optionalChain([o, 'access', _155 => _155.removed, 'optionalAccess', _156 => _156.length]) ? { removed: o.removed } : {},
4781
+ ..._optionalChain([o, 'access', _157 => _157.created, 'optionalAccess', _158 => _158.length]) ? { created: o.created } : {},
4782
+ ..._optionalChain([o, 'access', _159 => _159.trimmed, 'optionalAccess', _160 => _160.length]) ? { trimmed: o.trimmed } : {},
4783
+ ..._optionalChain([o, 'access', _161 => _161.removed, 'optionalAccess', _162 => _162.length]) ? { removed: o.removed } : {},
4654
4784
  ...o.rippled ? { rippled: o.rippled } : {}
4655
4785
  });
4656
4786
  const keysOut = (p, clip, property) => {
4657
4787
  const c = clipOut(p, clip);
4658
- const value = _chunkZQIWBJGHcjs.VIDEO_TRANSFORM_PROPERTIES.includes(property) ? _optionalChain([c, 'optionalAccess', _157 => _157.transform, 'optionalAccess', _158 => _158[property]]) : _optionalChain([c, 'optionalAccess', _159 => _159[property]]);
4788
+ const value = _chunkZQIWBJGHcjs.VIDEO_TRANSFORM_PROPERTIES.includes(property) ? _optionalChain([c, 'optionalAccess', _163 => _163.transform, 'optionalAccess', _164 => _164[property]]) : _optionalChain([c, 'optionalAccess', _165 => _165[property]]);
4659
4789
  return typeof value === "object" ? { keys: value.keys } : { keys: [], value: _nullishCoalesce(value, () => ( null)) };
4660
4790
  };
4661
4791
  const getProject = {
@@ -4733,7 +4863,7 @@ function createVideoEditorToolProvider(controller, options = {}) {
4733
4863
  annotations: { title: "Render a frame", ...READ },
4734
4864
  handler: async ({ time, times, columns, format = "svg" }) => {
4735
4865
  const p = project();
4736
- const lutSrcs = [...new Set(p.tracks.flatMap((t) => t.clips.map((c) => _optionalChain([c, 'access', _160 => _160.grade, 'optionalAccess', _161 => _161.lut, 'optionalAccess', _162 => _162.src])).filter((x) => !!x)))];
4866
+ const lutSrcs = [...new Set(p.tracks.flatMap((t) => t.clips.map((c) => _optionalChain([c, 'access', _166 => _166.grade, 'optionalAccess', _167 => _167.lut, 'optionalAccess', _168 => _168.src])).filter((x) => !!x)))];
4737
4867
  const missing = (await Promise.all(lutSrcs.map((src) => controller.luts.load(src).then(() => null, (e) => e.message)))).filter((m) => !!m);
4738
4868
  const svgOptions = { lutFor: (src) => controller.luts.peek(src), ...columns ? { columns } : {} };
4739
4869
  const svg = times ? _chunkZQIWBJGHcjs.videoContactSheetSvg.call(void 0, p, times, svgOptions) : _chunkZQIWBJGHcjs.videoProjectSvg.call(void 0, p, _nullishCoalesce(time, () => ( controller.getState().time)), svgOptions);
@@ -4974,7 +5104,7 @@ function createVideoEditorToolProvider(controller, options = {}) {
4974
5104
  const at = _chunkZQIWBJGHcjs.findVideoClip.call(void 0, p, id);
4975
5105
  if (!at) throw new Error(`There is no clip "${id}"; get_video_project lists the clips.`);
4976
5106
  const { clip } = at;
4977
- if (at.track.kind !== "video" || clip.type === "media" && _optionalChain([p, 'access', _163 => _163.assets, 'access', _164 => _164.find, 'call', _165 => _165((a) => a.id === clip.asset), 'optionalAccess', _166 => _166.kind]) === "audio")
5107
+ if (at.track.kind !== "video" || clip.type === "media" && _optionalChain([p, 'access', _169 => _169.assets, 'access', _170 => _170.find, 'call', _171 => _171((a) => a.id === clip.asset), 'optionalAccess', _172 => _172.kind]) === "audio")
4978
5108
  throw new Error(`Clip "${id}" is sound only; grades change pictures. Pass clips on video tracks.`);
4979
5109
  }
4980
5110
  };
@@ -4997,7 +5127,7 @@ function createVideoEditorToolProvider(controller, options = {}) {
4997
5127
  const grade = _chunkZQIWBJGHcjs.videoGradeLook.call(void 0, _chunkZQIWBJGHcjs.findVideoClip.call(void 0, project(), clip).clip.grade, preset, _nullishCoalesce(amount, () => ( 1)));
4998
5128
  return grade ? { op: "update_clip", clip, set: { grade } } : { op: "update_clip", clip, remove: ["grade"] };
4999
5129
  });
5000
- return apply(edits, `Apply ${preset} look`, (r) => ({ clips: clips.map((id) => ({ id, grade: _nullishCoalesce(_optionalChain([_chunkZQIWBJGHcjs.findVideoClip.call(void 0, r.project, id), 'optionalAccess', _167 => _167.clip, 'access', _168 => _168.grade]), () => ( null)) })) }));
5130
+ return apply(edits, `Apply ${preset} look`, (r) => ({ clips: clips.map((id) => ({ id, grade: _nullishCoalesce(_optionalChain([_chunkZQIWBJGHcjs.findVideoClip.call(void 0, r.project, id), 'optionalAccess', _173 => _173.clip, 'access', _174 => _174.grade]), () => ( null)) })) }));
5001
5131
  }
5002
5132
  };
5003
5133
  const copyGrade = {
@@ -5034,7 +5164,7 @@ function createVideoEditorToolProvider(controller, options = {}) {
5034
5164
  const lut = await controller.luts.load(src);
5035
5165
  const label = _nullishCoalesce(name, () => ( lut.title));
5036
5166
  const setting = { src, ...strength !== void 0 && strength !== 1 ? { strength } : {}, ...label ? { name: label } : {}, ...preserve_skin_tones ? { preserveSkinTones: preserve_skin_tones } : {} };
5037
- return apply(videoLutEdits(project(), clips, setting), "Apply LUT", (r) => ({ lut: { src, ...lut.title ? { title: lut.title } : {}, size: lut.size }, clips: clips.map((id) => ({ id, grade: _nullishCoalesce(_optionalChain([_chunkZQIWBJGHcjs.findVideoClip.call(void 0, r.project, id), 'optionalAccess', _169 => _169.clip, 'access', _170 => _170.grade]), () => ( null)) })) }));
5167
+ return apply(videoLutEdits(project(), clips, setting), "Apply LUT", (r) => ({ lut: { src, ...lut.title ? { title: lut.title } : {}, size: lut.size }, clips: clips.map((id) => ({ id, grade: _nullishCoalesce(_optionalChain([_chunkZQIWBJGHcjs.findVideoClip.call(void 0, r.project, id), 'optionalAccess', _175 => _175.clip, 'access', _176 => _176.grade]), () => ( null)) })) }));
5038
5168
  }
5039
5169
  };
5040
5170
  const removeLut = {
@@ -5046,9 +5176,9 @@ function createVideoEditorToolProvider(controller, options = {}) {
5046
5176
  handler: ({ clips }) => {
5047
5177
  gradeTargets(clips);
5048
5178
  const p = project();
5049
- const withLut = clips.filter((id) => _optionalChain([_chunkZQIWBJGHcjs.findVideoClip.call(void 0, p, id), 'access', _171 => _171.clip, 'access', _172 => _172.grade, 'optionalAccess', _173 => _173.lut]));
5179
+ const withLut = clips.filter((id) => _optionalChain([_chunkZQIWBJGHcjs.findVideoClip.call(void 0, p, id), 'access', _177 => _177.clip, 'access', _178 => _178.grade, 'optionalAccess', _179 => _179.lut]));
5050
5180
  if (!withLut.length) throw new Error(`None of ${clips.map((c) => `"${c}"`).join(", ")} has a LUT; get_video_project shows each clip's grade.`);
5051
- return apply(videoLutEdits(p, withLut, null), "Remove LUT", (r) => ({ clips: clips.map((id) => ({ id, grade: _nullishCoalesce(_optionalChain([_chunkZQIWBJGHcjs.findVideoClip.call(void 0, r.project, id), 'optionalAccess', _174 => _174.clip, 'access', _175 => _175.grade]), () => ( null)) })) }));
5181
+ return apply(videoLutEdits(p, withLut, null), "Remove LUT", (r) => ({ clips: clips.map((id) => ({ id, grade: _nullishCoalesce(_optionalChain([_chunkZQIWBJGHcjs.findVideoClip.call(void 0, r.project, id), 'optionalAccess', _180 => _180.clip, 'access', _181 => _181.grade]), () => ( null)) })) }));
5052
5182
  }
5053
5183
  };
5054
5184
  const PROXY_SCALE = { type: "number", exclusiveMinimum: 0, exclusiveMaximum: 1, description: "Proxy size as a fraction of the original: 0.5 (half width and height, the default) or 0.25 for very large footage." };
@@ -5106,7 +5236,7 @@ function createVideoEditorToolProvider(controller, options = {}) {
5106
5236
  controller.setPreviewScale(scale);
5107
5237
  const s = controller.getState().previewScale;
5108
5238
  const fixed = s === "full" ? 1 : typeof s === "number" ? s : null;
5109
- const plays = fixed === null ? void 0 : project().assets.filter((a) => a.kind === "video").map((a) => ({ asset: a.id, src: _nullishCoalesce(_optionalChain([videoAssetProxy, 'call', _176 => _176(a, fixed), 'optionalAccess', _177 => _177.src]), () => ( a.src)), proxy: !!videoAssetProxy(a, fixed) }));
5239
+ const plays = fixed === null ? void 0 : project().assets.filter((a) => a.kind === "video").map((a) => ({ asset: a.id, src: _nullishCoalesce(_optionalChain([videoAssetProxy, 'call', _182 => _182(a, fixed), 'optionalAccess', _183 => _183.src]), () => ( a.src)), proxy: !!videoAssetProxy(a, fixed) }));
5110
5240
  return { previewScale: s, ...plays ? { plays } : { note: "auto picks the smallest proxy at least as large as the preview canvas shows, so it depends on the preview's size." } };
5111
5241
  }
5112
5242
  };
@@ -5175,7 +5305,7 @@ function createVideoEditorToolProvider(controller, options = {}) {
5175
5305
  handler: ({ track, from, to, limit }) => {
5176
5306
  const all = timelineWords(track).filter((w) => w.end > (_nullishCoalesce(from, () => ( 0))) && w.start < (_nullishCoalesce(to, () => ( Infinity))));
5177
5307
  const words = all.slice(0, _nullishCoalesce(limit, () => ( 1e3)));
5178
- return { track: _nullishCoalesce(_optionalChain([words, 'access', _178 => _178[0], 'optionalAccess', _179 => _179.track]), () => ( videoTranscriptTrack(project(), track))), text: words.map((w) => w.word).join(" "), words: words.map((w) => ({ word: w.word, start: round(w.start), end: round(w.end), clip: w.clip })), more: all.length > words.length };
5308
+ return { track: _nullishCoalesce(_optionalChain([words, 'access', _184 => _184[0], 'optionalAccess', _185 => _185.track]), () => ( videoTranscriptTrack(project(), track))), text: words.map((w) => w.word).join(" "), words: words.map((w) => ({ word: w.word, start: round(w.start), end: round(w.end), clip: w.clip })), more: all.length > words.length };
5179
5309
  }
5180
5310
  };
5181
5311
  const findText = {
@@ -5238,7 +5368,7 @@ function createVideoEditorToolProvider(controller, options = {}) {
5238
5368
  const { clip } = at;
5239
5369
  if (clip.type === "sequence") throw new Error(`Clip "${id}" is a compound clip, which plays its sequence at normal speed; change the speed of the clips inside the sequence instead.`);
5240
5370
  if (clip.type !== "media") throw new Error(`Clip "${id}" is a ${_chunkZQIWBJGHcjs.videoClipTypeLabel.call(void 0, clip)}, so it has no source to change the speed of; use a video or audio clip.`);
5241
- if (_optionalChain([project, 'call', _180 => _180(), 'access', _181 => _181.assets, 'access', _182 => _182.find, 'call', _183 => _183((a) => a.id === clip.asset), 'optionalAccess', _184 => _184.kind]) === "image") throw new Error(`Clip "${id}" is a still, so it has no motion to change the speed of.`);
5371
+ if (_optionalChain([project, 'call', _186 => _186(), 'access', _187 => _187.assets, 'access', _188 => _188.find, 'call', _189 => _189((a) => a.id === clip.asset), 'optionalAccess', _190 => _190.kind]) === "image") throw new Error(`Clip "${id}" is a still, so it has no motion to change the speed of.`);
5242
5372
  return clip;
5243
5373
  };
5244
5374
  const rampOut = (r, id) => {
@@ -5654,12 +5784,12 @@ function createVideoEditorToolProvider(controller, options = {}) {
5654
5784
  const edits = [];
5655
5785
  for (const id of clips) {
5656
5786
  const clip = _chunkZQIWBJGHcjs.findVideoClip.call(void 0, project(), id).clip;
5657
- const lut = _optionalChain([clip, 'access', _185 => _185.grade, 'optionalAccess', _186 => _186.lut]);
5787
+ const lut = _optionalChain([clip, 'access', _191 => _191.grade, 'optionalAccess', _192 => _192.lut]);
5658
5788
  if (!lut) throw new Error(`Clip "${id}" has no LUT to protect skin from; add one with set_video_lut first.`);
5659
5789
  const { preserveSkinTones: _p, ...rest } = lut;
5660
5790
  edits.push({ op: "update_clip", clip: id, set: { grade: { ...clip.grade, lut: amount > 0 ? { ...rest, preserveSkinTones: amount } : rest } } });
5661
5791
  }
5662
- return apply(edits, amount > 0 ? "Protect skin tones" : "Stop protecting skin tones", (r) => ({ clips: clips.map((id) => ({ id, lut: _nullishCoalesce(_optionalChain([_chunkZQIWBJGHcjs.findVideoClip.call(void 0, r.project, id), 'optionalAccess', _187 => _187.clip, 'access', _188 => _188.grade, 'optionalAccess', _189 => _189.lut]), () => ( null)) })) }));
5792
+ return apply(edits, amount > 0 ? "Protect skin tones" : "Stop protecting skin tones", (r) => ({ clips: clips.map((id) => ({ id, lut: _nullishCoalesce(_optionalChain([_chunkZQIWBJGHcjs.findVideoClip.call(void 0, r.project, id), 'optionalAccess', _193 => _193.clip, 'access', _194 => _194.grade, 'optionalAccess', _195 => _195.lut]), () => ( null)) })) }));
5663
5793
  }
5664
5794
  };
5665
5795
  const planOut = (plan) => ({
@@ -5785,7 +5915,7 @@ function videoCameraMoveTools(controller, ctx) {
5785
5915
  annotations: { title: "List camera moves for clips", ...ctx.annotations.read },
5786
5916
  handler: async (args) => {
5787
5917
  const provider = controller.effectsProvider;
5788
- if (!_optionalChain([provider, 'optionalAccess', _190 => _190.capabilities, 'access', _191 => _191.supportsCamera]) || !provider.cameraView)
5918
+ if (!_optionalChain([provider, 'optionalAccess', _196 => _196.capabilities, 'access', _197 => _197.supportsCamera]) || !provider.cameraView)
5789
5919
  return { available: false, reason: provider ? `${provider.name} has no camera moves (capabilities.supportsCamera is not set).` : "No effects provider is registered, so there are no camera moves.", moves: [] };
5790
5920
  return { available: true, provider: provider.name, moves: (await controller.cameraMoves(args.role)).map(summary) };
5791
5921
  }
@@ -5837,7 +5967,7 @@ function videoClipAppliedEffects(clip) {
5837
5967
  const out = [];
5838
5968
  const ref = (r) => ({ effect: r.effect, ...r.name ? { name: r.name } : {}, ...r.provider ? { provider: r.provider } : {} });
5839
5969
  if (clip.type === "effect") out.push({ id: "generator", ...ref(clip), role: "effect clip", enabled: true, values: _nullishCoalesce(clip.values, () => ( {})) });
5840
- if (_optionalChain([clip, 'access', _192 => _192.transition, 'optionalAccess', _193 => _193.type]) === "effect" && clip.transition.effect) out.push({ id: "transition", ...ref(clip.transition.effect), role: "transition", enabled: true, values: { ..._nullishCoalesce(clip.transition.effect.values, () => ( {})) }, duration: clip.transition.duration });
5970
+ if (_optionalChain([clip, 'access', _198 => _198.transition, 'optionalAccess', _199 => _199.type]) === "effect" && clip.transition.effect) out.push({ id: "transition", ...ref(clip.transition.effect), role: "transition", enabled: true, values: { ..._nullishCoalesce(clip.transition.effect.values, () => ( {})) }, duration: clip.transition.duration });
5841
5971
  (_nullishCoalesce(clip.effects, () => ( []))).forEach((e, index) => out.push({ id: e.id, ...ref(e), role: "clip effect", enabled: e.enabled !== false, ...e.opacity !== void 0 ? { opacity: e.opacity } : {}, values: _nullishCoalesce(e.values, () => ( {})), index }));
5842
5972
  return out;
5843
5973
  }
@@ -5874,7 +6004,7 @@ function createVideoEffectsToolProvider(controller, options = {}) {
5874
6004
  const result = (r, target, instance, extra = {}) => {
5875
6005
  if (!r.ok) throw new Error(r.error);
5876
6006
  const effects = videoClipAppliedEffects(clipOf(target));
5877
- const effect = _nullishCoalesce(effects.find((e) => e.id === (_nullishCoalesce(instance, () => ( _optionalChain([r, 'access', _194 => _194.effect, 'optionalAccess', _195 => _195.id]))))), () => ( (r.effect ? { id: r.effect.id, effect: r.effect.effect, role: "clip effect", enabled: r.effect.enabled !== false, values: _nullishCoalesce(r.effect.values, () => ( {})) } : effects[0])));
6007
+ const effect = _nullishCoalesce(effects.find((e) => e.id === (_nullishCoalesce(instance, () => ( _optionalChain([r, 'access', _200 => _200.effect, 'optionalAccess', _201 => _201.id]))))), () => ( (r.effect ? { id: r.effect.id, effect: r.effect.effect, role: "clip effect", enabled: r.effect.enabled !== false, values: _nullishCoalesce(r.effect.values, () => ( {})) } : effects[0])));
5878
6008
  return { target, effect, effects, ...extra };
5879
6009
  };
5880
6010
  return withVideoPlayback(_chunkJAOSL334cjs.createEffectToolProvider.call(void 0, {
@@ -5923,6 +6053,20 @@ function createVideoEffectsToolProvider(controller, options = {}) {
5923
6053
  subscribe: (notify) => controller.subscribe(() => notify()),
5924
6054
  extraTools: (ctx) => [
5925
6055
  ...videoCameraMoveTools(controller, ctx),
6056
+ ..._chunkJWCKJNDRcjs.effectTemplateTools.call(void 0,
6057
+ {
6058
+ provider: () => controller.effectsProvider,
6059
+ fillDetails: `It goes on the timeline at "at" (default the end of the project), on new tracks above the others: each shot's bottom layer on a base track (with the shot's transition), other layers as effect, picture and text clips on tracks by role, titles and captions as text clips; an open subject slot becomes a grey placeholder clip named after it. Camera moves are not carried over. Returns { template, tracks, clips, assets, start, end (ms), placeholders (clip ids by open slot), openSlots, notes }. To fill an open slot, add the picture with add_video_asset and put it on the placeholder's track at its start with add_video_clip in overwrite mode.`,
6060
+ fillOptions: { at: { type: "number", minimum: 0, description: "Where on the timeline it starts, ms (default the end of the project)." } },
6061
+ fill: async (template, values, options2) => {
6062
+ const r = await controller.fillTemplate(template, values, { name: options2.name, at: options2.at });
6063
+ if (!r.ok) throw new Error(r.error);
6064
+ const { ok: _ok, ...rest } = r;
6065
+ return rest;
6066
+ }
6067
+ },
6068
+ ctx
6069
+ ),
5926
6070
  {
5927
6071
  name: "add_video_effect_clip",
5928
6072
  title: "Add an effect clip",
@@ -5995,8 +6139,8 @@ function createVideoEffectsToolProvider(controller, options = {}) {
5995
6139
  if (args.effect === "generator") {
5996
6140
  const clip = clipOf(args.clip);
5997
6141
  if (clip.type !== "effect") throw new Error(`Clip "${args.clip}" is not an effect clip; give the id of one of its effects (list_applied_effects).`);
5998
- const was = _optionalChain([clip, 'access', _196 => _196.values, 'optionalAccess', _197 => _197[args.control]]);
5999
- const plain = keys === null ? _chunkZQIWBJGHcjs.isVideoKeyframes.call(void 0, was) ? _optionalChain([was, 'access', _198 => _198.keys, 'access', _199 => _199[0], 'optionalAccess', _200 => _200.v]) : was : { keys: [...keys].sort((a, b) => a.t - b.t) };
6142
+ const was = _optionalChain([clip, 'access', _202 => _202.values, 'optionalAccess', _203 => _203[args.control]]);
6143
+ const plain = keys === null ? _chunkZQIWBJGHcjs.isVideoKeyframes.call(void 0, was) ? _optionalChain([was, 'access', _204 => _204.keys, 'access', _205 => _205[0], 'optionalAccess', _206 => _206.v]) : was : { keys: [...keys].sort((a, b) => a.t - b.t) };
6000
6144
  if (plain === void 0) throw new Error(`"${args.control}" has no value to keep; give keys instead.`);
6001
6145
  r = await controller.updateEffectValues(args.clip, "generator", { [args.control]: plain });
6002
6146
  } else r = await controller.setClipEffectKeyframes(args.clip, args.effect, args.control, keys);
@@ -6792,4 +6936,5 @@ function createVideoEditorDocument(controller) {
6792
6936
 
6793
6937
 
6794
6938
 
6795
- exports.TranscriptVideoController = TranscriptVideoController; exports.VIDEO_ADJUSTMENT_SCOPES = _chunkZQIWBJGHcjs.VIDEO_ADJUSTMENT_SCOPES; exports.VIDEO_ADJUSTMENT_SCOPE_LABELS = VIDEO_ADJUSTMENT_SCOPE_LABELS; exports.VIDEO_BLEND_MODES = _chunkZQIWBJGHcjs.VIDEO_BLEND_MODES; exports.VIDEO_BLEND_MODE_LABELS = VIDEO_BLEND_MODE_LABELS; exports.VIDEO_CLIP_ANIMATION_DURATION = _chunkZQIWBJGHcjs.VIDEO_CLIP_ANIMATION_DURATION; exports.VIDEO_CLIP_ANIMATION_EFFECTS = _chunkZQIWBJGHcjs.VIDEO_CLIP_ANIMATION_EFFECTS; exports.VIDEO_CLIP_ANIMATION_LABELS = VIDEO_CLIP_ANIMATION_LABELS; exports.VIDEO_CLIP_TYPES = _chunkZQIWBJGHcjs.VIDEO_CLIP_TYPES; exports.VIDEO_DEFAULT_FILLERS = VIDEO_DEFAULT_FILLERS; exports.VIDEO_DEFAULT_STILL_DURATION = VIDEO_DEFAULT_STILL_DURATION; exports.VIDEO_DEFAULT_TITLE_DURATION = VIDEO_DEFAULT_TITLE_DURATION; exports.VIDEO_DISFLUENCY_KINDS = VIDEO_DISFLUENCY_KINDS; exports.VIDEO_EASE_NAMES = _chunkZQIWBJGHcjs.VIDEO_EASE_NAMES; exports.VIDEO_EDIT_OPS = VIDEO_EDIT_OPS; exports.VIDEO_EFFECT_PLACES = _chunkZQIWBJGHcjs.VIDEO_EFFECT_PLACES; exports.VIDEO_FADE_CURVES = _chunkZQIWBJGHcjs.VIDEO_FADE_CURVES; exports.VIDEO_FADE_CURVE_LABELS = VIDEO_FADE_CURVE_LABELS; exports.VIDEO_FITS = _chunkZQIWBJGHcjs.VIDEO_FITS; exports.VIDEO_GRADE_CONTROLS = _chunkZQIWBJGHcjs.VIDEO_GRADE_CONTROLS; exports.VIDEO_GRADE_PRESETS = _chunkZQIWBJGHcjs.VIDEO_GRADE_PRESETS; exports.VIDEO_GRADE_PRESET_NAMES = _chunkZQIWBJGHcjs.VIDEO_GRADE_PRESET_NAMES; exports.VIDEO_ISSUE_CODES = VIDEO_ISSUE_CODES; exports.VIDEO_KEYFRAME_LIMITS = _chunkZQIWBJGHcjs.VIDEO_KEYFRAME_LIMITS; exports.VIDEO_KEYFRAME_PROPERTIES = _chunkZQIWBJGHcjs.VIDEO_KEYFRAME_PROPERTIES; exports.VIDEO_LOUDNESS_HOP = VIDEO_LOUDNESS_HOP; exports.VIDEO_LUT_MAX_SIZE = _chunkZQIWBJGHcjs.VIDEO_LUT_MAX_SIZE; exports.VIDEO_MASK_DEFAULTS = _chunkZQIWBJGHcjs.VIDEO_MASK_DEFAULTS; exports.VIDEO_MASK_SHAPES = _chunkZQIWBJGHcjs.VIDEO_MASK_SHAPES; exports.VIDEO_MASK_SHAPE_LABELS = VIDEO_MASK_SHAPE_LABELS; exports.VIDEO_PEAK_BLOCK = VIDEO_PEAK_BLOCK; exports.VIDEO_PLACEMENT_MODES = _chunkZQIWBJGHcjs.VIDEO_PLACEMENT_MODES; exports.VIDEO_PREVIEW_SCALE_OPTIONS = VIDEO_PREVIEW_SCALE_OPTIONS; exports.VIDEO_PROXY_SCALES = VIDEO_PROXY_SCALES; exports.VIDEO_SCOPE_KINDS = VIDEO_SCOPE_KINDS; exports.VIDEO_TIME_EPSILON = _chunkZQIWBJGHcjs.VIDEO_TIME_EPSILON; exports.VIDEO_TRANSFORM_PROPERTIES = _chunkZQIWBJGHcjs.VIDEO_TRANSFORM_PROPERTIES; exports.VIDEO_TRANSITION_LABELS = VIDEO_TRANSITION_LABELS; exports.VIDEO_TRANSITION_TYPES = _chunkZQIWBJGHcjs.VIDEO_TRANSITION_TYPES; exports.VIDEO_VECTORSCOPE_TARGETS = VIDEO_VECTORSCOPE_TARGETS; exports.VIDEO_WIPE_DIRECTIONS = _chunkZQIWBJGHcjs.VIDEO_WIPE_DIRECTIONS; exports.VideoAudioPeaksCache = VideoAudioPeaksCache; exports.VideoEditorController = VideoEditorController; exports.VideoEffectsEngine = _chunkZQIWBJGHcjs.VideoEffectsEngine; exports.VideoFrameCache = VideoFrameCache; exports.VideoLutCache = _chunkZQIWBJGHcjs.VideoLutCache; exports.VideoPreviewEngine = VideoPreviewEngine; exports.VideoPreviewPixels = VideoPreviewPixels; exports.allVideoClipIds = _chunkZQIWBJGHcjs.allVideoClipIds; exports.allVideoTracks = _chunkZQIWBJGHcjs.allVideoTracks; exports.animationEasingToVideoEase = animationEasingToVideoEase; exports.applyVideoEdits = applyVideoEdits; exports.applyVideoGrade = _chunkZQIWBJGHcjs.applyVideoGrade; exports.applyVideoLut = _chunkZQIWBJGHcjs.applyVideoLut; exports.applyVideoLutToPixels = _chunkZQIWBJGHcjs.applyVideoLutToPixels; exports.bakeVideoClipCamera = bakeVideoClipCamera; exports.buildVideoAudioPeaks = buildVideoAudioPeaks; exports.checkVideoEffectPlace = _chunkZQIWBJGHcjs.checkVideoEffectPlace; exports.checkVideoEffectValues = _chunkZQIWBJGHcjs.checkVideoEffectValues; exports.checkVideoProject = checkVideoProject; exports.checkVideoTimeRemap = _chunkZQIWBJGHcjs.checkVideoTimeRemap; exports.createVideoDialogueToolProvider = createVideoDialogueToolProvider; exports.createVideoEditorDocument = createVideoEditorDocument; exports.createVideoEditorToolProvider = createVideoEditorToolProvider; exports.createVideoEffectsToolProvider = createVideoEffectsToolProvider; exports.createVideoElementDecoder = createVideoElementDecoder; exports.createVideoMusicToolProvider = createVideoMusicToolProvider; exports.createVideoProject = createVideoProject; exports.decodeVideoAudioPeaks = decodeVideoAudioPeaks; exports.describeVideoEditPlan = describeVideoEditPlan; exports.describeVideoProject = describeVideoProject; exports.describeVideoSequence = describeVideoSequence; exports.detectVideoDisfluencies = detectVideoDisfluencies; exports.diffVideoProjects = diffVideoProjects; exports.drawVideoFrame = _chunkZQIWBJGHcjs.drawVideoFrame; exports.ffmpegFilterValue = _chunkZQIWBJGHcjs.ffmpegFilterValue; exports.findVideoAudioBeats = findVideoAudioBeats; exports.findVideoAudioSilences = findVideoAudioSilences; exports.findVideoClip = _chunkZQIWBJGHcjs.findVideoClip; exports.findVideoFillers = findVideoFillers; exports.findVideoGaps = _chunkZQIWBJGHcjs.findVideoGaps; exports.findVideoRepetitions = findVideoRepetitions; exports.findVideoSequenceClip = _chunkZQIWBJGHcjs.findVideoSequenceClip; exports.findVideoSequenceCycle = _chunkZQIWBJGHcjs.findVideoSequenceCycle; exports.findVideoTranscriptPauses = findVideoTranscriptPauses; exports.findVideoTranscriptText = findVideoTranscriptText; exports.formatVideoSeconds = _chunkZQIWBJGHcjs.formatVideoSeconds; exports.formatVideoTimecode = _chunkZQIWBJGHcjs.formatVideoTimecode; exports.formatVideoTimecodeFrames = _chunkZQIWBJGHcjs.formatVideoTimecodeFrames; exports.isVideoDropFrameRate = _chunkZQIWBJGHcjs.isVideoDropFrameRate; exports.isVideoKeyframes = _chunkZQIWBJGHcjs.isVideoKeyframes; exports.measureVideoLoudness = measureVideoLoudness; exports.mergeVideoRanges = mergeVideoRanges; exports.mixEffectPixels = _chunkZQIWBJGHcjs.mixEffectPixels; exports.nearestVideoBeat = nearestVideoBeat; exports.nextFreeVideoSlot = _chunkZQIWBJGHcjs.nextFreeVideoSlot; exports.normalizeVideoClipMask = _chunkZQIWBJGHcjs.normalizeVideoClipMask; exports.normalizeVideoGrade = _chunkZQIWBJGHcjs.normalizeVideoGrade; exports.normalizeVideoGradeLut = _chunkZQIWBJGHcjs.normalizeVideoGradeLut; exports.normalizeVideoWord = normalizeVideoWord; exports.openVideoClipEffectAuthoring = openVideoClipEffectAuthoring; exports.overEffectPixels = _chunkZQIWBJGHcjs.overEffectPixels; exports.parseVideoAnimatable = parseVideoAnimatable; exports.parseVideoAsset = parseVideoAsset; exports.parseVideoAssetProxies = parseVideoAssetProxies; exports.parseVideoClip = parseVideoClip; exports.parseVideoClipAnimation = parseVideoClipAnimation; exports.parseVideoClipCamera = parseVideoClipCamera; exports.parseVideoClipEffects = parseVideoClipEffects; exports.parseVideoClipMask = parseVideoClipMask; exports.parseVideoCubeLut = _chunkZQIWBJGHcjs.parseVideoCubeLut; exports.parseVideoEffectRef = parseVideoEffectRef; exports.parseVideoEffectValues = parseVideoEffectValues; exports.parseVideoGrade = parseVideoGrade; exports.parseVideoGradeLut = parseVideoGradeLut; exports.parseVideoKeyframes = parseVideoKeyframes; exports.parseVideoLoudnessMeasurement = _chunkZQIWBJGHcjs.parseVideoLoudnessMeasurement; exports.parseVideoMarker = parseVideoMarker; exports.parseVideoPreviewScale = parseVideoPreviewScale; exports.parseVideoProject = parseVideoProject; exports.parseVideoSequence = parseVideoSequence; exports.parseVideoTimeRef = parseVideoTimeRef; exports.parseVideoTimeRemap = parseVideoTimeRemap; exports.parseVideoTrack = parseVideoTrack; exports.parseVideoTranscript = parseVideoTranscript; exports.parseVideoTranscriptWords = parseVideoTranscriptWords; exports.parseVideoTransform = parseVideoTransform; exports.parseVideoTransition = parseVideoTransition; exports.placeVideoRect = _chunkZQIWBJGHcjs.placeVideoRect; exports.planVideoClipDrag = planVideoClipDrag; exports.planVideoEdits = planVideoEdits; exports.planVideoPrefetch = planVideoPrefetch; exports.planVideoToolPlayback = planVideoToolPlayback; exports.probeVideoMedia = probeVideoMedia; exports.readVideoScopesPanel = readVideoScopesPanel; exports.removeVideoKey = _chunkZQIWBJGHcjs.removeVideoKey; exports.renderVideoFrameExact = _chunkZQIWBJGHcjs.renderVideoFrameExact; exports.resolveVideoPreviewScale = resolveVideoPreviewScale; exports.retimeVideoAnimatable = _chunkZQIWBJGHcjs.retimeVideoAnimatable; exports.setVideoKey = _chunkZQIWBJGHcjs.setVideoKey; exports.snapToVideoFrame = _chunkZQIWBJGHcjs.snapToVideoFrame; exports.snapVideoTime = _chunkZQIWBJGHcjs.snapVideoTime; exports.sortVideoKeys = _chunkZQIWBJGHcjs.sortVideoKeys; exports.sortedVideoClips = _chunkZQIWBJGHcjs.sortedVideoClips; exports.splitVideoAnimatable = _chunkZQIWBJGHcjs.splitVideoAnimatable; exports.summarizeVideoScopes = summarizeVideoScopes; exports.toVideoEdl = _chunkZQIWBJGHcjs.toVideoEdl; exports.toVideoFfmpeg = _chunkZQIWBJGHcjs.toVideoFfmpeg; exports.toVideoLoudnessMeasure = _chunkZQIWBJGHcjs.toVideoLoudnessMeasure; exports.videoAddAdjustmentEdits = videoAddAdjustmentEdits; exports.videoAssetDropEdit = videoAssetDropEdit; exports.videoAssetHasSound = _chunkZQIWBJGHcjs.videoAssetHasSound; exports.videoAssetKindOf = videoAssetKindOf; exports.videoAssetMap = _chunkZQIWBJGHcjs.videoAssetMap; exports.videoAssetProxy = videoAssetProxy; exports.videoAudioLevels = videoAudioLevels; exports.videoAudioLoudness = videoAudioLoudness; exports.videoAudioPeakRange = videoAudioPeakRange; exports.videoAudioPeakSpans = videoAudioPeakSpans; exports.videoAudioPeaksDuration = videoAudioPeaksDuration; exports.videoAuthorableEffects = videoAuthorableEffects; exports.videoCacheEvictions = videoCacheEvictions; exports.videoCameraBase = videoCameraBase; exports.videoCameraMoveTools = videoCameraMoveTools; exports.videoCameraView = videoCameraView; exports.videoChroma = videoChroma; exports.videoClipAfter = _chunkZQIWBJGHcjs.videoClipAfter; exports.videoClipAnimated = _chunkZQIWBJGHcjs.videoClipAnimated; exports.videoClipAnimationProperties = _chunkZQIWBJGHcjs.videoClipAnimationProperties; exports.videoClipAnimationSpans = _chunkZQIWBJGHcjs.videoClipAnimationSpans; exports.videoClipAppliedEffects = videoClipAppliedEffects; exports.videoClipBefore = _chunkZQIWBJGHcjs.videoClipBefore; exports.videoClipCameraMove = videoClipCameraMove; exports.videoClipEffectDocument = videoClipEffectDocument; exports.videoClipEffectUses = _chunkZQIWBJGHcjs.videoClipEffectUses; exports.videoClipEnd = _chunkZQIWBJGHcjs.videoClipEnd; exports.videoClipHandles = _chunkZQIWBJGHcjs.videoClipHandles; exports.videoClipHeading = videoClipHeading; exports.videoClipKeyframes = videoClipKeyframes; exports.videoClipLabel = videoClipLabel; exports.videoClipOverhang = _chunkZQIWBJGHcjs.videoClipOverhang; exports.videoClipShowsWaveform = videoClipShowsWaveform; exports.videoClipSoundGain = _chunkZQIWBJGHcjs.videoClipSoundGain; exports.videoClipSourceRange = _chunkZQIWBJGHcjs.videoClipSourceRange; exports.videoClipSourceTime = _chunkZQIWBJGHcjs.videoClipSourceTime; exports.videoClipSpeed = _chunkZQIWBJGHcjs.videoClipSpeed; exports.videoClipSpeedAt = _chunkZQIWBJGHcjs.videoClipSpeedAt; exports.videoClipTint = videoClipTint; exports.videoClipTypeLabel = _chunkZQIWBJGHcjs.videoClipTypeLabel; exports.videoClipWaveform = videoClipWaveform; exports.videoClipWaveformPath = videoClipWaveformPath; exports.videoClipsAt = _chunkZQIWBJGHcjs.videoClipsAt; exports.videoContactSheetSvg = _chunkZQIWBJGHcjs.videoContactSheetSvg; exports.videoCutsWithMargin = videoCutsWithMargin; exports.videoDragLabel = videoDragLabel; exports.videoDropTracks = videoDropTracks; exports.videoDuckingKeys = videoDuckingKeys; exports.videoEaseBezier = _chunkZQIWBJGHcjs.videoEaseBezier; exports.videoEaseProgress = _chunkZQIWBJGHcjs.videoEaseProgress; exports.videoEaseToAnimationEasing = videoEaseToAnimationEasing; exports.videoEffectFrameTime = _chunkZQIWBJGHcjs.videoEffectFrameTime; exports.videoEffectLayerKey = _chunkZQIWBJGHcjs.videoEffectLayerKey; exports.videoEffectValuesAt = _chunkZQIWBJGHcjs.videoEffectValuesAt; exports.videoEffectValuesFromDocument = videoEffectValuesFromDocument; exports.videoExposureNotes = videoExposureNotes; exports.videoExposureStats = videoExposureStats; exports.videoFadeCurveGain = _chunkZQIWBJGHcjs.videoFadeCurveGain; exports.videoFfmpegUnsupportedEffects = _chunkZQIWBJGHcjs.videoFfmpegUnsupportedEffects; exports.videoFfmpegUnsupportedFeatures = _chunkZQIWBJGHcjs.videoFfmpegUnsupportedFeatures; exports.videoFrameAt = _chunkZQIWBJGHcjs.videoFrameAt; exports.videoFrameCacheKey = videoFrameCacheKey; exports.videoFrameDuration = _chunkZQIWBJGHcjs.videoFrameDuration; exports.videoFrameLeafLayers = _chunkZQIWBJGHcjs.videoFrameLeafLayers; exports.videoFrameRequestsAt = videoFrameRequestsAt; exports.videoFrameToSvg = _chunkZQIWBJGHcjs.videoFrameToSvg; exports.videoFrames = _chunkZQIWBJGHcjs.videoFrames; exports.videoFreezeFrameEdit = _chunkZQIWBJGHcjs.videoFreezeFrameEdit; exports.videoGradeCssFilter = _chunkZQIWBJGHcjs.videoGradeCssFilter; exports.videoGradeFfmpegFilters = _chunkZQIWBJGHcjs.videoGradeFfmpegFilters; exports.videoGradeGainsFilterId = _chunkZQIWBJGHcjs.videoGradeGainsFilterId; exports.videoGradeLook = _chunkZQIWBJGHcjs.videoGradeLook; exports.videoGradePreset = _chunkZQIWBJGHcjs.videoGradePreset; exports.videoGradeStepMatrix = _chunkZQIWBJGHcjs.videoGradeStepMatrix; exports.videoGradeStepSvgValues = _chunkZQIWBJGHcjs.videoGradeStepSvgValues; exports.videoGradeSteps = _chunkZQIWBJGHcjs.videoGradeSteps; exports.videoGradeSvgDefs = _chunkZQIWBJGHcjs.videoGradeSvgDefs; exports.videoGradeSvgFilter = _chunkZQIWBJGHcjs.videoGradeSvgFilter; exports.videoHistogram = videoHistogram; exports.videoHistogramImage = videoHistogramImage; exports.videoHourFrames = _chunkZQIWBJGHcjs.videoHourFrames; exports.videoIrisRadius = _chunkZQIWBJGHcjs.videoIrisRadius; exports.videoIssueKey = videoIssueKey; exports.videoKeyTimesProblem = _chunkZQIWBJGHcjs.videoKeyTimesProblem; exports.videoKeyframeBreakpoints = _chunkZQIWBJGHcjs.videoKeyframeBreakpoints; exports.videoKeyframeFfmpegExpr = _chunkZQIWBJGHcjs.videoKeyframeFfmpegExpr; exports.videoKeyframeRows = videoKeyframeRows; exports.videoKeyframeToggleEdit = videoKeyframeToggleEdit; exports.videoKeyframeValueEdit = videoKeyframeValueEdit; exports.videoKeysOf = _chunkZQIWBJGHcjs.videoKeysOf; exports.videoLayerMask = _chunkZQIWBJGHcjs.videoLayerMask; exports.videoLayersUseEffects = _chunkZQIWBJGHcjs.videoLayersUseEffects; exports.videoLayersWithoutTransitionEffects = _chunkZQIWBJGHcjs.videoLayersWithoutTransitionEffects; exports.videoLoudnessEnergy = videoLoudnessEnergy; exports.videoLoudnessGain = videoLoudnessGain; exports.videoLoudnessOf = videoLoudnessOf; exports.videoLuma = videoLuma; exports.videoLumaWaveform = videoLumaWaveform; exports.videoLutEdits = videoLutEdits; exports.videoLutFromFunction = _chunkZQIWBJGHcjs.videoLutFromFunction; exports.videoLutSvgApproximation = _chunkZQIWBJGHcjs.videoLutSvgApproximation; exports.videoLutSvgPrimitives = _chunkZQIWBJGHcjs.videoLutSvgPrimitives; exports.videoLutToCube = _chunkZQIWBJGHcjs.videoLutToCube; exports.videoMaskContains = _chunkZQIWBJGHcjs.videoMaskContains; exports.videoMaskEdit = videoMaskEdit; exports.videoMaskPolygon = _chunkZQIWBJGHcjs.videoMaskPolygon; exports.videoMaskSvgPath = _chunkZQIWBJGHcjs.videoMaskSvgPath; exports.videoOverlap = _chunkZQIWBJGHcjs.videoOverlap; exports.videoPeakDb = videoPeakDb; exports.videoPreviewSrc = videoPreviewSrc; exports.videoProjectDuration = _chunkZQIWBJGHcjs.videoProjectDuration; exports.videoProjectEffects = _chunkZQIWBJGHcjs.videoProjectEffects; exports.videoProjectHasProxies = videoProjectHasProxies; exports.videoProjectSvg = _chunkZQIWBJGHcjs.videoProjectSvg; exports.videoProxyFfmpeg = videoProxyFfmpeg; exports.videoProxyName = videoProxyName; exports.videoProxyPlan = videoProxyPlan; exports.videoRemoveRangesEdits = videoRemoveRangesEdits; exports.videoRulerTicks = videoRulerTicks; exports.videoScopeImage = videoScopeImage; exports.videoSequenceChildren = _chunkZQIWBJGHcjs.videoSequenceChildren; exports.videoSequenceDuration = _chunkZQIWBJGHcjs.videoSequenceDuration; exports.videoSequenceMap = _chunkZQIWBJGHcjs.videoSequenceMap; exports.videoShellQuote = _chunkZQIWBJGHcjs.videoShellQuote; exports.videoSkinProtectionEdits = videoSkinProtectionEdits; exports.videoSkinToneWeight = _chunkZQIWBJGHcjs.videoSkinToneWeight; exports.videoSlowMotionRamp = _chunkZQIWBJGHcjs.videoSlowMotionRamp; exports.videoSnapPoints = _chunkZQIWBJGHcjs.videoSnapPoints; exports.videoSourceFrame = videoSourceFrame; exports.videoSourceFrameTime = videoSourceFrameTime; exports.videoSpeechRanges = videoSpeechRanges; exports.videoSpeedRampEdit = _chunkZQIWBJGHcjs.videoSpeedRampEdit; exports.videoSpeedRampKeys = _chunkZQIWBJGHcjs.videoSpeedRampKeys; exports.videoTextStyle = _chunkZQIWBJGHcjs.videoTextStyle; exports.videoTimeRef = videoTimeRef; exports.videoTimeRemapBreakpoints = _chunkZQIWBJGHcjs.videoTimeRemapBreakpoints; exports.videoTimeRemapSpan = _chunkZQIWBJGHcjs.videoTimeRemapSpan; exports.videoTimecodeFrames = _chunkZQIWBJGHcjs.videoTimecodeFrames; exports.videoTimelineTranscript = videoTimelineTranscript; exports.videoTitleFrame = _chunkZQIWBJGHcjs.videoTitleFrame; exports.videoTrackSyncLocked = _chunkZQIWBJGHcjs.videoTrackSyncLocked; exports.videoTranscriptEdit = videoTranscriptEdit; exports.videoTranscriptTrack = videoTranscriptTrack; exports.videoTransformAt = _chunkZQIWBJGHcjs.videoTransformAt; exports.videoTransformOfView = videoTransformOfView; exports.videoTransitionAudioCurve = _chunkZQIWBJGHcjs.videoTransitionAudioCurve; exports.videoTransitionEase = _chunkZQIWBJGHcjs.videoTransitionEase; exports.videoTransitionHasDirection = videoTransitionHasDirection; exports.videoValueAt = _chunkZQIWBJGHcjs.videoValueAt; exports.videoVectorscope = videoVectorscope; exports.videoVectorscopeAngle = videoVectorscopeAngle; exports.videoVectorscopeImage = videoVectorscopeImage; exports.videoVectorscopePoint = videoVectorscopePoint; exports.videoWaveformImage = videoWaveformImage; exports.videoWaveformPath = videoWaveformPath; exports.videoWipeRect = _chunkZQIWBJGHcjs.videoWipeRect; exports.videoWordAt = videoWordAt; exports.videoWordsRange = videoWordsRange; exports.withVideoPlayback = withVideoPlayback;
6939
+
6940
+ exports.TranscriptVideoController = TranscriptVideoController; exports.VIDEO_ADJUSTMENT_SCOPES = _chunkZQIWBJGHcjs.VIDEO_ADJUSTMENT_SCOPES; exports.VIDEO_ADJUSTMENT_SCOPE_LABELS = VIDEO_ADJUSTMENT_SCOPE_LABELS; exports.VIDEO_BLEND_MODES = _chunkZQIWBJGHcjs.VIDEO_BLEND_MODES; exports.VIDEO_BLEND_MODE_LABELS = VIDEO_BLEND_MODE_LABELS; exports.VIDEO_CLIP_ANIMATION_DURATION = _chunkZQIWBJGHcjs.VIDEO_CLIP_ANIMATION_DURATION; exports.VIDEO_CLIP_ANIMATION_EFFECTS = _chunkZQIWBJGHcjs.VIDEO_CLIP_ANIMATION_EFFECTS; exports.VIDEO_CLIP_ANIMATION_LABELS = VIDEO_CLIP_ANIMATION_LABELS; exports.VIDEO_CLIP_TYPES = _chunkZQIWBJGHcjs.VIDEO_CLIP_TYPES; exports.VIDEO_DEFAULT_FILLERS = VIDEO_DEFAULT_FILLERS; exports.VIDEO_DEFAULT_STILL_DURATION = VIDEO_DEFAULT_STILL_DURATION; exports.VIDEO_DEFAULT_TITLE_DURATION = VIDEO_DEFAULT_TITLE_DURATION; exports.VIDEO_DISFLUENCY_KINDS = VIDEO_DISFLUENCY_KINDS; exports.VIDEO_EASE_NAMES = _chunkZQIWBJGHcjs.VIDEO_EASE_NAMES; exports.VIDEO_EDIT_OPS = VIDEO_EDIT_OPS; exports.VIDEO_EFFECT_PLACES = _chunkZQIWBJGHcjs.VIDEO_EFFECT_PLACES; exports.VIDEO_FADE_CURVES = _chunkZQIWBJGHcjs.VIDEO_FADE_CURVES; exports.VIDEO_FADE_CURVE_LABELS = VIDEO_FADE_CURVE_LABELS; exports.VIDEO_FITS = _chunkZQIWBJGHcjs.VIDEO_FITS; exports.VIDEO_GRADE_CONTROLS = _chunkZQIWBJGHcjs.VIDEO_GRADE_CONTROLS; exports.VIDEO_GRADE_PRESETS = _chunkZQIWBJGHcjs.VIDEO_GRADE_PRESETS; exports.VIDEO_GRADE_PRESET_NAMES = _chunkZQIWBJGHcjs.VIDEO_GRADE_PRESET_NAMES; exports.VIDEO_ISSUE_CODES = VIDEO_ISSUE_CODES; exports.VIDEO_KEYFRAME_LIMITS = _chunkZQIWBJGHcjs.VIDEO_KEYFRAME_LIMITS; exports.VIDEO_KEYFRAME_PROPERTIES = _chunkZQIWBJGHcjs.VIDEO_KEYFRAME_PROPERTIES; exports.VIDEO_LOUDNESS_HOP = VIDEO_LOUDNESS_HOP; exports.VIDEO_LUT_MAX_SIZE = _chunkZQIWBJGHcjs.VIDEO_LUT_MAX_SIZE; exports.VIDEO_MASK_DEFAULTS = _chunkZQIWBJGHcjs.VIDEO_MASK_DEFAULTS; exports.VIDEO_MASK_SHAPES = _chunkZQIWBJGHcjs.VIDEO_MASK_SHAPES; exports.VIDEO_MASK_SHAPE_LABELS = VIDEO_MASK_SHAPE_LABELS; exports.VIDEO_PEAK_BLOCK = VIDEO_PEAK_BLOCK; exports.VIDEO_PLACEMENT_MODES = _chunkZQIWBJGHcjs.VIDEO_PLACEMENT_MODES; exports.VIDEO_PREVIEW_SCALE_OPTIONS = VIDEO_PREVIEW_SCALE_OPTIONS; exports.VIDEO_PROXY_SCALES = VIDEO_PROXY_SCALES; exports.VIDEO_SCOPE_KINDS = VIDEO_SCOPE_KINDS; exports.VIDEO_TIME_EPSILON = _chunkZQIWBJGHcjs.VIDEO_TIME_EPSILON; exports.VIDEO_TRANSFORM_PROPERTIES = _chunkZQIWBJGHcjs.VIDEO_TRANSFORM_PROPERTIES; exports.VIDEO_TRANSITION_LABELS = VIDEO_TRANSITION_LABELS; exports.VIDEO_TRANSITION_TYPES = _chunkZQIWBJGHcjs.VIDEO_TRANSITION_TYPES; exports.VIDEO_VECTORSCOPE_TARGETS = VIDEO_VECTORSCOPE_TARGETS; exports.VIDEO_WIPE_DIRECTIONS = _chunkZQIWBJGHcjs.VIDEO_WIPE_DIRECTIONS; exports.VideoAudioPeaksCache = VideoAudioPeaksCache; exports.VideoEditorController = VideoEditorController; exports.VideoEffectsEngine = _chunkZQIWBJGHcjs.VideoEffectsEngine; exports.VideoFrameCache = VideoFrameCache; exports.VideoLutCache = _chunkZQIWBJGHcjs.VideoLutCache; exports.VideoPreviewEngine = VideoPreviewEngine; exports.VideoPreviewPixels = VideoPreviewPixels; exports.allVideoClipIds = _chunkZQIWBJGHcjs.allVideoClipIds; exports.allVideoTracks = _chunkZQIWBJGHcjs.allVideoTracks; exports.animationEasingToVideoEase = animationEasingToVideoEase; exports.applyVideoEdits = applyVideoEdits; exports.applyVideoGrade = _chunkZQIWBJGHcjs.applyVideoGrade; exports.applyVideoLut = _chunkZQIWBJGHcjs.applyVideoLut; exports.applyVideoLutToPixels = _chunkZQIWBJGHcjs.applyVideoLutToPixels; exports.bakeVideoClipCamera = bakeVideoClipCamera; exports.buildVideoAudioPeaks = buildVideoAudioPeaks; exports.checkVideoEffectPlace = _chunkZQIWBJGHcjs.checkVideoEffectPlace; exports.checkVideoEffectValues = _chunkZQIWBJGHcjs.checkVideoEffectValues; exports.checkVideoProject = checkVideoProject; exports.checkVideoTimeRemap = _chunkZQIWBJGHcjs.checkVideoTimeRemap; exports.createVideoDialogueToolProvider = createVideoDialogueToolProvider; exports.createVideoEditorDocument = createVideoEditorDocument; exports.createVideoEditorToolProvider = createVideoEditorToolProvider; exports.createVideoEffectsToolProvider = createVideoEffectsToolProvider; exports.createVideoElementDecoder = createVideoElementDecoder; exports.createVideoMusicToolProvider = createVideoMusicToolProvider; exports.createVideoProject = createVideoProject; exports.decodeVideoAudioPeaks = decodeVideoAudioPeaks; exports.describeVideoEditPlan = describeVideoEditPlan; exports.describeVideoProject = describeVideoProject; exports.describeVideoSequence = describeVideoSequence; exports.detectVideoDisfluencies = detectVideoDisfluencies; exports.diffVideoProjects = diffVideoProjects; exports.drawVideoFrame = _chunkZQIWBJGHcjs.drawVideoFrame; exports.ffmpegFilterValue = _chunkZQIWBJGHcjs.ffmpegFilterValue; exports.findVideoAudioBeats = findVideoAudioBeats; exports.findVideoAudioSilences = findVideoAudioSilences; exports.findVideoClip = _chunkZQIWBJGHcjs.findVideoClip; exports.findVideoFillers = findVideoFillers; exports.findVideoGaps = _chunkZQIWBJGHcjs.findVideoGaps; exports.findVideoRepetitions = findVideoRepetitions; exports.findVideoSequenceClip = _chunkZQIWBJGHcjs.findVideoSequenceClip; exports.findVideoSequenceCycle = _chunkZQIWBJGHcjs.findVideoSequenceCycle; exports.findVideoTranscriptPauses = findVideoTranscriptPauses; exports.findVideoTranscriptText = findVideoTranscriptText; exports.formatVideoSeconds = _chunkZQIWBJGHcjs.formatVideoSeconds; exports.formatVideoTimecode = _chunkZQIWBJGHcjs.formatVideoTimecode; exports.formatVideoTimecodeFrames = _chunkZQIWBJGHcjs.formatVideoTimecodeFrames; exports.isVideoDropFrameRate = _chunkZQIWBJGHcjs.isVideoDropFrameRate; exports.isVideoKeyframes = _chunkZQIWBJGHcjs.isVideoKeyframes; exports.measureVideoLoudness = measureVideoLoudness; exports.mergeVideoRanges = mergeVideoRanges; exports.mixEffectPixels = _chunkZQIWBJGHcjs.mixEffectPixels; exports.nearestVideoBeat = nearestVideoBeat; exports.nextFreeVideoSlot = _chunkZQIWBJGHcjs.nextFreeVideoSlot; exports.normalizeVideoClipMask = _chunkZQIWBJGHcjs.normalizeVideoClipMask; exports.normalizeVideoGrade = _chunkZQIWBJGHcjs.normalizeVideoGrade; exports.normalizeVideoGradeLut = _chunkZQIWBJGHcjs.normalizeVideoGradeLut; exports.normalizeVideoWord = normalizeVideoWord; exports.openVideoClipEffectAuthoring = openVideoClipEffectAuthoring; exports.overEffectPixels = _chunkZQIWBJGHcjs.overEffectPixels; exports.parseVideoAnimatable = parseVideoAnimatable; exports.parseVideoAsset = parseVideoAsset; exports.parseVideoAssetProxies = parseVideoAssetProxies; exports.parseVideoClip = parseVideoClip; exports.parseVideoClipAnimation = parseVideoClipAnimation; exports.parseVideoClipCamera = parseVideoClipCamera; exports.parseVideoClipEffects = parseVideoClipEffects; exports.parseVideoClipMask = parseVideoClipMask; exports.parseVideoCubeLut = _chunkZQIWBJGHcjs.parseVideoCubeLut; exports.parseVideoEffectRef = parseVideoEffectRef; exports.parseVideoEffectValues = parseVideoEffectValues; exports.parseVideoGrade = parseVideoGrade; exports.parseVideoGradeLut = parseVideoGradeLut; exports.parseVideoKeyframes = parseVideoKeyframes; exports.parseVideoLoudnessMeasurement = _chunkZQIWBJGHcjs.parseVideoLoudnessMeasurement; exports.parseVideoMarker = parseVideoMarker; exports.parseVideoPreviewScale = parseVideoPreviewScale; exports.parseVideoProject = parseVideoProject; exports.parseVideoSequence = parseVideoSequence; exports.parseVideoTimeRef = parseVideoTimeRef; exports.parseVideoTimeRemap = parseVideoTimeRemap; exports.parseVideoTrack = parseVideoTrack; exports.parseVideoTranscript = parseVideoTranscript; exports.parseVideoTranscriptWords = parseVideoTranscriptWords; exports.parseVideoTransform = parseVideoTransform; exports.parseVideoTransition = parseVideoTransition; exports.placeVideoRect = _chunkZQIWBJGHcjs.placeVideoRect; exports.planVideoClipDrag = planVideoClipDrag; exports.planVideoEdits = planVideoEdits; exports.planVideoPrefetch = planVideoPrefetch; exports.planVideoToolPlayback = planVideoToolPlayback; exports.probeVideoMedia = probeVideoMedia; exports.readVideoScopesPanel = readVideoScopesPanel; exports.removeVideoKey = _chunkZQIWBJGHcjs.removeVideoKey; exports.renderVideoFrameExact = _chunkZQIWBJGHcjs.renderVideoFrameExact; exports.resolveVideoPreviewScale = resolveVideoPreviewScale; exports.retimeVideoAnimatable = _chunkZQIWBJGHcjs.retimeVideoAnimatable; exports.setVideoKey = _chunkZQIWBJGHcjs.setVideoKey; exports.snapToVideoFrame = _chunkZQIWBJGHcjs.snapToVideoFrame; exports.snapVideoTime = _chunkZQIWBJGHcjs.snapVideoTime; exports.sortVideoKeys = _chunkZQIWBJGHcjs.sortVideoKeys; exports.sortedVideoClips = _chunkZQIWBJGHcjs.sortedVideoClips; exports.splitVideoAnimatable = _chunkZQIWBJGHcjs.splitVideoAnimatable; exports.summarizeVideoScopes = summarizeVideoScopes; exports.toVideoEdl = _chunkZQIWBJGHcjs.toVideoEdl; exports.toVideoFfmpeg = _chunkZQIWBJGHcjs.toVideoFfmpeg; exports.toVideoLoudnessMeasure = _chunkZQIWBJGHcjs.toVideoLoudnessMeasure; exports.videoAddAdjustmentEdits = videoAddAdjustmentEdits; exports.videoAssetDropEdit = videoAssetDropEdit; exports.videoAssetHasSound = _chunkZQIWBJGHcjs.videoAssetHasSound; exports.videoAssetKindOf = videoAssetKindOf; exports.videoAssetMap = _chunkZQIWBJGHcjs.videoAssetMap; exports.videoAssetProxy = videoAssetProxy; exports.videoAudioLevels = videoAudioLevels; exports.videoAudioLoudness = videoAudioLoudness; exports.videoAudioPeakRange = videoAudioPeakRange; exports.videoAudioPeakSpans = videoAudioPeakSpans; exports.videoAudioPeaksDuration = videoAudioPeaksDuration; exports.videoAuthorableEffects = videoAuthorableEffects; exports.videoCacheEvictions = videoCacheEvictions; exports.videoCameraBase = videoCameraBase; exports.videoCameraMoveTools = videoCameraMoveTools; exports.videoCameraView = videoCameraView; exports.videoChroma = videoChroma; exports.videoClipAfter = _chunkZQIWBJGHcjs.videoClipAfter; exports.videoClipAnimated = _chunkZQIWBJGHcjs.videoClipAnimated; exports.videoClipAnimationProperties = _chunkZQIWBJGHcjs.videoClipAnimationProperties; exports.videoClipAnimationSpans = _chunkZQIWBJGHcjs.videoClipAnimationSpans; exports.videoClipAppliedEffects = videoClipAppliedEffects; exports.videoClipBefore = _chunkZQIWBJGHcjs.videoClipBefore; exports.videoClipCameraMove = videoClipCameraMove; exports.videoClipEffectDocument = videoClipEffectDocument; exports.videoClipEffectUses = _chunkZQIWBJGHcjs.videoClipEffectUses; exports.videoClipEnd = _chunkZQIWBJGHcjs.videoClipEnd; exports.videoClipHandles = _chunkZQIWBJGHcjs.videoClipHandles; exports.videoClipHeading = videoClipHeading; exports.videoClipKeyframes = videoClipKeyframes; exports.videoClipLabel = videoClipLabel; exports.videoClipOverhang = _chunkZQIWBJGHcjs.videoClipOverhang; exports.videoClipShowsWaveform = videoClipShowsWaveform; exports.videoClipSoundGain = _chunkZQIWBJGHcjs.videoClipSoundGain; exports.videoClipSourceRange = _chunkZQIWBJGHcjs.videoClipSourceRange; exports.videoClipSourceTime = _chunkZQIWBJGHcjs.videoClipSourceTime; exports.videoClipSpeed = _chunkZQIWBJGHcjs.videoClipSpeed; exports.videoClipSpeedAt = _chunkZQIWBJGHcjs.videoClipSpeedAt; exports.videoClipTint = videoClipTint; exports.videoClipTypeLabel = _chunkZQIWBJGHcjs.videoClipTypeLabel; exports.videoClipWaveform = videoClipWaveform; exports.videoClipWaveformPath = videoClipWaveformPath; exports.videoClipsAt = _chunkZQIWBJGHcjs.videoClipsAt; exports.videoContactSheetSvg = _chunkZQIWBJGHcjs.videoContactSheetSvg; exports.videoCutsWithMargin = videoCutsWithMargin; exports.videoDragLabel = videoDragLabel; exports.videoDropTracks = videoDropTracks; exports.videoDuckingKeys = videoDuckingKeys; exports.videoEaseBezier = _chunkZQIWBJGHcjs.videoEaseBezier; exports.videoEaseProgress = _chunkZQIWBJGHcjs.videoEaseProgress; exports.videoEaseToAnimationEasing = videoEaseToAnimationEasing; exports.videoEditsFromSequence = videoEditsFromSequence; exports.videoEffectFrameTime = _chunkZQIWBJGHcjs.videoEffectFrameTime; exports.videoEffectLayerKey = _chunkZQIWBJGHcjs.videoEffectLayerKey; exports.videoEffectValuesAt = _chunkZQIWBJGHcjs.videoEffectValuesAt; exports.videoEffectValuesFromDocument = videoEffectValuesFromDocument; exports.videoExposureNotes = videoExposureNotes; exports.videoExposureStats = videoExposureStats; exports.videoFadeCurveGain = _chunkZQIWBJGHcjs.videoFadeCurveGain; exports.videoFfmpegUnsupportedEffects = _chunkZQIWBJGHcjs.videoFfmpegUnsupportedEffects; exports.videoFfmpegUnsupportedFeatures = _chunkZQIWBJGHcjs.videoFfmpegUnsupportedFeatures; exports.videoFrameAt = _chunkZQIWBJGHcjs.videoFrameAt; exports.videoFrameCacheKey = videoFrameCacheKey; exports.videoFrameDuration = _chunkZQIWBJGHcjs.videoFrameDuration; exports.videoFrameLeafLayers = _chunkZQIWBJGHcjs.videoFrameLeafLayers; exports.videoFrameRequestsAt = videoFrameRequestsAt; exports.videoFrameToSvg = _chunkZQIWBJGHcjs.videoFrameToSvg; exports.videoFrames = _chunkZQIWBJGHcjs.videoFrames; exports.videoFreezeFrameEdit = _chunkZQIWBJGHcjs.videoFreezeFrameEdit; exports.videoGradeCssFilter = _chunkZQIWBJGHcjs.videoGradeCssFilter; exports.videoGradeFfmpegFilters = _chunkZQIWBJGHcjs.videoGradeFfmpegFilters; exports.videoGradeGainsFilterId = _chunkZQIWBJGHcjs.videoGradeGainsFilterId; exports.videoGradeLook = _chunkZQIWBJGHcjs.videoGradeLook; exports.videoGradePreset = _chunkZQIWBJGHcjs.videoGradePreset; exports.videoGradeStepMatrix = _chunkZQIWBJGHcjs.videoGradeStepMatrix; exports.videoGradeStepSvgValues = _chunkZQIWBJGHcjs.videoGradeStepSvgValues; exports.videoGradeSteps = _chunkZQIWBJGHcjs.videoGradeSteps; exports.videoGradeSvgDefs = _chunkZQIWBJGHcjs.videoGradeSvgDefs; exports.videoGradeSvgFilter = _chunkZQIWBJGHcjs.videoGradeSvgFilter; exports.videoHistogram = videoHistogram; exports.videoHistogramImage = videoHistogramImage; exports.videoHourFrames = _chunkZQIWBJGHcjs.videoHourFrames; exports.videoIrisRadius = _chunkZQIWBJGHcjs.videoIrisRadius; exports.videoIssueKey = videoIssueKey; exports.videoKeyTimesProblem = _chunkZQIWBJGHcjs.videoKeyTimesProblem; exports.videoKeyframeBreakpoints = _chunkZQIWBJGHcjs.videoKeyframeBreakpoints; exports.videoKeyframeFfmpegExpr = _chunkZQIWBJGHcjs.videoKeyframeFfmpegExpr; exports.videoKeyframeRows = videoKeyframeRows; exports.videoKeyframeToggleEdit = videoKeyframeToggleEdit; exports.videoKeyframeValueEdit = videoKeyframeValueEdit; exports.videoKeysOf = _chunkZQIWBJGHcjs.videoKeysOf; exports.videoLayerMask = _chunkZQIWBJGHcjs.videoLayerMask; exports.videoLayersUseEffects = _chunkZQIWBJGHcjs.videoLayersUseEffects; exports.videoLayersWithoutTransitionEffects = _chunkZQIWBJGHcjs.videoLayersWithoutTransitionEffects; exports.videoLoudnessEnergy = videoLoudnessEnergy; exports.videoLoudnessGain = videoLoudnessGain; exports.videoLoudnessOf = videoLoudnessOf; exports.videoLuma = videoLuma; exports.videoLumaWaveform = videoLumaWaveform; exports.videoLutEdits = videoLutEdits; exports.videoLutFromFunction = _chunkZQIWBJGHcjs.videoLutFromFunction; exports.videoLutSvgApproximation = _chunkZQIWBJGHcjs.videoLutSvgApproximation; exports.videoLutSvgPrimitives = _chunkZQIWBJGHcjs.videoLutSvgPrimitives; exports.videoLutToCube = _chunkZQIWBJGHcjs.videoLutToCube; exports.videoMaskContains = _chunkZQIWBJGHcjs.videoMaskContains; exports.videoMaskEdit = videoMaskEdit; exports.videoMaskPolygon = _chunkZQIWBJGHcjs.videoMaskPolygon; exports.videoMaskSvgPath = _chunkZQIWBJGHcjs.videoMaskSvgPath; exports.videoOverlap = _chunkZQIWBJGHcjs.videoOverlap; exports.videoPeakDb = videoPeakDb; exports.videoPreviewSrc = videoPreviewSrc; exports.videoProjectDuration = _chunkZQIWBJGHcjs.videoProjectDuration; exports.videoProjectEffects = _chunkZQIWBJGHcjs.videoProjectEffects; exports.videoProjectHasProxies = videoProjectHasProxies; exports.videoProjectSvg = _chunkZQIWBJGHcjs.videoProjectSvg; exports.videoProxyFfmpeg = videoProxyFfmpeg; exports.videoProxyName = videoProxyName; exports.videoProxyPlan = videoProxyPlan; exports.videoRemoveRangesEdits = videoRemoveRangesEdits; exports.videoRulerTicks = videoRulerTicks; exports.videoScopeImage = videoScopeImage; exports.videoSequenceChildren = _chunkZQIWBJGHcjs.videoSequenceChildren; exports.videoSequenceDuration = _chunkZQIWBJGHcjs.videoSequenceDuration; exports.videoSequenceMap = _chunkZQIWBJGHcjs.videoSequenceMap; exports.videoShellQuote = _chunkZQIWBJGHcjs.videoShellQuote; exports.videoSkinProtectionEdits = videoSkinProtectionEdits; exports.videoSkinToneWeight = _chunkZQIWBJGHcjs.videoSkinToneWeight; exports.videoSlowMotionRamp = _chunkZQIWBJGHcjs.videoSlowMotionRamp; exports.videoSnapPoints = _chunkZQIWBJGHcjs.videoSnapPoints; exports.videoSourceFrame = videoSourceFrame; exports.videoSourceFrameTime = videoSourceFrameTime; exports.videoSpeechRanges = videoSpeechRanges; exports.videoSpeedRampEdit = _chunkZQIWBJGHcjs.videoSpeedRampEdit; exports.videoSpeedRampKeys = _chunkZQIWBJGHcjs.videoSpeedRampKeys; exports.videoTextStyle = _chunkZQIWBJGHcjs.videoTextStyle; exports.videoTimeRef = videoTimeRef; exports.videoTimeRemapBreakpoints = _chunkZQIWBJGHcjs.videoTimeRemapBreakpoints; exports.videoTimeRemapSpan = _chunkZQIWBJGHcjs.videoTimeRemapSpan; exports.videoTimecodeFrames = _chunkZQIWBJGHcjs.videoTimecodeFrames; exports.videoTimelineTranscript = videoTimelineTranscript; exports.videoTitleFrame = _chunkZQIWBJGHcjs.videoTitleFrame; exports.videoTrackSyncLocked = _chunkZQIWBJGHcjs.videoTrackSyncLocked; exports.videoTranscriptEdit = videoTranscriptEdit; exports.videoTranscriptTrack = videoTranscriptTrack; exports.videoTransformAt = _chunkZQIWBJGHcjs.videoTransformAt; exports.videoTransformOfView = videoTransformOfView; exports.videoTransitionAudioCurve = _chunkZQIWBJGHcjs.videoTransitionAudioCurve; exports.videoTransitionEase = _chunkZQIWBJGHcjs.videoTransitionEase; exports.videoTransitionHasDirection = videoTransitionHasDirection; exports.videoValueAt = _chunkZQIWBJGHcjs.videoValueAt; exports.videoVectorscope = videoVectorscope; exports.videoVectorscopeAngle = videoVectorscopeAngle; exports.videoVectorscopeImage = videoVectorscopeImage; exports.videoVectorscopePoint = videoVectorscopePoint; exports.videoWaveformImage = videoWaveformImage; exports.videoWaveformPath = videoWaveformPath; exports.videoWipeRect = _chunkZQIWBJGHcjs.videoWipeRect; exports.videoWordAt = videoWordAt; exports.videoWordsRange = videoWordsRange; exports.withVideoPlayback = withVideoPlayback;
@@ -43,3 +43,4 @@ export * from './effect-authoring.cjs';
43
43
  export * from './ui.cjs';
44
44
  export * from './playback.cjs';
45
45
  export * from './editorDocument.cjs';
46
+ export * from './sequence.cjs';
@@ -43,3 +43,4 @@ export * from './effect-authoring.js';
43
43
  export * from './ui.js';
44
44
  export * from './playback.js';
45
45
  export * from './editorDocument.js';
46
+ export * from './sequence.js';