@remotion/renderer 4.0.535 → 4.0.537
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/browser/BrowserPage.js +5 -4
- package/dist/client.d.ts +22 -41
- package/dist/esm/client.mjs +677 -721
- package/dist/esm/index.mjs +81 -74
- package/dist/mime-db.js +5 -0
- package/dist/options/index.d.ts +22 -41
- package/dist/options/index.js +4 -6
- package/dist/options/sequence-activity-limit.d.ts +19 -0
- package/dist/options/sequence-activity-limit.js +44 -0
- package/dist/options/{experimental-client-side-rendering.d.ts → show-layer-frame-numbers.d.ts} +6 -3
- package/dist/options/show-layer-frame-numbers.js +34 -0
- package/dist/serve-static.js +4 -4
- package/dist/stringify-ffmpeg-filter.js +8 -4
- package/package.json +16 -14
- package/dist/options/experimental-client-side-rendering.js +0 -30
- package/dist/prestitcher-memory-usage.d.ts +0 -13
- package/dist/prestitcher-memory-usage.js +0 -33
- package/dist/render-partitions.d.ts +0 -7
- package/dist/render-partitions.js +0 -50
package/dist/esm/index.mjs
CHANGED
|
@@ -3620,13 +3620,13 @@ class Page extends EventEmitter {
|
|
|
3620
3620
|
mobile: false,
|
|
3621
3621
|
width: viewport.width,
|
|
3622
3622
|
height: viewport.height,
|
|
3623
|
-
deviceScaleFactor:
|
|
3623
|
+
deviceScaleFactor: viewport.deviceScaleFactor,
|
|
3624
3624
|
screenHeight: viewport.height,
|
|
3625
3625
|
screenWidth: viewport.width,
|
|
3626
|
-
scale:
|
|
3626
|
+
scale: 1,
|
|
3627
3627
|
viewport: {
|
|
3628
|
-
height: viewport.height
|
|
3629
|
-
width: viewport.width
|
|
3628
|
+
height: viewport.height,
|
|
3629
|
+
width: viewport.width,
|
|
3630
3630
|
scale: 1,
|
|
3631
3631
|
x: 0,
|
|
3632
3632
|
y: 0
|
|
@@ -14762,6 +14762,11 @@ var mimeDb = {
|
|
|
14762
14762
|
compressible: false,
|
|
14763
14763
|
extensions: ["jpx", "jpf"]
|
|
14764
14764
|
},
|
|
14765
|
+
"image/jxl": {
|
|
14766
|
+
source: "iana",
|
|
14767
|
+
compressible: false,
|
|
14768
|
+
extensions: ["jxl"]
|
|
14769
|
+
},
|
|
14765
14770
|
"image/jxr": {
|
|
14766
14771
|
source: "iana",
|
|
14767
14772
|
extensions: ["jxr"]
|
|
@@ -17678,69 +17683,6 @@ var makeRange = (from, to) => {
|
|
|
17678
17683
|
});
|
|
17679
17684
|
};
|
|
17680
17685
|
|
|
17681
|
-
// src/port-config.ts
|
|
17682
|
-
import os9 from "os";
|
|
17683
|
-
var cached = null;
|
|
17684
|
-
var getPortConfig = (preferIpv4) => {
|
|
17685
|
-
if (cached) {
|
|
17686
|
-
return cached;
|
|
17687
|
-
}
|
|
17688
|
-
const networkInterfaces = os9.networkInterfaces();
|
|
17689
|
-
const flattened = flattenNetworkInterfaces(networkInterfaces);
|
|
17690
|
-
const host = getHostToBind(flattened, preferIpv4);
|
|
17691
|
-
const hostsToTry = getHostsToTry(flattened);
|
|
17692
|
-
const response = { host, hostsToTry };
|
|
17693
|
-
cached = response;
|
|
17694
|
-
return response;
|
|
17695
|
-
};
|
|
17696
|
-
var getHostToBind = (flattened, preferIpv4) => {
|
|
17697
|
-
if (preferIpv4 || !isIpV6Supported(flattened)) {
|
|
17698
|
-
return "0.0.0.0";
|
|
17699
|
-
}
|
|
17700
|
-
return "::";
|
|
17701
|
-
};
|
|
17702
|
-
var getHostsToTry = (flattened) => {
|
|
17703
|
-
return [
|
|
17704
|
-
hasIPv6LoopbackAddress(flattened) ? "::1" : null,
|
|
17705
|
-
hasIpv4LoopbackAddress(flattened) ? "127.0.0.1" : null,
|
|
17706
|
-
isIpV6Supported(flattened) ? "::" : null,
|
|
17707
|
-
"0.0.0.0"
|
|
17708
|
-
].filter(truthy);
|
|
17709
|
-
};
|
|
17710
|
-
var flattenNetworkInterfaces = (networkInterfaces) => {
|
|
17711
|
-
const result = [];
|
|
17712
|
-
for (const iface in networkInterfaces) {
|
|
17713
|
-
for (const configuration of networkInterfaces[iface]) {
|
|
17714
|
-
result.push(configuration);
|
|
17715
|
-
}
|
|
17716
|
-
}
|
|
17717
|
-
return result;
|
|
17718
|
-
};
|
|
17719
|
-
var isIpV6Supported = (flattened) => {
|
|
17720
|
-
for (const configuration of flattened) {
|
|
17721
|
-
if (configuration.family === "IPv6" && !configuration.internal) {
|
|
17722
|
-
return true;
|
|
17723
|
-
}
|
|
17724
|
-
}
|
|
17725
|
-
return false;
|
|
17726
|
-
};
|
|
17727
|
-
var hasIPv6LoopbackAddress = (flattened) => {
|
|
17728
|
-
for (const configuration of flattened) {
|
|
17729
|
-
if (configuration.family === "IPv6" && configuration.internal && configuration.address === "::1") {
|
|
17730
|
-
return true;
|
|
17731
|
-
}
|
|
17732
|
-
}
|
|
17733
|
-
return false;
|
|
17734
|
-
};
|
|
17735
|
-
var hasIpv4LoopbackAddress = (flattened) => {
|
|
17736
|
-
for (const configuration of flattened) {
|
|
17737
|
-
if (configuration.family === "IPv4" && configuration.internal && configuration.address === "127.0.0.1") {
|
|
17738
|
-
return true;
|
|
17739
|
-
}
|
|
17740
|
-
}
|
|
17741
|
-
return false;
|
|
17742
|
-
};
|
|
17743
|
-
|
|
17744
17686
|
// src/serve-handler/index.ts
|
|
17745
17687
|
import { createReadStream, promises as promises3 } from "node:fs";
|
|
17746
17688
|
import path19 from "node:path";
|
|
@@ -18027,7 +17969,7 @@ var serveStatic = async (path, options2) => {
|
|
|
18027
17969
|
});
|
|
18028
17970
|
let selectedPort = null;
|
|
18029
17971
|
const maxTries = 10;
|
|
18030
|
-
const
|
|
17972
|
+
const host = "127.0.0.1";
|
|
18031
17973
|
for (let i = 0;i < maxTries; i++) {
|
|
18032
17974
|
let unlock = () => {};
|
|
18033
17975
|
try {
|
|
@@ -18036,10 +17978,10 @@ var serveStatic = async (path, options2) => {
|
|
|
18036
17978
|
desiredPort: options2?.port ?? undefined,
|
|
18037
17979
|
from: 3000,
|
|
18038
17980
|
to: 3100,
|
|
18039
|
-
hostsToTry:
|
|
17981
|
+
hostsToTry: [host]
|
|
18040
17982
|
}).then(({ port, unlockPort }) => {
|
|
18041
17983
|
unlock = unlockPort;
|
|
18042
|
-
server.listen({ port, host
|
|
17984
|
+
server.listen({ port, host });
|
|
18043
17985
|
server.on("listening", () => {
|
|
18044
17986
|
resolve(port);
|
|
18045
17987
|
return unlock();
|
|
@@ -19539,6 +19481,69 @@ var validateSelectedPixelFormatAndCodecCombination = (pixelFormat, codec) => {
|
|
|
19539
19481
|
}
|
|
19540
19482
|
};
|
|
19541
19483
|
|
|
19484
|
+
// src/port-config.ts
|
|
19485
|
+
import os9 from "os";
|
|
19486
|
+
var cached = null;
|
|
19487
|
+
var getPortConfig = (preferIpv4) => {
|
|
19488
|
+
if (cached) {
|
|
19489
|
+
return cached;
|
|
19490
|
+
}
|
|
19491
|
+
const networkInterfaces = os9.networkInterfaces();
|
|
19492
|
+
const flattened = flattenNetworkInterfaces(networkInterfaces);
|
|
19493
|
+
const host = getHostToBind(flattened, preferIpv4);
|
|
19494
|
+
const hostsToTry = getHostsToTry(flattened);
|
|
19495
|
+
const response = { host, hostsToTry };
|
|
19496
|
+
cached = response;
|
|
19497
|
+
return response;
|
|
19498
|
+
};
|
|
19499
|
+
var getHostToBind = (flattened, preferIpv4) => {
|
|
19500
|
+
if (preferIpv4 || !isIpV6Supported(flattened)) {
|
|
19501
|
+
return "0.0.0.0";
|
|
19502
|
+
}
|
|
19503
|
+
return "::";
|
|
19504
|
+
};
|
|
19505
|
+
var getHostsToTry = (flattened) => {
|
|
19506
|
+
return [
|
|
19507
|
+
hasIPv6LoopbackAddress(flattened) ? "::1" : null,
|
|
19508
|
+
hasIpv4LoopbackAddress(flattened) ? "127.0.0.1" : null,
|
|
19509
|
+
isIpV6Supported(flattened) ? "::" : null,
|
|
19510
|
+
"0.0.0.0"
|
|
19511
|
+
].filter(truthy);
|
|
19512
|
+
};
|
|
19513
|
+
var flattenNetworkInterfaces = (networkInterfaces) => {
|
|
19514
|
+
const result = [];
|
|
19515
|
+
for (const iface in networkInterfaces) {
|
|
19516
|
+
for (const configuration of networkInterfaces[iface]) {
|
|
19517
|
+
result.push(configuration);
|
|
19518
|
+
}
|
|
19519
|
+
}
|
|
19520
|
+
return result;
|
|
19521
|
+
};
|
|
19522
|
+
var isIpV6Supported = (flattened) => {
|
|
19523
|
+
for (const configuration of flattened) {
|
|
19524
|
+
if (configuration.family === "IPv6" && !configuration.internal) {
|
|
19525
|
+
return true;
|
|
19526
|
+
}
|
|
19527
|
+
}
|
|
19528
|
+
return false;
|
|
19529
|
+
};
|
|
19530
|
+
var hasIPv6LoopbackAddress = (flattened) => {
|
|
19531
|
+
for (const configuration of flattened) {
|
|
19532
|
+
if (configuration.family === "IPv6" && configuration.internal && configuration.address === "::1") {
|
|
19533
|
+
return true;
|
|
19534
|
+
}
|
|
19535
|
+
}
|
|
19536
|
+
return false;
|
|
19537
|
+
};
|
|
19538
|
+
var hasIpv4LoopbackAddress = (flattened) => {
|
|
19539
|
+
for (const configuration of flattened) {
|
|
19540
|
+
if (configuration.family === "IPv4" && configuration.internal && configuration.address === "127.0.0.1") {
|
|
19541
|
+
return true;
|
|
19542
|
+
}
|
|
19543
|
+
}
|
|
19544
|
+
return false;
|
|
19545
|
+
};
|
|
19546
|
+
|
|
19542
19547
|
// src/probe-shared-memory-capture.ts
|
|
19543
19548
|
import fs16 from "node:fs";
|
|
19544
19549
|
import os10 from "node:os";
|
|
@@ -24204,10 +24209,12 @@ var stringifyFfmpegFilter = ({
|
|
|
24204
24209
|
}
|
|
24205
24210
|
const { toneFrequency, startInVideo } = asset;
|
|
24206
24211
|
const startInVideoSeconds = startInVideo / fps;
|
|
24212
|
+
const assetTrimLeftOffset = startInVideo === 0 ? trimLeftOffset : 0;
|
|
24213
|
+
const startInChunkSeconds = startInVideo === 0 ? 0 : startInVideoSeconds - trimLeftOffset;
|
|
24207
24214
|
const { trimLeft, maxTrim } = getActualTrimLeft({
|
|
24208
24215
|
trimLeft: asset.trimLeft,
|
|
24209
24216
|
fps,
|
|
24210
|
-
trimLeftOffset,
|
|
24217
|
+
trimLeftOffset: assetTrimLeftOffset,
|
|
24211
24218
|
seamless: forSeamlessAacConcatenation,
|
|
24212
24219
|
assetDuration,
|
|
24213
24220
|
audioStartFrame: asset.audioStartFrame,
|
|
@@ -24225,7 +24232,7 @@ var stringifyFfmpegFilter = ({
|
|
|
24225
24232
|
filter: trimAndTempoFilter
|
|
24226
24233
|
} = trimAndSetTempo({
|
|
24227
24234
|
assetDuration,
|
|
24228
|
-
trimLeftOffset,
|
|
24235
|
+
trimLeftOffset: assetTrimLeftOffset,
|
|
24229
24236
|
trimRightOffset,
|
|
24230
24237
|
asset,
|
|
24231
24238
|
fps,
|
|
@@ -24237,8 +24244,8 @@ var stringifyFfmpegFilter = ({
|
|
|
24237
24244
|
fps,
|
|
24238
24245
|
trimLeft: actualTrimLeft
|
|
24239
24246
|
});
|
|
24240
|
-
const padAtEnd = chunkLengthInSeconds - audibleDuration -
|
|
24241
|
-
const padStart =
|
|
24247
|
+
const padAtEnd = chunkLengthInSeconds - audibleDuration - startInChunkSeconds;
|
|
24248
|
+
const padStart = startInChunkSeconds + (asset.trimLeft === 0 ? presentationTimeOffsetInSeconds : 0);
|
|
24242
24249
|
return {
|
|
24243
24250
|
filter: "[0:a]" + [
|
|
24244
24251
|
`aformat=sample_fmts=s16:sample_rates=${sampleRate}`,
|
package/dist/mime-db.js
CHANGED
|
@@ -7222,6 +7222,11 @@ exports.mimeDb = {
|
|
|
7222
7222
|
compressible: false,
|
|
7223
7223
|
extensions: ['jpx', 'jpf'],
|
|
7224
7224
|
},
|
|
7225
|
+
'image/jxl': {
|
|
7226
|
+
source: 'iana',
|
|
7227
|
+
compressible: false,
|
|
7228
|
+
extensions: ['jxl'],
|
|
7229
|
+
},
|
|
7225
7230
|
'image/jxr': {
|
|
7226
7231
|
source: 'iana',
|
|
7227
7232
|
extensions: ['jxr'],
|
package/dist/options/index.d.ts
CHANGED
|
@@ -1,5 +1,24 @@
|
|
|
1
1
|
import type { AnyRemotionOption } from './option';
|
|
2
2
|
export declare const allOptions: {
|
|
3
|
+
showLayerFrameNumbersOption: {
|
|
4
|
+
name: string;
|
|
5
|
+
addedIn: string;
|
|
6
|
+
cliFlag: "show-layer-frame-numbers";
|
|
7
|
+
id: "show-layer-frame-numbers";
|
|
8
|
+
description: () => import("react/jsx-runtime").JSX.Element;
|
|
9
|
+
ssrName: null;
|
|
10
|
+
docLink: string;
|
|
11
|
+
type: boolean;
|
|
12
|
+
getValue: ({ commandLine }: {
|
|
13
|
+
commandLine: Record<string, unknown>;
|
|
14
|
+
}) => {
|
|
15
|
+
value: boolean;
|
|
16
|
+
source: string;
|
|
17
|
+
};
|
|
18
|
+
setConfig(value: boolean): void;
|
|
19
|
+
getConfigValue: () => boolean | null;
|
|
20
|
+
reset: () => void;
|
|
21
|
+
};
|
|
3
22
|
showPremountingOption: {
|
|
4
23
|
name: string;
|
|
5
24
|
addedIn: string;
|
|
@@ -1387,49 +1406,11 @@ export declare const allOptions: {
|
|
|
1387
1406
|
setConfig(value: boolean): void;
|
|
1388
1407
|
id: "experimental-keep-audio-context-alive";
|
|
1389
1408
|
};
|
|
1390
|
-
|
|
1391
|
-
name: string;
|
|
1392
|
-
addedIn: string;
|
|
1393
|
-
cliFlag: "experimental-tracks";
|
|
1394
|
-
description: () => import("react/jsx-runtime").JSX.Element;
|
|
1395
|
-
ssrName: null;
|
|
1396
|
-
docLink: string;
|
|
1397
|
-
type: boolean;
|
|
1398
|
-
getValue: ({ commandLine }: {
|
|
1399
|
-
commandLine: Record<string, unknown>;
|
|
1400
|
-
}) => {
|
|
1401
|
-
value: boolean;
|
|
1402
|
-
source: string;
|
|
1403
|
-
};
|
|
1404
|
-
setConfig(value: boolean): void;
|
|
1405
|
-
getConfigValue: () => boolean | null;
|
|
1406
|
-
reset: () => void;
|
|
1407
|
-
id: "experimental-tracks";
|
|
1408
|
-
};
|
|
1409
|
-
experimentalSequenceActivityOption: {
|
|
1410
|
-
name: string;
|
|
1411
|
-
addedIn: string;
|
|
1412
|
-
cliFlag: "experimental-sequence-activity";
|
|
1413
|
-
description: () => import("react/jsx-runtime").JSX.Element;
|
|
1414
|
-
ssrName: null;
|
|
1415
|
-
docLink: string;
|
|
1416
|
-
type: boolean;
|
|
1417
|
-
getValue: ({ commandLine }: {
|
|
1418
|
-
commandLine: Record<string, unknown>;
|
|
1419
|
-
}) => {
|
|
1420
|
-
value: boolean;
|
|
1421
|
-
source: string;
|
|
1422
|
-
};
|
|
1423
|
-
setConfig(value: boolean): void;
|
|
1424
|
-
getConfigValue: () => boolean | null;
|
|
1425
|
-
reset: () => void;
|
|
1426
|
-
id: "experimental-sequence-activity";
|
|
1427
|
-
};
|
|
1428
|
-
experimentalSequenceActivityLimitOption: {
|
|
1409
|
+
sequenceActivityLimitOption: {
|
|
1429
1410
|
name: string;
|
|
1430
1411
|
addedIn: string;
|
|
1431
|
-
cliFlag: "
|
|
1432
|
-
id: "
|
|
1412
|
+
cliFlag: "sequence-activity-limit";
|
|
1413
|
+
id: "sequence-activity-limit";
|
|
1433
1414
|
description: () => import("react/jsx-runtime").JSX.Element;
|
|
1434
1415
|
ssrName: null;
|
|
1435
1416
|
docLink: string;
|
package/dist/options/index.js
CHANGED
|
@@ -37,9 +37,6 @@ const enforce_audio_1 = require("./enforce-audio");
|
|
|
37
37
|
const env_file_1 = require("./env-file");
|
|
38
38
|
const every_nth_frame_1 = require("./every-nth-frame");
|
|
39
39
|
const experimental_keep_audio_context_alive_1 = require("./experimental-keep-audio-context-alive");
|
|
40
|
-
const experimental_sequence_activity_1 = require("./experimental-sequence-activity");
|
|
41
|
-
const experimental_sequence_activity_limit_1 = require("./experimental-sequence-activity-limit");
|
|
42
|
-
const experimental_tracks_1 = require("./experimental-tracks");
|
|
43
40
|
const folder_expiry_1 = require("./folder-expiry");
|
|
44
41
|
const for_seamless_aac_concatenation_1 = require("./for-seamless-aac-concatenation");
|
|
45
42
|
const force_new_studio_1 = require("./force-new-studio");
|
|
@@ -89,6 +86,8 @@ const runs_1 = require("./runs");
|
|
|
89
86
|
const sample_rate_1 = require("./sample-rate");
|
|
90
87
|
const scale_1 = require("./scale");
|
|
91
88
|
const separate_audio_1 = require("./separate-audio");
|
|
89
|
+
const sequence_activity_limit_1 = require("./sequence-activity-limit");
|
|
90
|
+
const show_layer_frame_numbers_1 = require("./show-layer-frame-numbers");
|
|
92
91
|
const show_premounting_1 = require("./show-premounting");
|
|
93
92
|
const skip_skills_1 = require("./skip-skills");
|
|
94
93
|
const still_frame_1 = require("./still-frame");
|
|
@@ -105,6 +104,7 @@ const webhook_custom_data_1 = require("./webhook-custom-data");
|
|
|
105
104
|
const webpack_poll_1 = require("./webpack-poll");
|
|
106
105
|
const x264_preset_1 = require("./x264-preset");
|
|
107
106
|
exports.allOptions = {
|
|
107
|
+
showLayerFrameNumbersOption: show_layer_frame_numbers_1.showLayerFrameNumbersOption,
|
|
108
108
|
showPremountingOption: show_premounting_1.showPremountingOption,
|
|
109
109
|
allowHtmlInCanvasOption: allow_html_in_canvas_1.allowHtmlInCanvasOption,
|
|
110
110
|
audioCodecOption: audio_codec_1.audioCodecOption,
|
|
@@ -181,9 +181,7 @@ exports.allOptions = {
|
|
|
181
181
|
framesOption: frames_1.framesOption,
|
|
182
182
|
forceNewStudioOption: force_new_studio_1.forceNewStudioOption,
|
|
183
183
|
experimentalKeepAudioContextAliveOption: experimental_keep_audio_context_alive_1.experimentalKeepAudioContextAliveOption,
|
|
184
|
-
|
|
185
|
-
experimentalSequenceActivityOption: experimental_sequence_activity_1.experimentalSequenceActivityOption,
|
|
186
|
-
experimentalSequenceActivityLimitOption: experimental_sequence_activity_limit_1.experimentalSequenceActivityLimitOption,
|
|
184
|
+
sequenceActivityLimitOption: sequence_activity_limit_1.sequenceActivityLimitOption,
|
|
187
185
|
numberOfSharedAudioTagsOption: number_of_shared_audio_tags_1.numberOfSharedAudioTagsOption,
|
|
188
186
|
ipv4Option: ipv4_1.ipv4Option,
|
|
189
187
|
stillImageFormatOption: still_image_format_1.stillImageFormatOption,
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
export declare const sequenceActivityLimitOption: {
|
|
2
|
+
name: string;
|
|
3
|
+
addedIn: string;
|
|
4
|
+
cliFlag: "sequence-activity-limit";
|
|
5
|
+
id: "sequence-activity-limit";
|
|
6
|
+
description: () => import("react/jsx-runtime").JSX.Element;
|
|
7
|
+
ssrName: null;
|
|
8
|
+
docLink: string;
|
|
9
|
+
type: number;
|
|
10
|
+
getValue: ({ commandLine }: {
|
|
11
|
+
commandLine: Record<string, unknown>;
|
|
12
|
+
}) => {
|
|
13
|
+
value: number;
|
|
14
|
+
source: string;
|
|
15
|
+
};
|
|
16
|
+
setConfig(value: number): void;
|
|
17
|
+
getConfigValue: () => number | null;
|
|
18
|
+
reset: () => void;
|
|
19
|
+
};
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.sequenceActivityLimitOption = void 0;
|
|
4
|
+
const jsx_runtime_1 = require("react/jsx-runtime");
|
|
5
|
+
const no_react_1 = require("remotion/no-react");
|
|
6
|
+
let configuredLimit = null;
|
|
7
|
+
const cliFlag = 'sequence-activity-limit';
|
|
8
|
+
exports.sequenceActivityLimitOption = {
|
|
9
|
+
name: 'Sequence Activity limit',
|
|
10
|
+
addedIn: '4.0.536',
|
|
11
|
+
cliFlag,
|
|
12
|
+
id: cliFlag,
|
|
13
|
+
description: () => (jsx_runtime_1.jsxs(jsx_runtime_1.Fragment, { children: ["Limit hidden scenes discovered by Sequence Activity in the Remotion Studio, including nested sequences and their ancestors. Visible, premounted, and postmounted scenes always render. Defaults to", ' ', jsx_runtime_1.jsx("code", { children: "Infinity" }),
|
|
14
|
+
" for unlimited discovery without admission delays. Must be a non-negative safe integer or ",
|
|
15
|
+
jsx_runtime_1.jsx("code", { children: "Infinity" }),
|
|
16
|
+
". Set to 0 to disable Sequence Activity. Finite limits prioritize nearby scenes. Does not affect rendering."] })),
|
|
17
|
+
ssrName: null,
|
|
18
|
+
docLink: 'https://www.remotion.dev/docs/options/sequence-activity-limit',
|
|
19
|
+
type: 0,
|
|
20
|
+
getValue: ({ commandLine }) => {
|
|
21
|
+
if (commandLine[cliFlag] !== undefined) {
|
|
22
|
+
const value = commandLine[cliFlag] === 'Infinity' ? Infinity : commandLine[cliFlag];
|
|
23
|
+
if (value !== Infinity &&
|
|
24
|
+
(!Number.isSafeInteger(value) || value < 0)) {
|
|
25
|
+
throw new Error('Sequence Activity limit must be a non-negative safe integer or Infinity.');
|
|
26
|
+
}
|
|
27
|
+
return { value: value, source: 'cli' };
|
|
28
|
+
}
|
|
29
|
+
return {
|
|
30
|
+
value: configuredLimit !== null && configuredLimit !== void 0 ? configuredLimit : no_react_1.NoReactInternals.DEFAULT_SEQUENCE_ACTIVITY_LIMIT,
|
|
31
|
+
source: 'config',
|
|
32
|
+
};
|
|
33
|
+
},
|
|
34
|
+
setConfig(value) {
|
|
35
|
+
if (value !== Infinity && (!Number.isSafeInteger(value) || value < 0)) {
|
|
36
|
+
throw new Error('Sequence Activity limit must be a non-negative safe integer or Infinity.');
|
|
37
|
+
}
|
|
38
|
+
configuredLimit = value;
|
|
39
|
+
},
|
|
40
|
+
getConfigValue: () => configuredLimit,
|
|
41
|
+
reset: () => {
|
|
42
|
+
configuredLimit = null;
|
|
43
|
+
},
|
|
44
|
+
};
|
package/dist/options/{experimental-client-side-rendering.d.ts → show-layer-frame-numbers.d.ts}
RENAMED
|
@@ -1,6 +1,8 @@
|
|
|
1
|
-
export declare const
|
|
1
|
+
export declare const showLayerFrameNumbersOption: {
|
|
2
2
|
name: string;
|
|
3
|
-
|
|
3
|
+
addedIn: string;
|
|
4
|
+
cliFlag: "show-layer-frame-numbers";
|
|
5
|
+
id: "show-layer-frame-numbers";
|
|
4
6
|
description: () => import("react/jsx-runtime").JSX.Element;
|
|
5
7
|
ssrName: null;
|
|
6
8
|
docLink: string;
|
|
@@ -12,5 +14,6 @@ export declare const experimentalClientSideRenderingOption: {
|
|
|
12
14
|
source: string;
|
|
13
15
|
};
|
|
14
16
|
setConfig(value: boolean): void;
|
|
15
|
-
|
|
17
|
+
getConfigValue: () => boolean | null;
|
|
18
|
+
reset: () => void;
|
|
16
19
|
};
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.showLayerFrameNumbersOption = void 0;
|
|
4
|
+
const jsx_runtime_1 = require("react/jsx-runtime");
|
|
5
|
+
let configuredShowLayerFrameNumbers = null;
|
|
6
|
+
const cliFlag = 'show-layer-frame-numbers';
|
|
7
|
+
exports.showLayerFrameNumbersOption = {
|
|
8
|
+
name: 'Show frame numbers of layer',
|
|
9
|
+
addedIn: '4.0.535',
|
|
10
|
+
cliFlag,
|
|
11
|
+
id: cliFlag,
|
|
12
|
+
description: () => (jsx_runtime_1.jsxs(jsx_runtime_1.Fragment, { children: ["Show the current frame number inside sequence layers in the Studio timeline. Defaults to ",
|
|
13
|
+
jsx_runtime_1.jsx("code", { children: "false" }),
|
|
14
|
+
"."] })),
|
|
15
|
+
ssrName: null,
|
|
16
|
+
docLink: 'https://www.remotion.dev/docs/options/show-layer-frame-numbers',
|
|
17
|
+
type: false,
|
|
18
|
+
getValue: ({ commandLine }) => {
|
|
19
|
+
if (commandLine[cliFlag] !== undefined && commandLine[cliFlag] !== null) {
|
|
20
|
+
return { value: commandLine[cliFlag], source: 'cli' };
|
|
21
|
+
}
|
|
22
|
+
return { value: configuredShowLayerFrameNumbers !== null && configuredShowLayerFrameNumbers !== void 0 ? configuredShowLayerFrameNumbers : false, source: 'config' };
|
|
23
|
+
},
|
|
24
|
+
setConfig(value) {
|
|
25
|
+
if (typeof value !== 'boolean') {
|
|
26
|
+
throw new Error('Config.setShowLayerFrameNumbers() expects a boolean');
|
|
27
|
+
}
|
|
28
|
+
configuredShowLayerFrameNumbers = value;
|
|
29
|
+
},
|
|
30
|
+
getConfigValue: () => configuredShowLayerFrameNumbers,
|
|
31
|
+
reset: () => {
|
|
32
|
+
configuredShowLayerFrameNumbers = null;
|
|
33
|
+
},
|
|
34
|
+
};
|
package/dist/serve-static.js
CHANGED
|
@@ -7,7 +7,6 @@ exports.serveStatic = void 0;
|
|
|
7
7
|
const node_http_1 = __importDefault(require("node:http"));
|
|
8
8
|
const get_port_1 = require("./get-port");
|
|
9
9
|
const offthread_video_server_1 = require("./offthread-video-server");
|
|
10
|
-
const port_config_1 = require("./port-config");
|
|
11
10
|
const serve_handler_1 = require("./serve-handler");
|
|
12
11
|
const serveStatic = async (path, options) => {
|
|
13
12
|
const { listener: offthreadRequest, close: closeCompositor, compositor, } = (0, offthread_video_server_1.startOffthreadVideoServer)({
|
|
@@ -54,7 +53,8 @@ const serveStatic = async (path, options) => {
|
|
|
54
53
|
});
|
|
55
54
|
let selectedPort = null;
|
|
56
55
|
const maxTries = 10;
|
|
57
|
-
|
|
56
|
+
// Rendering only needs local access, unlike the Studio server.
|
|
57
|
+
const host = '127.0.0.1';
|
|
58
58
|
for (let i = 0; i < maxTries; i++) {
|
|
59
59
|
let unlock = () => { };
|
|
60
60
|
try {
|
|
@@ -64,11 +64,11 @@ const serveStatic = async (path, options) => {
|
|
|
64
64
|
desiredPort: (_a = options === null || options === void 0 ? void 0 : options.port) !== null && _a !== void 0 ? _a : undefined,
|
|
65
65
|
from: 3000,
|
|
66
66
|
to: 3100,
|
|
67
|
-
hostsToTry:
|
|
67
|
+
hostsToTry: [host],
|
|
68
68
|
})
|
|
69
69
|
.then(({ port, unlockPort }) => {
|
|
70
70
|
unlock = unlockPort;
|
|
71
|
-
server.listen({ port, host
|
|
71
|
+
server.listen({ port, host });
|
|
72
72
|
server.on('listening', () => {
|
|
73
73
|
resolve(port);
|
|
74
74
|
return unlock();
|
|
@@ -67,10 +67,14 @@ const stringifyFfmpegFilter = ({ channels, volume, fps, assetDuration, chunkLeng
|
|
|
67
67
|
}
|
|
68
68
|
const { toneFrequency, startInVideo } = asset;
|
|
69
69
|
const startInVideoSeconds = startInVideo / fps;
|
|
70
|
+
// A chunk's leading trim only cuts into assets already playing at its start.
|
|
71
|
+
// For later assets, remove that time from the silence before the asset instead.
|
|
72
|
+
const assetTrimLeftOffset = startInVideo === 0 ? trimLeftOffset : 0;
|
|
73
|
+
const startInChunkSeconds = startInVideo === 0 ? 0 : startInVideoSeconds - trimLeftOffset;
|
|
70
74
|
const { trimLeft, maxTrim } = (0, seamless_aac_trim_1.getActualTrimLeft)({
|
|
71
75
|
trimLeft: asset.trimLeft,
|
|
72
76
|
fps,
|
|
73
|
-
trimLeftOffset,
|
|
77
|
+
trimLeftOffset: assetTrimLeftOffset,
|
|
74
78
|
seamless: forSeamlessAacConcatenation,
|
|
75
79
|
assetDuration,
|
|
76
80
|
audioStartFrame: asset.audioStartFrame,
|
|
@@ -84,7 +88,7 @@ const stringifyFfmpegFilter = ({ channels, volume, fps, assetDuration, chunkLeng
|
|
|
84
88
|
}
|
|
85
89
|
const { actualTrimLeft, audibleDuration, filter: trimAndTempoFilter, } = trimAndSetTempo({
|
|
86
90
|
assetDuration,
|
|
87
|
-
trimLeftOffset,
|
|
91
|
+
trimLeftOffset: assetTrimLeftOffset,
|
|
88
92
|
trimRightOffset,
|
|
89
93
|
asset,
|
|
90
94
|
fps,
|
|
@@ -96,8 +100,8 @@ const stringifyFfmpegFilter = ({ channels, volume, fps, assetDuration, chunkLeng
|
|
|
96
100
|
fps,
|
|
97
101
|
trimLeft: actualTrimLeft,
|
|
98
102
|
});
|
|
99
|
-
const padAtEnd = chunkLengthInSeconds - audibleDuration -
|
|
100
|
-
const padStart =
|
|
103
|
+
const padAtEnd = chunkLengthInSeconds - audibleDuration - startInChunkSeconds;
|
|
104
|
+
const padStart = startInChunkSeconds +
|
|
101
105
|
(asset.trimLeft === 0 ? presentationTimeOffsetInSeconds : 0);
|
|
102
106
|
// Set as few filters as possible, as combining them can create noise
|
|
103
107
|
return {
|
package/package.json
CHANGED
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
"url": "https://github.com/remotion-dev/remotion/tree/main/packages/renderer"
|
|
4
4
|
},
|
|
5
5
|
"name": "@remotion/renderer",
|
|
6
|
-
"version": "4.0.
|
|
6
|
+
"version": "4.0.537",
|
|
7
7
|
"description": "Render Remotion videos using Node.js or Bun",
|
|
8
8
|
"main": "dist/index.js",
|
|
9
9
|
"types": "dist/index.d.ts",
|
|
@@ -22,11 +22,11 @@
|
|
|
22
22
|
},
|
|
23
23
|
"dependencies": {
|
|
24
24
|
"execa": "5.1.1",
|
|
25
|
-
"remotion": "4.0.
|
|
26
|
-
"@remotion/streaming": "4.0.
|
|
25
|
+
"remotion": "4.0.537",
|
|
26
|
+
"@remotion/streaming": "4.0.537",
|
|
27
27
|
"source-map": "0.8.0",
|
|
28
28
|
"ws": "8.21.0",
|
|
29
|
-
"@remotion/licensing": "4.0.
|
|
29
|
+
"@remotion/licensing": "4.0.537"
|
|
30
30
|
},
|
|
31
31
|
"peerDependencies": {
|
|
32
32
|
"react": ">=16.8.0",
|
|
@@ -40,19 +40,21 @@
|
|
|
40
40
|
"react-dom": "19.2.3",
|
|
41
41
|
"@typescript/native-preview": "7.0.0-dev.20260217.1",
|
|
42
42
|
"@types/ws": "8.5.10",
|
|
43
|
-
"@remotion/example-videos": "4.0.
|
|
44
|
-
"@remotion/eslint-config-internal": "4.0.
|
|
43
|
+
"@remotion/example-videos": "4.0.537",
|
|
44
|
+
"@remotion/eslint-config-internal": "4.0.537",
|
|
45
45
|
"eslint": "9.19.0",
|
|
46
|
-
"@types/node": "20.12.14"
|
|
46
|
+
"@types/node": "20.12.14",
|
|
47
|
+
"@types/pngjs": "6.0.5",
|
|
48
|
+
"pngjs": "7.0.0"
|
|
47
49
|
},
|
|
48
50
|
"optionalDependencies": {
|
|
49
|
-
"@remotion/compositor-darwin-arm64": "4.0.
|
|
50
|
-
"@remotion/compositor-darwin-x64": "4.0.
|
|
51
|
-
"@remotion/compositor-linux-arm64-gnu": "4.0.
|
|
52
|
-
"@remotion/compositor-linux-arm64-musl": "4.0.
|
|
53
|
-
"@remotion/compositor-linux-x64-gnu": "4.0.
|
|
54
|
-
"@remotion/compositor-linux-x64-musl": "4.0.
|
|
55
|
-
"@remotion/compositor-win32-x64-msvc": "4.0.
|
|
51
|
+
"@remotion/compositor-darwin-arm64": "4.0.537",
|
|
52
|
+
"@remotion/compositor-darwin-x64": "4.0.537",
|
|
53
|
+
"@remotion/compositor-linux-arm64-gnu": "4.0.537",
|
|
54
|
+
"@remotion/compositor-linux-arm64-musl": "4.0.537",
|
|
55
|
+
"@remotion/compositor-linux-x64-gnu": "4.0.537",
|
|
56
|
+
"@remotion/compositor-linux-x64-musl": "4.0.537",
|
|
57
|
+
"@remotion/compositor-win32-x64-msvc": "4.0.537"
|
|
56
58
|
},
|
|
57
59
|
"keywords": [
|
|
58
60
|
"remotion",
|
|
@@ -1,30 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.experimentalClientSideRenderingOption = void 0;
|
|
4
|
-
const jsx_runtime_1 = require("react/jsx-runtime");
|
|
5
|
-
let experimentalClientSideRenderingEnabled = false;
|
|
6
|
-
const cliFlag = 'enable-experimental-client-side-rendering';
|
|
7
|
-
exports.experimentalClientSideRenderingOption = {
|
|
8
|
-
name: 'Enable Experimental Client-Side Rendering',
|
|
9
|
-
cliFlag,
|
|
10
|
-
description: () => (jsx_runtime_1.jsx(jsx_runtime_1.Fragment, { children: "Enable WIP client-side rendering in the Remotion Studio. See https://www.remotion.dev/docs/client-side-rendering/ for notes." })),
|
|
11
|
-
ssrName: null,
|
|
12
|
-
docLink: 'https://www.remotion.dev/docs/client-side-rendering',
|
|
13
|
-
type: false,
|
|
14
|
-
getValue: ({ commandLine }) => {
|
|
15
|
-
if (commandLine[cliFlag] !== null) {
|
|
16
|
-
return {
|
|
17
|
-
value: commandLine[cliFlag],
|
|
18
|
-
source: 'cli',
|
|
19
|
-
};
|
|
20
|
-
}
|
|
21
|
-
return {
|
|
22
|
-
value: experimentalClientSideRenderingEnabled,
|
|
23
|
-
source: 'config',
|
|
24
|
-
};
|
|
25
|
-
},
|
|
26
|
-
setConfig(value) {
|
|
27
|
-
experimentalClientSideRenderingEnabled = value;
|
|
28
|
-
},
|
|
29
|
-
id: cliFlag,
|
|
30
|
-
};
|
|
@@ -1,13 +0,0 @@
|
|
|
1
|
-
export declare const hasEnoughMemoryForParallelEncoding: ({ freeMemory, estimatedUsage, }: {
|
|
2
|
-
freeMemory: number;
|
|
3
|
-
estimatedUsage: number;
|
|
4
|
-
}) => boolean;
|
|
5
|
-
export declare const shouldUseParallelEncoding: ({ width, height, logLevel, }: {
|
|
6
|
-
width: number;
|
|
7
|
-
height: number;
|
|
8
|
-
logLevel: "error" | "info" | "trace" | "verbose" | "warn";
|
|
9
|
-
}) => {
|
|
10
|
-
hasEnoughMemory: boolean;
|
|
11
|
-
freeMemory: number;
|
|
12
|
-
estimatedUsage: number;
|
|
13
|
-
};
|