@remotion/renderer 4.0.246 → 4.0.248

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (37) hide show
  1. package/dist/browser/BrowserFetcher.d.ts +4 -2
  2. package/dist/browser/BrowserFetcher.js +41 -18
  3. package/dist/browser/browser-download-progress-bar.js +13 -3
  4. package/dist/client.d.ts +150 -2
  5. package/dist/client.js +2 -0
  6. package/dist/ensure-browser.d.ts +2 -3
  7. package/dist/ensure-browser.js +9 -13
  8. package/dist/get-browser-instance.d.ts +3 -1
  9. package/dist/get-browser-instance.js +2 -1
  10. package/dist/get-codec-name.d.ts +1 -1
  11. package/dist/get-compositions.js +5 -2
  12. package/dist/get-local-browser-executable.d.ts +3 -1
  13. package/dist/get-local-browser-executable.js +4 -8
  14. package/dist/index.d.ts +125 -8
  15. package/dist/open-browser.d.ts +6 -5
  16. package/dist/open-browser.js +14 -5
  17. package/dist/options/chrome-mode.d.ts +17 -0
  18. package/dist/options/chrome-mode.js +46 -0
  19. package/dist/options/gl.d.ts +1 -1
  20. package/dist/options/index.d.ts +17 -2
  21. package/dist/options/index.js +2 -0
  22. package/dist/options/metadata.d.ts +1 -1
  23. package/dist/options/on-browser-download.d.ts +4 -1
  24. package/dist/options/options-map.d.ts +132 -0
  25. package/dist/options/options-map.js +12 -0
  26. package/dist/options/webhook-custom-data.d.ts +1 -1
  27. package/dist/render-frames.js +5 -2
  28. package/dist/render-media.d.ts +1 -1
  29. package/dist/render-media.js +9 -3
  30. package/dist/render-still.js +9 -3
  31. package/dist/select-composition.js +5 -2
  32. package/dist/test-gpu.d.ts +3 -1
  33. package/dist/test-gpu.js +2 -1
  34. package/ensure-browser.mjs +66 -48
  35. package/package.json +12 -12
  36. package/dist/get-local-browser.d.ts +0 -1
  37. package/dist/get-local-browser.js +0 -19
@@ -14,6 +14,7 @@
14
14
  * limitations under the License.
15
15
  */
16
16
  import type { LogLevel } from '../log-level';
17
+ import { ChromeMode } from '../options/chrome-mode';
17
18
  import type { DownloadBrowserProgressFn } from '../options/on-browser-download';
