@remotion/renderer 4.0.420 → 4.0.422

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.
@@ -297,7 +297,7 @@ var printUsefulErrorMessage = (err, logLevel, indent) => {
297
297
  Log.warn({
298
298
  indent,
299
299
  logLevel
300
- }, '\uD83D\uDCA1 You might need to set the OpenGL renderer to "angle-egl", "angle" (or "swangle" if rendering on lambda). Learn why at https://www.remotion.dev/docs/three');
300
+ }, '\uD83D\uDCA1 You might need to set the OpenGL renderer to "angle". Learn why at https://www.remotion.dev/docs/three');
301
301
  Log.warn({
302
302
  indent,
303
303
  logLevel
@@ -4645,21 +4645,34 @@ var validateFrameRange = (frameRange) => {
4645
4645
  if (frameRange.length !== 2) {
4646
4646
  throw new TypeError("Frame range must be a tuple, got an array with length " + frameRange.length);
4647
4647
  }
4648
- for (const value of frameRange) {
4649
- if (typeof value !== "number") {
4650
- throw new Error(`Each value of frame range must be a number, but got ${typeof value} (${JSON.stringify(value)})`);
4651
- }
4652
- if (!Number.isFinite(value)) {
4653
- throw new TypeError("Each value of frame range must be finite, but got " + value);
4654
- }
4655
- if (!Number.isInteger(value)) {
4656
- throw new Error(`Each value of frame range must be an integer, but got a float (${value})`);
4657
- }
4658
- if (value < 0) {
4659
- throw new Error(`Each value of frame range must be non-negative, but got ${value}`);
4660
- }
4661
- }
4662
4648
  const [first, second] = frameRange;
4649
+ if (typeof first !== "number") {
4650
+ throw new Error(`The first value of frame range must be a number, but got ${typeof first} (${JSON.stringify(first)})`);
4651
+ }
4652
+ if (!Number.isFinite(first)) {
4653
+ throw new TypeError("The first value of frame range must be finite, but got " + first);
4654
+ }
4655
+ if (!Number.isInteger(first)) {
4656
+ throw new Error(`The first value of frame range must be an integer, but got a float (${first})`);
4657
+ }
4658
+ if (first < 0) {
4659
+ throw new Error(`The first value of frame range must be non-negative, but got ${first}`);
4660
+ }
4661
+ if (second === null) {
4662
+ return;
4663
+ }
4664
+ if (typeof second !== "number") {
4665
+ throw new Error(`The second value of frame range must be a number or null, but got ${typeof second} (${JSON.stringify(second)})`);
4666
+ }
4667
+ if (!Number.isFinite(second)) {
4668
+ throw new TypeError("The second value of frame range must be finite, but got " + second);
4669
+ }
4670
+ if (!Number.isInteger(second)) {
4671
+ throw new Error(`The second value of frame range must be an integer, but got a float (${second})`);
4672
+ }
4673
+ if (second < 0) {
4674
+ throw new Error(`The second value of frame range must be non-negative, but got ${second}`);
4675
+ }
4663
4676
  if (second < first) {
4664
4677
  throw new Error("The second value of frame range must be not smaller than the first one, but got " + frameRange.join("-"));
4665
4678
  }
@@ -15338,6 +15351,13 @@ var numberTo32BiIntLittleEndian = (num) => {
15338
15351
  var numberTo16BitLittleEndian = (num) => {
15339
15352
  return new Uint8Array([num & 255, num >> 8 & 255]);
15340
15353
  };
15354
+ var correctFloatingPointError = (value) => {
15355
+ const rounded = Math.round(value);
15356
+ if (Math.abs(value - rounded) < 0.00001) {
15357
+ return rounded;
15358
+ }
15359
+ return value;
15360
+ };
15341
15361
  var BIT_DEPTH = 16;
15342
15362
  var BYTES_PER_SAMPLE = BIT_DEPTH / 8;
15343
15363
  var NUMBER_OF_CHANNELS = 2;
@@ -15442,13 +15462,13 @@ var makeInlineAudioMixing = (dir) => {
15442
15462
  const samplesToShaveFromStart = trimLeftOffset * DEFAULT_SAMPLE_RATE;
15443
15463
  const samplesToShaveFromEnd = trimRightOffset * DEFAULT_SAMPLE_RATE;
15444
15464
  if (isFirst) {
15445
- arr = arr.slice(Math.floor(samplesToShaveFromStart) * NUMBER_OF_CHANNELS);
15465
+ arr = arr.slice(Math.floor(correctFloatingPointError(samplesToShaveFromStart)) * NUMBER_OF_CHANNELS);
15446
15466
  }
15447
15467
  if (isLast) {
15448
- arr = arr.slice(0, arr.length + Math.ceil(samplesToShaveFromEnd) * NUMBER_OF_CHANNELS);
15468
+ arr = arr.slice(0, arr.length + Math.ceil(correctFloatingPointError(samplesToShaveFromEnd)) * NUMBER_OF_CHANNELS);
15449
15469
  }
15450
15470
  const positionInSeconds = (asset.frame - firstFrame) / fps - (isFirst ? 0 : trimLeftOffset);
15451
- const position = Math.floor(positionInSeconds * DEFAULT_SAMPLE_RATE) * NUMBER_OF_CHANNELS * BYTES_PER_SAMPLE;
15471
+ const position = Math.floor(correctFloatingPointError(positionInSeconds * DEFAULT_SAMPLE_RATE)) * NUMBER_OF_CHANNELS * BYTES_PER_SAMPLE;
15452
15472
  writeSync(fileDescriptor, arr, 0, arr.byteLength, 44 + position);
15453
15473
  };
15454
15474
  return {
@@ -15633,7 +15653,8 @@ var testPortAvailableOnMultipleHosts = async ({
15633
15653
  var getPort = async ({
15634
15654
  from,
15635
15655
  to,
15636
- hostsToTest
15656
+ hostsToTest,
15657
+ onPortUnavailable
15637
15658
  }) => {
15638
15659
  const ports = makeRange(from, to);
15639
15660
  for (const port of ports) {
@@ -15641,7 +15662,13 @@ var getPort = async ({
15641
15662
  port,
15642
15663
  hosts: hostsToTest
15643
15664
  }) === "available") {
15644
- return port;
15665
+ return { port, didUsePort: false };
15666
+ }
15667
+ if (onPortUnavailable) {
15668
+ const action = await onPortUnavailable(port);
15669
+ if (action === "stop") {
15670
+ return { port, didUsePort: true };
15671
+ }
15645
15672
  }
15646
15673
  }
15647
15674
  throw new Error("No available ports found");
@@ -15651,7 +15678,8 @@ var getDesiredPort = async ({
15651
15678
  desiredPort,
15652
15679
  from,
15653
15680
  hostsToTry,
15654
- to
15681
+ to,
15682
+ onPortUnavailable
15655
15683
  }) => {
15656
15684
  await portLocks.waitForAllToBeDone();
15657
15685
  const lockPortSelection = portLocks.lock();
@@ -15660,14 +15688,28 @@ var getDesiredPort = async ({
15660
15688
  port: desiredPort,
15661
15689
  hosts: hostsToTry
15662
15690
  }) === "available") {
15663
- return { port: desiredPort, unlockPort };
15691
+ return { port: desiredPort, unlockPort, didUsePort: false };
15692
+ }
15693
+ if (typeof desiredPort !== "undefined" && onPortUnavailable) {
15694
+ const action = await onPortUnavailable(desiredPort);
15695
+ if (action === "stop") {
15696
+ return { port: desiredPort, unlockPort, didUsePort: true };
15697
+ }
15664
15698
  }
15665
- const actualPort = await getPort({ from, to, hostsToTest: hostsToTry });
15666
- if (desiredPort && desiredPort !== actualPort) {
15699
+ const result = await getPort({
15700
+ from,
15701
+ to,
15702
+ hostsToTest: hostsToTry,
15703
+ onPortUnavailable
15704
+ });
15705
+ if (result.didUsePort) {
15706
+ return { port: result.port, unlockPort, didUsePort: true };
15707
+ }
15708
+ if (desiredPort && desiredPort !== result.port) {
15667
15709
  unlockPort();
15668
15710
  throw new Error(`You specified port ${desiredPort} to be used for the HTTP server, but it is not available. Choose a different port or remove the setting to let Remotion automatically select a free port.`);
15669
15711
  }
15670
- return { port: actualPort, unlockPort };
15712
+ return { port: result.port, unlockPort, didUsePort: false };
15671
15713
  };
15672
15714
  var makeRange = (from, to) => {
15673
15715
  if (!Number.isInteger(from) || !Number.isInteger(to)) {
@@ -16832,7 +16874,7 @@ var printUsefulErrorMessage = (err, logLevel, indent) => {
16832
16874
  Log.warn({
16833
16875
  indent,
16834
16876
  logLevel
16835
- }, '\uD83D\uDCA1 You might need to set the OpenGL renderer to "angle-egl", "angle" (or "swangle" if rendering on lambda). Learn why at https://www.remotion.dev/docs/three');
16877
+ }, '\uD83D\uDCA1 You might need to set the OpenGL renderer to "angle". Learn why at https://www.remotion.dev/docs/three');
16836
16878
  Log.warn({
16837
16879
  indent,
16838
16880
  logLevel
@@ -17347,10 +17389,14 @@ var getRealFrameRange = (durationInFrames, frameRange) => {
17347
17389
  }
17348
17390
  return [frameRange, frameRange];
17349
17391
  }
17350
- if (frameRange[1] >= durationInFrames || frameRange[0] < 0) {
17351
- throw new Error(`The "durationInFrames" of the <Composition /> was evaluated to be ${durationInFrames}, but frame range ${frameRange.join("-")} is not inbetween 0-${durationInFrames - 1}`);
17392
+ const resolved = [
17393
+ frameRange[0],
17394
+ frameRange[1] === null ? durationInFrames - 1 : frameRange[1]
17395
+ ];
17396
+ if (resolved[0] < 0 || resolved[1] >= durationInFrames || resolved[0] > resolved[1]) {
17397
+ throw new Error(`The "durationInFrames" of the <Composition /> was evaluated to be ${durationInFrames}, but frame range ${resolved.join("-")} is not inbetween 0-${durationInFrames - 1}`);
17352
17398
  }
17353
- return frameRange;
17399
+ return resolved;
17354
17400
  };
17355
17401
 
17356
17402
  // src/image-format.ts
@@ -1,2 +1,2 @@
1
- export type FrameRange = number | [number, number];
1
+ export type FrameRange = number | [number, number] | [number, null];
2
2
  export declare const validateFrameRange: (frameRange: FrameRange | null) => void;
@@ -22,21 +22,34 @@ const validateFrameRange = (frameRange) => {
22
22
  throw new TypeError('Frame range must be a tuple, got an array with length ' +
23
23
  frameRange.length);
24
24
  }
25
- for (const value of frameRange) {
26
- if (typeof value !== 'number') {
27
- throw new Error(`Each value of frame range must be a number, but got ${typeof value} (${JSON.stringify(value)})`);
28
- }
29
- if (!Number.isFinite(value)) {
30
- throw new TypeError('Each value of frame range must be finite, but got ' + value);
31
- }
32
- if (!Number.isInteger(value)) {
33
- throw new Error(`Each value of frame range must be an integer, but got a float (${value})`);
34
- }
35
- if (value < 0) {
36
- throw new Error(`Each value of frame range must be non-negative, but got ${value}`);
37
- }
38
- }
39
25
  const [first, second] = frameRange;
26
+ if (typeof first !== 'number') {
27
+ throw new Error(`The first value of frame range must be a number, but got ${typeof first} (${JSON.stringify(first)})`);
28
+ }
29
+ if (!Number.isFinite(first)) {
30
+ throw new TypeError('The first value of frame range must be finite, but got ' + first);
31
+ }
32
+ if (!Number.isInteger(first)) {
33
+ throw new Error(`The first value of frame range must be an integer, but got a float (${first})`);
34
+ }
35
+ if (first < 0) {
36
+ throw new Error(`The first value of frame range must be non-negative, but got ${first}`);
37
+ }
38
+ if (second === null) {
39
+ return;
40
+ }
41
+ if (typeof second !== 'number') {
42
+ throw new Error(`The second value of frame range must be a number or null, but got ${typeof second} (${JSON.stringify(second)})`);
43
+ }
44
+ if (!Number.isFinite(second)) {
45
+ throw new TypeError('The second value of frame range must be finite, but got ' + second);
46
+ }
47
+ if (!Number.isInteger(second)) {
48
+ throw new Error(`The second value of frame range must be an integer, but got a float (${second})`);
49
+ }
50
+ if (second < 0) {
51
+ throw new Error(`The second value of frame range must be non-negative, but got ${second}`);
52
+ }
40
53
  if (second < first) {
41
54
  throw new Error('The second value of frame range must be not smaller than the first one, but got ' +
42
55
  frameRange.join('-'));
@@ -11,9 +11,15 @@ const getRealFrameRange = (durationInFrames, frameRange) => {
11
11
  }
12
12
  return [frameRange, frameRange];
13
13
  }
14
- if (frameRange[1] >= durationInFrames || frameRange[0] < 0) {
15
- throw new Error(`The "durationInFrames" of the <Composition /> was evaluated to be ${durationInFrames}, but frame range ${frameRange.join('-')} is not inbetween 0-${durationInFrames - 1}`);
14
+ const resolved = [
15
+ frameRange[0],
16
+ frameRange[1] === null ? durationInFrames - 1 : frameRange[1],
17
+ ];
18
+ if (resolved[0] < 0 ||
19
+ resolved[1] >= durationInFrames ||
20
+ resolved[0] > resolved[1]) {
21
+ throw new Error(`The "durationInFrames" of the <Composition /> was evaluated to be ${durationInFrames}, but frame range ${resolved.join('-')} is not inbetween 0-${durationInFrames - 1}`);
16
22
  }
17
- return frameRange;
23
+ return resolved;
18
24
  };
19
25
  exports.getRealFrameRange = getRealFrameRange;
@@ -3,13 +3,19 @@ export declare const testPortAvailableOnMultipleHosts: ({ hosts, port, }: {
3
3
  port: number;
4
4
  hosts: string[];
5
5
  }) => Promise<PortStatus>;
6
- export declare const getDesiredPort: ({ desiredPort, from, hostsToTry, to, }: {
6
+ export declare const getDesiredPort: ({ desiredPort, from, hostsToTry, to, onPortUnavailable, }: {
7
7
  desiredPort: number | undefined;
8
8
  from: number;
9
9
  to: number;
10
10
  hostsToTry: string[];
11
+ onPortUnavailable?: ((port: number) => Promise<"continue" | "stop">) | undefined;
11
12
  }) => Promise<{
12
13
  port: number;
13
14
  unlockPort: () => void;
15
+ didUsePort: false;
16
+ } | {
17
+ port: number;
18
+ unlockPort: () => void;
19
+ didUsePort: true;
14
20
  }>;
15
21
  export {};
package/dist/get-port.js CHANGED
@@ -34,20 +34,26 @@ const testPortAvailableOnMultipleHosts = async ({ hosts, port, }) => {
34
34
  return results.every((r) => r === 'available') ? 'available' : 'unavailable';
35
35
  };
36
36
  exports.testPortAvailableOnMultipleHosts = testPortAvailableOnMultipleHosts;
37
- const getPort = async ({ from, to, hostsToTest, }) => {
37
+ const getPort = async ({ from, to, hostsToTest, onPortUnavailable, }) => {
38
38
  const ports = makeRange(from, to);
39
39
  for (const port of ports) {
40
40
  if ((await (0, exports.testPortAvailableOnMultipleHosts)({
41
41
  port,
42
42
  hosts: hostsToTest,
43
43
  })) === 'available') {
44
- return port;
44
+ return { port, didUsePort: false };
45
+ }
46
+ if (onPortUnavailable) {
47
+ const action = await onPortUnavailable(port);
48
+ if (action === 'stop') {
49
+ return { port, didUsePort: true };
50
+ }
45
51
  }
46
52
  }
47
53
  throw new Error('No available ports found');
48
54
  };
49
55
  const portLocks = (0, locks_1.createLock)({ timeout: 10000 });
50
- const getDesiredPort = async ({ desiredPort, from, hostsToTry, to, }) => {
56
+ const getDesiredPort = async ({ desiredPort, from, hostsToTry, to, onPortUnavailable, }) => {
51
57
  await portLocks.waitForAllToBeDone();
52
58
  const lockPortSelection = portLocks.lock();
53
59
  const unlockPort = () => portLocks.unlock(lockPortSelection);
@@ -56,15 +62,29 @@ const getDesiredPort = async ({ desiredPort, from, hostsToTry, to, }) => {
56
62
  port: desiredPort,
57
63
  hosts: hostsToTry,
58
64
  })) === 'available') {
59
- return { port: desiredPort, unlockPort };
65
+ return { port: desiredPort, unlockPort, didUsePort: false };
66
+ }
67
+ if (typeof desiredPort !== 'undefined' && onPortUnavailable) {
68
+ const action = await onPortUnavailable(desiredPort);
69
+ if (action === 'stop') {
70
+ return { port: desiredPort, unlockPort, didUsePort: true };
71
+ }
72
+ }
73
+ const result = await getPort({
74
+ from,
75
+ to,
76
+ hostsToTest: hostsToTry,
77
+ onPortUnavailable,
78
+ });
79
+ if (result.didUsePort) {
80
+ return { port: result.port, unlockPort, didUsePort: true };
60
81
  }
61
- const actualPort = await getPort({ from, to, hostsToTest: hostsToTry });
62
82
  // If did specify a port but did not get that one, fail hard.
63
- if (desiredPort && desiredPort !== actualPort) {
83
+ if (desiredPort && desiredPort !== result.port) {
64
84
  unlockPort();
65
85
  throw new Error(`You specified port ${desiredPort} to be used for the HTTP server, but it is not available. Choose a different port or remove the setting to let Remotion automatically select a free port.`);
66
86
  }
67
- return { port: actualPort, unlockPort };
87
+ return { port: result.port, unlockPort, didUsePort: false };
68
88
  };
69
89
  exports.getDesiredPort = getDesiredPort;
70
90
  const makeRange = (from, to) => {
package/dist/index.d.ts CHANGED
@@ -106,14 +106,20 @@ export declare const RenderInternals: {
106
106
  SymbolicateableError: typeof SymbolicateableError;
107
107
  getFramesToRender: (frameRange: [number, number], everyNthFrame: number) => number[];
108
108
  getExtensionOfFilename: (filename: string | null) => string | null;
109
- getDesiredPort: ({ desiredPort, from, hostsToTry, to, }: {
109
+ getDesiredPort: ({ desiredPort, from, hostsToTry, to, onPortUnavailable, }: {
110
110
  desiredPort: number | undefined;
111
111
  from: number;
112
112
  to: number;
113
113
  hostsToTry: string[];
114
+ onPortUnavailable?: ((port: number) => Promise<"continue" | "stop">) | undefined;
114
115
  }) => Promise<{
115
116
  port: number;
116
117
  unlockPort: () => void;
118
+ didUsePort: false;
119
+ } | {
120
+ port: number;
121
+ unlockPort: () => void;
122
+ didUsePort: true;
117
123
  }>;
118
124
  isPathInside: (thePath: string, potentialParent: string) => boolean;
119
125
  execa: {
@@ -0,0 +1,15 @@
1
+ export declare const forceNewStudioOption: {
2
+ name: string;
3
+ cliFlag: "force-new";
4
+ description: () => import("react/jsx-runtime").JSX.Element;
5
+ ssrName: null;
6
+ docLink: string;
7
+ type: boolean;
8
+ getValue: ({ commandLine }: {
9
+ commandLine: Record<string, unknown>;
10
+ }) => {
11
+ value: boolean;
12
+ source: string;
13
+ };
14
+ setConfig(value: boolean): void;
15
+ };
@@ -0,0 +1,29 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.forceNewStudioOption = void 0;
4
+ const jsx_runtime_1 = require("react/jsx-runtime");
5
+ let forceNewEnabled = false;
6
+ const cliFlag = 'force-new';
7
+ exports.forceNewStudioOption = {
8
+ name: 'Force New Studio',
9
+ cliFlag,
10
+ description: () => (jsx_runtime_1.jsx(jsx_runtime_1.Fragment, { children: "Forces starting a new Studio instance even if one is already running on the same port for the same project." })),
11
+ ssrName: null,
12
+ docLink: 'https://www.remotion.dev/docs/config#setforcenewstudioenabled',
13
+ type: false,
14
+ getValue: ({ commandLine }) => {
15
+ if (commandLine[cliFlag] !== undefined) {
16
+ return {
17
+ value: commandLine[cliFlag],
18
+ source: 'cli',
19
+ };
20
+ }
21
+ return {
22
+ value: forceNewEnabled,
23
+ source: 'config',
24
+ };
25
+ },
26
+ setConfig(value) {
27
+ forceNewEnabled = value;
28
+ },
29
+ };
@@ -847,6 +847,51 @@ export declare const allOptions: {
847
847
  };
848
848
  setConfig(value: boolean): void;
849
849
  };
850
+ forceNewStudioOption: {
851
+ name: string;
852
+ cliFlag: "force-new";
853
+ description: () => import("react/jsx-runtime").JSX.Element;
854
+ ssrName: null;
855
+ docLink: string;
856
+ type: boolean;
857
+ getValue: ({ commandLine }: {
858
+ commandLine: Record<string, unknown>;
859
+ }) => {
860
+ value: boolean;
861
+ source: string;
862
+ };
863
+ setConfig(value: boolean): void;
864
+ };
865
+ numberOfSharedAudioTagsOption: {
866
+ name: string;
867
+ cliFlag: "number-of-shared-audio-tags";
868
+ description: () => import("react/jsx-runtime").JSX.Element;
869
+ ssrName: null;
870
+ docLink: string;
871
+ type: number;
872
+ getValue: ({ commandLine }: {
873
+ commandLine: Record<string, unknown>;
874
+ }) => {
875
+ value: number;
876
+ source: string;
877
+ };
878
+ setConfig(value: number): void;
879
+ };
880
+ ipv4Option: {
881
+ name: string;
882
+ cliFlag: "ipv4";
883
+ description: () => import("react/jsx-runtime").JSX.Element;
884
+ ssrName: null;
885
+ docLink: string;
886
+ type: boolean;
887
+ getValue: ({ commandLine }: {
888
+ commandLine: Record<string, unknown>;
889
+ }) => {
890
+ value: boolean;
891
+ source: string;
892
+ };
893
+ setConfig(value: boolean): void;
894
+ };
850
895
  };
851
896
  export type AvailableOptions = keyof typeof allOptions;
852
897
  export type TypeOfOption<Type> = Type extends AnyRemotionOption<infer X> ? X : never;
@@ -23,10 +23,12 @@ const enforce_audio_1 = require("./enforce-audio");
23
23
  const experimental_client_side_rendering_1 = require("./experimental-client-side-rendering");
24
24
  const folder_expiry_1 = require("./folder-expiry");
25
25
  const for_seamless_aac_concatenation_1 = require("./for-seamless-aac-concatenation");
26
+ const force_new_studio_1 = require("./force-new-studio");
26
27
  const gl_1 = require("./gl");
27
28
  const hardware_acceleration_1 = require("./hardware-acceleration");
28
29
  const headless_1 = require("./headless");
29
30
  const image_sequence_pattern_1 = require("./image-sequence-pattern");
31
+ const ipv4_1 = require("./ipv4");
30
32
  const is_production_1 = require("./is-production");
31
33
  const jpeg_quality_1 = require("./jpeg-quality");
32
34
  const keyboard_shortcuts_1 = require("./keyboard-shortcuts");
@@ -36,6 +38,7 @@ const log_level_1 = require("./log-level");
36
38
  const metadata_1 = require("./metadata");
37
39
  const mute_1 = require("./mute");
38
40
  const number_of_gif_loops_1 = require("./number-of-gif-loops");
41
+ const number_of_shared_audio_tags_1 = require("./number-of-shared-audio-tags");
39
42
  const offthreadvideo_cache_size_1 = require("./offthreadvideo-cache-size");
40
43
  const offthreadvideo_threads_1 = require("./offthreadvideo-threads");
41
44
  const on_browser_download_1 = require("./on-browser-download");
@@ -108,4 +111,7 @@ exports.allOptions = {
108
111
  askAIOption: ask_ai_1.askAIOption,
109
112
  experimentalClientSideRenderingOption: experimental_client_side_rendering_1.experimentalClientSideRenderingOption,
110
113
  keyboardShortcutsOption: keyboard_shortcuts_1.keyboardShortcutsOption,
114
+ forceNewStudioOption: force_new_studio_1.forceNewStudioOption,
115
+ numberOfSharedAudioTagsOption: number_of_shared_audio_tags_1.numberOfSharedAudioTagsOption,
116
+ ipv4Option: ipv4_1.ipv4Option,
111
117
  };
@@ -0,0 +1,15 @@
1
+ export declare const ipv4Option: {
2
+ name: string;
3
+ cliFlag: "ipv4";
4
+ description: () => import("react/jsx-runtime").JSX.Element;
5
+ ssrName: null;
6
+ docLink: string;
7
+ type: boolean;
8
+ getValue: ({ commandLine }: {
9
+ commandLine: Record<string, unknown>;
10
+ }) => {
11
+ value: boolean;
12
+ source: string;
13
+ };
14
+ setConfig(value: boolean): void;
15
+ };
@@ -0,0 +1,29 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.ipv4Option = void 0;
4
+ const jsx_runtime_1 = require("react/jsx-runtime");
5
+ let forceIPv4 = false;
6
+ const cliFlag = 'ipv4';
7
+ exports.ipv4Option = {
8
+ name: 'IPv4',
9
+ cliFlag,
10
+ description: () => (jsx_runtime_1.jsx(jsx_runtime_1.Fragment, { children: "Forces Remotion to bind to an IPv4 interface for the Studio server." })),
11
+ ssrName: null,
12
+ docLink: 'https://www.remotion.dev/docs/cli/studio',
13
+ type: false,
14
+ getValue: ({ commandLine }) => {
15
+ if (commandLine[cliFlag] !== undefined) {
16
+ return {
17
+ value: commandLine[cliFlag],
18
+ source: 'cli',
19
+ };
20
+ }
21
+ return {
22
+ value: forceIPv4,
23
+ source: 'config',
24
+ };
25
+ },
26
+ setConfig(value) {
27
+ forceIPv4 = value;
28
+ },
29
+ };
@@ -0,0 +1,15 @@
1
+ export declare const numberOfSharedAudioTagsOption: {
2
+ name: string;
3
+ cliFlag: "number-of-shared-audio-tags";
4
+ description: () => import("react/jsx-runtime").JSX.Element;
5
+ ssrName: null;
6
+ docLink: string;
7
+ type: number;
8
+ getValue: ({ commandLine }: {
9
+ commandLine: Record<string, unknown>;
10
+ }) => {
11
+ value: number;
12
+ source: string;
13
+ };
14
+ setConfig(value: number): void;
15
+ };
@@ -0,0 +1,29 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.numberOfSharedAudioTagsOption = void 0;
4
+ const jsx_runtime_1 = require("react/jsx-runtime");
5
+ let numberOfSharedAudioTags = 0;
6
+ const cliFlag = 'number-of-shared-audio-tags';
7
+ exports.numberOfSharedAudioTagsOption = {
8
+ name: 'Number of shared audio tags',
9
+ cliFlag,
10
+ description: () => (jsx_runtime_1.jsxs(jsx_runtime_1.Fragment, { children: ["Set number of shared audio tags. See", ' ', jsx_runtime_1.jsx("a", { href: "https://www.remotion.dev/docs/player/autoplay#using-the-numberofsharedaudiotags-prop", children: "Using the numberOfSharedAudioTags prop" }), ' ', "for more information."] })),
11
+ ssrName: null,
12
+ docLink: 'https://www.remotion.dev/docs/config#setnumberofsharedaudiotags',
13
+ type: 0,
14
+ getValue: ({ commandLine }) => {
15
+ if (commandLine[cliFlag] !== undefined) {
16
+ return {
17
+ value: commandLine[cliFlag],
18
+ source: 'cli',
19
+ };
20
+ }
21
+ return {
22
+ value: numberOfSharedAudioTags,
23
+ source: 'config',
24
+ };
25
+ },
26
+ setConfig(value) {
27
+ numberOfSharedAudioTags = value;
28
+ },
29
+ };
@@ -58,7 +58,7 @@ const printUsefulErrorMessage = (err, logLevel, indent) => {
58
58
  logger_1.Log.warn({
59
59
  indent,
60
60
  logLevel,
61
- }, '💡 You might need to set the OpenGL renderer to "angle-egl", "angle" (or "swangle" if rendering on lambda). Learn why at https://www.remotion.dev/docs/three');
61
+ }, '💡 You might need to set the OpenGL renderer to "angle". Learn why at https://www.remotion.dev/docs/three');
62
62
  logger_1.Log.warn({
63
63
  indent,
64
64
  logLevel,
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.420",
6
+ "version": "4.0.422",
7
7
  "description": "Render Remotion videos using Node.js or Bun",
8
8
  "main": "dist/index.js",
9
9
  "types": "dist/index.d.ts",
@@ -23,11 +23,11 @@
23
23
  "dependencies": {
24
24
  "execa": "5.1.1",
25
25
  "extract-zip": "2.0.1",
26
- "remotion": "4.0.420",
27
- "@remotion/streaming": "4.0.420",
26
+ "remotion": "4.0.422",
27
+ "@remotion/streaming": "4.0.422",
28
28
  "source-map": "^0.8.0-beta.0",
29
29
  "ws": "8.17.1",
30
- "@remotion/licensing": "4.0.420"
30
+ "@remotion/licensing": "4.0.422"
31
31
  },
32
32
  "peerDependencies": {
33
33
  "react": ">=16.8.0",
@@ -41,19 +41,19 @@
41
41
  "react-dom": "19.2.3",
42
42
  "@typescript/native-preview": "7.0.0-dev.20260105.1",
43
43
  "@types/ws": "8.5.10",
44
- "@remotion/example-videos": "4.0.420",
45
- "@remotion/eslint-config-internal": "4.0.420",
44
+ "@remotion/example-videos": "4.0.422",
45
+ "@remotion/eslint-config-internal": "4.0.422",
46
46
  "eslint": "9.19.0",
47
47
  "@types/node": "20.12.14"
48
48
  },
49
49
  "optionalDependencies": {
50
- "@remotion/compositor-darwin-arm64": "4.0.420",
51
- "@remotion/compositor-darwin-x64": "4.0.420",
52
- "@remotion/compositor-linux-arm64-gnu": "4.0.420",
53
- "@remotion/compositor-linux-arm64-musl": "4.0.420",
54
- "@remotion/compositor-linux-x64-gnu": "4.0.420",
55
- "@remotion/compositor-linux-x64-musl": "4.0.420",
56
- "@remotion/compositor-win32-x64-msvc": "4.0.420"
50
+ "@remotion/compositor-darwin-arm64": "4.0.422",
51
+ "@remotion/compositor-darwin-x64": "4.0.422",
52
+ "@remotion/compositor-linux-arm64-gnu": "4.0.422",
53
+ "@remotion/compositor-linux-arm64-musl": "4.0.422",
54
+ "@remotion/compositor-linux-x64-gnu": "4.0.422",
55
+ "@remotion/compositor-linux-x64-musl": "4.0.422",
56
+ "@remotion/compositor-win32-x64-msvc": "4.0.422"
57
57
  },
58
58
  "keywords": [
59
59
  "remotion",