@pixerate/editor 0.124.0 → 0.124.1

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.
Files changed (41) hide show
  1. package/dist/{chunk-IWSMDQE5.cjs → chunk-4QQZV5Y5.cjs} +18 -29
  2. package/dist/chunk-4QQZV5Y5.cjs.map +1 -0
  3. package/dist/{chunk-IOXKXQNW.cjs → chunk-CN4PJHUG.cjs} +59 -3
  4. package/dist/chunk-CN4PJHUG.cjs.map +1 -0
  5. package/dist/{chunk-TK53AB4Q.cjs → chunk-FHYDQOPC.cjs} +3 -3
  6. package/dist/{chunk-TK53AB4Q.cjs.map → chunk-FHYDQOPC.cjs.map} +1 -1
  7. package/dist/{chunk-VFAKN46Z.js → chunk-JRXJTPES.js} +2 -2
  8. package/dist/{chunk-YVVSTD3B.js → chunk-ORHMVUR6.js} +8 -19
  9. package/dist/chunk-ORHMVUR6.js.map +1 -0
  10. package/dist/{chunk-TGKT5QAB.js → chunk-QEG3GRN2.js} +58 -2
  11. package/dist/chunk-QEG3GRN2.js.map +1 -0
  12. package/dist/effects/index.cjs +51 -34
  13. package/dist/effects/index.cjs.map +1 -1
  14. package/dist/effects/index.d.cts +35 -3
  15. package/dist/effects/index.d.ts +35 -3
  16. package/dist/effects/index.js +20 -3
  17. package/dist/effects/index.js.map +1 -1
  18. package/dist/{export-8RnlngAv.d.ts → export-BGtXgMJ3.d.ts} +3 -1
  19. package/dist/{export-DM3h7QEI.d.ts → export-BdfY_lH0.d.ts} +4 -2
  20. package/dist/{export-BzSRXyH6.d.cts → export-CbpjwxaI.d.cts} +4 -2
  21. package/dist/{export-TqXMOlDt.d.cts → export-WmYoWmLM.d.cts} +3 -1
  22. package/dist/image-editor/index.cjs +110 -121
  23. package/dist/image-editor/index.cjs.map +1 -1
  24. package/dist/image-editor/index.d.cts +2 -2
  25. package/dist/image-editor/index.d.ts +2 -2
  26. package/dist/image-editor/index.js +7 -18
  27. package/dist/image-editor/index.js.map +1 -1
  28. package/dist/paint-editor/index.cjs +3 -3
  29. package/dist/paint-editor/index.d.cts +2 -2
  30. package/dist/paint-editor/index.d.ts +2 -2
  31. package/dist/paint-editor/index.js +2 -2
  32. package/dist/video-editor/index.cjs +270 -270
  33. package/dist/video-editor/index.d.cts +2 -2
  34. package/dist/video-editor/index.d.ts +2 -2
  35. package/dist/video-editor/index.js +3 -3
  36. package/package.json +1 -1
  37. package/dist/chunk-IOXKXQNW.cjs.map +0 -1
  38. package/dist/chunk-IWSMDQE5.cjs.map +0 -1
  39. package/dist/chunk-TGKT5QAB.js.map +0 -1
  40. package/dist/chunk-YVVSTD3B.js.map +0 -1
  41. /package/dist/{chunk-VFAKN46Z.js.map → chunk-JRXJTPES.js.map} +0 -0
@@ -4,7 +4,8 @@
4
4
 
5
5
 
6
6
 
7
- var _chunkIOXKXQNWcjs = require('./chunk-IOXKXQNW.cjs');
7
+
8
+ var _chunkCN4PJHUGcjs = require('./chunk-CN4PJHUG.cjs');
8
9
 
9
10
 
10
11
  var _chunkRIWPYSKUcjs = require('./chunk-RIWPYSKU.cjs');
@@ -1171,12 +1172,12 @@ function videoEffectLayerKey(layer, width, height) {
1171
1172
  }
