@remotion/renderer 4.0.247 → 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.
@@ -5,10 +5,10 @@ const logger_1 = require("../logger");
5
5
  const to_megabytes_1 = require("../to-megabytes");
6
6
  const defaultBrowserDownloadProgress = ({ indent, logLevel, api, }) => ({ chromeMode }) => {
7
7
  if (chromeMode === 'chrome-for-testing') {
8
- logger_1.Log.info({ indent, logLevel }, 'Downloading Chrome for Testing https://www.remotion.dev/docs/miscellaneous/chrome-headless-shell');
8
+ logger_1.Log.info({ indent, logLevel }, 'Downloading Chrome for Testing https://www.remotion.dev/chrome-for-testing');
9
9
  }
10
10
  else {
11
- logger_1.Log.info({ indent, logLevel }, 'Downloading Chrome Headless Shell https://www.remotion.dev/docs/miscellaneous/chrome-headless-shell');
11
+ logger_1.Log.info({ indent, logLevel }, 'Downloading Chrome Headless Shell https://www.remotion.dev/chrome-headless-shell');
12
12
  }
13
13
  logger_1.Log.info({ indent, logLevel }, `Customize this behavior by adding a onBrowserDownload function to ${api}.`);
14
14
  let lastProgress = 0;
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 }: {
@@ -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;
package/dist/index.d.ts CHANGED
@@ -140,7 +140,7 @@ export declare const RenderInternals: {
140
140
  validPixelFormats: readonly ["yuv420p", "yuva420p", "yuv422p", "yuv444p", "yuv420p10le", "yuv422p10le", "yuv444p10le", "yuva444p10le"];
141
141
  DEFAULT_BROWSER: "chrome";
142
142
  validateFrameRange: (frameRange: import("./frame-range").FrameRange | null) => void;
143
- DEFAULT_OPENGL_RENDERER: "angle" | "swangle" | "egl" | "swiftshader" | "vulkan" | "angle-egl" | null;
143
+ DEFAULT_OPENGL_RENDERER: "swangle" | "angle" | "egl" | "swiftshader" | "vulkan" | "angle-egl" | null;
144
144
  validateOpenGlRenderer: (option: unknown) => import("./options/gl").OpenGlRenderer | null;
145
145
  validCodecs: readonly ["h264", "h265", "vp8", "vp9", "mp3", "aac", "wav", "prores", "h264-mkv", "h264-ts", "gif"];
146
146
  DEFAULT_PIXEL_FORMAT: "yuv420p" | "yuva420p" | "yuv422p" | "yuv444p" | "yuv420p10le" | "yuv422p10le" | "yuv444p10le" | "yuva444p10le";
@@ -353,8 +353,8 @@ export declare const RenderInternals: {
353
353
  }) => execa.ExecaChildProcess<string>;
354
354
  validStillImageFormats: readonly ["png", "jpeg", "pdf", "webp"];
355
355
  validVideoImageFormats: readonly ["png", "jpeg", "none"];
356
- DEFAULT_STILL_IMAGE_FORMAT: "jpeg" | "png" | "webp" | "pdf";
357
- DEFAULT_VIDEO_IMAGE_FORMAT: "jpeg" | "png" | "none";
356
+ DEFAULT_STILL_IMAGE_FORMAT: "png" | "jpeg" | "pdf" | "webp";
357
+ DEFAULT_VIDEO_IMAGE_FORMAT: "png" | "jpeg" | "none";
358
358
  DEFAULT_JPEG_QUALITY: number;
359
359
  chalk: {
360
360
  enabled: () => boolean;
@@ -38,9 +38,9 @@ const getOpenGlRenderer = (option) => {
38
38
  if (renderer === 'vulkan') {
39
39
  return [
40
40
  '--use-angle=vulkan',
41
- '--use-vulkan=swiftshader',
41
+ '--use-vulkan=native',
42
42
  '--disable-vulkan-fallback-to-gl-for-testing',
43
- '--dignore-gpu-blocklist',
43
+ '--ignore-gpu-blocklist',
44
44
  '--enable-gpu',
45
45
  ];
46
46
  }
@@ -13,9 +13,9 @@ exports.chromeModeOption = {
13
13
  name: 'Chrome Mode',
14
14
  ssrName: 'chromeMode',
15
15
  description: () => {
16
- return ((0, jsx_runtime_1.jsxs)(jsx_runtime_1.Fragment, { children: ["One of", ' ', exports.validChromeModeOptions.map((option, i) => ((0, jsx_runtime_1.jsxs)("code", { children: [option, i === exports.validChromeModeOptions.length - 1 ? '' : ', '] }, option))), ". Default ", (0, jsx_runtime_1.jsx)("code", { children: "headless-shell" }), ". Use", ' ', (0, jsx_runtime_1.jsx)("code", { children: "chrome-for-testing" }), " to take advantage of GPU drivers on Linux."] }));
16
+ return ((0, jsx_runtime_1.jsxs)(jsx_runtime_1.Fragment, { children: ["One of", ' ', exports.validChromeModeOptions.map((option, i) => ((0, jsx_runtime_1.jsxs)("code", { children: [option, i === exports.validChromeModeOptions.length - 1 ? '' : ', '] }, option))), ". Default ", (0, jsx_runtime_1.jsx)("code", { children: "headless-shell" }), ".", ' ', (0, jsx_runtime_1.jsxs)("a", { href: "https://remotion.dev/docs/miscellaneous/chrome-headless-shell", children: ["Use ", (0, jsx_runtime_1.jsx)("code", { children: "chrome-for-testing" }), " to take advantage of GPU drivers on Linux."] })] }));
17
17
  },
18
- docLink: 'https://www.remotion.dev/docs/miscellaneous/chrome-headless-shell',
18
+ docLink: 'https://www.remotion.dev/chrome-for-testing',
19
19
  getValue: ({ commandLine }) => {
20
20
  if (commandLine[cliFlag]) {
21
21
  if (!exports.validChromeModeOptions.includes(commandLine[cliFlag])) {
@@ -1,7 +1,7 @@
1
1
  export declare const validOpenGlRenderers: readonly ["swangle", "angle", "egl", "swiftshader", "vulkan", "angle-egl"];
2
2
  export type OpenGlRenderer = (typeof validOpenGlRenderers)[number];
3
3
  export declare const DEFAULT_OPENGL_RENDERER: OpenGlRenderer | null;
4
- export declare const getChromiumOpenGlRenderer: () => "angle" | "swangle" | "egl" | "swiftshader" | "vulkan" | "angle-egl" | null;
4
+ export declare const getChromiumOpenGlRenderer: () => "swangle" | "angle" | "egl" | "swiftshader" | "vulkan" | "angle-egl" | null;
5
5
  export declare const setChromiumOpenGlRenderer: (renderer: OpenGlRenderer) => void;
6
6
  export declare const glOption: {
7
7
  cliFlag: "gl";
@@ -171,7 +171,7 @@ export declare const allOptions: {
171
171
  webhookCustomDataOption: {
172
172
  name: string;
173
173
  cliFlag: "webhook-custom-data";
174
- description: (type: "ssr" | "cli") => import("react/jsx-runtime").JSX.Element;
174
+ description: (type: "cli" | "ssr") => import("react/jsx-runtime").JSX.Element;
175
175
  ssrName: "customData";
176
176
  docLink: string;
177
177
  type: Record<string, unknown> | null;
@@ -584,7 +584,7 @@ export declare const allOptions: {
584
584
  metadataOption: {
585
585
  name: string;
586
586
  cliFlag: "metadata";
587
- description: (mode: "ssr" | "cli") => import("react/jsx-runtime").JSX.Element;
587
+ description: (mode: "cli" | "ssr") => import("react/jsx-runtime").JSX.Element;
588
588
  docLink: string;
589
589
  type: import("./metadata").Metadata;
590
590
  getValue: ({ commandLine }: {
@@ -2,7 +2,7 @@ export type Metadata = Record<string, string>;
2
2
  export declare const metadataOption: {
3
3
  name: string;
4
4
  cliFlag: "metadata";
5
- description: (mode: "ssr" | "cli") => import("react/jsx-runtime").JSX.Element;
5
+ description: (mode: "cli" | "ssr") => import("react/jsx-runtime").JSX.Element;
6
6
  docLink: string;
7
7
  type: Metadata;
8
8
  getValue: ({ commandLine }: {
@@ -1,7 +1,7 @@
1
1
  export declare const webhookCustomDataOption: {
2
2
  name: string;
3
3
  cliFlag: "webhook-custom-data";
4
- description: (type: "ssr" | "cli") => import("react/jsx-runtime").JSX.Element;
4
+ description: (type: "cli" | "ssr") => import("react/jsx-runtime").JSX.Element;
5
5
  ssrName: "customData";
6
6
  docLink: string;
7
7
  type: Record<string, unknown> | null;
@@ -2545,7 +2545,7 @@ var require_extract_zip = __commonJS((exports, module) => {
2545
2545
  });
2546
2546
 
2547
2547
  // src/ensure-browser.ts
2548
- import fs5 from "fs";
2548
+ import fs4 from "fs";
2549
2549
 
2550
2550
  // src/browser/BrowserFetcher.ts
2551
2551
  var import_extract_zip = __toESM(require_extract_zip(), 1);
@@ -3055,12 +3055,19 @@ var TESTED_VERSION = "123.0.6312.86";
3055
3055
  var PLAYWRIGHT_VERSION = "1105";
3056
3056
  function getChromeDownloadUrl({
3057
3057
  platform: platform2,
3058
- version
3058
+ version,
3059
+ chromeMode
3059
3060
  }) {
3060
3061
  if (platform2 === "linux-arm64") {
3062
+ if (chromeMode === "chrome-for-testing") {
3063
+ throw new Error(`chromeMode: 'chrome-for-testing' is not supported on platform linux-arm64`);
3064
+ }
3061
3065
  return `https://playwright.azureedge.net/builds/chromium/${version ?? PLAYWRIGHT_VERSION}/chromium-linux-arm64.zip`;
3062
3066
  }
3063
- return `https://storage.googleapis.com/chrome-for-testing-public/${version ?? TESTED_VERSION}/${platform2}/chrome-headless-shell-${platform2}.zip`;
3067
+ if (chromeMode === "headless-shell") {
3068
+ return `https://storage.googleapis.com/chrome-for-testing-public/${version ?? TESTED_VERSION}/${platform2}/chrome-headless-shell-${platform2}.zip`;
3069
+ }
3070
+ return `https://storage.googleapis.com/chrome-for-testing-public/${version ?? TESTED_VERSION}/${platform2}/chrome-${platform2}.zip`;
3064
3071
  }
3065
3072
  var mkdirAsync = fs3.promises.mkdir;
3066
3073
  var unlinkAsync = promisify(fs3.unlink.bind(fs3));
@@ -3084,27 +3091,28 @@ var getPlatform = () => {
3084
3091
  throw new Error("Unsupported platform: " + platform2);
3085
3092
  }
3086
3093
  };
3087
- var destination = "chrome-headless-shell";
3088
- var getDownloadsFolder = () => {
3094
+ var getDownloadsFolder = (chromeMode) => {
3095
+ const destination = chromeMode === "headless-shell" ? "chrome-headless-shell" : "chrome-for-testing";
3089
3096
  return path3.join(getDownloadsCacheDir(), destination);
3090
3097
  };
3091
3098
  var downloadBrowser = async ({
3092
3099
  logLevel,
3093
3100
  indent,
3094
3101
  onProgress,
3095
- version
3102
+ version,
3103
+ chromeMode
3096
3104
  }) => {
3097
3105
  const platform2 = getPlatform();
3098
- const downloadURL = getChromeDownloadUrl({ platform: platform2, version });
3106
+ const downloadURL = getChromeDownloadUrl({ platform: platform2, version, chromeMode });
3099
3107
  const fileName = downloadURL.split("/").pop();
3100
3108
  if (!fileName) {
3101
3109
  throw new Error(`A malformed download URL was found: ${downloadURL}.`);
3102
3110
  }
3103
- const downloadsFolder = getDownloadsFolder();
3111
+ const downloadsFolder = getDownloadsFolder(chromeMode);
3104
3112
  const archivePath = path3.join(downloadsFolder, fileName);
3105
3113
  const outputPath = getFolderPath(downloadsFolder, platform2);
3106
3114
  if (await existsAsync(outputPath)) {
3107
- return getRevisionInfo();
3115
+ return getRevisionInfo(chromeMode);
3108
3116
  }
3109
3117
  if (!await existsAsync(downloadsFolder)) {
3110
3118
  await mkdirAsync(downloadsFolder, {
@@ -3149,25 +3157,40 @@ var downloadBrowser = async ({
3149
3157
  await unlinkAsync(archivePath);
3150
3158
  }
3151
3159
  }
3152
- const revisionInfo = getRevisionInfo();
3160
+ const revisionInfo = getRevisionInfo(chromeMode);
3153
3161
  makeFileExecutableIfItIsNot(revisionInfo.executablePath);
3154
3162
  return revisionInfo;
3155
3163
  };
3156
3164
  var getFolderPath = (downloadsFolder, platform2) => {
3157
3165
  return path3.resolve(downloadsFolder, platform2);
3158
3166
  };
3159
- var getExecutablePath = () => {
3160
- const downloadsFolder = getDownloadsFolder();
3167
+ var getExecutablePath = (chromeMode) => {
3168
+ const downloadsFolder = getDownloadsFolder(chromeMode);
3161
3169
  const platform2 = getPlatform();
3162
3170
  const folderPath = getFolderPath(downloadsFolder, platform2);
3163
- return path3.join(folderPath, `chrome-headless-shell-${platform2}`, platform2 === "win64" ? "chrome-headless-shell.exe" : "chrome-headless-shell");
3171
+ if (chromeMode === "chrome-for-testing") {
3172
+ if (platform2 === "mac-arm64" || platform2 === "mac-x64") {
3173
+ return path3.join(folderPath, `chrome-${platform2}`, "Google Chrome for Testing.app/Contents/MacOS/Google Chrome for Testing");
3174
+ }
3175
+ if (platform2 === "win64") {
3176
+ return path3.join(folderPath, "chrome-win64", "chrome.exe");
3177
+ }
3178
+ if (platform2 === "linux64" || platform2 === "linux-arm64") {
3179
+ return path3.join(folderPath, "chrome-linux64", "chrome");
3180
+ }
3181
+ throw new Error("unsupported platform" + platform2);
3182
+ }
3183
+ if (chromeMode === "headless-shell") {
3184
+ return path3.join(folderPath, `chrome-headless-shell-${platform2}`, platform2 === "win64" ? "chrome-headless-shell.exe" : "chrome-headless-shell");
3185
+ }
3186
+ throw new Error("unsupported chrome mode" + chromeMode);
3164
3187
  };
3165
- var getRevisionInfo = () => {
3166
- const executablePath = getExecutablePath();
3167
- const downloadsFolder = getDownloadsFolder();
3188
+ var getRevisionInfo = (chromeMode) => {
3189
+ const executablePath = getExecutablePath(chromeMode);
3190
+ const downloadsFolder = getDownloadsFolder(chromeMode);
3168
3191
  const platform2 = getPlatform();
3169
3192
  const folderPath = getFolderPath(downloadsFolder, platform2);
3170
- const url = getChromeDownloadUrl({ platform: platform2, version: null });
3193
+ const url = getChromeDownloadUrl({ platform: platform2, version: null, chromeMode });
3171
3194
  const local = fs3.existsSync(folderPath);
3172
3195
  return {
3173
3196
  executablePath,
@@ -3188,68 +3211,62 @@ var defaultBrowserDownloadProgress = ({
3188
3211
  indent,
3189
3212
  logLevel,
3190
3213
  api
3191
- }) => () => {
3192
- Log.info({ indent, logLevel }, "Downloading Chrome Headless Shell https://www.remotion.dev/docs/miscellaneous/chrome-headless-shell");
3214
+ }) => ({ chromeMode }) => {
3215
+ if (chromeMode === "chrome-for-testing") {
3216
+ Log.info({ indent, logLevel }, "Downloading Chrome for Testing https://www.remotion.dev/docs/miscellaneous/chrome-headless-shell");
3217
+ } else {
3218
+ Log.info({ indent, logLevel }, "Downloading Chrome Headless Shell https://www.remotion.dev/docs/miscellaneous/chrome-headless-shell");
3219
+ }
3193
3220
  Log.info({ indent, logLevel }, `Customize this behavior by adding a onBrowserDownload function to ${api}.`);
3194
3221
  let lastProgress = 0;
3195
3222
  return {
3196
3223
  onProgress: (progress) => {
3197
3224
  if (progress.downloadedBytes > lastProgress + 1e7 || progress.percent === 1) {
3198
3225
  lastProgress = progress.downloadedBytes;
3199
- Log.info({ indent, logLevel }, `Downloading Chrome Headless Shell - ${toMegabytes(progress.downloadedBytes)}/${toMegabytes(progress.totalSizeInBytes)}`);
3226
+ if (chromeMode === "chrome-for-testing") {
3227
+ Log.info({ indent, logLevel }, `Downloading Chrome for Testing - ${toMegabytes(progress.downloadedBytes)}/${toMegabytes(progress.totalSizeInBytes)}`);
3228
+ } else {
3229
+ Log.info({ indent, logLevel }, `Downloading Chrome Headless Shell - ${toMegabytes(progress.downloadedBytes)}/${toMegabytes(progress.totalSizeInBytes)}`);
3230
+ }
3200
3231
  }
3201
3232
  },
3202
3233
  version: null
3203
3234
  };
3204
3235
  };
3205
3236
 
3206
- // src/get-local-browser.ts
3207
- import fs4 from "fs";
3208
- var getSearchPathsForProduct = () => {
3209
- return [];
3210
- };
3211
- var getLocalBrowser = () => {
3212
- for (const p of getSearchPathsForProduct()) {
3213
- if (fs4.existsSync(p)) {
3214
- return p;
3215
- }
3216
- }
3217
- return null;
3218
- };
3219
-
3220
3237
  // src/ensure-browser.ts
3221
3238
  var currentEnsureBrowserOperation = Promise.resolve();
3222
3239
  var internalEnsureBrowserUncapped = async ({
3223
3240
  indent,
3224
3241
  logLevel,
3225
3242
  browserExecutable,
3226
- onBrowserDownload
3243
+ onBrowserDownload,
3244
+ chromeMode
3227
3245
  }) => {
3228
- const status = getBrowserStatus(browserExecutable);
3246
+ const status = getBrowserStatus({ browserExecutable, chromeMode });
3229
3247
  if (status.type === "no-browser") {
3230
- const { onProgress, version } = onBrowserDownload();
3231
- await downloadBrowser({ indent, logLevel, onProgress, version });
3248
+ const { onProgress, version } = onBrowserDownload({ chromeMode });
3249
+ await downloadBrowser({ indent, logLevel, onProgress, version, chromeMode });
3232
3250
  }
3233
- const newStatus = getBrowserStatus(browserExecutable);
3251
+ const newStatus = getBrowserStatus({ browserExecutable, chromeMode });
3234
3252
  return newStatus;
3235
3253
  };
3236
3254
  var internalEnsureBrowser = (options) => {
3237
3255
  currentEnsureBrowserOperation = currentEnsureBrowserOperation.then(() => internalEnsureBrowserUncapped(options));
3238
3256
  return currentEnsureBrowserOperation;
3239
3257
  };
3240
- var getBrowserStatus = (browserExecutable) => {
3258
+ var getBrowserStatus = ({
3259
+ browserExecutable,
3260
+ chromeMode
3261
+ }) => {
3241
3262
  if (browserExecutable) {
3242
- if (!fs5.existsSync(browserExecutable)) {
3263
+ if (!fs4.existsSync(browserExecutable)) {
3243
3264
  throw new Error(`"browserExecutable" was specified as '${browserExecutable}' but the path doesn't exist. Pass "null" for "browserExecutable" to download a browser automatically.`);
3244
3265
  }
3245
3266
  return { path: browserExecutable, type: "user-defined-path" };
3246
3267
  }
3247
- const localBrowser = getLocalBrowser();
3248
- if (localBrowser !== null) {
3249
- return { path: localBrowser, type: "local-browser" };
3250
- }
3251
- const revision = getRevisionInfo();
3252
- if (revision.local && fs5.existsSync(revision.executablePath)) {
3268
+ const revision = getRevisionInfo(chromeMode);
3269
+ if (revision.local && fs4.existsSync(revision.executablePath)) {
3253
3270
  return { path: revision.executablePath, type: "local-puppeteer-browser" };
3254
3271
  }
3255
3272
  return { type: "no-browser" };
@@ -3265,7 +3282,8 @@ var ensureBrowser = (options) => {
3265
3282
  api: "ensureBrowser()",
3266
3283
  indent: false,
3267
3284
  logLevel
3268
- })
3285
+ }),
3286
+ chromeMode: options?.chromeMode ?? "headless-shell"
3269
3287
  });
3270
3288
  };
3271
3289
  export {
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.247",
6
+ "version": "4.0.248",
7
7
  "description": "Render Remotion videos using Node.js or Bun",
8
8
  "main": "dist/index.js",
9
9
  "types": "dist/index.d.ts",
@@ -18,8 +18,8 @@
18
18
  "extract-zip": "2.0.1",
19
19
  "source-map": "^0.8.0-beta.0",
20
20
  "ws": "8.17.1",
21
- "remotion": "4.0.247",
22
- "@remotion/streaming": "4.0.247"
21
+ "remotion": "4.0.248",
22
+ "@remotion/streaming": "4.0.248"
23
23
  },
24
24
  "peerDependencies": {
25
25
  "react": ">=16.8.0",
@@ -33,17 +33,17 @@
33
33
  "react-dom": "19.0.0",
34
34
  "@types/ws": "8.5.10",
35
35
  "eslint": "9.14.0",
36
- "@remotion/eslint-config-internal": "4.0.247",
37
- "@remotion/example-videos": "4.0.247"
36
+ "@remotion/example-videos": "4.0.248",
37
+ "@remotion/eslint-config-internal": "4.0.248"
38
38
  },
39
39
  "optionalDependencies": {
40
- "@remotion/compositor-darwin-arm64": "4.0.247",
41
- "@remotion/compositor-darwin-x64": "4.0.247",
42
- "@remotion/compositor-linux-arm64-gnu": "4.0.247",
43
- "@remotion/compositor-linux-x64-gnu": "4.0.247",
44
- "@remotion/compositor-linux-x64-musl": "4.0.247",
45
- "@remotion/compositor-linux-arm64-musl": "4.0.247",
46
- "@remotion/compositor-win32-x64-msvc": "4.0.247"
40
+ "@remotion/compositor-darwin-x64": "4.0.248",
41
+ "@remotion/compositor-darwin-arm64": "4.0.248",
42
+ "@remotion/compositor-linux-arm64-gnu": "4.0.248",
43
+ "@remotion/compositor-linux-arm64-musl": "4.0.248",
44
+ "@remotion/compositor-linux-x64-musl": "4.0.248",
45
+ "@remotion/compositor-win32-x64-msvc": "4.0.248",
46
+ "@remotion/compositor-linux-x64-gnu": "4.0.248"
47
47
  },
48
48
  "keywords": [
49
49
  "remotion",