@remotion/renderer 4.0.414 → 4.0.415

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.
@@ -14,12 +14,14 @@
14
14
  * limitations under the License.
15
15
  */
16
16
  import type { DownloadBrowserProgressFn } from '../options/on-browser-download';
17
+ export declare const TESTED_VERSION = "144.0.7559.20";
17
18
  interface BrowserFetcherRevisionInfo {
18
19
  folderPath: string;
19
20
  executablePath: string;
20
21
  url: string;
21
22
  local: boolean;
22
23
  }
24
+ export declare const readVersionFile: (chromeMode: "chrome-for-testing" | "headless-shell") => string | null;
23
25
  export declare const downloadBrowser: ({ logLevel, indent, onProgress, version, chromeMode, }: {
24
26
  logLevel: "error" | "info" | "trace" | "verbose" | "warn";
25
27
  indent: boolean;
@@ -51,7 +51,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
51
51
  return (mod && mod.__esModule) ? mod : { "default": mod };
52
52
  };
53
53
  Object.defineProperty(exports, "__esModule", { value: true });
54
- exports.getRevisionInfo = exports.downloadBrowser = void 0;
54
+ exports.getRevisionInfo = exports.downloadBrowser = exports.readVersionFile = exports.TESTED_VERSION = void 0;
55
55
  const fs = __importStar(require("node:fs"));
56
56
  const os = __importStar(require("node:os"));
57
57
  const path = __importStar(require("node:path"));
@@ -60,10 +60,10 @@ const node_util_1 = require("node:util");
60
60
  const download_file_1 = require("../assets/download-file");
61
61
  const make_file_executable_1 = require("../compositor/make-file-executable");
62
62
  const get_download_destination_1 = require("./get-download-destination");
63
- const TESTED_VERSION = '134.0.6998.35';
64
- // https://github.com/microsoft/playwright/tree/v1.51.0
63
+ exports.TESTED_VERSION = '144.0.7559.20';
64
+ // https://github.com/microsoft/playwright/blame/e76ca6cba40c26bf22c19cf37398d2b9da9ed465/packages/playwright-core/browsers.json
65
65
  // packages/playwright-core/browsers.json
66
- const PLAYWRIGHT_VERSION = '1161'; // 134.0.6998.35
66
+ const PLAYWRIGHT_VERSION = '1207'; // 144.0.7559.20
67
67
  function getChromeDownloadUrl({ platform, version, chromeMode, }) {
68
68
  if (platform === 'linux-arm64') {
69
69
  if (chromeMode === 'chrome-for-testing') {
@@ -72,9 +72,9 @@ function getChromeDownloadUrl({ platform, version, chromeMode, }) {
72
72
  return `https://playwright.azureedge.net/builds/chromium/${version !== null && version !== void 0 ? version : PLAYWRIGHT_VERSION}/chromium-headless-shell-linux-arm64.zip`;
73
73
  }
74
74
  if (chromeMode === 'headless-shell') {
75
- return `https://storage.googleapis.com/chrome-for-testing-public/${version !== null && version !== void 0 ? version : TESTED_VERSION}/${platform}/chrome-headless-shell-${platform}.zip`;
75
+ return `https://storage.googleapis.com/chrome-for-testing-public/${version !== null && version !== void 0 ? version : exports.TESTED_VERSION}/${platform}/chrome-headless-shell-${platform}.zip`;
76
76
  }
77
- return `https://storage.googleapis.com/chrome-for-testing-public/${version !== null && version !== void 0 ? version : TESTED_VERSION}/${platform}/chrome-${platform}.zip`;
77
+ return `https://storage.googleapis.com/chrome-for-testing-public/${version !== null && version !== void 0 ? version : exports.TESTED_VERSION}/${platform}/chrome-${platform}.zip`;
78
78
  }
79
79
  const mkdirAsync = fs.promises.mkdir;
80
80
  const unlinkAsync = (0, node_util_1.promisify)(fs.unlink.bind(fs));
@@ -104,6 +104,30 @@ const getDownloadsFolder = (chromeMode) => {
104
104
  : 'chrome-for-testing';
105
105
  return path.join((0, get_download_destination_1.getDownloadsCacheDir)(), destination);
106
106
  };
107
+ const getVersionFilePath = (chromeMode) => {
108
+ const downloadsFolder = getDownloadsFolder(chromeMode);
109
+ return path.join(downloadsFolder, 'VERSION');
110
+ };
111
+ const getExpectedVersion = (version, _chromeMode) => {
112
+ if (version) {
113
+ return version;
114
+ }
115
+ return exports.TESTED_VERSION;
116
+ };
117
+ const readVersionFile = (chromeMode) => {
118
+ const versionFilePath = getVersionFilePath(chromeMode);
119
+ try {
120
+ return fs.readFileSync(versionFilePath, 'utf-8').trim();
121
+ }
122
+ catch (_a) {
123
+ return null;
124
+ }
125
+ };
126
+ exports.readVersionFile = readVersionFile;
127
+ const writeVersionFile = (chromeMode, version) => {
128
+ const versionFilePath = getVersionFilePath(chromeMode);
129
+ fs.writeFileSync(versionFilePath, version);
130
+ };
107
131
  const downloadBrowser = async ({ logLevel, indent, onProgress, version, chromeMode, }) => {
108
132
  const platform = getPlatform();
109
133
  const downloadURL = getChromeDownloadUrl({ platform, version, chromeMode });
@@ -114,8 +138,14 @@ const downloadBrowser = async ({ logLevel, indent, onProgress, version, chromeMo
114
138
  const downloadsFolder = getDownloadsFolder(chromeMode);
115
139
  const archivePath = path.join(downloadsFolder, fileName);
116
140
  const outputPath = getFolderPath(downloadsFolder, platform);
141
+ const expectedVersion = getExpectedVersion(version, chromeMode);
117
142
  if (await existsAsync(outputPath)) {
118
- return (0, exports.getRevisionInfo)(chromeMode);
143
+ const installedVersion = (0, exports.readVersionFile)(chromeMode);
144
+ if (installedVersion === expectedVersion) {
145
+ return (0, exports.getRevisionInfo)(chromeMode);
146
+ }
147
+ // VERSION file missing or mismatched - delete and re-download
148
+ fs.rmSync(outputPath, { recursive: true, force: true });
119
149
  }
120
150
  if (!(await existsAsync(downloadsFolder))) {
121
151
  await mkdirAsync(downloadsFolder, {
@@ -167,6 +197,7 @@ const downloadBrowser = async ({ logLevel, indent, onProgress, version, chromeMo
167
197
  await unlinkAsync(archivePath);
168
198
  }
169
199
  }
200
+ writeVersionFile(chromeMode, expectedVersion);
170
201
  const revisionInfo = (0, exports.getRevisionInfo)(chromeMode);
171
202
  (0, make_file_executable_1.makeFileExecutableIfItIsNot)(revisionInfo.executablePath);
172
203
  return revisionInfo;
@@ -0,0 +1,14 @@
1
+ type ParsedBrowserLogMessage = {
2
+ day: number;
3
+ month: number;
4
+ hour: number;
5
+ minute: number;
6
+ seconds: number;
7
+ microseconds: number;
8
+ level: string;
9
+ location: string;
10
+ lineNumber: number;
11
+ message: string;
12
+ };
13
+ export declare const parseBrowserLogMessage: (input: string) => ParsedBrowserLogMessage | null;
14
+ export {};
@@ -0,0 +1,38 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.parseBrowserLogMessage = void 0;
4
+ const parseBrowserLogMessage = (input) => {
5
+ var _a;
6
+ // Chrome <144: [MMDD/HHMMSS.UUUUUU:LEVEL:LOCATION(LINE)] message
7
+ // Chrome 144+: [MMDD/HHMMSS.UUUUUU:LEVEL:LOCATION:LINE] message
8
+ const format = /^\[([0-9]{4})\/([0-9]{6})\.([0-9]{6}):([A-Z]+):(.*?)(?:\(([0-9]+)\)|:([0-9]+))\](.*)/;
9
+ const match = input.match(format);
10
+ if (!match) {
11
+ return null;
12
+ }
13
+ const date = match[1];
14
+ const day = parseInt(date.slice(0, 2), 10);
15
+ const month = parseInt(date.slice(2, 4), 10);
16
+ const time = match[2];
17
+ const hour = parseInt(time.slice(0, 2), 10);
18
+ const minute = parseInt(time.slice(2, 4), 10);
19
+ const seconds = parseInt(time.slice(4, 6), 10);
20
+ const microseconds = parseInt(match[3], 10);
21
+ const level = match[4];
22
+ const location = match[5];
23
+ const lineNumber = parseInt((_a = match[6]) !== null && _a !== void 0 ? _a : match[7], 10);
24
+ const message = match[8].trim();
25
+ return {
26
+ day,
27
+ month,
28
+ hour,
29
+ minute,
30
+ seconds,
31
+ microseconds,
32
+ level,
33
+ location,
34
+ lineNumber,
35
+ message,
36
+ };
37
+ };
38
+ exports.parseBrowserLogMessage = parseBrowserLogMessage;
@@ -1,17 +1,4 @@
1
1
  export declare const shouldLogBrowserMessage: (message: string) => boolean;
2
- type ParsedBrowserLogMessage = {
3
- day: number;
4
- month: number;
5
- hour: number;
6
- minute: number;
7
- seconds: number;
8
- microseconds: number;
9
- level: string;
10
- location: string;
11
- lineNumber: number;
12
- message: string;
13
- };
14
- export declare const parseBrowserLogMessage: (input: string) => ParsedBrowserLogMessage | null;
15
2
  export declare const formatChromeMessage: (input: string) => {
16
3
  output: string;
17
4
  tag: string;
@@ -1,6 +1,7 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.parseChromeLogLocation = exports.formatChromeMessage = exports.parseBrowserLogMessage = exports.shouldLogBrowserMessage = void 0;
3
+ exports.parseChromeLogLocation = exports.formatChromeMessage = exports.shouldLogBrowserMessage = void 0;
4
+ const parse_browser_log_message_1 = require("./parse-browser-log-message");
4
5
  const shouldLogBrowserMessage = (message) => {
5
6
  // Not relevant for the user
6
7
  if (message.startsWith('DevTools listening on')) {
@@ -45,40 +46,8 @@ const shouldLogBrowserMessage = (message) => {
45
46
  return true;
46
47
  };
47
48
  exports.shouldLogBrowserMessage = shouldLogBrowserMessage;
48
- const parseBrowserLogMessage = (input) => {
49
- const format = /^\[([0-9]{4})\/([0-9]{6})\.([0-9]{6}):([A-Z]+):(.*)\(([0-9]+)\)\](.*)/;
50
- const match = input.match(format);
51
- if (!match) {
52
- return null;
53
- }
54
- const date = match[1];
55
- const day = parseInt(date.slice(0, 2), 10);
56
- const month = parseInt(date.slice(2, 4), 10);
57
- const time = match[2];
58
- const hour = parseInt(time.slice(0, 2), 10);
59
- const minute = parseInt(time.slice(2, 4), 10);
60
- const seconds = parseInt(time.slice(4, 6), 10);
61
- const microseconds = parseInt(match[3], 10);
62
- const level = match[4];
63
- const location = match[5];
64
- const lineNumber = parseInt(match[6], 10);
65
- const message = match[7].trim();
66
- return {
67
- day,
68
- month,
69
- hour,
70
- minute,
71
- seconds,
72
- microseconds,
73
- level,
74
- location,
75
- lineNumber,
76
- message,
77
- };
78
- };
79
- exports.parseBrowserLogMessage = parseBrowserLogMessage;
80
49
  const formatChromeMessage = (input) => {
81
- const parsed = (0, exports.parseBrowserLogMessage)(input);
50
+ const parsed = (0, parse_browser_log_message_1.parseBrowserLogMessage)(input);
82
51
  if (!parsed) {
83
52
  return { output: input, tag: 'chrome' };
84
53
  }
@@ -10,6 +10,9 @@ export type BrowserStatus = {
10
10
  path: string;
11
11
  } | {
12
12
  type: 'no-browser';
13
+ } | {
14
+ type: 'version-mismatch';
15
+ actualVersion: string | null;
13
16
  };
14
17
  type InternalEnsureBrowserOptions = {
15
18
  browserExecutable: BrowserExecutable;
@@ -7,10 +7,17 @@ exports.ensureBrowser = exports.internalEnsureBrowser = void 0;
7
7
  const fs_1 = __importDefault(require("fs"));
8
8
  const BrowserFetcher_1 = require("./browser/BrowserFetcher");
9
9
  const browser_download_progress_bar_1 = require("./browser/browser-download-progress-bar");
10
+ const logger_1 = require("./logger");
10
11
  let currentEnsureBrowserOperation = Promise.resolve();
11
12
  const internalEnsureBrowserUncapped = async ({ indent, logLevel, browserExecutable, onBrowserDownload, chromeMode, }) => {
12
13
  const status = getBrowserStatus({ browserExecutable, chromeMode });
13
- if (status.type === 'no-browser') {
14
+ if (status.type === 'version-mismatch') {
15
+ const versionInfo = status.actualVersion
16
+ ? ` (installed: ${status.actualVersion})`
17
+ : '';
18
+ logger_1.Log.info({ indent, logLevel }, `This version of Remotion uses Chrome version ${BrowserFetcher_1.TESTED_VERSION}, but the installed one differs${versionInfo}. Re-downloading.`);
19
+ }
20
+ if (status.type === 'no-browser' || status.type === 'version-mismatch') {
14
21
  const { onProgress, version } = onBrowserDownload({ chromeMode });
15
22
  await (0, BrowserFetcher_1.downloadBrowser)({ indent, logLevel, onProgress, version, chromeMode });
16
23
  }
@@ -31,7 +38,11 @@ const getBrowserStatus = ({ browserExecutable, chromeMode, }) => {
31
38
  }
32
39
  const revision = (0, BrowserFetcher_1.getRevisionInfo)(chromeMode);
33
40
  if (revision.local && fs_1.default.existsSync(revision.executablePath)) {
34
- return { path: revision.executablePath, type: 'local-puppeteer-browser' };
41
+ const actualVersion = (0, BrowserFetcher_1.readVersionFile)(chromeMode);
42
+ if (actualVersion === BrowserFetcher_1.TESTED_VERSION) {
43
+ return { path: revision.executablePath, type: 'local-puppeteer-browser' };
44
+ }
45
+ return { type: 'version-mismatch', actualVersion };
35
46
  }
36
47
  return { type: 'no-browser' };
37
48
  };
@@ -3206,6 +3206,39 @@ class NodeWebSocketTransport {
3206
3206
  }
3207
3207
  }
3208
3208
 
3209
+ // src/browser/parse-browser-log-message.ts
3210
+ var parseBrowserLogMessage = (input) => {
3211
+ const format2 = /^\[([0-9]{4})\/([0-9]{6})\.([0-9]{6}):([A-Z]+):(.*?)(?:\(([0-9]+)\)|:([0-9]+))\](.*)/;
3212
+ const match = input.match(format2);
3213
+ if (!match) {
3214
+ return null;
3215
+ }
3216
+ const date = match[1];
3217
+ const day = parseInt(date.slice(0, 2), 10);
3218
+ const month = parseInt(date.slice(2, 4), 10);
3219
+ const time = match[2];
3220
+ const hour = parseInt(time.slice(0, 2), 10);
3221
+ const minute = parseInt(time.slice(2, 4), 10);
3222
+ const seconds = parseInt(time.slice(4, 6), 10);
3223
+ const microseconds = parseInt(match[3], 10);
3224
+ const level = match[4];
3225
+ const location = match[5];
3226
+ const lineNumber = parseInt(match[6] ?? match[7], 10);
3227
+ const message = match[8].trim();
3228
+ return {
3229
+ day,
3230
+ month,
3231
+ hour,
3232
+ minute,
3233
+ seconds,
3234
+ microseconds,
3235
+ level,
3236
+ location,
3237
+ lineNumber,
3238
+ message
3239
+ };
3240
+ };
3241
+
3209
3242
  // src/browser/should-log-message.ts
3210
3243
  var shouldLogBrowserMessage = (message) => {
3211
3244
  if (message.startsWith("DevTools listening on")) {
@@ -3246,37 +3279,6 @@ var shouldLogBrowserMessage = (message) => {
3246
3279
  }
3247
3280
  return true;
3248
3281
  };
3249
- var parseBrowserLogMessage = (input) => {
3250
- const format2 = /^\[([0-9]{4})\/([0-9]{6})\.([0-9]{6}):([A-Z]+):(.*)\(([0-9]+)\)\](.*)/;
3251
- const match = input.match(format2);
3252
- if (!match) {
3253
- return null;
3254
- }
3255
- const date = match[1];
3256
- const day = parseInt(date.slice(0, 2), 10);
3257
- const month = parseInt(date.slice(2, 4), 10);
3258
- const time = match[2];
3259
- const hour = parseInt(time.slice(0, 2), 10);
3260
- const minute = parseInt(time.slice(2, 4), 10);
3261
- const seconds = parseInt(time.slice(4, 6), 10);
3262
- const microseconds = parseInt(match[3], 10);
3263
- const level = match[4];
3264
- const location = match[5];
3265
- const lineNumber = parseInt(match[6], 10);
3266
- const message = match[7].trim();
3267
- return {
3268
- day,
3269
- month,
3270
- hour,
3271
- minute,
3272
- seconds,
3273
- microseconds,
3274
- level,
3275
- location,
3276
- lineNumber,
3277
- message
3278
- };
3279
- };
3280
3282
  var formatChromeMessage = (input) => {
3281
3283
  const parsed = parseBrowserLogMessage(input);
3282
3284
  if (!parsed) {
@@ -4785,8 +4787,8 @@ var getDownloadsCacheDir = () => {
4785
4787
  };
4786
4788
 
4787
4789
  // src/browser/BrowserFetcher.ts
4788
- var TESTED_VERSION = "134.0.6998.35";
4789
- var PLAYWRIGHT_VERSION = "1161";
4790
+ var TESTED_VERSION = "144.0.7559.20";
4791
+ var PLAYWRIGHT_VERSION = "1207";
4790
4792
  function getChromeDownloadUrl({
4791
4793
  platform: platform2,
4792
4794
  version,
@@ -4829,6 +4831,28 @@ var getDownloadsFolder = (chromeMode) => {
4829
4831
  const destination = chromeMode === "headless-shell" ? "chrome-headless-shell" : "chrome-for-testing";
4830
4832
  return path8.join(getDownloadsCacheDir(), destination);
4831
4833
  };
4834
+ var getVersionFilePath = (chromeMode) => {
4835
+ const downloadsFolder = getDownloadsFolder(chromeMode);
4836
+ return path8.join(downloadsFolder, "VERSION");
4837
+ };
4838
+ var getExpectedVersion = (version, _chromeMode) => {
4839
+ if (version) {
4840
+ return version;
4841
+ }
4842
+ return TESTED_VERSION;
4843
+ };
4844
+ var readVersionFile = (chromeMode) => {
4845
+ const versionFilePath = getVersionFilePath(chromeMode);
4846
+ try {
4847
+ return fs6.readFileSync(versionFilePath, "utf-8").trim();
4848
+ } catch {
4849
+ return null;
4850
+ }
4851
+ };
4852
+ var writeVersionFile = (chromeMode, version) => {
4853
+ const versionFilePath = getVersionFilePath(chromeMode);
4854
+ fs6.writeFileSync(versionFilePath, version);
4855
+ };
4832
4856
  var downloadBrowser = async ({
4833
4857
  logLevel,
4834
4858
  indent,
@@ -4845,8 +4869,13 @@ var downloadBrowser = async ({
4845
4869
  const downloadsFolder = getDownloadsFolder(chromeMode);
4846
4870
  const archivePath = path8.join(downloadsFolder, fileName);
4847
4871
  const outputPath = getFolderPath(downloadsFolder, platform2);
4872
+ const expectedVersion = getExpectedVersion(version, chromeMode);
4848
4873
  if (await existsAsync(outputPath)) {
4849
- return getRevisionInfo(chromeMode);
4874
+ const installedVersion = readVersionFile(chromeMode);
4875
+ if (installedVersion === expectedVersion) {
4876
+ return getRevisionInfo(chromeMode);
4877
+ }
4878
+ fs6.rmSync(outputPath, { recursive: true, force: true });
4850
4879
  }
4851
4880
  if (!await existsAsync(downloadsFolder)) {
4852
4881
  await mkdirAsync(downloadsFolder, {
@@ -4895,6 +4924,7 @@ var downloadBrowser = async ({
4895
4924
  await unlinkAsync(archivePath);
4896
4925
  }
4897
4926
  }
4927
+ writeVersionFile(chromeMode, expectedVersion);
4898
4928
  const revisionInfo = getRevisionInfo(chromeMode);
4899
4929
  makeFileExecutableIfItIsNot(revisionInfo.executablePath);
4900
4930
  return revisionInfo;
@@ -4948,7 +4978,11 @@ var internalEnsureBrowserUncapped = async ({
4948
4978
  chromeMode
4949
4979
  }) => {
4950
4980
  const status = getBrowserStatus({ browserExecutable, chromeMode });
4951
- if (status.type === "no-browser") {
4981
+ if (status.type === "version-mismatch") {
4982
+ const versionInfo = status.actualVersion ? ` (installed: ${status.actualVersion})` : "";
4983
+ Log.info({ indent, logLevel }, `This version of Remotion uses Chrome version ${TESTED_VERSION}, but the installed one differs${versionInfo}. Re-downloading.`);
4984
+ }
4985
+ if (status.type === "no-browser" || status.type === "version-mismatch") {
4952
4986
  const { onProgress, version } = onBrowserDownload({ chromeMode });
4953
4987
  await downloadBrowser({ indent, logLevel, onProgress, version, chromeMode });
4954
4988
  }
@@ -4971,7 +5005,11 @@ var getBrowserStatus = ({
4971
5005
  }
4972
5006
  const revision = getRevisionInfo(chromeMode);
4973
5007
  if (revision.local && fs7.existsSync(revision.executablePath)) {
4974
- return { path: revision.executablePath, type: "local-puppeteer-browser" };
5008
+ const actualVersion = readVersionFile(chromeMode);
5009
+ if (actualVersion === TESTED_VERSION) {
5010
+ return { path: revision.executablePath, type: "local-puppeteer-browser" };
5011
+ }
5012
+ return { type: "version-mismatch", actualVersion };
4975
5013
  }
4976
5014
  return { type: "no-browser" };
4977
5015
  };
@@ -5023,7 +5061,7 @@ var getLocalBrowserExecutable = ({
5023
5061
  logLevel,
5024
5062
  chromeMode
5025
5063
  });
5026
- if (status.type === "no-browser") {
5064
+ if (status.type === "no-browser" || status.type === "version-mismatch") {
5027
5065
  throw new TypeError("No browser found for rendering frames! Please open a GitHub issue and describe " + "how you reached this error: https://remotion.dev/issue");
5028
5066
  }
5029
5067
  return status.path;
@@ -5058,10 +5096,10 @@ var getCpuCount = () => {
5058
5096
  import { freemem } from "node:os";
5059
5097
 
5060
5098
  // src/memory/from-docker-cgroup.ts
5061
- import { readFileSync as readFileSync2 } from "node:fs";
5099
+ import { readFileSync as readFileSync3 } from "node:fs";
5062
5100
  var getMaxMemoryFromCgroupV2 = () => {
5063
5101
  try {
5064
- const data = readFileSync2("/sys/fs/cgroup/memory.max", "utf-8");
5102
+ const data = readFileSync3("/sys/fs/cgroup/memory.max", "utf-8");
5065
5103
  if (data.trim() === "max") {
5066
5104
  return Infinity;
5067
5105
  }
@@ -5072,7 +5110,7 @@ var getMaxMemoryFromCgroupV2 = () => {
5072
5110
  };
5073
5111
  var getAvailableMemoryFromCgroupV2 = () => {
5074
5112
  try {
5075
- const data = readFileSync2("/sys/fs/cgroup/memory.current", "utf-8");
5113
+ const data = readFileSync3("/sys/fs/cgroup/memory.current", "utf-8");
5076
5114
  return parseInt(data, 10);
5077
5115
  } catch {
5078
5116
  return null;
@@ -5080,7 +5118,7 @@ var getAvailableMemoryFromCgroupV2 = () => {
5080
5118
  };
5081
5119
  var getMaxMemoryFromCgroupV1 = () => {
5082
5120
  try {
5083
- const data = readFileSync2("/sys/fs/cgroup/memory/memory.limit_in_bytes", "utf-8");
5121
+ const data = readFileSync3("/sys/fs/cgroup/memory/memory.limit_in_bytes", "utf-8");
5084
5122
  if (data.trim() === "max") {
5085
5123
  return Infinity;
5086
5124
  }
@@ -5091,7 +5129,7 @@ var getMaxMemoryFromCgroupV1 = () => {
5091
5129
  };
5092
5130
  var getAvailableMemoryFromCgroupV1 = () => {
5093
5131
  try {
5094
- const data = readFileSync2("/sys/fs/cgroup/memory/memory.usage_in_bytes", "utf-8");
5132
+ const data = readFileSync3("/sys/fs/cgroup/memory/memory.usage_in_bytes", "utf-8");
5095
5133
  return parseInt(data, 10);
5096
5134
  } catch {
5097
5135
  return null;
@@ -5124,13 +5162,13 @@ var getMaxLambdaMemory = () => {
5124
5162
  };
5125
5163
 
5126
5164
  // src/memory/from-proc-meminfo.ts
5127
- import { existsSync as existsSync3, readFileSync as readFileSync3 } from "node:fs";
5165
+ import { existsSync as existsSync3, readFileSync as readFileSync4 } from "node:fs";
5128
5166
  var getFreeMemoryFromProcMeminfo = (logLevel) => {
5129
5167
  if (!existsSync3("/proc/meminfo")) {
5130
5168
  return null;
5131
5169
  }
5132
5170
  try {
5133
- const data = readFileSync3("/proc/meminfo", "utf-8");
5171
+ const data = readFileSync4("/proc/meminfo", "utf-8");
5134
5172
  const lines = data.split(`
5135
5173
  `);
5136
5174
  const memAvailableLine = lines.find((line) => line.startsWith("MemAvailable"));
@@ -5345,7 +5383,7 @@ var internalOpenBrowser = async ({
5345
5383
  "--allow-running-insecure-content",
5346
5384
  "--disable-component-update",
5347
5385
  "--disable-domain-reliability",
5348
- "--disable-features=AudioServiceOutOfProcess,IsolateOrigins,site-per-process,Translate,BackForwardCache,AvoidUnnecessaryBeforeUnloadCheckSync,IntensiveWakeUpThrottling",
5386
+ "--disable-features=AudioServiceOutOfProcess,IsolateOrigins,site-per-process,Translate,BackForwardCache,AvoidUnnecessaryBeforeUnloadCheckSync,IntensiveWakeUpThrottling,LocalNetworkAccessChecks,BlockInsecurePrivateNetworkRequests,PrivateNetworkAccessSendPreflights,PrivateNetworkAccessRespectPreflightResults",
5349
5387
  "--disable-print-preview",
5350
5388
  "--disable-site-isolation-trials",
5351
5389
  "--disk-cache-size=268435456",
@@ -17392,7 +17430,7 @@ var cycleBrowserTabs = ({
17392
17430
  };
17393
17431
 
17394
17432
  // src/combine-audio.ts
17395
- import { rmSync as rmSync2, writeFileSync } from "fs";
17433
+ import { rmSync as rmSync3, writeFileSync as writeFileSync2 } from "fs";
17396
17434
  import { join as join3 } from "path";
17397
17435
  import { VERSION as VERSION4 } from "remotion/version";
17398
17436
 
@@ -17643,7 +17681,7 @@ var encodeAudio = async ({
17643
17681
  const fileList = files.map((p) => `file '${p}'`).join(`
17644
17682
  `);
17645
17683
  const fileListTxt = join3(filelistDir, "audio-files.txt");
17646
- writeFileSync(fileListTxt, fileList);
17684
+ writeFileSync2(fileListTxt, fileList);
17647
17685
  const startCombining = Date.now();
17648
17686
  const command = [
17649
17687
  "-hide_banner",
@@ -17689,7 +17727,7 @@ var encodeAudio = async ({
17689
17727
  Log.verbose({ indent, logLevel }, `Encoded audio in ${Date.now() - startCombining}ms`);
17690
17728
  return output;
17691
17729
  } catch (e) {
17692
- rmSync2(fileListTxt, { recursive: true });
17730
+ rmSync3(fileListTxt, { recursive: true });
17693
17731
  throw e;
17694
17732
  }
17695
17733
  };
@@ -17724,7 +17762,7 @@ var combineAudioSeamlessly = async ({
17724
17762
  }).join(`
17725
17763
  `);
17726
17764
  const fileListTxt = join3(filelistDir, "audio-files.txt");
17727
- writeFileSync(fileListTxt, fileList);
17765
+ writeFileSync2(fileListTxt, fileList);
17728
17766
  const command = [
17729
17767
  "-hide_banner",
17730
17768
  "-f",
@@ -17763,7 +17801,7 @@ var combineAudioSeamlessly = async ({
17763
17801
  Log.verbose({ indent, logLevel }, `Combined audio seamlessly in ${Date.now() - startConcatenating}ms`);
17764
17802
  return output;
17765
17803
  } catch (e) {
17766
- rmSync2(fileListTxt, { recursive: true });
17804
+ rmSync3(fileListTxt, { recursive: true });
17767
17805
  Log.error({ indent, logLevel }, e);
17768
17806
  throw e;
17769
17807
  }
@@ -20011,7 +20049,7 @@ var validateSelectedCodecAndProResCombination = ({
20011
20049
  };
20012
20050
 
20013
20051
  // src/stitch-frames-to-video.ts
20014
- import { cpSync as cpSync2, promises as promises3, rmSync as rmSync3 } from "node:fs";
20052
+ import { cpSync as cpSync2, promises as promises3, rmSync as rmSync4 } from "node:fs";
20015
20053
  import path25 from "node:path";
20016
20054
 
20017
20055
  // src/convert-number-of-gif-loops-to-ffmpeg.ts
@@ -21221,7 +21259,7 @@ var innerStitchFramesToVideo = async ({
21221
21259
  }
21222
21260
  const finalDestination = path25.resolve(remotionRoot, separateAudioTo);
21223
21261
  cpSync2(audio, finalDestination);
21224
- rmSync3(audio);
21262
+ rmSync4(audio);
21225
21263
  }
21226
21264
  const result = await new Promise((resolve2, reject) => {
21227
21265
  task.once("close", (code, signal) => {
@@ -22817,7 +22855,7 @@ var getMaxConcurrency = () => {
22817
22855
  var getMinConcurrency = () => 1;
22818
22856
 
22819
22857
  // src/combine-chunks.ts
22820
- import { rmSync as rmSync5 } from "node:fs";
22858
+ import { rmSync as rmSync6 } from "node:fs";
22821
22859
  import { join as join5 } from "node:path";
22822
22860
 
22823
22861
  // src/can-concat-seamlessly.ts
@@ -22832,7 +22870,7 @@ var canConcatVideoSeamlessly = (codec) => {
22832
22870
  };
22833
22871
 
22834
22872
  // src/combine-video-streams.ts
22835
- import { rmSync as rmSync4, writeFileSync as writeFileSync2 } from "fs";
22873
+ import { rmSync as rmSync5, writeFileSync as writeFileSync3 } from "fs";
22836
22874
  import { join as join4 } from "path";
22837
22875
  import { VERSION as VERSION6 } from "remotion/version";
22838
22876
  var combineVideoStreams = async ({
@@ -22852,7 +22890,7 @@ var combineVideoStreams = async ({
22852
22890
  const fileList = files.map((p) => `file '${p}'`).join(`
22853
22891
  `);
22854
22892
  const fileListTxt = join4(filelistDir, "video-files.txt");
22855
- writeFileSync2(fileListTxt, fileList);
22893
+ writeFileSync3(fileListTxt, fileList);
22856
22894
  const encoder = codec === "gif" ? "gif" : "copy";
22857
22895
  const command = [
22858
22896
  "-hide_banner",
@@ -22903,7 +22941,7 @@ var combineVideoStreams = async ({
22903
22941
  Log.verbose({ indent, logLevel }, `Finished combining video in ${Date.now() - startTime}ms`);
22904
22942
  return output;
22905
22943
  } catch (e) {
22906
- rmSync4(fileListTxt, { recursive: true });
22944
+ rmSync5(fileListTxt, { recursive: true });
22907
22945
  throw e;
22908
22946
  }
22909
22947
  };
@@ -23091,9 +23129,9 @@ var internalCombineChunks = async ({
23091
23129
  metadata
23092
23130
  });
23093
23131
  onProgress({ totalProgress: 1, frames: numberOfFrames });
23094
- rmSync5(filelistDir, { recursive: true });
23132
+ rmSync6(filelistDir, { recursive: true });
23095
23133
  } catch (err) {
23096
- rmSync5(filelistDir, { recursive: true });
23134
+ rmSync6(filelistDir, { recursive: true });
23097
23135
  throw err;
23098
23136
  }
23099
23137
  };
@@ -27,7 +27,7 @@ const getLocalBrowserExecutable = ({ preferredBrowserExecutable, logLevel, inden
27
27
  logLevel,
28
28
  chromeMode,
29
29
  });
30
- if (status.type === 'no-browser') {
30
+ if (status.type === 'no-browser' || status.type === 'version-mismatch') {
31
31
  throw new TypeError('No browser found for rendering frames! Please open a GitHub issue and describe ' +
32
32
  'how you reached this error: https://remotion.dev/issue');
33
33
  }
@@ -136,7 +136,7 @@ const internalOpenBrowser = async ({ browser, browserExecutable, chromiumOptions
136
136
  '--allow-running-insecure-content', // https://source.chromium.org/search?q=lang:cpp+symbol:kAllowRunningInsecureContent&ss=chromium
137
137
  '--disable-component-update', // https://source.chromium.org/search?q=lang:cpp+symbol:kDisableComponentUpdate&ss=chromium
138
138
  '--disable-domain-reliability', // https://source.chromium.org/search?q=lang:cpp+symbol:kDisableDomainReliability&ss=chromium
139
- '--disable-features=AudioServiceOutOfProcess,IsolateOrigins,site-per-process,Translate,BackForwardCache,AvoidUnnecessaryBeforeUnloadCheckSync,IntensiveWakeUpThrottling', // https://source.chromium.org/search?q=file:content_features.cc&ss=chromium
139
+ '--disable-features=AudioServiceOutOfProcess,IsolateOrigins,site-per-process,Translate,BackForwardCache,AvoidUnnecessaryBeforeUnloadCheckSync,IntensiveWakeUpThrottling,LocalNetworkAccessChecks,BlockInsecurePrivateNetworkRequests,PrivateNetworkAccessSendPreflights,PrivateNetworkAccessRespectPreflightResults', // https://source.chromium.org/search?q=file:content_features.cc&ss=chromium
140
140
  '--disable-print-preview', // https://source.chromium.org/search?q=lang:cpp+symbol:kDisablePrintPreview&ss=chromium
141
141
  '--disable-site-isolation-trials', // https://source.chromium.org/search?q=lang:cpp+symbol:kDisableSiteIsolation&ss=chromium
142
142
  '--disk-cache-size=268435456', // https://source.chromium.org/search?q=lang:cpp+symbol:kDiskCacheSize&ss=chromium
@@ -0,0 +1,15 @@
1
+ export declare const privateLicenseKeyOption: {
2
+ name: string;
3
+ cliFlag: "private-license-key";
4
+ description: () => import("react/jsx-runtime").JSX.Element;
5
+ ssrName: "privateLicenseKey";
6
+ docLink: string;
7
+ getValue: ({ commandLine }: {
8
+ commandLine: Record<string, unknown>;
9
+ }) => {
10
+ source: string;
11
+ value: string | null;
12
+ };
13
+ setConfig: (value: string | null) => void;
14
+ type: string | null;
15
+ };
@@ -0,0 +1,35 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.privateLicenseKeyOption = void 0;
4
+ const jsx_runtime_1 = require("react/jsx-runtime");
5
+ const cliFlag = 'private-license-key';
6
+ let currentPrivateLicenseKey = null;
7
+ exports.privateLicenseKeyOption = {
8
+ name: 'Private License Key',
9
+ cliFlag,
10
+ description: () => ((0, jsx_runtime_1.jsxs)(jsx_runtime_1.Fragment, { children: ["The private license key for your company license, obtained from the \"Usage\" tab on ", (0, jsx_runtime_1.jsx)("a", { href: "https://remotion.pro/dashboard", children: "remotion.pro" }), ". If you are eligible for the free license, pass \"free-license\"."] })),
11
+ ssrName: 'privateLicenseKey',
12
+ docLink: 'https://www.remotion.dev/docs/licensing',
13
+ getValue: ({ commandLine }) => {
14
+ if (commandLine[cliFlag] !== undefined) {
15
+ return {
16
+ source: 'cli',
17
+ value: commandLine[cliFlag],
18
+ };
19
+ }
20
+ if (currentPrivateLicenseKey !== null) {
21
+ return {
22
+ source: 'config',
23
+ value: currentPrivateLicenseKey,
24
+ };
25
+ }
26
+ return {
27
+ source: 'default',
28
+ value: null,
29
+ };
30
+ },
31
+ setConfig: (value) => {
32
+ currentPrivateLicenseKey = value;
33
+ },
34
+ type: null,
35
+ };
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.414",
6
+ "version": "4.0.415",
7
7
  "description": "Render Remotion videos using Node.js or Bun",
8
8
  "main": "dist/index.js",
9
9
  "types": "dist/index.d.ts",