1172
1173
  function mixEffectPixels(a, b, k) {
1173
1174
  if (k >= 1) return b;
1174
- const out = _chunkIOXKXQNWcjs.createEffectPixels.call(void 0, a.width, a.height);
1175
+ const out = _chunkCN4PJHUGcjs.createEffectPixels.call(void 0, a.width, a.height);
1175
1176
  for (let i = 0; i < out.data.length; i++) out.data[i] = a.data[i] + (b.data[i] - a.data[i]) * k;
1176
1177
  return out;
1177
1178
  }
1178
1179
  function overEffectPixels(base, top, opacity = 1) {
1179
- const out = _chunkIOXKXQNWcjs.createEffectPixels.call(void 0, base.width, base.height);
1180
+ const out = _chunkCN4PJHUGcjs.createEffectPixels.call(void 0, base.width, base.height);
1180
1181
  const o = out.data;
1181
1182
  const b = base.data;
1182
1183
  const t = top.data;
@@ -1213,17 +1214,18 @@ var VideoEffectsEngine = (_class2 = class {
1213
1214
  __init5() {this.cache = /* @__PURE__ */ new Map()}
1214
1215
  __init6() {this.pending = /* @__PURE__ */ new Map()}
1215
1216
  __init7() {this.failures = /* @__PURE__ */ new Map()}
1216
- __init8() {this.renderers = /* @__PURE__ */ new Map()}
1217
- __init9() {this.descriptions = /* @__PURE__ */ new Map()}
1218
- __init10() {this.listeners = /* @__PURE__ */ new Set()}
1217
+
1218
+ __init8() {this.descriptions = /* @__PURE__ */ new Map()}
1219
+ __init9() {this.listeners = /* @__PURE__ */ new Set()}
1219
1220
 
1220
1221
 
1221
- __init11() {this.generation = 0}
1222
+ __init10() {this.generation = 0}
1222
1223
 
1223
- constructor(options = {}) {;_class2.prototype.__init5.call(this);_class2.prototype.__init6.call(this);_class2.prototype.__init7.call(this);_class2.prototype.__init8.call(this);_class2.prototype.__init9.call(this);_class2.prototype.__init10.call(this);_class2.prototype.__init11.call(this);
1224
- this.slot = _nullishCoalesce(options.slot, () => ( new (0, _chunkIOXKXQNWcjs.EffectsSlot)()));
1224
+ constructor(options = {}) {;_class2.prototype.__init5.call(this);_class2.prototype.__init6.call(this);_class2.prototype.__init7.call(this);_class2.prototype.__init8.call(this);_class2.prototype.__init9.call(this);_class2.prototype.__init10.call(this);
1225
+ this.slot = _nullishCoalesce(options.slot, () => ( new (0, _chunkCN4PJHUGcjs.EffectsSlot)()));
1225
1226
  this.maxEntries = _nullishCoalesce(options.maxEntries, () => ( 120));
1226
1227
  this.toImage = _nullishCoalesce(options.toImage, () => ( defaultToImage));
1228
+ this.pool = new (0, _chunkCN4PJHUGcjs.EffectRendererPool)({ maxRenderers: options.maxRenderers });
1227
1229
  this.detach = this.slot.subscribe(() => {
1228
1230
  this.reset();
1229
1231
  this.notify();
@@ -1324,20 +1326,9 @@ var VideoEffectsEngine = (_class2 = class {
1324
1326
  }
1325
1327
  return d;
1326
1328
  }
1327
- /** Renders on a renderer kept per effect and size, one render at a time per renderer. */
1329
+ /** Renders through the pool: a few live renderers, one render at a time on each. */
1328
1330
  render(provider, id, width, height, request) {
1329
- const k = `${id}@${width}x${height}`;
1330
- let r = this.renderers.get(k);
1331
- if (!r) {
1332
- const renderer = Promise.resolve().then(() => provider.createRenderer(id, { width, height }));
1333
- renderer.catch(() => this.renderers.delete(k));
1334
- r = { renderer, queue: Promise.resolve() };
1335
- this.renderers.set(k, r);
1336
- }
1337
- const entry = r;
1338
- const next = entry.queue.then(() => entry.renderer).then((renderer) => renderer.render(request));
1339
- entry.queue = next.catch(() => void 0);
1340
- return next;
1331
+ return this.pool.render(provider, id, { width, height }, request);
1341
1332
  }
1342
1333
  /** Forgets every picture and failure and disposes the renderers (e.g. after the provider changes). */
1343
1334
  reset() {
@@ -1346,9 +1337,7 @@ var VideoEffectsEngine = (_class2 = class {
1346
1337
  this.pending.clear();
1347
1338
  this.failures.clear();
1348
1339
  this.descriptions.clear();
1349
- for (const r of this.renderers.values()) r.renderer.then((x) => x.dispose(), () => {
1350
- });
1351
- this.renderers.clear();
1340
+ this.pool.clear();
1352
1341
  }
1353
1342
  subscribe(listener) {
1354
1343
  this.listeners.add(listener);
@@ -1375,7 +1364,7 @@ function checkVideoEffectPlace(d, place) {
1375
1364
  if (d.kind === "motion" || !d.uses.some((u) => allowed.includes(u))) {
1376
1365
  const where = place === "clip" ? "on a clip" : place === "transition" ? "as a transition" : "as an effect clip";
1377
1366
  const instead = d.uses.includes("transition") ? "set_video_effect_transition" : d.uses.some((u) => VIDEO_EFFECT_PLACES.generator.includes(u)) ? "add_video_effect_clip" : d.uses.some((u) => u === "filter") ? "apply_effect" : null;
1378
- throw new (0, _chunkIOXKXQNWcjs.EffectUnsupportedError)(
1367
+ throw new (0, _chunkCN4PJHUGcjs.EffectUnsupportedError)(
1379
1368
  `"${d.id}" (${d.name}) is a ${d.uses.join(" / ")} effect and cannot be used ${where}, which takes ${allowed.join(" or ")} effects${instead ? `; use ${instead} instead` : ""}. search_effects with use "${allowed[0]}" lists ones that fit.`,
1380
1369
  d.id
1381
1370
  );
@@ -1396,12 +1385,12 @@ function checkVideoEffectValues(d, values, options = {}) {
1396
1385
  else if (type !== "number" && type !== "integer") errors.push({ path: `/${k}`, message: "only number controls can be keyframed." });
1397
1386
  else for (const [i, key] of v.keys.entries()) for (const e of _chunkRIWPYSKUcjs.validateJsonSchema.call(void 0, key.v, schema)) errors.push({ path: `/${k}/keys/${i}/v`, message: e.message });
1398
1387
  }
1399
- for (const e of _chunkIOXKXQNWcjs.effectValueErrors.call(void 0, d, plain)) {
1388
+ for (const e of _chunkCN4PJHUGcjs.effectValueErrors.call(void 0, d, plain)) {
1400
1389
  const name = e.path.split("/")[1];
1401
1390
  const about = name && _optionalChain([d, 'access', _46 => _46.controls, 'access', _47 => _47.properties, 'access', _48 => _48[name], 'optionalAccess', _49 => _49.description]);
1402
1391
  errors.push(about ? { path: e.path, message: `${e.message} (${about})` } : e);
1403
1392
  }
1404
- if (errors.length) throw new (0, _chunkIOXKXQNWcjs.EffectControlError)(d.id, errors);
1393
+ if (errors.length) throw new (0, _chunkCN4PJHUGcjs.EffectControlError)(d.id, errors);
1405
1394
  return { ..._nullishCoalesce(options.base, () => ( d.defaults)), ..._nullishCoalesce(values, () => ( {})) };
1406
1395
  }
1407
1396
 
@@ -2389,4 +2378,4 @@ function buildFfmpeg(project, options, measure) {
2389
2378
 
2390
2379
 
2391
2380
  exports.VIDEO_FITS = VIDEO_FITS; exports.VIDEO_TRANSITION_TYPES = VIDEO_TRANSITION_TYPES; exports.VIDEO_WIPE_DIRECTIONS = VIDEO_WIPE_DIRECTIONS; exports.videoTransitionAudioCurve = videoTransitionAudioCurve; exports.VIDEO_BLEND_MODES = VIDEO_BLEND_MODES; exports.VIDEO_CLIP_ANIMATION_EFFECTS = VIDEO_CLIP_ANIMATION_EFFECTS; exports.VIDEO_FADE_CURVES = VIDEO_FADE_CURVES; exports.VIDEO_PLACEMENT_MODES = VIDEO_PLACEMENT_MODES; exports.VIDEO_CLIP_TYPES = VIDEO_CLIP_TYPES; exports.VIDEO_EASE_NAMES = VIDEO_EASE_NAMES; exports.VIDEO_KEYFRAME_PROPERTIES = VIDEO_KEYFRAME_PROPERTIES; exports.VIDEO_TRANSFORM_PROPERTIES = VIDEO_TRANSFORM_PROPERTIES; exports.VIDEO_KEYFRAME_LIMITS = VIDEO_KEYFRAME_LIMITS; exports.isVideoKeyframes = isVideoKeyframes; exports.videoEaseBezier = videoEaseBezier; exports.videoEaseProgress = videoEaseProgress; exports.videoValueAt = videoValueAt; exports.videoKeysOf = videoKeysOf; exports.retimeVideoAnimatable = retimeVideoAnimatable; exports.splitVideoAnimatable = splitVideoAnimatable; exports.sortVideoKeys = sortVideoKeys; exports.setVideoKey = setVideoKey; exports.removeVideoKey = removeVideoKey; exports.videoKeyframeBreakpoints = videoKeyframeBreakpoints; exports.videoKeyframeFfmpegExpr = videoKeyframeFfmpegExpr; exports.VIDEO_LUT_MAX_SIZE = VIDEO_LUT_MAX_SIZE; exports.parseVideoCubeLut = parseVideoCubeLut; exports.videoLutFromFunction = videoLutFromFunction; exports.videoLutToCube = videoLutToCube; exports.applyVideoLut = applyVideoLut; exports.applyVideoLutToPixels = applyVideoLutToPixels; exports.videoLutSvgApproximation = videoLutSvgApproximation; exports.VideoLutCache = VideoLutCache; exports.VIDEO_GRADE_CONTROLS = VIDEO_GRADE_CONTROLS; exports.VIDEO_GRADE_PRESETS = VIDEO_GRADE_PRESETS; exports.VIDEO_GRADE_PRESET_NAMES = VIDEO_GRADE_PRESET_NAMES; exports.normalizeVideoGradeLut = normalizeVideoGradeLut; exports.normalizeVideoGrade = normalizeVideoGrade; exports.videoGradePreset = videoGradePreset; exports.videoGradeLook = videoGradeLook; exports.videoGradeSteps = videoGradeSteps; exports.videoGradeStepMatrix = videoGradeStepMatrix; exports.applyVideoGrade = applyVideoGrade; exports.videoGradeStepSvgValues = videoGradeStepSvgValues; exports.videoLutSvgPrimitives = videoLutSvgPrimitives; exports.videoGradeSvgFilter = videoGradeSvgFilter; exports.videoGradeGainsFilterId = videoGradeGainsFilterId; exports.videoGradeCssFilter = videoGradeCssFilter; exports.videoGradeSvgDefs = videoGradeSvgDefs; exports.videoGradeFfmpegFilters = videoGradeFfmpegFilters; exports.videoClipSourceTime = videoClipSourceTime; exports.videoClipSpeedAt = videoClipSpeedAt; exports.videoSpeedRampKeys = videoSpeedRampKeys; exports.checkVideoTimeRemap = checkVideoTimeRemap; exports.videoTimeRemapSpan = videoTimeRemapSpan; exports.videoTimeRemapBreakpoints = videoTimeRemapBreakpoints; exports.videoSpeedRampEdit = videoSpeedRampEdit; exports.videoFreezeFrameEdit = videoFreezeFrameEdit; exports.videoSlowMotionRamp = videoSlowMotionRamp; exports.VIDEO_TIME_EPSILON = VIDEO_TIME_EPSILON; exports.videoClipEnd = videoClipEnd; exports.videoTrackSyncLocked = videoTrackSyncLocked; exports.videoClipSpeed = videoClipSpeed; exports.videoClipSourceRange = videoClipSourceRange; exports.videoFrameDuration = videoFrameDuration; exports.snapToVideoFrame = snapToVideoFrame; exports.videoFrames = videoFrames; exports.isVideoDropFrameRate = isVideoDropFrameRate; exports.videoTimecodeFrames = videoTimecodeFrames; exports.formatVideoTimecode = formatVideoTimecode; exports.formatVideoTimecodeFrames = formatVideoTimecodeFrames; exports.videoHourFrames = videoHourFrames; exports.formatVideoSeconds = formatVideoSeconds; exports.videoAssetHasSound = videoAssetHasSound; exports.videoAssetMap = videoAssetMap; exports.videoSequenceMap = videoSequenceMap; exports.videoSequenceDuration = videoSequenceDuration; exports.videoSequenceChildren = videoSequenceChildren; exports.findVideoSequenceCycle = findVideoSequenceCycle; exports.allVideoTracks = allVideoTracks; exports.sortedVideoClips = sortedVideoClips; exports.findVideoClip = findVideoClip; exports.allVideoClipIds = allVideoClipIds; exports.findVideoSequenceClip = findVideoSequenceClip; exports.videoProjectDuration = videoProjectDuration; exports.videoClipBefore = videoClipBefore; exports.videoClipAfter = videoClipAfter; exports.videoClipHandles = videoClipHandles; exports.videoClipOverhang = videoClipOverhang; exports.videoSnapPoints = videoSnapPoints; exports.snapVideoTime = snapVideoTime; exports.findVideoGaps = findVideoGaps; exports.videoOverlap = videoOverlap; exports.nextFreeVideoSlot = nextFreeVideoSlot; exports.videoClipsAt = videoClipsAt; exports.VIDEO_CLIP_ANIMATION_DURATION = VIDEO_CLIP_ANIMATION_DURATION; exports.videoClipAnimationProperties = videoClipAnimationProperties; exports.videoClipAnimationSpans = videoClipAnimationSpans; exports.videoClipAnimated = videoClipAnimated; exports.videoEffectValuesAt = videoEffectValuesAt; exports.videoTransformAt = videoTransformAt; exports.placeVideoRect = placeVideoRect; exports.videoTextStyle = videoTextStyle; exports.videoTitleFrame = videoTitleFrame; exports.videoTransitionEase = videoTransitionEase; exports.videoFadeCurveGain = videoFadeCurveGain; exports.videoClipSoundGain = videoClipSoundGain; exports.videoFrameAt = videoFrameAt; exports.videoLayersWithoutTransitionEffects = videoLayersWithoutTransitionEffects; exports.videoFrameLeafLayers = videoFrameLeafLayers; exports.videoProjectEffects = videoProjectEffects; exports.videoClipEffectUses = videoClipEffectUses; exports.videoLayersUseEffects = videoLayersUseEffects; exports.videoEffectFrameTime = videoEffectFrameTime; exports.videoEffectLayerKey = videoEffectLayerKey; exports.mixEffectPixels = mixEffectPixels; exports.overEffectPixels = overEffectPixels; exports.VideoEffectsEngine = VideoEffectsEngine; exports.VIDEO_EFFECT_PLACES = VIDEO_EFFECT_PLACES; exports.checkVideoEffectPlace = checkVideoEffectPlace; exports.checkVideoEffectValues = checkVideoEffectValues; exports.videoIrisRadius = videoIrisRadius; exports.videoWipeRect = videoWipeRect; exports.videoFrameToSvg = videoFrameToSvg; exports.videoProjectSvg = videoProjectSvg; exports.videoContactSheetSvg = videoContactSheetSvg; exports.drawVideoFrame = drawVideoFrame; exports.renderVideoFrameExact = renderVideoFrameExact; exports.toVideoEdl = toVideoEdl; exports.videoFfmpegUnsupportedEffects = videoFfmpegUnsupportedEffects; exports.parseVideoLoudnessMeasurement = parseVideoLoudnessMeasurement; exports.ffmpegFilterValue = ffmpegFilterValue; exports.videoShellQuote = videoShellQuote; exports.toVideoFfmpeg = toVideoFfmpeg; exports.toVideoLoudnessMeasure = toVideoLoudnessMeasure;
2392
- //# sourceMappingURL=chunk-IWSMDQE5.cjs.map
2381
+ //# sourceMappingURL=chunk-4QQZV5Y5.cjs.map