@remotion/web-renderer 4.0.486 → 4.0.488
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/compose.d.ts +2 -1
- package/dist/drawing/process-node.d.ts +2 -1
- package/dist/drawing/text/handle-text-node.d.ts +2 -1
- package/dist/esm/index.mjs +153 -28
- package/dist/index.d.ts +1 -0
- package/dist/page-responsiveness.d.ts +9 -0
- package/dist/render-media-on-web.d.ts +2 -0
- package/dist/take-screenshot.d.ts +2 -1
- package/dist/walk-over-node.d.ts +2 -1
- package/package.json +14 -14
package/dist/compose.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
export declare const compose: ({ element, context, logLevel, parentRect, internalState, onlyBackgroundClipText, scale, }: {
|
|
1
|
+
export declare const compose: ({ element, context, logLevel, parentRect, internalState, onlyBackgroundClipText, scale, waitForPageResponsiveness, }: {
|
|
2
2
|
element: HTMLElement | SVGElement;
|
|
3
3
|
context: OffscreenCanvasRenderingContext2D;
|
|
4
4
|
logLevel: "error" | "info" | "trace" | "verbose" | "warn";
|
|
@@ -23,4 +23,5 @@ export declare const compose: ({ element, context, logLevel, parentRect, interna
|
|
|
23
23
|
};
|
|
24
24
|
onlyBackgroundClipText: boolean;
|
|
25
25
|
scale: number;
|
|
26
|
+
waitForPageResponsiveness: (() => Promise<void>) | null;
|
|
26
27
|
}) => Promise<void>;
|
|
@@ -5,7 +5,7 @@ export type ProcessNodeReturnValue = {
|
|
|
5
5
|
} | {
|
|
6
6
|
type: 'skip-children';
|
|
7
7
|
};
|
|
8
|
-
export declare const processNode: ({ element, context, draw, logLevel, parentRect, internalState, rootElement, scale, }: {
|
|
8
|
+
export declare const processNode: ({ element, context, draw, logLevel, parentRect, internalState, rootElement, scale, waitForPageResponsiveness, }: {
|
|
9
9
|
element: HTMLElement | SVGElement;
|
|
10
10
|
context: OffscreenCanvasRenderingContext2D;
|
|
11
11
|
draw: DrawFn;
|
|
@@ -31,4 +31,5 @@ export declare const processNode: ({ element, context, draw, logLevel, parentRec
|
|
|
31
31
|
};
|
|
32
32
|
rootElement: HTMLElement | SVGElement;
|
|
33
33
|
scale: number;
|
|
34
|
+
waitForPageResponsiveness: (() => Promise<void>) | null;
|
|
34
35
|
}) => Promise<ProcessNodeReturnValue>;
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import type { ProcessNodeReturnValue } from '../process-node';
|
|
2
|
-
export declare const handleTextNode: ({ node, context, logLevel, parentRect, internalState, rootElement, onlyBackgroundClipText, scale, }: {
|
|
2
|
+
export declare const handleTextNode: ({ node, context, logLevel, parentRect, internalState, rootElement, onlyBackgroundClipText, scale, waitForPageResponsiveness, }: {
|
|
3
3
|
node: Text;
|
|
4
4
|
context: OffscreenCanvasRenderingContext2D;
|
|
5
5
|
logLevel: "error" | "info" | "trace" | "verbose" | "warn";
|
|
@@ -25,4 +25,5 @@ export declare const handleTextNode: ({ node, context, logLevel, parentRect, int
|
|
|
25
25
|
rootElement: HTMLElement | SVGElement;
|
|
26
26
|
onlyBackgroundClipText: boolean;
|
|
27
27
|
scale: number;
|
|
28
|
+
waitForPageResponsiveness: (() => Promise<void>) | null;
|
|
28
29
|
}) => Promise<ProcessNodeReturnValue>;
|
package/dist/esm/index.mjs
CHANGED
|
@@ -1248,6 +1248,53 @@ var makeVideoSampleSourceCleanup = (encodingConfig) => {
|
|
|
1248
1248
|
};
|
|
1249
1249
|
};
|
|
1250
1250
|
|
|
1251
|
+
// src/page-responsiveness.ts
|
|
1252
|
+
var PRESET_INTERVALS = {
|
|
1253
|
+
low: 100,
|
|
1254
|
+
medium: 33,
|
|
1255
|
+
high: 16
|
|
1256
|
+
};
|
|
1257
|
+
var resolvePageResponsivenessInterval = (pageResponsiveness) => {
|
|
1258
|
+
if (pageResponsiveness === "disabled") {
|
|
1259
|
+
return null;
|
|
1260
|
+
}
|
|
1261
|
+
if (pageResponsiveness === "low" || pageResponsiveness === "medium" || pageResponsiveness === "high") {
|
|
1262
|
+
return PRESET_INTERVALS[pageResponsiveness];
|
|
1263
|
+
}
|
|
1264
|
+
if (typeof pageResponsiveness === "number") {
|
|
1265
|
+
if (Number.isNaN(pageResponsiveness)) {
|
|
1266
|
+
throw new Error("`pageResponsiveness` should not be NaN, but is NaN");
|
|
1267
|
+
}
|
|
1268
|
+
if (!Number.isFinite(pageResponsiveness)) {
|
|
1269
|
+
throw new Error(`"pageResponsiveness" must be finite, but is ${pageResponsiveness}`);
|
|
1270
|
+
}
|
|
1271
|
+
if (pageResponsiveness <= 0) {
|
|
1272
|
+
throw new Error(`"pageResponsiveness" must be greater than 0, but is ${pageResponsiveness}`);
|
|
1273
|
+
}
|
|
1274
|
+
return pageResponsiveness;
|
|
1275
|
+
}
|
|
1276
|
+
throw new Error(`"pageResponsiveness" must be one of "disabled", "low", "medium", "high", or a number, but got ${JSON.stringify(pageResponsiveness)}`);
|
|
1277
|
+
};
|
|
1278
|
+
var createPageResponsivenessController = ({
|
|
1279
|
+
intervalInMilliseconds,
|
|
1280
|
+
now,
|
|
1281
|
+
wait
|
|
1282
|
+
}) => {
|
|
1283
|
+
let lastYieldAt = now();
|
|
1284
|
+
return {
|
|
1285
|
+
waitIfNeeded: async () => {
|
|
1286
|
+
if (intervalInMilliseconds === null) {
|
|
1287
|
+
return;
|
|
1288
|
+
}
|
|
1289
|
+
if (now() - lastYieldAt < intervalInMilliseconds) {
|
|
1290
|
+
return;
|
|
1291
|
+
}
|
|
1292
|
+
await wait();
|
|
1293
|
+
lastYieldAt = now();
|
|
1294
|
+
}
|
|
1295
|
+
};
|
|
1296
|
+
};
|
|
1297
|
+
|
|
1251
1298
|
// src/render-operations-queue.ts
|
|
1252
1299
|
var onlyOneRenderAtATimeQueue = {
|
|
1253
1300
|
ref: Promise.resolve()
|
|
@@ -2045,6 +2092,38 @@ var filterRequiresPrecompositing = (filter) => {
|
|
|
2045
2092
|
}
|
|
2046
2093
|
return null;
|
|
2047
2094
|
};
|
|
2095
|
+
var isReplacedElement = (element) => {
|
|
2096
|
+
return element instanceof HTMLImageElement || element instanceof HTMLVideoElement || element instanceof HTMLCanvasElement || element instanceof HTMLIFrameElement || element instanceof HTMLInputElement || element instanceof HTMLTextAreaElement || element instanceof HTMLSelectElement || element instanceof HTMLObjectElement || element instanceof HTMLEmbedElement;
|
|
2097
|
+
};
|
|
2098
|
+
var canApplyCssTransforms = ({
|
|
2099
|
+
element,
|
|
2100
|
+
computedStyle
|
|
2101
|
+
}) => {
|
|
2102
|
+
if (element instanceof SVGElement) {
|
|
2103
|
+
return true;
|
|
2104
|
+
}
|
|
2105
|
+
if (computedStyle.display !== "inline") {
|
|
2106
|
+
return true;
|
|
2107
|
+
}
|
|
2108
|
+
return isReplacedElement(element);
|
|
2109
|
+
};
|
|
2110
|
+
var makeTransformResetter = (element) => {
|
|
2111
|
+
const { transform, scale, rotate } = element.style;
|
|
2112
|
+
return (hasApplicableTransformCssValue) => {
|
|
2113
|
+
if (hasApplicableTransformCssValue) {
|
|
2114
|
+
element.style.transform = "none";
|
|
2115
|
+
element.style.scale = "none";
|
|
2116
|
+
element.style.rotate = "none";
|
|
2117
|
+
}
|
|
2118
|
+
return () => {
|
|
2119
|
+
if (hasApplicableTransformCssValue) {
|
|
2120
|
+
element.style.transform = transform;
|
|
2121
|
+
element.style.scale = scale;
|
|
2122
|
+
element.style.rotate = rotate;
|
|
2123
|
+
}
|
|
2124
|
+
};
|
|
2125
|
+
};
|
|
2126
|
+
};
|
|
2048
2127
|
var getInternalTransformOrigin = (transform) => {
|
|
2049
2128
|
const centerX = transform.boundingClientRect.width / 2;
|
|
2050
2129
|
const centerY = transform.boundingClientRect.height / 2;
|
|
@@ -2099,21 +2178,21 @@ var calculateTransforms = ({
|
|
|
2099
2178
|
}
|
|
2100
2179
|
});
|
|
2101
2180
|
}
|
|
2102
|
-
|
|
2103
|
-
|
|
2181
|
+
const hasApplicableTransformCssValue = canApplyCssTransforms({ computedStyle, element: parent }) && hasAnyTransformCssValue(computedStyle);
|
|
2182
|
+
if (hasApplicableTransformCssValue || parent === element) {
|
|
2183
|
+
const toParse = hasApplicableTransformCssValue && hasTransformCssValue(computedStyle) ? computedStyle.transform : undefined;
|
|
2104
2184
|
const matrix = new DOMMatrix(toParse);
|
|
2105
|
-
const
|
|
2185
|
+
const resetTransforms = makeTransformResetter(parent);
|
|
2186
|
+
const { scale, rotate } = parent.style;
|
|
2106
2187
|
const additionalMatrices = [];
|
|
2107
|
-
if (rotate !== "" && rotate !== "none") {
|
|
2188
|
+
if (hasApplicableTransformCssValue && rotate !== "" && rotate !== "none") {
|
|
2108
2189
|
additionalMatrices.push(new DOMMatrix(`rotate(${rotate})`));
|
|
2109
2190
|
}
|
|
2110
|
-
if (scale !== "" && scale !== "none") {
|
|
2191
|
+
if (hasApplicableTransformCssValue && scale !== "" && scale !== "none") {
|
|
2111
2192
|
additionalMatrices.push(new DOMMatrix(`scale(${scale})`));
|
|
2112
2193
|
}
|
|
2113
2194
|
additionalMatrices.push(matrix);
|
|
2114
|
-
|
|
2115
|
-
parent.style.scale = "none";
|
|
2116
|
-
parent.style.rotate = "none";
|
|
2195
|
+
const cleanup = resetTransforms(hasApplicableTransformCssValue);
|
|
2117
2196
|
transforms.push({
|
|
2118
2197
|
element: parent,
|
|
2119
2198
|
transformOrigin: computedStyle.transformOrigin,
|
|
@@ -2122,9 +2201,7 @@ var calculateTransforms = ({
|
|
|
2122
2201
|
});
|
|
2123
2202
|
const parentRef = parent;
|
|
2124
2203
|
toReset.push(() => {
|
|
2125
|
-
|
|
2126
|
-
parentRef.style.scale = scale;
|
|
2127
|
-
parentRef.style.rotate = rotate;
|
|
2204
|
+
cleanup();
|
|
2128
2205
|
parentRef.style.transition = originalTransition;
|
|
2129
2206
|
});
|
|
2130
2207
|
} else {
|
|
@@ -2727,7 +2804,8 @@ var drawBackground = async ({
|
|
|
2727
2804
|
logLevel,
|
|
2728
2805
|
internalState,
|
|
2729
2806
|
scale,
|
|
2730
|
-
onlyBackgroundClipText: true
|
|
2807
|
+
onlyBackgroundClipText: true,
|
|
2808
|
+
waitForPageResponsiveness: null
|
|
2731
2809
|
});
|
|
2732
2810
|
onlyBackgroundClipText.setTransform(new DOMMatrix().scale(scale, scale));
|
|
2733
2811
|
element.style.backgroundClip = originalBackgroundClip;
|
|
@@ -3921,7 +3999,8 @@ var processNode = async ({
|
|
|
3921
3999
|
parentRect,
|
|
3922
4000
|
internalState,
|
|
3923
4001
|
rootElement,
|
|
3924
|
-
scale
|
|
4002
|
+
scale,
|
|
4003
|
+
waitForPageResponsiveness
|
|
3925
4004
|
}) => {
|
|
3926
4005
|
let __stack = [];
|
|
3927
4006
|
try {
|
|
@@ -3985,8 +4064,12 @@ var processNode = async ({
|
|
|
3985
4064
|
logLevel,
|
|
3986
4065
|
internalState,
|
|
3987
4066
|
scale,
|
|
3988
|
-
onlyBackgroundClipText: false
|
|
4067
|
+
onlyBackgroundClipText: false,
|
|
4068
|
+
waitForPageResponsiveness
|
|
3989
4069
|
});
|
|
4070
|
+
if (waitForPageResponsiveness !== null) {
|
|
4071
|
+
await waitForPageResponsiveness();
|
|
4072
|
+
}
|
|
3990
4073
|
let drawable = tempContext.canvas;
|
|
3991
4074
|
const rectAfterTransforms = roundToExpandRect(scaleRect({
|
|
3992
4075
|
scale,
|
|
@@ -4003,6 +4086,9 @@ var processNode = async ({
|
|
|
4003
4086
|
tempContext,
|
|
4004
4087
|
scale
|
|
4005
4088
|
});
|
|
4089
|
+
if (waitForPageResponsiveness !== null) {
|
|
4090
|
+
await waitForPageResponsiveness();
|
|
4091
|
+
}
|
|
4006
4092
|
}
|
|
4007
4093
|
if (precompositing.needs3DTransformViaWebGL) {
|
|
4008
4094
|
const t = handle3dTransform({
|
|
@@ -4016,6 +4102,9 @@ var processNode = async ({
|
|
|
4016
4102
|
if (t) {
|
|
4017
4103
|
drawable = t;
|
|
4018
4104
|
}
|
|
4105
|
+
if (waitForPageResponsiveness !== null) {
|
|
4106
|
+
await waitForPageResponsiveness();
|
|
4107
|
+
}
|
|
4019
4108
|
}
|
|
4020
4109
|
const previousTransform = context.getTransform();
|
|
4021
4110
|
context.setTransform(new DOMMatrix);
|
|
@@ -4032,6 +4121,9 @@ var processNode = async ({
|
|
|
4032
4121
|
drawPrecomposedCanvas();
|
|
4033
4122
|
}
|
|
4034
4123
|
context.setTransform(previousTransform);
|
|
4124
|
+
if (waitForPageResponsiveness !== null) {
|
|
4125
|
+
await waitForPageResponsiveness();
|
|
4126
|
+
}
|
|
4035
4127
|
Internals6.Log.trace({
|
|
4036
4128
|
logLevel,
|
|
4037
4129
|
tag: "@remotion/web-renderer"
|
|
@@ -4459,7 +4551,8 @@ var handleTextNode = async ({
|
|
|
4459
4551
|
internalState,
|
|
4460
4552
|
rootElement,
|
|
4461
4553
|
onlyBackgroundClipText,
|
|
4462
|
-
scale
|
|
4554
|
+
scale,
|
|
4555
|
+
waitForPageResponsiveness
|
|
4463
4556
|
}) => {
|
|
4464
4557
|
const span = document.createElement("span");
|
|
4465
4558
|
const parent = node.parentNode;
|
|
@@ -4476,7 +4569,8 @@ var handleTextNode = async ({
|
|
|
4476
4569
|
parentRect,
|
|
4477
4570
|
internalState,
|
|
4478
4571
|
rootElement,
|
|
4479
|
-
scale
|
|
4572
|
+
scale,
|
|
4573
|
+
waitForPageResponsiveness
|
|
4480
4574
|
});
|
|
4481
4575
|
parent.insertBefore(node, span);
|
|
4482
4576
|
parent.removeChild(span);
|
|
@@ -4492,7 +4586,8 @@ var walkOverNode = ({
|
|
|
4492
4586
|
internalState,
|
|
4493
4587
|
rootElement,
|
|
4494
4588
|
onlyBackgroundClipText,
|
|
4495
|
-
scale
|
|
4589
|
+
scale,
|
|
4590
|
+
waitForPageResponsiveness
|
|
4496
4591
|
}) => {
|
|
4497
4592
|
if (node instanceof HTMLElement || node instanceof SVGElement) {
|
|
4498
4593
|
return processNode({
|
|
@@ -4503,7 +4598,8 @@ var walkOverNode = ({
|
|
|
4503
4598
|
parentRect,
|
|
4504
4599
|
internalState,
|
|
4505
4600
|
rootElement,
|
|
4506
|
-
scale
|
|
4601
|
+
scale,
|
|
4602
|
+
waitForPageResponsiveness
|
|
4507
4603
|
});
|
|
4508
4604
|
}
|
|
4509
4605
|
if (node instanceof Text) {
|
|
@@ -4515,7 +4611,8 @@ var walkOverNode = ({
|
|
|
4515
4611
|
internalState,
|
|
4516
4612
|
rootElement,
|
|
4517
4613
|
onlyBackgroundClipText,
|
|
4518
|
-
scale
|
|
4614
|
+
scale,
|
|
4615
|
+
waitForPageResponsiveness
|
|
4519
4616
|
});
|
|
4520
4617
|
}
|
|
4521
4618
|
throw new Error("Unknown node type");
|
|
@@ -4542,7 +4639,8 @@ var compose = async ({
|
|
|
4542
4639
|
parentRect,
|
|
4543
4640
|
internalState,
|
|
4544
4641
|
onlyBackgroundClipText,
|
|
4545
|
-
scale
|
|
4642
|
+
scale,
|
|
4643
|
+
waitForPageResponsiveness
|
|
4546
4644
|
}) => {
|
|
4547
4645
|
let __stack = [];
|
|
4548
4646
|
try {
|
|
@@ -4565,7 +4663,8 @@ var compose = async ({
|
|
|
4565
4663
|
internalState,
|
|
4566
4664
|
rootElement: element,
|
|
4567
4665
|
onlyBackgroundClipText,
|
|
4568
|
-
scale
|
|
4666
|
+
scale,
|
|
4667
|
+
waitForPageResponsiveness
|
|
4569
4668
|
});
|
|
4570
4669
|
if (val.type === "skip-children") {
|
|
4571
4670
|
if (!skipToNextNonDescendant(treeWalker)) {
|
|
@@ -4579,6 +4678,9 @@ var compose = async ({
|
|
|
4579
4678
|
break;
|
|
4580
4679
|
}
|
|
4581
4680
|
}
|
|
4681
|
+
if (waitForPageResponsiveness !== null) {
|
|
4682
|
+
await waitForPageResponsiveness();
|
|
4683
|
+
}
|
|
4582
4684
|
}
|
|
4583
4685
|
} catch (_catch) {
|
|
4584
4686
|
var _err = _catch, _hasErr = 1;
|
|
@@ -4596,7 +4698,8 @@ var createLayer = async ({
|
|
|
4596
4698
|
onlyBackgroundClipText,
|
|
4597
4699
|
cutout,
|
|
4598
4700
|
htmlInCanvasContext,
|
|
4599
|
-
onHtmlInCanvasLayerOutcome
|
|
4701
|
+
onHtmlInCanvasLayerOutcome,
|
|
4702
|
+
waitForPageResponsiveness
|
|
4600
4703
|
}) => {
|
|
4601
4704
|
const scaledWidth = Math.ceil(cutout.width * scale);
|
|
4602
4705
|
const scaledHeight = Math.ceil(cutout.height * scale);
|
|
@@ -4632,7 +4735,8 @@ var createLayer = async ({
|
|
|
4632
4735
|
parentRect: cutout,
|
|
4633
4736
|
internalState,
|
|
4634
4737
|
onlyBackgroundClipText,
|
|
4635
|
-
scale
|
|
4738
|
+
scale,
|
|
4739
|
+
waitForPageResponsiveness
|
|
4636
4740
|
});
|
|
4637
4741
|
return context;
|
|
4638
4742
|
};
|
|
@@ -4860,6 +4964,7 @@ var internalRenderMediaOnWeb = async ({
|
|
|
4860
4964
|
transparent,
|
|
4861
4965
|
onArtifact,
|
|
4862
4966
|
onFrame,
|
|
4967
|
+
pageResponsiveness,
|
|
4863
4968
|
outputTarget: userDesiredOutputTarget,
|
|
4864
4969
|
licenseKey,
|
|
4865
4970
|
muted,
|
|
@@ -4871,6 +4976,7 @@ var internalRenderMediaOnWeb = async ({
|
|
|
4871
4976
|
let __stack2 = [];
|
|
4872
4977
|
try {
|
|
4873
4978
|
validateScale(scale);
|
|
4979
|
+
const pageResponsivenessIntervalInMilliseconds = resolvePageResponsivenessInterval(pageResponsiveness);
|
|
4874
4980
|
let htmlInCanvasLayerOutcomeReported = false;
|
|
4875
4981
|
const onHtmlInCanvasLayerOutcome = (outcome) => {
|
|
4876
4982
|
if (htmlInCanvasLayerOutcomeReported) {
|
|
@@ -4982,6 +5088,19 @@ var internalRenderMediaOnWeb = async ({
|
|
|
4982
5088
|
});
|
|
4983
5089
|
}
|
|
4984
5090
|
const internalState = __using(__stack2, makeInternalState(), 0);
|
|
5091
|
+
const pageResponsivenessController = createPageResponsivenessController({
|
|
5092
|
+
intervalInMilliseconds: pageResponsivenessIntervalInMilliseconds,
|
|
5093
|
+
now: () => performance.now(),
|
|
5094
|
+
wait: () => new Promise((resolve) => {
|
|
5095
|
+
setTimeout(resolve, 0);
|
|
5096
|
+
})
|
|
5097
|
+
});
|
|
5098
|
+
const waitForPageResponsiveness = async () => {
|
|
5099
|
+
await pageResponsivenessController.waitIfNeeded();
|
|
5100
|
+
if (signal?.aborted) {
|
|
5101
|
+
throw new Error("renderMediaOnWeb() was cancelled");
|
|
5102
|
+
}
|
|
5103
|
+
};
|
|
4985
5104
|
const keepalive = __using(__stack2, createBackgroundKeepalive({
|
|
4986
5105
|
fps: resolved.fps,
|
|
4987
5106
|
logLevel
|
|
@@ -5095,13 +5214,15 @@ var internalRenderMediaOnWeb = async ({
|
|
|
5095
5214
|
onlyBackgroundClipText: false,
|
|
5096
5215
|
cutout: new DOMRect(0, 0, resolved.width, resolved.height),
|
|
5097
5216
|
htmlInCanvasContext,
|
|
5098
|
-
onHtmlInCanvasLayerOutcome: htmlInCanvasContext ? onHtmlInCanvasLayerOutcome : undefined
|
|
5217
|
+
onHtmlInCanvasLayerOutcome: htmlInCanvasContext ? onHtmlInCanvasLayerOutcome : undefined,
|
|
5218
|
+
waitForPageResponsiveness
|
|
5099
5219
|
});
|
|
5100
5220
|
internalState.addCreateFrameTime(performance.now() - createFrameStart);
|
|
5101
5221
|
layerCanvas = layer.canvas;
|
|
5102
5222
|
if (signal?.aborted) {
|
|
5103
5223
|
throw new Error("renderMediaOnWeb() was cancelled");
|
|
5104
5224
|
}
|
|
5225
|
+
await waitForPageResponsiveness();
|
|
5105
5226
|
const videoFrame = new VideoFrame(layer.canvas, {
|
|
5106
5227
|
timestamp
|
|
5107
5228
|
});
|
|
@@ -5118,6 +5239,7 @@ var internalRenderMediaOnWeb = async ({
|
|
|
5118
5239
|
expectedHeight: Math.round(resolved.height * scale),
|
|
5119
5240
|
expectedTimestamp: timestamp
|
|
5120
5241
|
});
|
|
5242
|
+
await waitForPageResponsiveness();
|
|
5121
5243
|
}
|
|
5122
5244
|
}
|
|
5123
5245
|
const now = Date.now();
|
|
@@ -5143,11 +5265,10 @@ var internalRenderMediaOnWeb = async ({
|
|
|
5143
5265
|
onArtifact
|
|
5144
5266
|
});
|
|
5145
5267
|
}
|
|
5146
|
-
|
|
5147
|
-
throw new Error("renderMediaOnWeb() was cancelled");
|
|
5148
|
-
}
|
|
5268
|
+
await waitForPageResponsiveness();
|
|
5149
5269
|
const audio = muted ? null : onlyInlineAudio({ assets, fps: resolved.fps, timestamp, sampleRate });
|
|
5150
5270
|
internalState.addAudioMixingTime(performance.now() - audioCombineStart);
|
|
5271
|
+
await waitForPageResponsiveness();
|
|
5151
5272
|
const addSampleStart = performance.now();
|
|
5152
5273
|
const encodingPromises = [];
|
|
5153
5274
|
if (frameToEncode && videoSampleSource) {
|
|
@@ -5166,8 +5287,10 @@ var internalRenderMediaOnWeb = async ({
|
|
|
5166
5287
|
if (signal?.aborted) {
|
|
5167
5288
|
throw new Error("renderMediaOnWeb() was cancelled");
|
|
5168
5289
|
}
|
|
5290
|
+
await waitForPageResponsiveness();
|
|
5169
5291
|
}
|
|
5170
5292
|
onProgress?.(getProgressPayload());
|
|
5293
|
+
await waitForPageResponsiveness();
|
|
5171
5294
|
videoSampleSource?.videoSampleSource.close();
|
|
5172
5295
|
audioSampleSource?.audioSampleSource.close();
|
|
5173
5296
|
await outputWithCleanup.output.finalize();
|
|
@@ -5255,6 +5378,7 @@ var renderMediaOnWeb = (options) => {
|
|
|
5255
5378
|
transparent: options.transparent ?? false,
|
|
5256
5379
|
onArtifact: options.onArtifact ?? null,
|
|
5257
5380
|
onFrame: options.onFrame ?? null,
|
|
5381
|
+
pageResponsiveness: options.pageResponsiveness ?? "medium",
|
|
5258
5382
|
outputTarget: options.outputTarget ?? null,
|
|
5259
5383
|
licenseKey: options.licenseKey ?? null,
|
|
5260
5384
|
muted: options.muted ?? false,
|
|
@@ -5420,7 +5544,8 @@ async function internalRenderStillOnWeb({
|
|
|
5420
5544
|
onlyBackgroundClipText: false,
|
|
5421
5545
|
cutout: new DOMRect(0, 0, resolved.width, resolved.height),
|
|
5422
5546
|
htmlInCanvasContext,
|
|
5423
|
-
onHtmlInCanvasLayerOutcome: htmlInCanvasContext ? onHtmlInCanvasLayerOutcome : undefined
|
|
5547
|
+
onHtmlInCanvasLayerOutcome: htmlInCanvasContext ? onHtmlInCanvasLayerOutcome : undefined,
|
|
5548
|
+
waitForPageResponsiveness: null
|
|
5424
5549
|
});
|
|
5425
5550
|
const { canvas } = capturedFrame;
|
|
5426
5551
|
const assets = collectAssets.current.collectAssets();
|
package/dist/index.d.ts
CHANGED
|
@@ -7,6 +7,7 @@ export { getEncodableAudioCodecs, getEncodableVideoCodecs, type GetEncodableAudi
|
|
|
7
7
|
export { getDefaultAudioCodecForContainer, getDefaultContainerForCodec, getDefaultVideoCodecForContainer, getSupportedAudioCodecsForContainer, getSupportedVideoCodecsForContainer, isAudioOnlyContainer, } from './mediabunny-mappings';
|
|
8
8
|
export type { WebRendererAudioCodec, WebRendererContainer, WebRendererQuality, WebRendererVideoCodec, } from './mediabunny-mappings';
|
|
9
9
|
export type { WebRendererOutputTarget } from './output-target';
|
|
10
|
+
export type { WebRendererPageResponsiveness } from './page-responsiveness';
|
|
10
11
|
export { renderMediaOnWeb } from './render-media-on-web';
|
|
11
12
|
export type { RenderMediaOnWebOptions, RenderMediaOnWebProgress, RenderMediaOnWebProgressCallback, RenderMediaOnWebResult, WebRendererHardwareAcceleration, } from './render-media-on-web';
|
|
12
13
|
export { renderStillOnWeb } from './render-still-on-web';
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
export type WebRendererPageResponsiveness = 'disabled' | 'low' | 'medium' | 'high' | number;
|
|
2
|
+
export declare const resolvePageResponsivenessInterval: (pageResponsiveness: unknown) => number | null;
|
|
3
|
+
export declare const createPageResponsivenessController: ({ intervalInMilliseconds, now, wait, }: {
|
|
4
|
+
intervalInMilliseconds: number | null;
|
|
5
|
+
now: () => number;
|
|
6
|
+
wait: () => Promise<void>;
|
|
7
|
+
}) => {
|
|
8
|
+
waitIfNeeded: () => Promise<void>;
|
|
9
|
+
};
|
|
@@ -7,6 +7,7 @@ import type { InternalState } from './internal-state';
|
|
|
7
7
|
import type { WebRendererAudioCodec, WebRendererContainer, WebRendererQuality } from './mediabunny-mappings';
|
|
8
8
|
import { type WebRendererVideoCodec } from './mediabunny-mappings';
|
|
9
9
|
import type { WebRendererOutputTarget } from './output-target';
|
|
10
|
+
import { type WebRendererPageResponsiveness } from './page-responsiveness';
|
|
10
11
|
import type { CompositionCalculateMetadataOrExplicit } from './props-if-has-props';
|
|
11
12
|
import { type OnFrameCallback } from './validate-video-frame';
|
|
12
13
|
export type InputPropsIfHasProps<Schema extends $ZodObject, Props> = $ZodObject extends Schema ? {} extends Props ? {
|
|
@@ -60,6 +61,7 @@ type OptionalRenderMediaOnWebOptions<Schema extends $ZodObject> = {
|
|
|
60
61
|
transparent: boolean;
|
|
61
62
|
onArtifact: WebRendererOnArtifact | null;
|
|
62
63
|
onFrame: OnFrameCallback | null;
|
|
64
|
+
pageResponsiveness: WebRendererPageResponsiveness;
|
|
63
65
|
outputTarget: WebRendererOutputTarget | null;
|
|
64
66
|
licenseKey: string | null;
|
|
65
67
|
isProduction: boolean;
|
|
@@ -6,7 +6,7 @@ export type HtmlInCanvasLayerOutcome = {
|
|
|
6
6
|
reason: string;
|
|
7
7
|
shouldWarn: boolean;
|
|
8
8
|
};
|
|
9
|
-
export declare const createLayer: ({ element, scale, logLevel, internalState, onlyBackgroundClipText, cutout, htmlInCanvasContext, onHtmlInCanvasLayerOutcome, }: {
|
|
9
|
+
export declare const createLayer: ({ element, scale, logLevel, internalState, onlyBackgroundClipText, cutout, htmlInCanvasContext, onHtmlInCanvasLayerOutcome, waitForPageResponsiveness, }: {
|
|
10
10
|
element: HTMLElement | SVGElement;
|
|
11
11
|
scale: number;
|
|
12
12
|
logLevel: "error" | "info" | "trace" | "verbose" | "warn";
|
|
@@ -32,4 +32,5 @@ export declare const createLayer: ({ element, scale, logLevel, internalState, on
|
|
|
32
32
|
cutout: DOMRect;
|
|
33
33
|
htmlInCanvasContext?: HtmlInCanvasContext | null | undefined;
|
|
34
34
|
onHtmlInCanvasLayerOutcome?: ((outcome: HtmlInCanvasLayerOutcome) => void) | undefined;
|
|
35
|
+
waitForPageResponsiveness: (() => Promise<void>) | null;
|
|
35
36
|
}) => Promise<OffscreenCanvasRenderingContext2D>;
|
package/dist/walk-over-node.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import type { ProcessNodeReturnValue } from './drawing/process-node';
|
|
2
|
-
export declare const walkOverNode: ({ node, context, logLevel, parentRect, internalState, rootElement, onlyBackgroundClipText, scale, }: {
|
|
2
|
+
export declare const walkOverNode: ({ node, context, logLevel, parentRect, internalState, rootElement, onlyBackgroundClipText, scale, waitForPageResponsiveness, }: {
|
|
3
3
|
node: Node;
|
|
4
4
|
context: OffscreenCanvasRenderingContext2D;
|
|
5
5
|
logLevel: "error" | "info" | "trace" | "verbose" | "warn";
|
|
@@ -25,4 +25,5 @@ export declare const walkOverNode: ({ node, context, logLevel, parentRect, inter
|
|
|
25
25
|
rootElement: HTMLElement | SVGElement;
|
|
26
26
|
onlyBackgroundClipText: boolean;
|
|
27
27
|
scale: number;
|
|
28
|
+
waitForPageResponsiveness: (() => Promise<void>) | null;
|
|
28
29
|
}) => Promise<ProcessNodeReturnValue>;
|
package/package.json
CHANGED
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
"url": "https://github.com/remotion-dev/remotion/tree/main/packages/web-renderer"
|
|
4
4
|
},
|
|
5
5
|
"name": "@remotion/web-renderer",
|
|
6
|
-
"version": "4.0.
|
|
6
|
+
"version": "4.0.488",
|
|
7
7
|
"main": "dist/index.js",
|
|
8
8
|
"type": "module",
|
|
9
9
|
"scripts": {
|
|
@@ -19,22 +19,22 @@
|
|
|
19
19
|
"author": "Remotion <jonny@remotion.dev>",
|
|
20
20
|
"license": "SEE LICENSE IN LICENSE.md",
|
|
21
21
|
"dependencies": {
|
|
22
|
-
"@mediabunny/mp3-encoder": "1.50.
|
|
23
|
-
"@mediabunny/aac-encoder": "1.50.
|
|
24
|
-
"@mediabunny/flac-encoder": "1.50.
|
|
25
|
-
"@remotion/licensing": "4.0.
|
|
26
|
-
"remotion": "4.0.
|
|
27
|
-
"mediabunny": "1.50.
|
|
22
|
+
"@mediabunny/mp3-encoder": "1.50.8",
|
|
23
|
+
"@mediabunny/aac-encoder": "1.50.8",
|
|
24
|
+
"@mediabunny/flac-encoder": "1.50.8",
|
|
25
|
+
"@remotion/licensing": "4.0.488",
|
|
26
|
+
"remotion": "4.0.488",
|
|
27
|
+
"mediabunny": "1.50.8"
|
|
28
28
|
},
|
|
29
29
|
"devDependencies": {
|
|
30
30
|
"@react-three/fiber": "9.2.0",
|
|
31
|
-
"@remotion/eslint-config-internal": "4.0.
|
|
32
|
-
"@remotion/paths": "4.0.
|
|
33
|
-
"@remotion/player": "4.0.
|
|
34
|
-
"@remotion/media": "4.0.
|
|
35
|
-
"@remotion/shapes": "4.0.
|
|
36
|
-
"@remotion/three": "4.0.
|
|
37
|
-
"@remotion/transitions": "4.0.
|
|
31
|
+
"@remotion/eslint-config-internal": "4.0.488",
|
|
32
|
+
"@remotion/paths": "4.0.488",
|
|
33
|
+
"@remotion/player": "4.0.488",
|
|
34
|
+
"@remotion/media": "4.0.488",
|
|
35
|
+
"@remotion/shapes": "4.0.488",
|
|
36
|
+
"@remotion/three": "4.0.488",
|
|
37
|
+
"@remotion/transitions": "4.0.488",
|
|
38
38
|
"@types/three": "0.170.0",
|
|
39
39
|
"@typescript/native-preview": "7.0.0-dev.20260217.1",
|
|
40
40
|
"@vitejs/plugin-react": "4.3.4",
|