18
19
  interface BrowserFetcherRevisionInfo {
19
20
  folderPath: string;
@@ -21,11 +22,12 @@ interface BrowserFetcherRevisionInfo {
21
22
  url: string;
22
23
  local: boolean;
23
24
  }
24
- export declare const downloadBrowser: ({ logLevel, indent, onProgress, version, }: {
25
+ export declare const downloadBrowser: ({ logLevel, indent, onProgress, version, chromeMode, }: {
25
26
  logLevel: LogLevel;
26
27
  indent: boolean;
27
28
  onProgress: DownloadBrowserProgressFn;
28
29
  version: string | null;
30
+ chromeMode: ChromeMode;
29
31
  }) => Promise<BrowserFetcherRevisionInfo | undefined>;
30
- export declare const getRevisionInfo: () => BrowserFetcherRevisionInfo;
32
+ export declare const getRevisionInfo: (chromeMode: ChromeMode) => BrowserFetcherRevisionInfo;
31
33
  export {};
@@ -53,11 +53,17 @@ const get_download_destination_1 = require("./get-download-destination");
53
53
  const TESTED_VERSION = '123.0.6312.86';
54
54
  // https://github.com/microsoft/playwright/tree/v1.42.0
55
55
  const PLAYWRIGHT_VERSION = '1105'; // 123.0.6312.4
56
- function getChromeDownloadUrl({ platform, version, }) {
56
+ function getChromeDownloadUrl({ platform, version, chromeMode, }) {
57
57
  if (platform === 'linux-arm64') {
58
+ if (chromeMode === 'chrome-for-testing') {
59
+ throw new Error(`chromeMode: 'chrome-for-testing' is not supported on platform linux-arm64`);
60
+ }
58
61
  return `https://playwright.azureedge.net/builds/chromium/${version !== null && version !== void 0 ? version : PLAYWRIGHT_VERSION}/chromium-linux-arm64.zip`;
59
62
  }
60
- return `https://storage.googleapis.com/chrome-for-testing-public/${version !== null && version !== void 0 ? version : TESTED_VERSION}/${platform}/chrome-headless-shell-${platform}.zip`;
63
+ if (chromeMode === 'headless-shell') {
64
+ return `https://storage.googleapis.com/chrome-for-testing-public/${version !== null && version !== void 0 ? version : TESTED_VERSION}/${platform}/chrome-headless-shell-${platform}.zip`;
65
+ }
66
+ return `https://storage.googleapis.com/chrome-for-testing-public/${version !== null && version !== void 0 ? version : TESTED_VERSION}/${platform}/chrome-${platform}.zip`;
61
67
  }
62
68
  const mkdirAsync = fs.promises.mkdir;
63
69
  const unlinkAsync = (0, node_util_1.promisify)(fs.unlink.bind(fs));
@@ -81,22 +87,24 @@ const getPlatform = () => {
81
87
  throw new Error('Unsupported platform: ' + platform);
82
88
  }
83
89
  };
84
- const destination = 'chrome-headless-shell';
85
- const getDownloadsFolder = () => {
90
+ const getDownloadsFolder = (chromeMode) => {
91
+ const destination = chromeMode === 'headless-shell'
92
+ ? 'chrome-headless-shell'
93
+ : 'chrome-for-testing';
86
94
  return path.join((0, get_download_destination_1.getDownloadsCacheDir)(), destination);
87
95
  };
88
- const downloadBrowser = async ({ logLevel, indent, onProgress, version, }) => {
96
+ const downloadBrowser = async ({ logLevel, indent, onProgress, version, chromeMode, }) => {
89
97
  const platform = getPlatform();
90
- const downloadURL = getChromeDownloadUrl({ platform, version });
98
+ const downloadURL = getChromeDownloadUrl({ platform, version, chromeMode });
91
99
  const fileName = downloadURL.split('/').pop();
92
100
  if (!fileName) {
93
101
  throw new Error(`A malformed download URL was found: ${downloadURL}.`);
94
102
  }
95
- const downloadsFolder = getDownloadsFolder();
103
+ const downloadsFolder = getDownloadsFolder(chromeMode);
96
104
  const archivePath = path.join(downloadsFolder, fileName);
97
105
  const outputPath = getFolderPath(downloadsFolder, platform);
98
106
  if (await existsAsync(outputPath)) {
99
- return (0, exports.getRevisionInfo)();
107
+ return (0, exports.getRevisionInfo)(chromeMode);
100
108
  }
101
109
  if (!(await existsAsync(downloadsFolder))) {
102
110
  await mkdirAsync(downloadsFolder, {
@@ -143,7 +151,7 @@ const downloadBrowser = async ({ logLevel, indent, onProgress, version, }) => {
143
151
  await unlinkAsync(archivePath);
144
152
  }
145
153
  }
146
- const revisionInfo = (0, exports.getRevisionInfo)();
154
+ const revisionInfo = (0, exports.getRevisionInfo)(chromeMode);
147
155
  (0, make_file_executable_1.makeFileExecutableIfItIsNot)(revisionInfo.executablePath);
148
156
  return revisionInfo;
149
157
  };
@@ -151,20 +159,35 @@ exports.downloadBrowser = downloadBrowser;
151
159
  const getFolderPath = (downloadsFolder, platform) => {
152
160
  return path.resolve(downloadsFolder, platform);
153
161
  };
154
- const getExecutablePath = () => {
155
- const downloadsFolder = getDownloadsFolder();
162
+ const getExecutablePath = (chromeMode) => {
163
+ const downloadsFolder = getDownloadsFolder(chromeMode);
156
164
  const platform = getPlatform();
157
165
  const folderPath = getFolderPath(downloadsFolder, platform);
158
- return path.join(folderPath, `chrome-headless-shell-${platform}`, platform === 'win64'
159
- ? 'chrome-headless-shell.exe'
160
- : 'chrome-headless-shell');
166
+ if (chromeMode === 'chrome-for-testing') {
167
+ if (platform === 'mac-arm64' || platform === 'mac-x64') {
168
+ return path.join(folderPath, `chrome-${platform}`, 'Google Chrome for Testing.app/Contents/MacOS/Google Chrome for Testing');
169
+ }
170
+ if (platform === 'win64') {
171
+ return path.join(folderPath, 'chrome-win64', 'chrome.exe');
172
+ }
173
+ if (platform === 'linux64' || platform === 'linux-arm64') {
174
+ return path.join(folderPath, 'chrome-linux64', 'chrome');
175
+ }
176
+ throw new Error('unsupported platform' + platform);
177
+ }
178
+ if (chromeMode === 'headless-shell') {
179
+ return path.join(folderPath, `chrome-headless-shell-${platform}`, platform === 'win64'
180
+ ? 'chrome-headless-shell.exe'
181
+ : 'chrome-headless-shell');
182
+ }
183
+ throw new Error('unsupported chrome mode' + chromeMode);
161
184
  };
162
- const getRevisionInfo = () => {
163
- const executablePath = getExecutablePath();
164
- const downloadsFolder = getDownloadsFolder();
185
+ const getRevisionInfo = (chromeMode) => {
186
+ const executablePath = getExecutablePath(chromeMode);
187
+ const downloadsFolder = getDownloadsFolder(chromeMode);
165
188
  const platform = getPlatform();
166
189
  const folderPath = getFolderPath(downloadsFolder, platform);
167
- const url = getChromeDownloadUrl({ platform, version: null });
190
+ const url = getChromeDownloadUrl({ platform, version: null, chromeMode });
168
191
  const local = fs.existsSync(folderPath);
169
192
  return {
170
193
  executablePath,
@@ -3,8 +3,13 @@ Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.defaultBrowserDownloadProgress = void 0;
4
4
  const logger_1 = require("../logger");
5
5
  const to_megabytes_1 = require("../to-megabytes");
6
- const defaultBrowserDownloadProgress = ({ indent, logLevel, api, }) => () => {
7
- logger_1.Log.info({ indent, logLevel }, 'Downloading Chrome Headless Shell https://www.remotion.dev/docs/miscellaneous/chrome-headless-shell');
6
+ const defaultBrowserDownloadProgress = ({ indent, logLevel, api, }) => ({ chromeMode }) => {
7
+ if (chromeMode === 'chrome-for-testing') {
8
+ logger_1.Log.info({ indent, logLevel }, 'Downloading Chrome for Testing https://www.remotion.dev/chrome-for-testing');
9
+ }
10
+ else {
11
+ logger_1.Log.info({ indent, logLevel }, 'Downloading Chrome Headless Shell https://www.remotion.dev/chrome-headless-shell');
12
+ }
8
13
  logger_1.Log.info({ indent, logLevel }, `Customize this behavior by adding a onBrowserDownload function to ${api}.`);
9
14
  let lastProgress = 0;
10
15
  return {
@@ -12,7 +17,12 @@ const defaultBrowserDownloadProgress = ({ indent, logLevel, api, }) => () => {
12
17
  if (progress.downloadedBytes > lastProgress + 10000000 ||
13
18
  progress.percent === 1) {
14
19
  lastProgress = progress.downloadedBytes;
15
- logger_1.Log.info({ indent, logLevel }, `Downloading Chrome Headless Shell - ${(0, to_megabytes_1.toMegabytes)(progress.downloadedBytes)}/${(0, to_megabytes_1.toMegabytes)(progress.totalSizeInBytes)}`);
20
+ if (chromeMode === 'chrome-for-testing') {
21
+ logger_1.Log.info({ indent, logLevel }, `Downloading Chrome for Testing - ${(0, to_megabytes_1.toMegabytes)(progress.downloadedBytes)}/${(0, to_megabytes_1.toMegabytes)(progress.totalSizeInBytes)}`);
22
+ }
23
+ else {
24
+ logger_1.Log.info({ indent, logLevel }, `Downloading Chrome Headless Shell - ${(0, to_megabytes_1.toMegabytes)(progress.downloadedBytes)}/${(0, to_megabytes_1.toMegabytes)(progress.totalSizeInBytes)}`);
25
+ }
16
26
  }
17
27
  },
18
28
  version: null,
package/dist/client.d.ts CHANGED
@@ -394,7 +394,7 @@ export declare const BrowserSafeApis: {
394
394
  webhookCustomDataOption: {
395
395
  name: string;
396
396
  cliFlag: "webhook-custom-data";
397
- description: (type: "ssr" | "cli") => import("react/jsx-runtime").JSX.Element;
397
+ description: (type: "cli" | "ssr") => import("react/jsx-runtime").JSX.Element;
398
398
  ssrName: "customData";
399
399
  docLink: string;
400
400
  type: Record<string, unknown> | null;
@@ -807,7 +807,7 @@ export declare const BrowserSafeApis: {
807
807
  metadataOption: {
808
808
  name: string;
809
809
  cliFlag: "metadata";
810
- description: (mode: "ssr" | "cli") => import("react/jsx-runtime").JSX.Element;
810
+ description: (mode: "cli" | "ssr") => import("react/jsx-runtime").JSX.Element;
811
811
  docLink: string;
812
812
  type: import("./options/metadata").Metadata;
813
813
  getValue: ({ commandLine }: {
@@ -836,6 +836,21 @@ export declare const BrowserSafeApis: {
836
836
  };
837
837
  setConfig: (value: import("./options/hardware-acceleration").HardwareAccelerationOption) => void;
838
838
  };
839
+ chromeModeOption: {
840
+ cliFlag: "chrome-mode";
841
+ name: string;
842
+ ssrName: string;
843
+ description: () => import("react/jsx-runtime").JSX.Element;
844
+ docLink: string;
845
+ getValue: ({ commandLine }: {
846
+ commandLine: Record<string, unknown>;
847
+ }) => {
848
+ value: import("./options/chrome-mode").ChromeMode;
849
+ source: string;
850
+ };
851
+ setConfig: (newChromeMode: import("./options/chrome-mode").ChromeMode) => void;
852
+ type: import("./options/chrome-mode").ChromeMode;
853
+ };
839
854
  };
840
855
  validColorSpaces: readonly ["default", "bt709", "bt2020-ncl"];
841
856
  optionsMap: {
@@ -1168,6 +1183,21 @@ export declare const BrowserSafeApis: {
1168
1183
  };
1169
1184
  setConfig: (value: import("./options/hardware-acceleration").HardwareAccelerationOption) => void;
1170
1185
  };
1186
+ readonly chromeMode: {
1187
+ cliFlag: "chrome-mode";
1188
+ name: string;
1189
+ ssrName: string;
1190
+ description: () => import("react/jsx-runtime").JSX.Element;
1191
+ docLink: string;
1192
+ getValue: ({ commandLine }: {
1193
+ commandLine: Record<string, unknown>;
1194
+ }) => {
1195
+ value: import("./options/chrome-mode").ChromeMode;
1196
+ source: string;
1197
+ };
1198
+ setConfig: (newChromeMode: import("./options/chrome-mode").ChromeMode) => void;
1199
+ type: import("./options/chrome-mode").ChromeMode;
1200
+ };
1171
1201
  };
1172
1202
  readonly stitchFramesToVideo: {
1173
1203
  readonly separateAudioTo: {
@@ -1293,6 +1323,21 @@ export declare const BrowserSafeApis: {
1293
1323
  getValue: () => never;
1294
1324
  setConfig: () => never;
1295
1325
  };
1326
+ readonly chromeMode: {
1327
+ cliFlag: "chrome-mode";
1328
+ name: string;
1329
+ ssrName: string;
1330
+ description: () => import("react/jsx-runtime").JSX.Element;
1331
+ docLink: string;
1332
+ getValue: ({ commandLine }: {
1333
+ commandLine: Record<string, unknown>;
1334
+ }) => {
1335
+ value: import("./options/chrome-mode").ChromeMode;
1336
+ source: string;
1337
+ };
1338
+ setConfig: (newChromeMode: import("./options/chrome-mode").ChromeMode) => void;
1339
+ type: import("./options/chrome-mode").ChromeMode;
1340
+ };
1296
1341
  };
1297
1342
  readonly getCompositions: {
1298
1343
  readonly offthreadVideoCacheSizeInBytes: {
@@ -1368,6 +1413,21 @@ export declare const BrowserSafeApis: {
1368
1413
  getValue: () => never;
1369
1414
  setConfig: () => never;
1370
1415
  };
1416
+ readonly chromeMode: {
1417
+ cliFlag: "chrome-mode";
1418
+ name: string;
1419
+ ssrName: string;
1420
+ description: () => import("react/jsx-runtime").JSX.Element;
1421
+ docLink: string;
1422
+ getValue: ({ commandLine }: {
1423
+ commandLine: Record<string, unknown>;
1424
+ }) => {
1425
+ value: import("./options/chrome-mode").ChromeMode;
1426
+ source: string;
1427
+ };
1428
+ setConfig: (newChromeMode: import("./options/chrome-mode").ChromeMode) => void;
1429
+ type: import("./options/chrome-mode").ChromeMode;
1430
+ };
1371
1431
  };
1372
1432
  readonly selectComposition: {
1373
1433
  readonly offthreadVideoCacheSizeInBytes: {
@@ -1443,6 +1503,21 @@ export declare const BrowserSafeApis: {
1443
1503
  getValue: () => never;
1444
1504
  setConfig: () => never;
1445
1505
  };
1506
+ readonly chromeMode: {
1507
+ cliFlag: "chrome-mode";
1508
+ name: string;
1509
+ ssrName: string;
1510
+ description: () => import("react/jsx-runtime").JSX.Element;
1511
+ docLink: string;
1512
+ getValue: ({ commandLine }: {
1513
+ commandLine: Record<string, unknown>;
1514
+ }) => {
1515
+ value: import("./options/chrome-mode").ChromeMode;
1516
+ source: string;
1517
+ };
1518
+ setConfig: (newChromeMode: import("./options/chrome-mode").ChromeMode) => void;
1519
+ type: import("./options/chrome-mode").ChromeMode;
1520
+ };
1446
1521
  };
1447
1522
  readonly renderFrames: {
1448
1523
  readonly forSeamlessAacConcatenation: {
@@ -1551,6 +1626,21 @@ export declare const BrowserSafeApis: {
1551
1626
  getValue: () => never;
1552
1627
  setConfig: () => never;
1553
1628
  };
1629
+ readonly chromeMode: {
1630
+ cliFlag: "chrome-mode";
1631
+ name: string;
1632
+ ssrName: string;
1633
+ description: () => import("react/jsx-runtime").JSX.Element;
1634
+ docLink: string;
1635
+ getValue: ({ commandLine }: {
1636
+ commandLine: Record<string, unknown>;
1637
+ }) => {
1638
+ value: import("./options/chrome-mode").ChromeMode;
1639
+ source: string;
1640
+ };
1641
+ setConfig: (newChromeMode: import("./options/chrome-mode").ChromeMode) => void;
1642
+ type: import("./options/chrome-mode").ChromeMode;
1643
+ };
1554
1644
  };
1555
1645
  readonly renderMediaOnLambda: {
1556
1646
  readonly offthreadVideoCacheSizeInBytes: {
@@ -2293,6 +2383,63 @@ export declare const BrowserSafeApis: {
2293
2383
  getValue: () => never;
2294
2384
  setConfig: () => never;
2295
2385
  };
2386
+ readonly chromeMode: {
2387
+ cliFlag: "chrome-mode";
2388
+ name: string;
2389
+ ssrName: string;
2390
+ description: () => import("react/jsx-runtime").JSX.Element;
2391
+ docLink: string;
2392
+ getValue: ({ commandLine }: {
2393
+ commandLine: Record<string, unknown>;
2394
+ }) => {
2395
+ value: import("./options/chrome-mode").ChromeMode;
2396
+ source: string;
2397
+ };
2398
+ setConfig: (newChromeMode: import("./options/chrome-mode").ChromeMode) => void;
2399
+ type: import("./options/chrome-mode").ChromeMode;
2400
+ };
2401
+ };
2402
+ readonly openBrowser: {
2403
+ readonly logLevel: {
2404
+ cliFlag: "log";
2405
+ name: string;
2406
+ ssrName: string;
2407
+ description: () => import("react/jsx-runtime").JSX.Element;
2408
+ docLink: string;
2409
+ getValue: ({ commandLine }: {
2410
+ commandLine: Record<string, unknown>;
2411
+ }) => {
2412
+ value: import("./log-level").LogLevel;
2413
+ source: string;
2414
+ };
2415
+ setConfig: (newLogLevel: import("./log-level").LogLevel) => void;
2416
+ type: import("./log-level").LogLevel;
2417
+ };
2418
+ readonly onBrowserDownload: {
2419
+ name: string;
2420
+ cliFlag: "on-browser-download";
2421
+ description: () => import("react/jsx-runtime").JSX.Element;
2422
+ ssrName: "onBrowserDownload";
2423
+ docLink: string;
2424
+ type: import(".").OnBrowserDownload;
2425
+ getValue: () => never;
2426
+ setConfig: () => never;
2427
+ };
2428
+ readonly chromeMode: {
2429
+ cliFlag: "chrome-mode";
2430
+ name: string;
2431
+ ssrName: string;
2432
+ description: () => import("react/jsx-runtime").JSX.Element;
2433
+ docLink: string;
2434
+ getValue: ({ commandLine }: {
2435
+ commandLine: Record<string, unknown>;
2436
+ }) => {
2437
+ value: import("./options/chrome-mode").ChromeMode;
2438
+ source: string;
2439
+ };
2440
+ setConfig: (newChromeMode: import("./options/chrome-mode").ChromeMode) => void;
2441
+ type: import("./options/chrome-mode").ChromeMode;
2442
+ };
2296
2443
  };
2297
2444
  readonly deploySiteLambda: {
2298
2445
  readonly logLevel: {
@@ -2349,4 +2496,5 @@ export declare const BrowserSafeApis: {
2349
2496
  logLevels: readonly ["verbose", "info", "warn", "error"];
2350
2497
  getOutputCodecOrUndefined: () => import("./codec").CodecOrUndefined;
2351
2498
  getExtensionFromAudioCodec: (audioCodec: import("./options/audio-codec").AudioCodec) => "mp3" | "aac" | "wav" | "opus";
2499
+ validChromeModeOptions: readonly ["headless-shell", "chrome-for-testing"];
2352
2500
  };
package/dist/client.js CHANGED
@@ -12,6 +12,7 @@ const jpeg_quality_1 = require("./jpeg-quality");
12
12
  const log_level_1 = require("./log-level");
13
13
  const options_1 = require("./options");
14
14
  const audio_codec_1 = require("./options/audio-codec");
15
+ const chrome_mode_1 = require("./options/chrome-mode");
15
16
  const color_space_1 = require("./options/color-space");
16
17
  const gl_1 = require("./options/gl");
17
18
  const hardware_acceleration_1 = require("./options/hardware-acceleration");
@@ -52,4 +53,5 @@ exports.BrowserSafeApis = {
52
53
  logLevels: log_level_1.logLevels,
53
54
  getOutputCodecOrUndefined: video_codec_1.getOutputCodecOrUndefined,
54
55
  getExtensionFromAudioCodec: audio_codec_1.getExtensionFromAudioCodec,
56
+ validChromeModeOptions: chrome_mode_1.validChromeModeOptions,
55
57
  };
@@ -1,12 +1,10 @@
1
1
  import type { BrowserExecutable } from './browser-executable';
2
2
  import type { BrowserSafeApis } from './client';
3
+ import type { ChromeMode } from './options/chrome-mode';
3
4
  import type { ToOptions } from './options/option';
4
5
  export type BrowserStatus = {
5
6
  type: 'user-defined-path';
6
7
  path: string;
7
- } | {
8
- type: 'local-browser';
9
- path: string;
10
8
  } | {
11
9
  type: 'local-puppeteer-browser';
12
10
  path: string;
@@ -16,6 +14,7 @@ export type BrowserStatus = {
16
14
  type InternalEnsureBrowserOptions = {
17
15
  browserExecutable: BrowserExecutable;
18
16
  indent: boolean;
17
+ chromeMode: ChromeMode;
19
18
  } & ToOptions<typeof BrowserSafeApis.optionsMap.ensureBrowser>;
20
19
  export type EnsureBrowserOptions = Partial<{
21
20
  browserExecutable: BrowserExecutable;
@@ -7,15 +7,14 @@ 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 get_local_browser_1 = require("./get-local-browser");
11
10
  let currentEnsureBrowserOperation = Promise.resolve();
12
- const internalEnsureBrowserUncapped = async ({ indent, logLevel, browserExecutable, onBrowserDownload, }) => {
13
- const status = getBrowserStatus(browserExecutable);
11
+ const internalEnsureBrowserUncapped = async ({ indent, logLevel, browserExecutable, onBrowserDownload, chromeMode, }) => {
12
+ const status = getBrowserStatus({ browserExecutable, chromeMode });
14
13
  if (status.type === 'no-browser') {
15
- const { onProgress, version } = onBrowserDownload();
16
- await (0, BrowserFetcher_1.downloadBrowser)({ indent, logLevel, onProgress, version });
14
+ const { onProgress, version } = onBrowserDownload({ chromeMode });
15
+ await (0, BrowserFetcher_1.downloadBrowser)({ indent, logLevel, onProgress, version, chromeMode });
17
16
  }
18
- const newStatus = getBrowserStatus(browserExecutable);
17
+ const newStatus = getBrowserStatus({ browserExecutable, chromeMode });
19
18
  return newStatus;
20
19
  };
21
20
  const internalEnsureBrowser = (options) => {
@@ -23,18 +22,14 @@ const internalEnsureBrowser = (options) => {
23
22
  return currentEnsureBrowserOperation;
24
23
  };
25
24
  exports.internalEnsureBrowser = internalEnsureBrowser;
26
- const getBrowserStatus = (browserExecutable) => {
25
+ const getBrowserStatus = ({ browserExecutable, chromeMode, }) => {
27
26
  if (browserExecutable) {
28
27
  if (!fs_1.default.existsSync(browserExecutable)) {
29
28
  throw new Error(`"browserExecutable" was specified as '${browserExecutable}' but the path doesn't exist. Pass "null" for "browserExecutable" to download a browser automatically.`);
30
29
  }
31
30
  return { path: browserExecutable, type: 'user-defined-path' };
32
31
  }
33
- const localBrowser = (0, get_local_browser_1.getLocalBrowser)();
34
- if (localBrowser !== null) {
35
- return { path: localBrowser, type: 'local-browser' };
36
- }
37
- const revision = (0, BrowserFetcher_1.getRevisionInfo)();
32
+ const revision = (0, BrowserFetcher_1.getRevisionInfo)(chromeMode);
38
33
  if (revision.local && fs_1.default.existsSync(revision.executablePath)) {
39
34
  return { path: revision.executablePath, type: 'local-puppeteer-browser' };
40
35
  }
@@ -45,7 +40,7 @@ const getBrowserStatus = (browserExecutable) => {
45
40
  * @see [Documentation](https://www.remotion.dev/docs/renderer/ensure-browser)
46
41
  */
47
42
  const ensureBrowser = (options) => {
48
- var _a, _b, _c, _d;
43
+ var _a, _b, _c, _d, _e;
49
44
  const indent = false;
50
45
  const logLevel = (_a = options === null || options === void 0 ? void 0 : options.logLevel) !== null && _a !== void 0 ? _a : 'info';
51
46
  return (0, exports.internalEnsureBrowser)({
@@ -57,6 +52,7 @@ const ensureBrowser = (options) => {
57
52
  indent: false,
58
53
  logLevel,
59
54
  }),
55
+ chromeMode: (_e = options === null || options === void 0 ? void 0 : options.chromeMode) !== null && _e !== void 0 ? _e : 'headless-shell',
60
56
  });
61
57
  };
62
58
  exports.ensureBrowser = ensureBrowser;
@@ -3,8 +3,9 @@ import type { HeadlessBrowser } from './browser/Browser';
3
3
  import type { Page } from './browser/BrowserPage';
4
4
  import type { LogLevel } from './log-level';
5
5
  import type { ChromiumOptions } from './open-browser';
6
+ import type { ChromeMode } from './options/chrome-mode';
6
7
  import type { OnBrowserDownload } from './options/on-browser-download';
7
- export declare const getPageAndCleanupFn: ({ passedInInstance, browserExecutable, chromiumOptions, forceDeviceScaleFactor, indent, logLevel, onBrowserDownload, }: {
8
+ export declare const getPageAndCleanupFn: ({ passedInInstance, browserExecutable, chromiumOptions, forceDeviceScaleFactor, indent, logLevel, onBrowserDownload, chromeMode, }: {
8
9
  passedInInstance: HeadlessBrowser | undefined;
9
10
  browserExecutable: BrowserExecutable | null;
10
11
  chromiumOptions: ChromiumOptions;
@@ -12,6 +13,7 @@ export declare const getPageAndCleanupFn: ({ passedInInstance, browserExecutable
12
13
  forceDeviceScaleFactor: number | undefined;
13
14
  logLevel: LogLevel;
14
15
  onBrowserDownload: OnBrowserDownload;
16
+ chromeMode: ChromeMode;
15
17
  }) => Promise<{
16
18
  cleanupPage: () => Promise<void>;
17
19
  page: Page;
@@ -4,7 +4,7 @@ exports.getPageAndCleanupFn = void 0;
4
4
  const browser_1 = require("./browser");
5
5
  const logger_1 = require("./logger");
6
6
  const open_browser_1 = require("./open-browser");
7
- const getPageAndCleanupFn = async ({ passedInInstance, browserExecutable, chromiumOptions, forceDeviceScaleFactor, indent, logLevel, onBrowserDownload, }) => {
7
+ const getPageAndCleanupFn = async ({ passedInInstance, browserExecutable, chromiumOptions, forceDeviceScaleFactor, indent, logLevel, onBrowserDownload, chromeMode, }) => {
8
8
  if (passedInInstance) {
9
9
  const page = await passedInInstance.newPage(() => null, logLevel, indent);
10
10
  return {
@@ -30,6 +30,7 @@ const getPageAndCleanupFn = async ({ passedInInstance, browserExecutable, chromi
30
30
  viewport: null,
31
31
  logLevel,
32
32
  onBrowserDownload,
33
+ chromeMode,
33
34
  });
34
35
  const browserPage = await browserInstance.newPage(() => null, logLevel, indent);
35
36
  return {
@@ -9,7 +9,7 @@ export declare const hasSpecifiedUnsupportedHardwareQualifySettings: ({ encoding
9
9
  encodingMaxRate: string | null;
10
10
  encodingBufferSize: string | null;
11
11
  crf: unknown;
12
- }) => "crf" | "encodingBufferSize" | "encodingMaxRate" | null;
12
+ }) => "encodingMaxRate" | "encodingBufferSize" | "crf" | null;
13
13
  export declare const getCodecName: ({ codec, encodingMaxRate, encodingBufferSize, crf, hardwareAcceleration, logLevel, indent, }: {
14
14
  codec: Codec;
15
15
  hardwareAcceleration: HardwareAccelerationOption;
@@ -81,7 +81,7 @@ const innerGetCompositions = async ({ envVariables, serializedInputPropsWithCust
81
81
  };
82
82
  });
83
83
  };
84
- const internalGetCompositionsRaw = async ({ browserExecutable, chromiumOptions, envVariables, indent, serializedInputPropsWithCustomSchema, onBrowserLog, port, puppeteerInstance, serveUrlOrWebpackUrl, server, timeoutInMilliseconds, logLevel, offthreadVideoCacheSizeInBytes, binariesDirectory, onBrowserDownload, }) => {
84
+ const internalGetCompositionsRaw = async ({ browserExecutable, chromiumOptions, envVariables, indent, serializedInputPropsWithCustomSchema, onBrowserLog, port, puppeteerInstance, serveUrlOrWebpackUrl, server, timeoutInMilliseconds, logLevel, offthreadVideoCacheSizeInBytes, binariesDirectory, onBrowserDownload, chromeMode, }) => {
85
85
  const { page, cleanupPage } = await (0, get_browser_instance_1.getPageAndCleanupFn)({
86
86
  passedInInstance: puppeteerInstance,
87
87
  browserExecutable,
@@ -90,6 +90,7 @@ const internalGetCompositionsRaw = async ({ browserExecutable, chromiumOptions,
90
90
  indent,
91
91
  logLevel,
92
92
  onBrowserDownload,
93
+ chromeMode,
93
94
  });
94
95
  const cleanup = [cleanupPage];
95
96
  return new Promise((resolve, reject) => {
@@ -130,6 +131,7 @@ const internalGetCompositionsRaw = async ({ browserExecutable, chromiumOptions,
130
131
  offthreadVideoCacheSizeInBytes,
131
132
  binariesDirectory,
132
133
  onBrowserDownload,
134
+ chromeMode,
133
135
  });
134
136
  })
135
137
  .then((comp) => {
@@ -154,7 +156,7 @@ const getCompositions = (serveUrlOrWebpackUrl, config) => {
154
156
  if (!serveUrlOrWebpackUrl) {
155
157
  throw new Error('No serve URL or webpack bundle directory was passed to getCompositions().');
156
158
  }
157
- const { browserExecutable, chromiumOptions, envVariables, inputProps, onBrowserLog, port, puppeteerInstance, timeoutInMilliseconds, logLevel: passedLogLevel, onBrowserDownload, binariesDirectory, offthreadVideoCacheSizeInBytes, } = config !== null && config !== void 0 ? config : {};
159
+ const { browserExecutable, chromiumOptions, envVariables, inputProps, onBrowserLog, port, puppeteerInstance, timeoutInMilliseconds, logLevel: passedLogLevel, onBrowserDownload, binariesDirectory, offthreadVideoCacheSizeInBytes, chromeMode, } = config !== null && config !== void 0 ? config : {};
158
160
  const indent = false;
159
161
  const logLevel = passedLogLevel !== null && passedLogLevel !== void 0 ? passedLogLevel : 'info';
160
162
  return (0, exports.internalGetCompositions)({
@@ -181,6 +183,7 @@ const getCompositions = (serveUrlOrWebpackUrl, config) => {
181
183
  logLevel,
182
184
  api: 'getCompositions()',
183
185
  }),
186
+ chromeMode: chromeMode !== null && chromeMode !== void 0 ? chromeMode : 'headless-shell',
184
187
  });
185
188
  };
186
189
  exports.getCompositions = getCompositions;
@@ -1,7 +1,9 @@
1
1
  import type { BrowserExecutable } from './browser-executable';
2
2
  import type { LogLevel } from './log-level';
3
- export declare const getLocalBrowserExecutable: ({ preferredBrowserExecutable, logLevel, indent, }: {
3
+ import type { ChromeMode } from './options/chrome-mode';
4
+ export declare const getLocalBrowserExecutable: ({ preferredBrowserExecutable, logLevel, indent, chromeMode, }: {
4
5
  preferredBrowserExecutable: BrowserExecutable;
5
6
  logLevel: LogLevel;
6
7
  indent: boolean;
8
+ chromeMode: ChromeMode;
7
9
  }) => string;
@@ -6,30 +6,26 @@ Object.defineProperty(exports, "__esModule", { value: true });
6
6
  exports.getLocalBrowserExecutable = void 0;
7
7
  const node_fs_1 = __importDefault(require("node:fs"));
8
8
  const BrowserFetcher_1 = require("./browser/BrowserFetcher");
9
- const get_local_browser_1 = require("./get-local-browser");
10
9
  const logger_1 = require("./logger");
11
- const getBrowserStatus = ({ browserExecutablePath, indent, logLevel, }) => {
10
+ const getBrowserStatus = ({ browserExecutablePath, indent, logLevel, chromeMode, }) => {
12
11
  if (browserExecutablePath) {
13
12
  if (!node_fs_1.default.existsSync(browserExecutablePath)) {
14
13
  logger_1.Log.warn({ indent, logLevel }, `Browser executable was specified as '${browserExecutablePath}' but the path doesn't exist.`);
15
14
  }
16
15
  return { path: browserExecutablePath, type: 'user-defined-path' };
17
16
  }
18
- const localBrowser = (0, get_local_browser_1.getLocalBrowser)();
19
- if (localBrowser !== null) {
20
- return { path: localBrowser, type: 'local-browser' };
21
- }
22
- const revision = (0, BrowserFetcher_1.getRevisionInfo)();
17
+ const revision = (0, BrowserFetcher_1.getRevisionInfo)(chromeMode);
23
18
  if (revision.local && node_fs_1.default.existsSync(revision.executablePath)) {
24
19
  return { path: revision.executablePath, type: 'local-puppeteer-browser' };
25
20
  }
26
21
  return { type: 'no-browser' };
27
22
  };
28
- const getLocalBrowserExecutable = ({ preferredBrowserExecutable, logLevel, indent, }) => {
23
+ const getLocalBrowserExecutable = ({ preferredBrowserExecutable, logLevel, indent, chromeMode, }) => {
29
24
  const status = getBrowserStatus({
30
25
  browserExecutablePath: preferredBrowserExecutable,
31
26
  indent,
32
27
  logLevel,
28
+ chromeMode,
33
29
  });
34
30
  if (status.type === 'no-browser') {
35
31
  throw new TypeError('No browser found for rendering frames! Please open a GitHub issue and describe ' +