@pixerate/editor 0.141.0 → 0.143.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.
- package/dist/agent/index.cjs +107 -48
- package/dist/agent/index.js +76 -17
- package/dist/agent/planner.d.cts +7 -2
- package/dist/agent/planner.d.ts +7 -2
- package/dist/agent/providers.d.cts +4 -1
- package/dist/agent/providers.d.ts +4 -1
- package/dist/animation-editor/index.cjs +69 -19
- package/dist/animation-editor/index.d.cts +1 -0
- package/dist/animation-editor/index.d.ts +1 -0
- package/dist/animation-editor/index.js +54 -4
- package/dist/animation-editor/playback.d.cts +10 -0
- package/dist/animation-editor/playback.d.ts +10 -0
- package/dist/canvas/index.cjs +103 -101
- package/dist/canvas/index.js +3 -1
- package/dist/canvas/layout.d.cts +15 -2
- package/dist/canvas/layout.d.ts +15 -2
- package/dist/chart/index.cjs +254 -170
- package/dist/chart/index.d.cts +1 -0
- package/dist/chart/index.d.ts +1 -0
- package/dist/chart/index.js +243 -159
- package/dist/chart/playback.d.cts +22 -0
- package/dist/chart/playback.d.ts +22 -0
- package/dist/{chunk-MFFE55CS.js → chunk-54GVEVXS.js} +6 -4
- package/dist/{chunk-E747F3D5.js → chunk-CC6WKVIH.js} +86 -5
- package/dist/{chunk-UBRYHNRU.cjs → chunk-EL4PSKFT.cjs} +46 -4
- package/dist/{chunk-VTY64I6H.cjs → chunk-QSM3MDDJ.cjs} +85 -85
- package/dist/{chunk-2RUNJYOX.cjs → chunk-QZFEX2N4.cjs} +86 -5
- package/dist/{chunk-DW4CV5H4.js → chunk-U4VE4UI2.js} +45 -3
- package/dist/{chunk-LMSFXRAJ.js → chunk-VGJTUCWM.js} +1 -1
- package/dist/{chunk-6SFREX6H.cjs → chunk-X2HQP7DF.cjs} +6 -4
- package/dist/chunk-XH32BATE.cjs +68 -0
- package/dist/chunk-Y6SGC6KO.js +68 -0
- package/dist/commands/index.cjs +2 -2
- package/dist/commands/index.js +1 -1
- package/dist/index.cjs +7 -3
- package/dist/index.js +6 -2
- package/dist/paint-editor/index.cjs +67 -19
- package/dist/paint-editor/index.d.cts +1 -0
- package/dist/paint-editor/index.d.ts +1 -0
- package/dist/paint-editor/index.js +67 -19
- package/dist/paint-editor/playback.d.cts +16 -0
- package/dist/paint-editor/playback.d.ts +16 -0
- package/dist/parameters/index.cjs +32 -8
- package/dist/parameters/index.d.cts +1 -0
- package/dist/parameters/index.d.ts +1 -0
- package/dist/parameters/index.js +28 -4
- package/dist/parameters/playback.d.cts +10 -0
- package/dist/parameters/playback.d.ts +10 -0
- package/dist/spreadsheet/index.cjs +7 -3
- package/dist/spreadsheet/index.d.cts +1 -0
- package/dist/spreadsheet/index.d.ts +1 -0
- package/dist/spreadsheet/index.js +6 -2
- package/dist/spreadsheet/playback.d.cts +15 -0
- package/dist/spreadsheet/playback.d.ts +15 -0
- package/dist/tools/index.cjs +10 -3
- package/dist/tools/index.d.cts +1 -0
- package/dist/tools/index.d.ts +1 -0
- package/dist/tools/index.js +9 -2
- package/dist/tools/script.d.cts +77 -0
- package/dist/tools/script.d.ts +77 -0
- package/dist/video-editor/index.cjs +81 -28
- package/dist/video-editor/index.d.cts +1 -0
- package/dist/video-editor/index.d.ts +1 -0
- package/dist/video-editor/index.js +58 -5
- package/dist/video-editor/playback.d.cts +20 -0
- package/dist/video-editor/playback.d.ts +20 -0
- package/package.json +1 -1
- package/skills/pixerate-animation-editor/SKILL.md +1 -0
- package/skills/pixerate-chart/SKILL.md +1 -0
- package/skills/pixerate-paint-editor/SKILL.md +1 -0
- package/skills/pixerate-parameters/SKILL.md +1 -0
- package/skills/pixerate-spreadsheet/SKILL.md +1 -0
- package/skills/pixerate-video-editor/SKILL.md +1 -0
- package/dist/chunk-PLKIYNJZ.js +0 -0
- package/dist/chunk-TNCWKC5M.cjs +0 -1
|
@@ -3226,6 +3226,55 @@ function checkPreviewScale(scale) {
|
|
|
3226
3226
|
return scale === 1 ? "full" : scale;
|
|
3227
3227
|
}
|
|
3228
3228
|
|
|
3229
|
+
// src/video-editor/playback.ts
|
|
3230
|
+
function videoTimeRef(at) {
|
|
3231
|
+
return { kind: "time", id: [`t=${Math.round(at.time)}`, at.track ? `track=${at.track}` : "", at.clip ? `clip=${at.clip}` : ""].filter(Boolean).join(";") };
|
|
3232
|
+
}
|
|
3233
|
+
function parseVideoTimeRef(ref) {
|
|
3234
|
+
if (ref.kind !== "time") return null;
|
|
3235
|
+
const parts = Object.fromEntries(ref.id.split(";").map((p) => p.split("=")));
|
|
3236
|
+
const time = Number(parts.t);
|
|
3237
|
+
if (!Number.isFinite(time)) return null;
|
|
3238
|
+
return { time, ...parts.track ? { track: parts.track } : {}, ...parts.clip ? { clip: parts.clip } : {} };
|
|
3239
|
+
}
|
|
3240
|
+
var num2 = (v) => typeof v === "number" && Number.isFinite(v);
|
|
3241
|
+
var str2 = (v) => typeof v === "string" && v.length > 0;
|
|
3242
|
+
function clipsOf(args) {
|
|
3243
|
+
const out = [];
|
|
3244
|
+
const add = (v) => str2(v) && !out.includes(v) && out.push(v);
|
|
3245
|
+
add(args.clip);
|
|
3246
|
+
add(args.target);
|
|
3247
|
+
for (const key of ["clips", "ids"]) if (Array.isArray(args[key])) args[key].forEach(add);
|
|
3248
|
+
return out.slice(0, 6);
|
|
3249
|
+
}
|
|
3250
|
+
function planVideoToolPlayback(tool, args) {
|
|
3251
|
+
const clips = clipsOf(args);
|
|
3252
|
+
const track = str2(args.track) ? args.track : void 0;
|
|
3253
|
+
const newClip = args.clip && typeof args.clip === "object" ? args.clip : null;
|
|
3254
|
+
const time = [args.start, args.at, args.time, args.to, _optionalChain([newClip, 'optionalAccess', _104 => _104.start])].find(num2);
|
|
3255
|
+
const click = (ref) => [{ type: "target", ref }, { type: "press" }, { type: "release" }];
|
|
3256
|
+
if (clips.length === 1 && (time !== void 0 || track) && tool !== "split_video_clip") {
|
|
3257
|
+
const clip = clips[0];
|
|
3258
|
+
const to = videoTimeRef({ time: _nullishCoalesce(time, () => ( 0)), ...track ? { track } : { clip } });
|
|
3259
|
+
return [{ type: "target", ref: { kind: "clip", id: clip } }, { type: "press" }, { type: "target", ref: to }, { type: "release" }];
|
|
3260
|
+
}
|
|
3261
|
+
if (clips.length === 1 && time !== void 0) return click(videoTimeRef({ time, clip: clips[0] }));
|
|
3262
|
+
if (clips.length) return clips.flatMap((id) => click({ kind: "clip", id }));
|
|
3263
|
+
if (track) return click(time !== void 0 ? videoTimeRef({ time, track }) : { kind: "track", id: track });
|
|
3264
|
+
if (time !== void 0) return click(videoTimeRef({ time }));
|
|
3265
|
+
if (str2(args.marker)) return click({ kind: "marker", id: args.marker });
|
|
3266
|
+
return null;
|
|
3267
|
+
}
|
|
3268
|
+
function withVideoPlayback(provider, surface = "video") {
|
|
3269
|
+
const plan = (tool) => tool.plan || tool.playback !== void 0 ? tool : { ...tool, plan: (args) => planVideoToolPlayback(tool.name, args) };
|
|
3270
|
+
const tools = provider.tools;
|
|
3271
|
+
return {
|
|
3272
|
+
...provider,
|
|
3273
|
+
playbackSurface: _nullishCoalesce(provider.playbackSurface, () => ( surface)),
|
|
3274
|
+
tools: typeof tools === "function" ? () => tools().map(plan) : tools.map(plan)
|
|
3275
|
+
};
|
|
3276
|
+
}
|
|
3277
|
+
|
|
3229
3278
|
// src/video-editor/ui.ts
|
|
3230
3279
|
var STEPS = [40, 100, 200, 500, 1e3, 2e3, 5e3, 1e4, 15e3, 3e4, 6e4, 12e4, 3e5, 6e5];
|
|
3231
3280
|
function videoRulerTicks(duration, pxPerSecond, fps) {
|
|
@@ -3297,9 +3346,9 @@ function videoClipLabel(clip, asset, sequence) {
|
|
|
3297
3346
|
if (clip.name) return clip.name;
|
|
3298
3347
|
if (clip.type === "text") return clip.text.split("\n")[0];
|
|
3299
3348
|
if (clip.type === "color") return clip.color;
|
|
3300
|
-
if (clip.type === "sequence") return `Compound: ${_nullishCoalesce(_optionalChain([sequence, 'optionalAccess',
|
|
3349
|
+
if (clip.type === "sequence") return `Compound: ${_nullishCoalesce(_optionalChain([sequence, 'optionalAccess', _105 => _105.name]), () => ( clip.sequence))}`;
|
|
3301
3350
|
if (clip.type === "effect") return `Effect: ${clip.effect}`;
|
|
3302
|
-
const base = _nullishCoalesce(_nullishCoalesce(_optionalChain([asset, 'optionalAccess',
|
|
3351
|
+
const base = _nullishCoalesce(_nullishCoalesce(_optionalChain([asset, 'optionalAccess', _106 => _106.name]), () => ( _optionalChain([asset, 'optionalAccess', _107 => _107.src, 'access', _108 => _108.replace, 'call', _109 => _109(/^.*[\\/]/, "")]))), () => ( clip.asset));
|
|
3303
3352
|
const speed = _chunkVKF3PWKRcjs.videoClipSpeed.call(void 0, clip);
|
|
3304
3353
|
return speed !== 1 ? `${base} (${Math.round(speed * 100)}%)` : base;
|
|
3305
3354
|
}
|
|
@@ -3343,7 +3392,7 @@ function videoAssetDropEdit(project, assetId, options = {}) {
|
|
|
3343
3392
|
const asset = _chunkVKF3PWKRcjs.videoAssetMap.call(void 0, project).get(assetId);
|
|
3344
3393
|
if (!asset) return null;
|
|
3345
3394
|
const kind = asset.kind === "audio" ? "audio" : "video";
|
|
3346
|
-
const track = _nullishCoalesce(options.track, () => ( _optionalChain([project, 'access',
|
|
3395
|
+
const track = _nullishCoalesce(options.track, () => ( _optionalChain([project, 'access', _110 => _110.tracks, 'access', _111 => _111.find, 'call', _112 => _112((t) => t.kind === kind && !t.locked), 'optionalAccess', _113 => _113.id])));
|
|
3347
3396
|
if (!track) return null;
|
|
3348
3397
|
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 } : {} };
|
|
3349
3398
|
}
|
|
@@ -3392,14 +3441,14 @@ var KEY_LABELS = {
|
|
|
3392
3441
|
scale: { label: "Scale", step: 0.05 },
|
|
3393
3442
|
rotation: { label: "Rotation", step: 1 }
|
|
3394
3443
|
};
|
|
3395
|
-
var animatableOf = (clip, property) => _chunkVKF3PWKRcjs.VIDEO_TRANSFORM_PROPERTIES.includes(property) ? _optionalChain([clip, 'access',
|
|
3444
|
+
var animatableOf = (clip, property) => _chunkVKF3PWKRcjs.VIDEO_TRANSFORM_PROPERTIES.includes(property) ? _optionalChain([clip, 'access', _114 => _114.transform, 'optionalAccess', _115 => _115[property]]) : property === "volume" ? clip.type === "media" || clip.type === "sequence" ? clip.volume : void 0 : clip.opacity;
|
|
3396
3445
|
var playheadInClip = (clip, time) => Math.round(Math.min(clip.duration, Math.max(0, time - clip.start)));
|
|
3397
3446
|
function videoKeyframeRows(project, clipId, time) {
|
|
3398
3447
|
const at = _chunkVKF3PWKRcjs.findVideoClip.call(void 0, project, clipId);
|
|
3399
3448
|
if (!at) return [];
|
|
3400
3449
|
const { clip } = at;
|
|
3401
3450
|
const asset = clip.type === "media" ? _chunkVKF3PWKRcjs.videoAssetMap.call(void 0, project).get(clip.asset) : void 0;
|
|
3402
|
-
const visual = !(_optionalChain([asset, 'optionalAccess',
|
|
3451
|
+
const visual = !(_optionalChain([asset, 'optionalAccess', _116 => _116.kind]) === "audio" || at.track.kind === "audio");
|
|
3403
3452
|
const audible = clip.type === "media" && _chunkVKF3PWKRcjs.videoAssetHasSound.call(void 0, asset) || clip.type === "sequence";
|
|
3404
3453
|
const properties = [...visual ? ["opacity"] : [], ...audible ? ["volume"] : [], ...visual ? _chunkVKF3PWKRcjs.VIDEO_TRANSFORM_PROPERTIES : []];
|
|
3405
3454
|
const clipTime = playheadInClip(clip, time);
|
|
@@ -3671,7 +3720,7 @@ function describeVideoProject(project) {
|
|
|
3671
3720
|
...project.background ? { background: project.background } : {},
|
|
3672
3721
|
assets: project.assets.map(videoAssetOut),
|
|
3673
3722
|
tracks: describeVideoTracks(project.tracks),
|
|
3674
|
-
..._optionalChain([project, 'access',
|
|
3723
|
+
..._optionalChain([project, 'access', _117 => _117.sequences, 'optionalAccess', _118 => _118.length]) ? { sequences: project.sequences.map((q) => describeVideoSequence(project, q, false)) } : {},
|
|
3675
3724
|
markers: _nullishCoalesce(project.markers, () => ( []))
|
|
3676
3725
|
};
|
|
3677
3726
|
}
|
|
@@ -3698,14 +3747,14 @@ function createVideoEditorToolProvider(controller, options = {}) {
|
|
|
3698
3747
|
return null;
|
|
3699
3748
|
};
|
|
3700
3749
|
const placed = (o) => ({
|
|
3701
|
-
..._optionalChain([o, 'access',
|
|
3702
|
-
..._optionalChain([o, 'access',
|
|
3703
|
-
..._optionalChain([o, 'access',
|
|
3750
|
+
..._optionalChain([o, 'access', _119 => _119.created, 'optionalAccess', _120 => _120.length]) ? { created: o.created } : {},
|
|
3751
|
+
..._optionalChain([o, 'access', _121 => _121.trimmed, 'optionalAccess', _122 => _122.length]) ? { trimmed: o.trimmed } : {},
|
|
3752
|
+
..._optionalChain([o, 'access', _123 => _123.removed, 'optionalAccess', _124 => _124.length]) ? { removed: o.removed } : {},
|
|
3704
3753
|
...o.rippled ? { rippled: o.rippled } : {}
|
|
3705
3754
|
});
|
|
3706
3755
|
const keysOut = (p, clip, property) => {
|
|
3707
3756
|
const c = clipOut(p, clip);
|
|
3708
|
-
const value = _chunkVKF3PWKRcjs.VIDEO_TRANSFORM_PROPERTIES.includes(property) ? _optionalChain([c, 'optionalAccess',
|
|
3757
|
+
const value = _chunkVKF3PWKRcjs.VIDEO_TRANSFORM_PROPERTIES.includes(property) ? _optionalChain([c, 'optionalAccess', _125 => _125.transform, 'optionalAccess', _126 => _126[property]]) : _optionalChain([c, 'optionalAccess', _127 => _127[property]]);
|
|
3709
3758
|
return typeof value === "object" ? { keys: value.keys } : { keys: [], value: _nullishCoalesce(value, () => ( null)) };
|
|
3710
3759
|
};
|
|
3711
3760
|
const getProject = {
|
|
@@ -3783,7 +3832,7 @@ function createVideoEditorToolProvider(controller, options = {}) {
|
|
|
3783
3832
|
annotations: { title: "Render a frame", ...READ },
|
|
3784
3833
|
handler: async ({ time, times, columns, format = "svg" }) => {
|
|
3785
3834
|
const p = project();
|
|
3786
|
-
const lutSrcs = [...new Set(p.tracks.flatMap((t) => t.clips.map((c) => _optionalChain([c, 'access',
|
|
3835
|
+
const lutSrcs = [...new Set(p.tracks.flatMap((t) => t.clips.map((c) => _optionalChain([c, 'access', _128 => _128.grade, 'optionalAccess', _129 => _129.lut, 'optionalAccess', _130 => _130.src])).filter((x) => !!x)))];
|
|
3787
3836
|
const missing = (await Promise.all(lutSrcs.map((src) => controller.luts.load(src).then(() => null, (e) => e.message)))).filter((m) => !!m);
|
|
3788
3837
|
const svgOptions = { lutFor: (src) => controller.luts.peek(src), ...columns ? { columns } : {} };
|
|
3789
3838
|
const svg = times ? _chunkVKF3PWKRcjs.videoContactSheetSvg.call(void 0, p, times, svgOptions) : _chunkVKF3PWKRcjs.videoProjectSvg.call(void 0, p, _nullishCoalesce(time, () => ( controller.getState().time)), svgOptions);
|
|
@@ -4024,7 +4073,7 @@ function createVideoEditorToolProvider(controller, options = {}) {
|
|
|
4024
4073
|
const at = _chunkVKF3PWKRcjs.findVideoClip.call(void 0, p, id);
|
|
4025
4074
|
if (!at) throw new Error(`There is no clip "${id}"; get_video_project lists the clips.`);
|
|
4026
4075
|
const { clip } = at;
|
|
4027
|
-
if (at.track.kind !== "video" || clip.type === "media" && _optionalChain([p, 'access',
|
|
4076
|
+
if (at.track.kind !== "video" || clip.type === "media" && _optionalChain([p, 'access', _131 => _131.assets, 'access', _132 => _132.find, 'call', _133 => _133((a) => a.id === clip.asset), 'optionalAccess', _134 => _134.kind]) === "audio")
|
|
4028
4077
|
throw new Error(`Clip "${id}" is sound only; grades change pictures. Pass clips on video tracks.`);
|
|
4029
4078
|
}
|
|
4030
4079
|
};
|
|
@@ -4047,7 +4096,7 @@ function createVideoEditorToolProvider(controller, options = {}) {
|
|
|
4047
4096
|
const grade = _chunkVKF3PWKRcjs.videoGradeLook.call(void 0, _chunkVKF3PWKRcjs.findVideoClip.call(void 0, project(), clip).clip.grade, preset, _nullishCoalesce(amount, () => ( 1)));
|
|
4048
4097
|
return grade ? { op: "update_clip", clip, set: { grade } } : { op: "update_clip", clip, remove: ["grade"] };
|
|
4049
4098
|
});
|
|
4050
|
-
return apply(edits, `Apply ${preset} look`, (r) => ({ clips: clips.map((id) => ({ id, grade: _nullishCoalesce(_optionalChain([_chunkVKF3PWKRcjs.findVideoClip.call(void 0, r.project, id), 'optionalAccess',
|
|
4099
|
+
return apply(edits, `Apply ${preset} look`, (r) => ({ clips: clips.map((id) => ({ id, grade: _nullishCoalesce(_optionalChain([_chunkVKF3PWKRcjs.findVideoClip.call(void 0, r.project, id), 'optionalAccess', _135 => _135.clip, 'access', _136 => _136.grade]), () => ( null)) })) }));
|
|
4051
4100
|
}
|
|
4052
4101
|
};
|
|
4053
4102
|
const copyGrade = {
|
|
@@ -4083,7 +4132,7 @@ function createVideoEditorToolProvider(controller, options = {}) {
|
|
|
4083
4132
|
const lut = await controller.luts.load(src);
|
|
4084
4133
|
const label = _nullishCoalesce(name, () => ( lut.title));
|
|
4085
4134
|
const setting = { src, ...strength !== void 0 && strength !== 1 ? { strength } : {}, ...label ? { name: label } : {} };
|
|
4086
|
-
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([_chunkVKF3PWKRcjs.findVideoClip.call(void 0, r.project, id), 'optionalAccess',
|
|
4135
|
+
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([_chunkVKF3PWKRcjs.findVideoClip.call(void 0, r.project, id), 'optionalAccess', _137 => _137.clip, 'access', _138 => _138.grade]), () => ( null)) })) }));
|
|
4087
4136
|
}
|
|
4088
4137
|
};
|
|
4089
4138
|
const removeLut = {
|
|
@@ -4095,9 +4144,9 @@ function createVideoEditorToolProvider(controller, options = {}) {
|
|
|
4095
4144
|
handler: ({ clips }) => {
|
|
4096
4145
|
gradeTargets(clips);
|
|
4097
4146
|
const p = project();
|
|
4098
|
-
const withLut = clips.filter((id) => _optionalChain([_chunkVKF3PWKRcjs.findVideoClip.call(void 0, p, id), 'access',
|
|
4147
|
+
const withLut = clips.filter((id) => _optionalChain([_chunkVKF3PWKRcjs.findVideoClip.call(void 0, p, id), 'access', _139 => _139.clip, 'access', _140 => _140.grade, 'optionalAccess', _141 => _141.lut]));
|
|
4099
4148
|
if (!withLut.length) throw new Error(`None of ${clips.map((c) => `"${c}"`).join(", ")} has a LUT; get_video_project shows each clip's grade.`);
|
|
4100
|
-
return apply(videoLutEdits(p, withLut, null), "Remove LUT", (r) => ({ clips: clips.map((id) => ({ id, grade: _nullishCoalesce(_optionalChain([_chunkVKF3PWKRcjs.findVideoClip.call(void 0, r.project, id), 'optionalAccess',
|
|
4149
|
+
return apply(videoLutEdits(p, withLut, null), "Remove LUT", (r) => ({ clips: clips.map((id) => ({ id, grade: _nullishCoalesce(_optionalChain([_chunkVKF3PWKRcjs.findVideoClip.call(void 0, r.project, id), 'optionalAccess', _142 => _142.clip, 'access', _143 => _143.grade]), () => ( null)) })) }));
|
|
4101
4150
|
}
|
|
4102
4151
|
};
|
|
4103
4152
|
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." };
|
|
@@ -4155,7 +4204,7 @@ function createVideoEditorToolProvider(controller, options = {}) {
|
|
|
4155
4204
|
controller.setPreviewScale(scale);
|
|
4156
4205
|
const s = controller.getState().previewScale;
|
|
4157
4206
|
const fixed = s === "full" ? 1 : typeof s === "number" ? s : null;
|
|
4158
|
-
const plays = fixed === null ? void 0 : project().assets.filter((a) => a.kind === "video").map((a) => ({ asset: a.id, src: _nullishCoalesce(_optionalChain([videoAssetProxy, 'call',
|
|
4207
|
+
const plays = fixed === null ? void 0 : project().assets.filter((a) => a.kind === "video").map((a) => ({ asset: a.id, src: _nullishCoalesce(_optionalChain([videoAssetProxy, 'call', _144 => _144(a, fixed), 'optionalAccess', _145 => _145.src]), () => ( a.src)), proxy: !!videoAssetProxy(a, fixed) }));
|
|
4159
4208
|
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." } };
|
|
4160
4209
|
}
|
|
4161
4210
|
};
|
|
@@ -4224,7 +4273,7 @@ function createVideoEditorToolProvider(controller, options = {}) {
|
|
|
4224
4273
|
handler: ({ track, from, to, limit }) => {
|
|
4225
4274
|
const all = timelineWords(track).filter((w) => w.end > (_nullishCoalesce(from, () => ( 0))) && w.start < (_nullishCoalesce(to, () => ( Infinity))));
|
|
4226
4275
|
const words = all.slice(0, _nullishCoalesce(limit, () => ( 1e3)));
|
|
4227
|
-
return { track: _nullishCoalesce(_optionalChain([words, 'access',
|
|
4276
|
+
return { track: _nullishCoalesce(_optionalChain([words, 'access', _146 => _146[0], 'optionalAccess', _147 => _147.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 };
|
|
4228
4277
|
}
|
|
4229
4278
|
};
|
|
4230
4279
|
const findText = {
|
|
@@ -4287,7 +4336,7 @@ function createVideoEditorToolProvider(controller, options = {}) {
|
|
|
4287
4336
|
const { clip } = at;
|
|
4288
4337
|
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.`);
|
|
4289
4338
|
if (clip.type !== "media") throw new Error(`Clip "${id}" is a ${clip.type === "text" ? "title" : clip.type === "effect" ? "effect clip" : "colour"}, so it has no source to change the speed of; use a video or audio clip.`);
|
|
4290
|
-
if (_optionalChain([project, 'call',
|
|
4339
|
+
if (_optionalChain([project, 'call', _148 => _148(), 'access', _149 => _149.assets, 'access', _150 => _150.find, 'call', _151 => _151((a) => a.id === clip.asset), 'optionalAccess', _152 => _152.kind]) === "image") throw new Error(`Clip "${id}" is a still, so it has no motion to change the speed of.`);
|
|
4291
4340
|
return clip;
|
|
4292
4341
|
};
|
|
4293
4342
|
const rampOut = (r, id) => {
|
|
@@ -4618,7 +4667,7 @@ function createVideoEditorToolProvider(controller, options = {}) {
|
|
|
4618
4667
|
};
|
|
4619
4668
|
const reads = [getProject, listSequences, getFrame, getTranscript, findText, findFillers, findPauses, findGaps, checkProject, renderFrame, getScopes, previewCache, planProxies, exportFfmpeg, exportLoudnessMeasure, exportEdl, audioLevels, findSilences, seek, setPreviewScale];
|
|
4620
4669
|
const writes = [setSettings, addAsset, updateAsset, removeAsset, setProxies, addTrack, updateTrack, removeTrack, moveTrack, addClip, moveClip, trimClip, splitClip, deleteClips, updateClip, setTransition, setSpeedRamp, addFreeze, removeRamp, setTranscript, removeRanges, applyGradePreset, copyGrade, setLut, removeLut, setKeyframes, removeKeyframes, slipClip, rollEdit, slideClip, liftRange, extractRange, splitAt, closeGaps, addMarker, removeMarker, editVideo, undo, redo];
|
|
4621
|
-
return {
|
|
4670
|
+
return withVideoPlayback({
|
|
4622
4671
|
id: _nullishCoalesce(options.id, () => ( "video")),
|
|
4623
4672
|
namespace: options.namespace,
|
|
4624
4673
|
title: "Video editor",
|
|
@@ -4635,7 +4684,7 @@ function createVideoEditorToolProvider(controller, options = {}) {
|
|
|
4635
4684
|
}
|
|
4636
4685
|
});
|
|
4637
4686
|
}
|
|
4638
|
-
};
|
|
4687
|
+
});
|
|
4639
4688
|
}
|
|
4640
4689
|
|
|
4641
4690
|
// src/video-editor/effect-tools.ts
|
|
@@ -4643,7 +4692,7 @@ function videoClipAppliedEffects(clip) {
|
|
|
4643
4692
|
const out = [];
|
|
4644
4693
|
const ref = (r) => ({ effect: r.effect, ...r.name ? { name: r.name } : {}, ...r.provider ? { provider: r.provider } : {} });
|
|
4645
4694
|
if (clip.type === "effect") out.push({ id: "generator", ...ref(clip), role: "effect clip", enabled: true, values: _nullishCoalesce(clip.values, () => ( {})) });
|
|
4646
|
-
if (_optionalChain([clip, 'access',
|
|
4695
|
+
if (_optionalChain([clip, 'access', _153 => _153.transition, 'optionalAccess', _154 => _154.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 });
|
|
4647
4696
|
(_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 }));
|
|
4648
4697
|
return out;
|
|
4649
4698
|
}
|
|
@@ -4680,10 +4729,10 @@ function createVideoEffectsToolProvider(controller, options = {}) {
|
|
|
4680
4729
|
const result = (r, target, instance, extra = {}) => {
|
|
4681
4730
|
if (!r.ok) throw new Error(r.error);
|
|
4682
4731
|
const effects = videoClipAppliedEffects(clipOf(target));
|
|
4683
|
-
const effect = _nullishCoalesce(effects.find((e) => e.id === (_nullishCoalesce(instance, () => ( _optionalChain([r, 'access',
|
|
4732
|
+
const effect = _nullishCoalesce(effects.find((e) => e.id === (_nullishCoalesce(instance, () => ( _optionalChain([r, 'access', _155 => _155.effect, 'optionalAccess', _156 => _156.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])));
|
|
4684
4733
|
return { target, effect, effects, ...extra };
|
|
4685
4734
|
};
|
|
4686
|
-
return _chunkRUZQMYXHcjs.createEffectToolProvider.call(void 0, {
|
|
4735
|
+
return withVideoPlayback(_chunkRUZQMYXHcjs.createEffectToolProvider.call(void 0, {
|
|
4687
4736
|
id: _nullishCoalesce(options.id, () => ( "video-effects")),
|
|
4688
4737
|
namespace: options.namespace,
|
|
4689
4738
|
title: "Video effects",
|
|
@@ -4800,8 +4849,8 @@ function createVideoEffectsToolProvider(controller, options = {}) {
|
|
|
4800
4849
|
if (args.effect === "generator") {
|
|
4801
4850
|
const clip = clipOf(args.clip);
|
|
4802
4851
|
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).`);
|
|
4803
|
-
const was = _optionalChain([clip, 'access',
|
|
4804
|
-
const plain = keys === null ? _chunkVKF3PWKRcjs.isVideoKeyframes.call(void 0, was) ? _optionalChain([was, 'access',
|
|
4852
|
+
const was = _optionalChain([clip, 'access', _157 => _157.values, 'optionalAccess', _158 => _158[args.control]]);
|
|
4853
|
+
const plain = keys === null ? _chunkVKF3PWKRcjs.isVideoKeyframes.call(void 0, was) ? _optionalChain([was, 'access', _159 => _159.keys, 'access', _160 => _160[0], 'optionalAccess', _161 => _161.v]) : was : { keys: [...keys].sort((a, b) => a.t - b.t) };
|
|
4805
4854
|
if (plain === void 0) throw new Error(`"${args.control}" has no value to keep; give keys instead.`);
|
|
4806
4855
|
r = await controller.updateEffectValues(args.clip, "generator", { [args.control]: plain });
|
|
4807
4856
|
} else r = await controller.setClipEffectKeyframes(args.clip, args.effect, args.control, keys);
|
|
@@ -4810,7 +4859,7 @@ function createVideoEffectsToolProvider(controller, options = {}) {
|
|
|
4810
4859
|
}
|
|
4811
4860
|
}
|
|
4812
4861
|
]
|
|
4813
|
-
});
|
|
4862
|
+
}));
|
|
4814
4863
|
}
|
|
4815
4864
|
|
|
4816
4865
|
|
|
@@ -5064,4 +5113,8 @@ function createVideoEffectsToolProvider(controller, options = {}) {
|
|
|
5064
5113
|
|
|
5065
5114
|
|
|
5066
5115
|
|
|
5067
|
-
exports.VIDEO_BLEND_MODES = _chunkVKF3PWKRcjs.VIDEO_BLEND_MODES; exports.VIDEO_BLEND_MODE_LABELS = VIDEO_BLEND_MODE_LABELS; exports.VIDEO_CLIP_ANIMATION_DURATION = _chunkVKF3PWKRcjs.VIDEO_CLIP_ANIMATION_DURATION; exports.VIDEO_CLIP_ANIMATION_EFFECTS = _chunkVKF3PWKRcjs.VIDEO_CLIP_ANIMATION_EFFECTS; exports.VIDEO_CLIP_ANIMATION_LABELS = VIDEO_CLIP_ANIMATION_LABELS; exports.VIDEO_CLIP_TYPES = _chunkVKF3PWKRcjs.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_EASE_NAMES = _chunkVKF3PWKRcjs.VIDEO_EASE_NAMES; exports.VIDEO_EDIT_OPS = VIDEO_EDIT_OPS; exports.VIDEO_EFFECT_PLACES = _chunkVKF3PWKRcjs.VIDEO_EFFECT_PLACES; exports.VIDEO_FADE_CURVES = _chunkVKF3PWKRcjs.VIDEO_FADE_CURVES; exports.VIDEO_FADE_CURVE_LABELS = VIDEO_FADE_CURVE_LABELS; exports.VIDEO_FITS = _chunkVKF3PWKRcjs.VIDEO_FITS; exports.VIDEO_GRADE_CONTROLS = _chunkVKF3PWKRcjs.VIDEO_GRADE_CONTROLS; exports.VIDEO_GRADE_PRESETS = _chunkVKF3PWKRcjs.VIDEO_GRADE_PRESETS; exports.VIDEO_GRADE_PRESET_NAMES = _chunkVKF3PWKRcjs.VIDEO_GRADE_PRESET_NAMES; exports.VIDEO_ISSUE_CODES = VIDEO_ISSUE_CODES; exports.VIDEO_KEYFRAME_LIMITS = _chunkVKF3PWKRcjs.VIDEO_KEYFRAME_LIMITS; exports.VIDEO_KEYFRAME_PROPERTIES = _chunkVKF3PWKRcjs.VIDEO_KEYFRAME_PROPERTIES; exports.VIDEO_LUT_MAX_SIZE = _chunkVKF3PWKRcjs.VIDEO_LUT_MAX_SIZE; exports.VIDEO_PEAK_BLOCK = VIDEO_PEAK_BLOCK; exports.VIDEO_PLACEMENT_MODES = _chunkVKF3PWKRcjs.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 = _chunkVKF3PWKRcjs.VIDEO_TIME_EPSILON; exports.VIDEO_TRANSFORM_PROPERTIES = _chunkVKF3PWKRcjs.VIDEO_TRANSFORM_PROPERTIES; exports.VIDEO_TRANSITION_LABELS = VIDEO_TRANSITION_LABELS; exports.VIDEO_TRANSITION_TYPES = _chunkVKF3PWKRcjs.VIDEO_TRANSITION_TYPES; exports.VIDEO_VECTORSCOPE_TARGETS = VIDEO_VECTORSCOPE_TARGETS; exports.VIDEO_WIPE_DIRECTIONS = _chunkVKF3PWKRcjs.VIDEO_WIPE_DIRECTIONS; exports.VideoAudioPeaksCache = VideoAudioPeaksCache; exports.VideoEditorController = VideoEditorController; exports.VideoEffectsEngine = _chunkVKF3PWKRcjs.VideoEffectsEngine; exports.VideoFrameCache = VideoFrameCache; exports.VideoLutCache = _chunkVKF3PWKRcjs.VideoLutCache; exports.VideoPreviewEngine = VideoPreviewEngine; exports.VideoPreviewPixels = VideoPreviewPixels; exports.allVideoClipIds = _chunkVKF3PWKRcjs.allVideoClipIds; exports.allVideoTracks = _chunkVKF3PWKRcjs.allVideoTracks; exports.applyVideoEdits = applyVideoEdits; exports.applyVideoGrade = _chunkVKF3PWKRcjs.applyVideoGrade; exports.applyVideoLut = _chunkVKF3PWKRcjs.applyVideoLut; exports.applyVideoLutToPixels = _chunkVKF3PWKRcjs.applyVideoLutToPixels; exports.buildVideoAudioPeaks = buildVideoAudioPeaks; exports.checkVideoEffectPlace = _chunkVKF3PWKRcjs.checkVideoEffectPlace; exports.checkVideoEffectValues = _chunkVKF3PWKRcjs.checkVideoEffectValues; exports.checkVideoProject = checkVideoProject; exports.checkVideoTimeRemap = _chunkVKF3PWKRcjs.checkVideoTimeRemap; exports.createVideoEditorToolProvider = createVideoEditorToolProvider; exports.createVideoEffectsToolProvider = createVideoEffectsToolProvider; exports.createVideoElementDecoder = createVideoElementDecoder; exports.createVideoProject = createVideoProject; exports.decodeVideoAudioPeaks = decodeVideoAudioPeaks; exports.describeVideoProject = describeVideoProject; exports.describeVideoSequence = describeVideoSequence; exports.drawVideoFrame = _chunkVKF3PWKRcjs.drawVideoFrame; exports.ffmpegFilterValue = _chunkVKF3PWKRcjs.ffmpegFilterValue; exports.findVideoAudioSilences = findVideoAudioSilences; exports.findVideoClip = _chunkVKF3PWKRcjs.findVideoClip; exports.findVideoFillers = findVideoFillers; exports.findVideoGaps = _chunkVKF3PWKRcjs.findVideoGaps; exports.findVideoSequenceClip = _chunkVKF3PWKRcjs.findVideoSequenceClip; exports.findVideoSequenceCycle = _chunkVKF3PWKRcjs.findVideoSequenceCycle; exports.findVideoTranscriptPauses = findVideoTranscriptPauses; exports.findVideoTranscriptText = findVideoTranscriptText; exports.formatVideoSeconds = _chunkVKF3PWKRcjs.formatVideoSeconds; exports.formatVideoTimecode = _chunkVKF3PWKRcjs.formatVideoTimecode; exports.formatVideoTimecodeFrames = _chunkVKF3PWKRcjs.formatVideoTimecodeFrames; exports.isVideoDropFrameRate = _chunkVKF3PWKRcjs.isVideoDropFrameRate; exports.isVideoKeyframes = _chunkVKF3PWKRcjs.isVideoKeyframes; exports.mergeVideoRanges = mergeVideoRanges; exports.mixEffectPixels = _chunkVKF3PWKRcjs.mixEffectPixels; exports.nextFreeVideoSlot = _chunkVKF3PWKRcjs.nextFreeVideoSlot; exports.normalizeVideoGrade = _chunkVKF3PWKRcjs.normalizeVideoGrade; exports.normalizeVideoGradeLut = _chunkVKF3PWKRcjs.normalizeVideoGradeLut; exports.normalizeVideoWord = normalizeVideoWord; exports.overEffectPixels = _chunkVKF3PWKRcjs.overEffectPixels; exports.parseVideoAnimatable = parseVideoAnimatable; exports.parseVideoAsset = parseVideoAsset; exports.parseVideoAssetProxies = parseVideoAssetProxies; exports.parseVideoClip = parseVideoClip; exports.parseVideoClipAnimation = parseVideoClipAnimation; exports.parseVideoClipEffects = parseVideoClipEffects; exports.parseVideoCubeLut = _chunkVKF3PWKRcjs.parseVideoCubeLut; exports.parseVideoEffectRef = parseVideoEffectRef; exports.parseVideoEffectValues = parseVideoEffectValues; exports.parseVideoGrade = parseVideoGrade; exports.parseVideoGradeLut = parseVideoGradeLut; exports.parseVideoKeyframes = parseVideoKeyframes; exports.parseVideoLoudnessMeasurement = _chunkVKF3PWKRcjs.parseVideoLoudnessMeasurement; exports.parseVideoMarker = parseVideoMarker; exports.parseVideoPreviewScale = parseVideoPreviewScale; exports.parseVideoProject = parseVideoProject; exports.parseVideoSequence = parseVideoSequence; exports.parseVideoTimeRemap = parseVideoTimeRemap; exports.parseVideoTrack = parseVideoTrack; exports.parseVideoTranscript = parseVideoTranscript; exports.parseVideoTranscriptWords = parseVideoTranscriptWords; exports.parseVideoTransform = parseVideoTransform; exports.parseVideoTransition = parseVideoTransition; exports.placeVideoRect = _chunkVKF3PWKRcjs.placeVideoRect; exports.planVideoClipDrag = planVideoClipDrag; exports.planVideoPrefetch = planVideoPrefetch; exports.probeVideoMedia = probeVideoMedia; exports.readVideoScopesPanel = readVideoScopesPanel; exports.removeVideoKey = _chunkVKF3PWKRcjs.removeVideoKey; exports.renderVideoFrameExact = _chunkVKF3PWKRcjs.renderVideoFrameExact; exports.resolveVideoPreviewScale = resolveVideoPreviewScale; exports.retimeVideoAnimatable = _chunkVKF3PWKRcjs.retimeVideoAnimatable; exports.setVideoKey = _chunkVKF3PWKRcjs.setVideoKey; exports.snapToVideoFrame = _chunkVKF3PWKRcjs.snapToVideoFrame; exports.snapVideoTime = _chunkVKF3PWKRcjs.snapVideoTime; exports.sortVideoKeys = _chunkVKF3PWKRcjs.sortVideoKeys; exports.sortedVideoClips = _chunkVKF3PWKRcjs.sortedVideoClips; exports.splitVideoAnimatable = _chunkVKF3PWKRcjs.splitVideoAnimatable; exports.summarizeVideoScopes = summarizeVideoScopes; exports.toVideoEdl = _chunkVKF3PWKRcjs.toVideoEdl; exports.toVideoFfmpeg = _chunkVKF3PWKRcjs.toVideoFfmpeg; exports.toVideoLoudnessMeasure = _chunkVKF3PWKRcjs.toVideoLoudnessMeasure; exports.videoAssetDropEdit = videoAssetDropEdit; exports.videoAssetHasSound = _chunkVKF3PWKRcjs.videoAssetHasSound; exports.videoAssetKindOf = videoAssetKindOf; exports.videoAssetMap = _chunkVKF3PWKRcjs.videoAssetMap; exports.videoAssetProxy = videoAssetProxy; exports.videoAudioLevels = videoAudioLevels; exports.videoAudioPeakRange = videoAudioPeakRange; exports.videoAudioPeakSpans = videoAudioPeakSpans; exports.videoAudioPeaksDuration = videoAudioPeaksDuration; exports.videoCacheEvictions = videoCacheEvictions; exports.videoChroma = videoChroma; exports.videoClipAfter = _chunkVKF3PWKRcjs.videoClipAfter; exports.videoClipAnimated = _chunkVKF3PWKRcjs.videoClipAnimated; exports.videoClipAnimationProperties = _chunkVKF3PWKRcjs.videoClipAnimationProperties; exports.videoClipAnimationSpans = _chunkVKF3PWKRcjs.videoClipAnimationSpans; exports.videoClipAppliedEffects = videoClipAppliedEffects; exports.videoClipBefore = _chunkVKF3PWKRcjs.videoClipBefore; exports.videoClipEffectUses = _chunkVKF3PWKRcjs.videoClipEffectUses; exports.videoClipEnd = _chunkVKF3PWKRcjs.videoClipEnd; exports.videoClipHandles = _chunkVKF3PWKRcjs.videoClipHandles; exports.videoClipKeyframes = videoClipKeyframes; exports.videoClipLabel = videoClipLabel; exports.videoClipOverhang = _chunkVKF3PWKRcjs.videoClipOverhang; exports.videoClipShowsWaveform = videoClipShowsWaveform; exports.videoClipSoundGain = _chunkVKF3PWKRcjs.videoClipSoundGain; exports.videoClipSourceRange = _chunkVKF3PWKRcjs.videoClipSourceRange; exports.videoClipSourceTime = _chunkVKF3PWKRcjs.videoClipSourceTime; exports.videoClipSpeed = _chunkVKF3PWKRcjs.videoClipSpeed; exports.videoClipSpeedAt = _chunkVKF3PWKRcjs.videoClipSpeedAt; exports.videoClipTint = videoClipTint; exports.videoClipWaveform = videoClipWaveform; exports.videoClipWaveformPath = videoClipWaveformPath; exports.videoClipsAt = _chunkVKF3PWKRcjs.videoClipsAt; exports.videoContactSheetSvg = _chunkVKF3PWKRcjs.videoContactSheetSvg; exports.videoDragLabel = videoDragLabel; exports.videoDropTracks = videoDropTracks; exports.videoEaseBezier = _chunkVKF3PWKRcjs.videoEaseBezier; exports.videoEaseProgress = _chunkVKF3PWKRcjs.videoEaseProgress; exports.videoEffectFrameTime = _chunkVKF3PWKRcjs.videoEffectFrameTime; exports.videoEffectLayerKey = _chunkVKF3PWKRcjs.videoEffectLayerKey; exports.videoEffectValuesAt = _chunkVKF3PWKRcjs.videoEffectValuesAt; exports.videoExposureNotes = videoExposureNotes; exports.videoExposureStats = videoExposureStats; exports.videoFadeCurveGain = _chunkVKF3PWKRcjs.videoFadeCurveGain; exports.videoFfmpegUnsupportedEffects = _chunkVKF3PWKRcjs.videoFfmpegUnsupportedEffects; exports.videoFrameAt = _chunkVKF3PWKRcjs.videoFrameAt; exports.videoFrameCacheKey = videoFrameCacheKey; exports.videoFrameDuration = _chunkVKF3PWKRcjs.videoFrameDuration; exports.videoFrameLeafLayers = _chunkVKF3PWKRcjs.videoFrameLeafLayers; exports.videoFrameRequestsAt = videoFrameRequestsAt; exports.videoFrameToSvg = _chunkVKF3PWKRcjs.videoFrameToSvg; exports.videoFrames = _chunkVKF3PWKRcjs.videoFrames; exports.videoFreezeFrameEdit = _chunkVKF3PWKRcjs.videoFreezeFrameEdit; exports.videoGradeCssFilter = _chunkVKF3PWKRcjs.videoGradeCssFilter; exports.videoGradeFfmpegFilters = _chunkVKF3PWKRcjs.videoGradeFfmpegFilters; exports.videoGradeGainsFilterId = _chunkVKF3PWKRcjs.videoGradeGainsFilterId; exports.videoGradeLook = _chunkVKF3PWKRcjs.videoGradeLook; exports.videoGradePreset = _chunkVKF3PWKRcjs.videoGradePreset; exports.videoGradeStepMatrix = _chunkVKF3PWKRcjs.videoGradeStepMatrix; exports.videoGradeStepSvgValues = _chunkVKF3PWKRcjs.videoGradeStepSvgValues; exports.videoGradeSteps = _chunkVKF3PWKRcjs.videoGradeSteps; exports.videoGradeSvgDefs = _chunkVKF3PWKRcjs.videoGradeSvgDefs; exports.videoGradeSvgFilter = _chunkVKF3PWKRcjs.videoGradeSvgFilter; exports.videoHistogram = videoHistogram; exports.videoHistogramImage = videoHistogramImage; exports.videoHourFrames = _chunkVKF3PWKRcjs.videoHourFrames; exports.videoIrisRadius = _chunkVKF3PWKRcjs.videoIrisRadius; exports.videoIssueKey = videoIssueKey; exports.videoKeyframeBreakpoints = _chunkVKF3PWKRcjs.videoKeyframeBreakpoints; exports.videoKeyframeFfmpegExpr = _chunkVKF3PWKRcjs.videoKeyframeFfmpegExpr; exports.videoKeyframeRows = videoKeyframeRows; exports.videoKeyframeToggleEdit = videoKeyframeToggleEdit; exports.videoKeyframeValueEdit = videoKeyframeValueEdit; exports.videoKeysOf = _chunkVKF3PWKRcjs.videoKeysOf; exports.videoLayersUseEffects = _chunkVKF3PWKRcjs.videoLayersUseEffects; exports.videoLayersWithoutTransitionEffects = _chunkVKF3PWKRcjs.videoLayersWithoutTransitionEffects; exports.videoLuma = videoLuma; exports.videoLumaWaveform = videoLumaWaveform; exports.videoLutEdits = videoLutEdits; exports.videoLutFromFunction = _chunkVKF3PWKRcjs.videoLutFromFunction; exports.videoLutSvgApproximation = _chunkVKF3PWKRcjs.videoLutSvgApproximation; exports.videoLutSvgPrimitives = _chunkVKF3PWKRcjs.videoLutSvgPrimitives; exports.videoLutToCube = _chunkVKF3PWKRcjs.videoLutToCube; exports.videoOverlap = _chunkVKF3PWKRcjs.videoOverlap; exports.videoPeakDb = videoPeakDb; exports.videoPreviewSrc = videoPreviewSrc; exports.videoProjectDuration = _chunkVKF3PWKRcjs.videoProjectDuration; exports.videoProjectEffects = _chunkVKF3PWKRcjs.videoProjectEffects; exports.videoProjectHasProxies = videoProjectHasProxies; exports.videoProjectSvg = _chunkVKF3PWKRcjs.videoProjectSvg; exports.videoProxyFfmpeg = videoProxyFfmpeg; exports.videoProxyName = videoProxyName; exports.videoProxyPlan = videoProxyPlan; exports.videoRemoveRangesEdits = videoRemoveRangesEdits; exports.videoRulerTicks = videoRulerTicks; exports.videoScopeImage = videoScopeImage; exports.videoSequenceChildren = _chunkVKF3PWKRcjs.videoSequenceChildren; exports.videoSequenceDuration = _chunkVKF3PWKRcjs.videoSequenceDuration; exports.videoSequenceMap = _chunkVKF3PWKRcjs.videoSequenceMap; exports.videoShellQuote = _chunkVKF3PWKRcjs.videoShellQuote; exports.videoSlowMotionRamp = _chunkVKF3PWKRcjs.videoSlowMotionRamp; exports.videoSnapPoints = _chunkVKF3PWKRcjs.videoSnapPoints; exports.videoSourceFrame = videoSourceFrame; exports.videoSourceFrameTime = videoSourceFrameTime; exports.videoSpeedRampEdit = _chunkVKF3PWKRcjs.videoSpeedRampEdit; exports.videoSpeedRampKeys = _chunkVKF3PWKRcjs.videoSpeedRampKeys; exports.videoTextStyle = _chunkVKF3PWKRcjs.videoTextStyle; exports.videoTimeRemapBreakpoints = _chunkVKF3PWKRcjs.videoTimeRemapBreakpoints; exports.videoTimeRemapSpan = _chunkVKF3PWKRcjs.videoTimeRemapSpan; exports.videoTimecodeFrames = _chunkVKF3PWKRcjs.videoTimecodeFrames; exports.videoTimelineTranscript = videoTimelineTranscript; exports.videoTitleFrame = _chunkVKF3PWKRcjs.videoTitleFrame; exports.videoTrackSyncLocked = _chunkVKF3PWKRcjs.videoTrackSyncLocked; exports.videoTranscriptEdit = videoTranscriptEdit; exports.videoTranscriptTrack = videoTranscriptTrack; exports.videoTransformAt = _chunkVKF3PWKRcjs.videoTransformAt; exports.videoTransitionAudioCurve = _chunkVKF3PWKRcjs.videoTransitionAudioCurve; exports.videoTransitionEase = _chunkVKF3PWKRcjs.videoTransitionEase; exports.videoTransitionHasDirection = videoTransitionHasDirection; exports.videoValueAt = _chunkVKF3PWKRcjs.videoValueAt; exports.videoVectorscope = videoVectorscope; exports.videoVectorscopeAngle = videoVectorscopeAngle; exports.videoVectorscopeImage = videoVectorscopeImage; exports.videoVectorscopePoint = videoVectorscopePoint; exports.videoWaveformImage = videoWaveformImage; exports.videoWaveformPath = videoWaveformPath; exports.videoWipeRect = _chunkVKF3PWKRcjs.videoWipeRect; exports.videoWordAt = videoWordAt; exports.videoWordsRange = videoWordsRange;
|
|
5116
|
+
|
|
5117
|
+
|
|
5118
|
+
|
|
5119
|
+
|
|
5120
|
+
exports.VIDEO_BLEND_MODES = _chunkVKF3PWKRcjs.VIDEO_BLEND_MODES; exports.VIDEO_BLEND_MODE_LABELS = VIDEO_BLEND_MODE_LABELS; exports.VIDEO_CLIP_ANIMATION_DURATION = _chunkVKF3PWKRcjs.VIDEO_CLIP_ANIMATION_DURATION; exports.VIDEO_CLIP_ANIMATION_EFFECTS = _chunkVKF3PWKRcjs.VIDEO_CLIP_ANIMATION_EFFECTS; exports.VIDEO_CLIP_ANIMATION_LABELS = VIDEO_CLIP_ANIMATION_LABELS; exports.VIDEO_CLIP_TYPES = _chunkVKF3PWKRcjs.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_EASE_NAMES = _chunkVKF3PWKRcjs.VIDEO_EASE_NAMES; exports.VIDEO_EDIT_OPS = VIDEO_EDIT_OPS; exports.VIDEO_EFFECT_PLACES = _chunkVKF3PWKRcjs.VIDEO_EFFECT_PLACES; exports.VIDEO_FADE_CURVES = _chunkVKF3PWKRcjs.VIDEO_FADE_CURVES; exports.VIDEO_FADE_CURVE_LABELS = VIDEO_FADE_CURVE_LABELS; exports.VIDEO_FITS = _chunkVKF3PWKRcjs.VIDEO_FITS; exports.VIDEO_GRADE_CONTROLS = _chunkVKF3PWKRcjs.VIDEO_GRADE_CONTROLS; exports.VIDEO_GRADE_PRESETS = _chunkVKF3PWKRcjs.VIDEO_GRADE_PRESETS; exports.VIDEO_GRADE_PRESET_NAMES = _chunkVKF3PWKRcjs.VIDEO_GRADE_PRESET_NAMES; exports.VIDEO_ISSUE_CODES = VIDEO_ISSUE_CODES; exports.VIDEO_KEYFRAME_LIMITS = _chunkVKF3PWKRcjs.VIDEO_KEYFRAME_LIMITS; exports.VIDEO_KEYFRAME_PROPERTIES = _chunkVKF3PWKRcjs.VIDEO_KEYFRAME_PROPERTIES; exports.VIDEO_LUT_MAX_SIZE = _chunkVKF3PWKRcjs.VIDEO_LUT_MAX_SIZE; exports.VIDEO_PEAK_BLOCK = VIDEO_PEAK_BLOCK; exports.VIDEO_PLACEMENT_MODES = _chunkVKF3PWKRcjs.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 = _chunkVKF3PWKRcjs.VIDEO_TIME_EPSILON; exports.VIDEO_TRANSFORM_PROPERTIES = _chunkVKF3PWKRcjs.VIDEO_TRANSFORM_PROPERTIES; exports.VIDEO_TRANSITION_LABELS = VIDEO_TRANSITION_LABELS; exports.VIDEO_TRANSITION_TYPES = _chunkVKF3PWKRcjs.VIDEO_TRANSITION_TYPES; exports.VIDEO_VECTORSCOPE_TARGETS = VIDEO_VECTORSCOPE_TARGETS; exports.VIDEO_WIPE_DIRECTIONS = _chunkVKF3PWKRcjs.VIDEO_WIPE_DIRECTIONS; exports.VideoAudioPeaksCache = VideoAudioPeaksCache; exports.VideoEditorController = VideoEditorController; exports.VideoEffectsEngine = _chunkVKF3PWKRcjs.VideoEffectsEngine; exports.VideoFrameCache = VideoFrameCache; exports.VideoLutCache = _chunkVKF3PWKRcjs.VideoLutCache; exports.VideoPreviewEngine = VideoPreviewEngine; exports.VideoPreviewPixels = VideoPreviewPixels; exports.allVideoClipIds = _chunkVKF3PWKRcjs.allVideoClipIds; exports.allVideoTracks = _chunkVKF3PWKRcjs.allVideoTracks; exports.applyVideoEdits = applyVideoEdits; exports.applyVideoGrade = _chunkVKF3PWKRcjs.applyVideoGrade; exports.applyVideoLut = _chunkVKF3PWKRcjs.applyVideoLut; exports.applyVideoLutToPixels = _chunkVKF3PWKRcjs.applyVideoLutToPixels; exports.buildVideoAudioPeaks = buildVideoAudioPeaks; exports.checkVideoEffectPlace = _chunkVKF3PWKRcjs.checkVideoEffectPlace; exports.checkVideoEffectValues = _chunkVKF3PWKRcjs.checkVideoEffectValues; exports.checkVideoProject = checkVideoProject; exports.checkVideoTimeRemap = _chunkVKF3PWKRcjs.checkVideoTimeRemap; exports.createVideoEditorToolProvider = createVideoEditorToolProvider; exports.createVideoEffectsToolProvider = createVideoEffectsToolProvider; exports.createVideoElementDecoder = createVideoElementDecoder; exports.createVideoProject = createVideoProject; exports.decodeVideoAudioPeaks = decodeVideoAudioPeaks; exports.describeVideoProject = describeVideoProject; exports.describeVideoSequence = describeVideoSequence; exports.drawVideoFrame = _chunkVKF3PWKRcjs.drawVideoFrame; exports.ffmpegFilterValue = _chunkVKF3PWKRcjs.ffmpegFilterValue; exports.findVideoAudioSilences = findVideoAudioSilences; exports.findVideoClip = _chunkVKF3PWKRcjs.findVideoClip; exports.findVideoFillers = findVideoFillers; exports.findVideoGaps = _chunkVKF3PWKRcjs.findVideoGaps; exports.findVideoSequenceClip = _chunkVKF3PWKRcjs.findVideoSequenceClip; exports.findVideoSequenceCycle = _chunkVKF3PWKRcjs.findVideoSequenceCycle; exports.findVideoTranscriptPauses = findVideoTranscriptPauses; exports.findVideoTranscriptText = findVideoTranscriptText; exports.formatVideoSeconds = _chunkVKF3PWKRcjs.formatVideoSeconds; exports.formatVideoTimecode = _chunkVKF3PWKRcjs.formatVideoTimecode; exports.formatVideoTimecodeFrames = _chunkVKF3PWKRcjs.formatVideoTimecodeFrames; exports.isVideoDropFrameRate = _chunkVKF3PWKRcjs.isVideoDropFrameRate; exports.isVideoKeyframes = _chunkVKF3PWKRcjs.isVideoKeyframes; exports.mergeVideoRanges = mergeVideoRanges; exports.mixEffectPixels = _chunkVKF3PWKRcjs.mixEffectPixels; exports.nextFreeVideoSlot = _chunkVKF3PWKRcjs.nextFreeVideoSlot; exports.normalizeVideoGrade = _chunkVKF3PWKRcjs.normalizeVideoGrade; exports.normalizeVideoGradeLut = _chunkVKF3PWKRcjs.normalizeVideoGradeLut; exports.normalizeVideoWord = normalizeVideoWord; exports.overEffectPixels = _chunkVKF3PWKRcjs.overEffectPixels; exports.parseVideoAnimatable = parseVideoAnimatable; exports.parseVideoAsset = parseVideoAsset; exports.parseVideoAssetProxies = parseVideoAssetProxies; exports.parseVideoClip = parseVideoClip; exports.parseVideoClipAnimation = parseVideoClipAnimation; exports.parseVideoClipEffects = parseVideoClipEffects; exports.parseVideoCubeLut = _chunkVKF3PWKRcjs.parseVideoCubeLut; exports.parseVideoEffectRef = parseVideoEffectRef; exports.parseVideoEffectValues = parseVideoEffectValues; exports.parseVideoGrade = parseVideoGrade; exports.parseVideoGradeLut = parseVideoGradeLut; exports.parseVideoKeyframes = parseVideoKeyframes; exports.parseVideoLoudnessMeasurement = _chunkVKF3PWKRcjs.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 = _chunkVKF3PWKRcjs.placeVideoRect; exports.planVideoClipDrag = planVideoClipDrag; exports.planVideoPrefetch = planVideoPrefetch; exports.planVideoToolPlayback = planVideoToolPlayback; exports.probeVideoMedia = probeVideoMedia; exports.readVideoScopesPanel = readVideoScopesPanel; exports.removeVideoKey = _chunkVKF3PWKRcjs.removeVideoKey; exports.renderVideoFrameExact = _chunkVKF3PWKRcjs.renderVideoFrameExact; exports.resolveVideoPreviewScale = resolveVideoPreviewScale; exports.retimeVideoAnimatable = _chunkVKF3PWKRcjs.retimeVideoAnimatable; exports.setVideoKey = _chunkVKF3PWKRcjs.setVideoKey; exports.snapToVideoFrame = _chunkVKF3PWKRcjs.snapToVideoFrame; exports.snapVideoTime = _chunkVKF3PWKRcjs.snapVideoTime; exports.sortVideoKeys = _chunkVKF3PWKRcjs.sortVideoKeys; exports.sortedVideoClips = _chunkVKF3PWKRcjs.sortedVideoClips; exports.splitVideoAnimatable = _chunkVKF3PWKRcjs.splitVideoAnimatable; exports.summarizeVideoScopes = summarizeVideoScopes; exports.toVideoEdl = _chunkVKF3PWKRcjs.toVideoEdl; exports.toVideoFfmpeg = _chunkVKF3PWKRcjs.toVideoFfmpeg; exports.toVideoLoudnessMeasure = _chunkVKF3PWKRcjs.toVideoLoudnessMeasure; exports.videoAssetDropEdit = videoAssetDropEdit; exports.videoAssetHasSound = _chunkVKF3PWKRcjs.videoAssetHasSound; exports.videoAssetKindOf = videoAssetKindOf; exports.videoAssetMap = _chunkVKF3PWKRcjs.videoAssetMap; exports.videoAssetProxy = videoAssetProxy; exports.videoAudioLevels = videoAudioLevels; exports.videoAudioPeakRange = videoAudioPeakRange; exports.videoAudioPeakSpans = videoAudioPeakSpans; exports.videoAudioPeaksDuration = videoAudioPeaksDuration; exports.videoCacheEvictions = videoCacheEvictions; exports.videoChroma = videoChroma; exports.videoClipAfter = _chunkVKF3PWKRcjs.videoClipAfter; exports.videoClipAnimated = _chunkVKF3PWKRcjs.videoClipAnimated; exports.videoClipAnimationProperties = _chunkVKF3PWKRcjs.videoClipAnimationProperties; exports.videoClipAnimationSpans = _chunkVKF3PWKRcjs.videoClipAnimationSpans; exports.videoClipAppliedEffects = videoClipAppliedEffects; exports.videoClipBefore = _chunkVKF3PWKRcjs.videoClipBefore; exports.videoClipEffectUses = _chunkVKF3PWKRcjs.videoClipEffectUses; exports.videoClipEnd = _chunkVKF3PWKRcjs.videoClipEnd; exports.videoClipHandles = _chunkVKF3PWKRcjs.videoClipHandles; exports.videoClipKeyframes = videoClipKeyframes; exports.videoClipLabel = videoClipLabel; exports.videoClipOverhang = _chunkVKF3PWKRcjs.videoClipOverhang; exports.videoClipShowsWaveform = videoClipShowsWaveform; exports.videoClipSoundGain = _chunkVKF3PWKRcjs.videoClipSoundGain; exports.videoClipSourceRange = _chunkVKF3PWKRcjs.videoClipSourceRange; exports.videoClipSourceTime = _chunkVKF3PWKRcjs.videoClipSourceTime; exports.videoClipSpeed = _chunkVKF3PWKRcjs.videoClipSpeed; exports.videoClipSpeedAt = _chunkVKF3PWKRcjs.videoClipSpeedAt; exports.videoClipTint = videoClipTint; exports.videoClipWaveform = videoClipWaveform; exports.videoClipWaveformPath = videoClipWaveformPath; exports.videoClipsAt = _chunkVKF3PWKRcjs.videoClipsAt; exports.videoContactSheetSvg = _chunkVKF3PWKRcjs.videoContactSheetSvg; exports.videoDragLabel = videoDragLabel; exports.videoDropTracks = videoDropTracks; exports.videoEaseBezier = _chunkVKF3PWKRcjs.videoEaseBezier; exports.videoEaseProgress = _chunkVKF3PWKRcjs.videoEaseProgress; exports.videoEffectFrameTime = _chunkVKF3PWKRcjs.videoEffectFrameTime; exports.videoEffectLayerKey = _chunkVKF3PWKRcjs.videoEffectLayerKey; exports.videoEffectValuesAt = _chunkVKF3PWKRcjs.videoEffectValuesAt; exports.videoExposureNotes = videoExposureNotes; exports.videoExposureStats = videoExposureStats; exports.videoFadeCurveGain = _chunkVKF3PWKRcjs.videoFadeCurveGain; exports.videoFfmpegUnsupportedEffects = _chunkVKF3PWKRcjs.videoFfmpegUnsupportedEffects; exports.videoFrameAt = _chunkVKF3PWKRcjs.videoFrameAt; exports.videoFrameCacheKey = videoFrameCacheKey; exports.videoFrameDuration = _chunkVKF3PWKRcjs.videoFrameDuration; exports.videoFrameLeafLayers = _chunkVKF3PWKRcjs.videoFrameLeafLayers; exports.videoFrameRequestsAt = videoFrameRequestsAt; exports.videoFrameToSvg = _chunkVKF3PWKRcjs.videoFrameToSvg; exports.videoFrames = _chunkVKF3PWKRcjs.videoFrames; exports.videoFreezeFrameEdit = _chunkVKF3PWKRcjs.videoFreezeFrameEdit; exports.videoGradeCssFilter = _chunkVKF3PWKRcjs.videoGradeCssFilter; exports.videoGradeFfmpegFilters = _chunkVKF3PWKRcjs.videoGradeFfmpegFilters; exports.videoGradeGainsFilterId = _chunkVKF3PWKRcjs.videoGradeGainsFilterId; exports.videoGradeLook = _chunkVKF3PWKRcjs.videoGradeLook; exports.videoGradePreset = _chunkVKF3PWKRcjs.videoGradePreset; exports.videoGradeStepMatrix = _chunkVKF3PWKRcjs.videoGradeStepMatrix; exports.videoGradeStepSvgValues = _chunkVKF3PWKRcjs.videoGradeStepSvgValues; exports.videoGradeSteps = _chunkVKF3PWKRcjs.videoGradeSteps; exports.videoGradeSvgDefs = _chunkVKF3PWKRcjs.videoGradeSvgDefs; exports.videoGradeSvgFilter = _chunkVKF3PWKRcjs.videoGradeSvgFilter; exports.videoHistogram = videoHistogram; exports.videoHistogramImage = videoHistogramImage; exports.videoHourFrames = _chunkVKF3PWKRcjs.videoHourFrames; exports.videoIrisRadius = _chunkVKF3PWKRcjs.videoIrisRadius; exports.videoIssueKey = videoIssueKey; exports.videoKeyframeBreakpoints = _chunkVKF3PWKRcjs.videoKeyframeBreakpoints; exports.videoKeyframeFfmpegExpr = _chunkVKF3PWKRcjs.videoKeyframeFfmpegExpr; exports.videoKeyframeRows = videoKeyframeRows; exports.videoKeyframeToggleEdit = videoKeyframeToggleEdit; exports.videoKeyframeValueEdit = videoKeyframeValueEdit; exports.videoKeysOf = _chunkVKF3PWKRcjs.videoKeysOf; exports.videoLayersUseEffects = _chunkVKF3PWKRcjs.videoLayersUseEffects; exports.videoLayersWithoutTransitionEffects = _chunkVKF3PWKRcjs.videoLayersWithoutTransitionEffects; exports.videoLuma = videoLuma; exports.videoLumaWaveform = videoLumaWaveform; exports.videoLutEdits = videoLutEdits; exports.videoLutFromFunction = _chunkVKF3PWKRcjs.videoLutFromFunction; exports.videoLutSvgApproximation = _chunkVKF3PWKRcjs.videoLutSvgApproximation; exports.videoLutSvgPrimitives = _chunkVKF3PWKRcjs.videoLutSvgPrimitives; exports.videoLutToCube = _chunkVKF3PWKRcjs.videoLutToCube; exports.videoOverlap = _chunkVKF3PWKRcjs.videoOverlap; exports.videoPeakDb = videoPeakDb; exports.videoPreviewSrc = videoPreviewSrc; exports.videoProjectDuration = _chunkVKF3PWKRcjs.videoProjectDuration; exports.videoProjectEffects = _chunkVKF3PWKRcjs.videoProjectEffects; exports.videoProjectHasProxies = videoProjectHasProxies; exports.videoProjectSvg = _chunkVKF3PWKRcjs.videoProjectSvg; exports.videoProxyFfmpeg = videoProxyFfmpeg; exports.videoProxyName = videoProxyName; exports.videoProxyPlan = videoProxyPlan; exports.videoRemoveRangesEdits = videoRemoveRangesEdits; exports.videoRulerTicks = videoRulerTicks; exports.videoScopeImage = videoScopeImage; exports.videoSequenceChildren = _chunkVKF3PWKRcjs.videoSequenceChildren; exports.videoSequenceDuration = _chunkVKF3PWKRcjs.videoSequenceDuration; exports.videoSequenceMap = _chunkVKF3PWKRcjs.videoSequenceMap; exports.videoShellQuote = _chunkVKF3PWKRcjs.videoShellQuote; exports.videoSlowMotionRamp = _chunkVKF3PWKRcjs.videoSlowMotionRamp; exports.videoSnapPoints = _chunkVKF3PWKRcjs.videoSnapPoints; exports.videoSourceFrame = videoSourceFrame; exports.videoSourceFrameTime = videoSourceFrameTime; exports.videoSpeedRampEdit = _chunkVKF3PWKRcjs.videoSpeedRampEdit; exports.videoSpeedRampKeys = _chunkVKF3PWKRcjs.videoSpeedRampKeys; exports.videoTextStyle = _chunkVKF3PWKRcjs.videoTextStyle; exports.videoTimeRef = videoTimeRef; exports.videoTimeRemapBreakpoints = _chunkVKF3PWKRcjs.videoTimeRemapBreakpoints; exports.videoTimeRemapSpan = _chunkVKF3PWKRcjs.videoTimeRemapSpan; exports.videoTimecodeFrames = _chunkVKF3PWKRcjs.videoTimecodeFrames; exports.videoTimelineTranscript = videoTimelineTranscript; exports.videoTitleFrame = _chunkVKF3PWKRcjs.videoTitleFrame; exports.videoTrackSyncLocked = _chunkVKF3PWKRcjs.videoTrackSyncLocked; exports.videoTranscriptEdit = videoTranscriptEdit; exports.videoTranscriptTrack = videoTranscriptTrack; exports.videoTransformAt = _chunkVKF3PWKRcjs.videoTransformAt; exports.videoTransitionAudioCurve = _chunkVKF3PWKRcjs.videoTransitionAudioCurve; exports.videoTransitionEase = _chunkVKF3PWKRcjs.videoTransitionEase; exports.videoTransitionHasDirection = videoTransitionHasDirection; exports.videoValueAt = _chunkVKF3PWKRcjs.videoValueAt; exports.videoVectorscope = videoVectorscope; exports.videoVectorscopeAngle = videoVectorscopeAngle; exports.videoVectorscopeImage = videoVectorscopeImage; exports.videoVectorscopePoint = videoVectorscopePoint; exports.videoWaveformImage = videoWaveformImage; exports.videoWaveformPath = videoWaveformPath; exports.videoWipeRect = _chunkVKF3PWKRcjs.videoWipeRect; exports.videoWordAt = videoWordAt; exports.videoWordsRange = videoWordsRange; exports.withVideoPlayback = withVideoPlayback;
|
|
@@ -3226,6 +3226,55 @@ function checkPreviewScale(scale) {
|
|
|
3226
3226
|
return scale === 1 ? "full" : scale;
|
|
3227
3227
|
}
|
|
3228
3228
|
|
|
3229
|
+
// src/video-editor/playback.ts
|
|
3230
|
+
function videoTimeRef(at) {
|
|
3231
|
+
return { kind: "time", id: [`t=${Math.round(at.time)}`, at.track ? `track=${at.track}` : "", at.clip ? `clip=${at.clip}` : ""].filter(Boolean).join(";") };
|
|
3232
|
+
}
|
|
3233
|
+
function parseVideoTimeRef(ref) {
|
|
3234
|
+
if (ref.kind !== "time") return null;
|
|
3235
|
+
const parts = Object.fromEntries(ref.id.split(";").map((p) => p.split("=")));
|
|
3236
|
+
const time = Number(parts.t);
|
|
3237
|
+
if (!Number.isFinite(time)) return null;
|
|
3238
|
+
return { time, ...parts.track ? { track: parts.track } : {}, ...parts.clip ? { clip: parts.clip } : {} };
|
|
3239
|
+
}
|
|
3240
|
+
var num2 = (v) => typeof v === "number" && Number.isFinite(v);
|
|
3241
|
+
var str2 = (v) => typeof v === "string" && v.length > 0;
|
|
3242
|
+
function clipsOf(args) {
|
|
3243
|
+
const out = [];
|
|
3244
|
+
const add = (v) => str2(v) && !out.includes(v) && out.push(v);
|
|
3245
|
+
add(args.clip);
|
|
3246
|
+
add(args.target);
|
|
3247
|
+
for (const key of ["clips", "ids"]) if (Array.isArray(args[key])) args[key].forEach(add);
|
|
3248
|
+
return out.slice(0, 6);
|
|
3249
|
+
}
|
|
3250
|
+
function planVideoToolPlayback(tool, args) {
|
|
3251
|
+
const clips = clipsOf(args);
|
|
3252
|
+
const track = str2(args.track) ? args.track : void 0;
|
|
3253
|
+
const newClip = args.clip && typeof args.clip === "object" ? args.clip : null;
|
|
3254
|
+
const time = [args.start, args.at, args.time, args.to, newClip?.start].find(num2);
|
|
3255
|
+
const click = (ref) => [{ type: "target", ref }, { type: "press" }, { type: "release" }];
|
|
3256
|
+
if (clips.length === 1 && (time !== void 0 || track) && tool !== "split_video_clip") {
|
|
3257
|
+
const clip = clips[0];
|
|
3258
|
+
const to = videoTimeRef({ time: time ?? 0, ...track ? { track } : { clip } });
|
|
3259
|
+
return [{ type: "target", ref: { kind: "clip", id: clip } }, { type: "press" }, { type: "target", ref: to }, { type: "release" }];
|
|
3260
|
+
}
|
|
3261
|
+
if (clips.length === 1 && time !== void 0) return click(videoTimeRef({ time, clip: clips[0] }));
|
|
3262
|
+
if (clips.length) return clips.flatMap((id) => click({ kind: "clip", id }));
|
|
3263
|
+
if (track) return click(time !== void 0 ? videoTimeRef({ time, track }) : { kind: "track", id: track });
|
|
3264
|
+
if (time !== void 0) return click(videoTimeRef({ time }));
|
|
3265
|
+
if (str2(args.marker)) return click({ kind: "marker", id: args.marker });
|
|
3266
|
+
return null;
|
|
3267
|
+
}
|
|
3268
|
+
function withVideoPlayback(provider, surface = "video") {
|
|
3269
|
+
const plan = (tool) => tool.plan || tool.playback !== void 0 ? tool : { ...tool, plan: (args) => planVideoToolPlayback(tool.name, args) };
|
|
3270
|
+
const tools = provider.tools;
|
|
3271
|
+
return {
|
|
3272
|
+
...provider,
|
|
3273
|
+
playbackSurface: provider.playbackSurface ?? surface,
|
|
3274
|
+
tools: typeof tools === "function" ? () => tools().map(plan) : tools.map(plan)
|
|
3275
|
+
};
|
|
3276
|
+
}
|
|
3277
|
+
|
|
3229
3278
|
// src/video-editor/ui.ts
|
|
3230
3279
|
var STEPS = [40, 100, 200, 500, 1e3, 2e3, 5e3, 1e4, 15e3, 3e4, 6e4, 12e4, 3e5, 6e5];
|
|
3231
3280
|
function videoRulerTicks(duration, pxPerSecond, fps) {
|
|
@@ -4618,7 +4667,7 @@ function createVideoEditorToolProvider(controller, options = {}) {
|
|
|
4618
4667
|
};
|
|
4619
4668
|
const reads = [getProject, listSequences, getFrame, getTranscript, findText, findFillers, findPauses, findGaps, checkProject, renderFrame, getScopes, previewCache, planProxies, exportFfmpeg, exportLoudnessMeasure, exportEdl, audioLevels, findSilences, seek, setPreviewScale];
|
|
4620
4669
|
const writes = [setSettings, addAsset, updateAsset, removeAsset, setProxies, addTrack, updateTrack, removeTrack, moveTrack, addClip, moveClip, trimClip, splitClip, deleteClips, updateClip, setTransition, setSpeedRamp, addFreeze, removeRamp, setTranscript, removeRanges, applyGradePreset, copyGrade, setLut, removeLut, setKeyframes, removeKeyframes, slipClip, rollEdit, slideClip, liftRange, extractRange, splitAt, closeGaps, addMarker, removeMarker, editVideo, undo, redo];
|
|
4621
|
-
return {
|
|
4670
|
+
return withVideoPlayback({
|
|
4622
4671
|
id: options.id ?? "video",
|
|
4623
4672
|
namespace: options.namespace,
|
|
4624
4673
|
title: "Video editor",
|
|
@@ -4635,7 +4684,7 @@ function createVideoEditorToolProvider(controller, options = {}) {
|
|
|
4635
4684
|
}
|
|
4636
4685
|
});
|
|
4637
4686
|
}
|
|
4638
|
-
};
|
|
4687
|
+
});
|
|
4639
4688
|
}
|
|
4640
4689
|
|
|
4641
4690
|
// src/video-editor/effect-tools.ts
|
|
@@ -4683,7 +4732,7 @@ function createVideoEffectsToolProvider(controller, options = {}) {
|
|
|
4683
4732
|
const effect = effects.find((e) => e.id === (instance ?? r.effect?.id)) ?? (r.effect ? { id: r.effect.id, effect: r.effect.effect, role: "clip effect", enabled: r.effect.enabled !== false, values: r.effect.values ?? {} } : effects[0]);
|
|
4684
4733
|
return { target, effect, effects, ...extra };
|
|
4685
4734
|
};
|
|
4686
|
-
return createEffectToolProvider({
|
|
4735
|
+
return withVideoPlayback(createEffectToolProvider({
|
|
4687
4736
|
id: options.id ?? "video-effects",
|
|
4688
4737
|
namespace: options.namespace,
|
|
4689
4738
|
title: "Video effects",
|
|
@@ -4810,7 +4859,7 @@ function createVideoEffectsToolProvider(controller, options = {}) {
|
|
|
4810
4859
|
}
|
|
4811
4860
|
}
|
|
4812
4861
|
]
|
|
4813
|
-
});
|
|
4862
|
+
}));
|
|
4814
4863
|
}
|
|
4815
4864
|
export {
|
|
4816
4865
|
VIDEO_BLEND_MODES,
|
|
@@ -4910,6 +4959,7 @@ export {
|
|
|
4910
4959
|
parseVideoPreviewScale,
|
|
4911
4960
|
parseVideoProject,
|
|
4912
4961
|
parseVideoSequence,
|
|
4962
|
+
parseVideoTimeRef,
|
|
4913
4963
|
parseVideoTimeRemap,
|
|
4914
4964
|
parseVideoTrack,
|
|
4915
4965
|
parseVideoTranscript,
|
|
@@ -4919,6 +4969,7 @@ export {
|
|
|
4919
4969
|
placeVideoRect,
|
|
4920
4970
|
planVideoClipDrag,
|
|
4921
4971
|
planVideoPrefetch,
|
|
4972
|
+
planVideoToolPlayback,
|
|
4922
4973
|
probeVideoMedia,
|
|
4923
4974
|
readVideoScopesPanel,
|
|
4924
4975
|
removeVideoKey,
|
|
@@ -5042,6 +5093,7 @@ export {
|
|
|
5042
5093
|
videoSpeedRampEdit,
|
|
5043
5094
|
videoSpeedRampKeys,
|
|
5044
5095
|
videoTextStyle,
|
|
5096
|
+
videoTimeRef,
|
|
5045
5097
|
videoTimeRemapBreakpoints,
|
|
5046
5098
|
videoTimeRemapSpan,
|
|
5047
5099
|
videoTimecodeFrames,
|
|
@@ -5063,5 +5115,6 @@ export {
|
|
|
5063
5115
|
videoWaveformPath,
|
|
5064
5116
|
videoWipeRect,
|
|
5065
5117
|
videoWordAt,
|
|
5066
|
-
videoWordsRange
|
|
5118
|
+
videoWordsRange,
|
|
5119
|
+
withVideoPlayback
|
|
5067
5120
|
};
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import type { AgentToolProvider } from '../tools/registry.cjs';
|
|
2
|
+
import type { PlaybackRef, PlaybackStep } from '../tools/playback.cjs';
|
|
3
|
+
/** A point on the timeline: `time` (ms), on `track` or on the row of `clip` (else the ruler). */
|
|
4
|
+
export interface VideoPlaybackTime {
|
|
5
|
+
time: number;
|
|
6
|
+
track?: string;
|
|
7
|
+
clip?: string;
|
|
8
|
+
}
|
|
9
|
+
/** A timeline point as a playback ref: `{ kind: 'time', id: 't=1200;track=v1' }`. */
|
|
10
|
+
export declare function videoTimeRef(at: VideoPlaybackTime): PlaybackRef;
|
|
11
|
+
/** Reads a `time` ref back (null for any other ref). */
|
|
12
|
+
export declare function parseVideoTimeRef(ref: PlaybackRef): VideoPlaybackTime | null;
|
|
13
|
+
/** The cursor steps for one video tool call (by bare name), or null to fall back to the ids it names. */
|
|
14
|
+
export declare function planVideoToolPlayback(tool: string, args: Record<string, any>): PlaybackStep[] | null;
|
|
15
|
+
/**
|
|
16
|
+
* Gives a video tool provider agent playback: each write tool plans its steps with
|
|
17
|
+
* `planVideoToolPlayback` and every call plays on `surface` (default `video`, where `VideoTimeline`
|
|
18
|
+
* attaches itself). `seek_video` (a read in name only) and `edit_video` (a batch) play too.
|
|
19
|
+
*/
|
|
20
|
+
export declare function withVideoPlayback(provider: AgentToolProvider, surface?: string): AgentToolProvider;
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import type { AgentToolProvider } from '../tools/registry.js';
|
|
2
|
+
import type { PlaybackRef, PlaybackStep } from '../tools/playback.js';
|
|
3
|
+
/** A point on the timeline: `time` (ms), on `track` or on the row of `clip` (else the ruler). */
|
|
4
|
+
export interface VideoPlaybackTime {
|
|
5
|
+
time: number;
|
|
6
|
+
track?: string;
|
|
7
|
+
clip?: string;
|
|
8
|
+
}
|
|
9
|
+
/** A timeline point as a playback ref: `{ kind: 'time', id: 't=1200;track=v1' }`. */
|
|
10
|
+
export declare function videoTimeRef(at: VideoPlaybackTime): PlaybackRef;
|
|
11
|
+
/** Reads a `time` ref back (null for any other ref). */
|
|
12
|
+
export declare function parseVideoTimeRef(ref: PlaybackRef): VideoPlaybackTime | null;
|
|
13
|
+
/** The cursor steps for one video tool call (by bare name), or null to fall back to the ids it names. */
|
|
14
|
+
export declare function planVideoToolPlayback(tool: string, args: Record<string, any>): PlaybackStep[] | null;
|
|
15
|
+
/**
|
|
16
|
+
* Gives a video tool provider agent playback: each write tool plans its steps with
|
|
17
|
+
* `planVideoToolPlayback` and every call plays on `surface` (default `video`, where `VideoTimeline`
|
|
18
|
+
* attaches itself). `seek_video` (a read in name only) and `edit_video` (a batch) play too.
|
|
19
|
+
*/
|
|
20
|
+
export declare function withVideoPlayback(provider: AgentToolProvider, surface?: string): AgentToolProvider;
|
package/package.json
CHANGED
|
@@ -147,6 +147,7 @@ refuse.
|
|
|
147
147
|
|
|
148
148
|
## Pitfalls
|
|
149
149
|
|
|
150
|
+
- With agent playback on, the cursor clicks the shot a call names in the timeline and visits the stage elements its commands target. Results are unchanged.
|
|
150
151
|
- **Effect commands are ordinary commands.** You can retime or edit them with `edit_animation` like
|
|
151
152
|
any command, but `update_effect` replaces all of an effect's commands. Change values through the
|
|
152
153
|
effect, and timing through the commands.
|
|
@@ -168,6 +168,7 @@ several charts may register them with another prefix.
|
|
|
168
168
|
|
|
169
169
|
## Pitfalls
|
|
170
170
|
|
|
171
|
+
- With agent playback on, value changes and selections are dragged by the chart's director, and other changes are clicked on the inspector option, data grid or toolbar they belong to. Results are unchanged.
|
|
171
172
|
- Series values are positional: one value per category, in category order. After
|
|
172
173
|
`add_chart_category` or `remove_chart_category`, every series shifts with it.
|
|
173
174
|
- `set_chart_data` with only `series` keeps the categories; with only `categories` it keeps
|
|
@@ -417,6 +417,7 @@ for the controls and presets.
|
|
|
417
417
|
|
|
418
418
|
## Pitfalls
|
|
419
419
|
|
|
420
|
+
- With agent playback on, strokes, fills and replays are painted live by the director, and other writes open their panel (Colour, Wet, Paper, Layers, Effects) and point at the control. Results are unchanged.
|
|
420
421
|
- **Stroke-by-stroke drawing is slow and expensive.** Do not draw a detailed picture point by
|
|
421
422
|
point. Block in with fills and big strokes, then replay and vary a few good strokes.
|
|
422
423
|
- **A hidden or locked layer refuses paint**: show it (`update_layer visible true`) or unlock it.
|
|
@@ -69,6 +69,7 @@ with `list_commands` (query "Parameters").
|
|
|
69
69
|
|
|
70
70
|
## Pitfalls
|
|
71
71
|
|
|
72
|
+
- With agent playback on, `parameters.set` visits each control it changes and types the value. Set related values in one call; results are unchanged.
|
|
72
73
|
- `parameters.set` takes a `values` object, not top-level ids: `{ "values": { "speed": 2 } }`.
|
|
73
74
|
- One out-of-range value fails the whole call (nothing changes). Read the message, fix that
|
|
74
75
|
value, and resend the full set.
|
|
@@ -126,6 +126,7 @@ nothing to do they fail with the reason.
|
|
|
126
126
|
|
|
127
127
|
## Pitfalls
|
|
128
128
|
|
|
129
|
+
- With agent playback on, `set_cell` is clicked and typed, `set_range` is dragged across the block it fills, and row and column edits mark their rows or columns. Results are unchanged; keep writing whole blocks with `set_range`.
|
|
129
130
|
- **Raw versus computed.** `values` holds results, `raw` holds what to edit. When copying or
|
|
130
131
|
moving a formula, copy from `raw`; `set_range` writes references as given (it does not
|
|
131
132
|
offset relative references the way paste or fill-down does), so write each row's formula
|
|
@@ -256,6 +256,7 @@ and every write tool is refused with the reason.
|
|
|
256
256
|
|
|
257
257
|
## Pitfalls
|
|
258
258
|
|
|
259
|
+
- With agent playback on, the cursor drags a moved or trimmed clip to its new time, clicks a track where a clip goes in, and clicks the ruler where a split, seek or marker lands. Give real `start` / `at` times in ms; results are unchanged.
|
|
259
260
|
- **Effects need rendered frames to export.** ffmpeg cannot draw provider effects, so
|
|
260
261
|
`export_video_ffmpeg` refuses a project with enabled effects unless the host renders the
|
|
261
262
|
picture frame by frame (`renderVideoFrameExact`) and passes `frames`. Tell the user, or turn
|
package/dist/chunk-PLKIYNJZ.js
DELETED
|
File without changes
|
package/dist/chunk-TNCWKC5M.cjs
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
"use strict";
|