@remotion/renderer 4.0.141 → 4.0.143

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.
@@ -233,7 +233,7 @@ _NetworkManager_client = new WeakMap(), _NetworkManager_frameManager = new WeakM
233
233
  return;
234
234
  }
235
235
  if (!event.canceled) {
236
- logger_1.Log.warn({ indent: __classPrivateFieldGet(this, _NetworkManager_indent, "f"), logLevel: __classPrivateFieldGet(this, _NetworkManager_logLevel, "f") }, `Browser failed to load ${request._url}: ${event.errorText}`);
236
+ logger_1.Log.warn({ indent: __classPrivateFieldGet(this, _NetworkManager_indent, "f"), logLevel: __classPrivateFieldGet(this, _NetworkManager_logLevel, "f") }, `Browser failed to load ${request._url} (${event.type}): ${event.errorText}`);
237
237
  }
238
238
  __classPrivateFieldGet(this, _NetworkManager_instances, "m", _NetworkManager_forgetRequest).call(this, request, true);
239
239
  };
@@ -1,3 +1,3 @@
1
1
  import type { LogLevel } from './log-level';
2
2
  export declare const gLibCErrorMessage: (libCString: string) => string | null;
3
- export declare const checkNodeVersionAndWarnAboutRosetta: (logLevel: LogLevel, indent: boolean) => void;
3
+ export declare const checkRuntimeVersion: (logLevel: LogLevel, indent: boolean) => void;
@@ -1,6 +1,7 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.checkNodeVersionAndWarnAboutRosetta = exports.gLibCErrorMessage = void 0;
3
+ exports.checkRuntimeVersion = exports.gLibCErrorMessage = void 0;
4
+ const no_react_1 = require("remotion/no-react");
4
5
  const get_executable_path_1 = require("./compositor/get-executable-path");
5
6
  const logger_1 = require("./logger");
6
7
  const getRequiredLibCVersion = () => {
@@ -54,13 +55,25 @@ const checkLibCRequirement = (logLevel, indent) => {
54
55
  }
55
56
  }
56
57
  };
57
- const checkNodeVersionAndWarnAboutRosetta = (logLevel, indent) => {
58
+ const checkNodeVersion = () => {
58
59
  const version = process.version.replace('v', '').split('.');
59
60
  const majorVersion = Number(version[0]);
60
- const requiredNodeVersion = 16;
61
- if (majorVersion < 16) {
62
- throw new Error(`Remotion requires at least Node ${requiredNodeVersion}. You currently have ${process.version}. Update your node version to ${requiredNodeVersion} to use Remotion.`);
61
+ if (majorVersion < no_react_1.NoReactInternals.MIN_NODE_VERSION) {
62
+ throw new Error(`Remotion requires at least Node ${no_react_1.NoReactInternals.MIN_NODE_VERSION}. You currently have ${process.version}. Update your node version to ${no_react_1.NoReactInternals.MIN_NODE_VERSION} to use Remotion.`);
63
+ }
64
+ };
65
+ const checkBunVersion = () => {
66
+ if (!Bun.semver.satisfies(Bun.version, `>=${no_react_1.NoReactInternals.MIN_BUN_VERSION}`)) {
67
+ throw new Error(`Remotion requires at least Bun ${no_react_1.NoReactInternals.MIN_BUN_VERSION}. You currently have ${Bun.version}. Update your Bun version to ${no_react_1.NoReactInternals.MIN_BUN_VERSION} to use Remotion.`);
68
+ }
69
+ };
70
+ const checkRuntimeVersion = (logLevel, indent) => {
71
+ if (typeof Bun === 'undefined') {
72
+ checkNodeVersion();
73
+ }
74
+ else {
75
+ checkBunVersion();
63
76
  }
64
77
  checkLibCRequirement(logLevel, indent);
65
78
  };
66
- exports.checkNodeVersionAndWarnAboutRosetta = checkNodeVersionAndWarnAboutRosetta;
79
+ exports.checkRuntimeVersion = checkRuntimeVersion;
@@ -10,7 +10,6 @@ const logger_1 = require("../logger");
10
10
  let warned = false;
11
11
  function isMusl({ indent, logLevel, }) {
12
12
  var _a;
13
- // @ts-expect-error bun no types
14
13
  if (!process.report && typeof Bun !== 'undefined') {
15
14
  if (!warned) {
16
15
  logger_1.Log.warn({ indent, logLevel }, 'Bun limitation: Could not determine if your Linux is using musl or glibc. Assuming glibc.');
@@ -40,7 +40,7 @@ export type VideoMetadata = {
40
40
  audioFileExtension: string | null;
41
41
  pixelFormat: null | 'yuv420p' | 'yuyv422' | 'rgb24' | 'bgr24' | 'yuv422p' | 'yuv444p' | 'yuv410p' | 'yuv411p' | 'yuvj420p' | 'yuvj422p' | 'yuvj444p' | 'argb' | 'rgba' | 'abgr' | 'bgra' | 'yuv440p' | 'yuvj440p' | 'yuva420p' | 'yuv420p16le' | 'yuv420p16be' | 'yuv422p16le' | 'yuv422p16be' | 'yuv444p16le' | 'yuv444p16be' | 'yuv420p9be' | 'yuv420p9le' | 'yuv420p10be' | 'yuv420p10le' | 'yuv422p10be' | 'yuv422p10le' | 'yuv444p9be' | 'yuv444p9le' | 'yuv444p10be' | 'yuv444p10le' | 'yuv422p9be' | 'yuv422p9le' | 'yuva420p9be' | 'yuva420p9le' | 'yuva422p9be' | 'yuva422p9le' | 'yuva444p9be' | 'yuva444p9le' | 'yuva420p10be' | 'yuva420p10le' | 'yuva422p10be' | 'yuva422p10le' | 'yuva444p10be' | 'yuva444p10le' | 'yuva420p16be' | 'yuva420p16le' | 'yuva422p16be' | 'yuva422p16le' | 'yuva444p16be' | 'yuva444p16le' | 'yuva444p' | 'yuva422p' | 'yuv420p12be' | 'yuv420p12le' | 'yuv420p14be' | 'yuv420p14le' | 'yuv422p12be' | 'yuv422p12le' | 'yuv422p14be' | 'yuv422p14le' | 'yuv444p12be' | 'yuv444p12le' | 'yuv444p14be' | 'yuv444p14le' | 'yuvj411p' | 'yuv440p10le' | 'yuv440p10be' | 'yuv440p12le' | 'yuv440p12be' | 'yuv420p9' | 'yuv422p9' | 'yuv444p9' | 'yuv420p10' | 'yuv422p10' | 'yuv440p10' | 'yuv444p10' | 'yuv420p12' | 'yuv422p12' | 'yuv440p12' | 'yuv444p12' | 'yuv420p14' | 'yuv422p14' | 'yuv444p14' | 'yuv420p16' | 'yuv422p16' | 'yuv444p16' | 'yuva420p9' | 'yuva422p9' | 'yuva444p9' | 'yuva420p10' | 'yuva422p10' | 'yuva444p10' | 'yuva420p16' | 'yuva422p16' | 'yuva444p16' | 'yuva422p12be' | 'yuva422p12le' | 'yuva444p12be' | 'yuva444p12le' | 'unknown';
42
42
  };
43
- type SilentPart = {
43
+ export type SilentPart = {
44
44
  startInSeconds: number;
45
45
  endInSeconds: number;
46
46
  };
@@ -109,4 +109,3 @@ export type ErrorPayload = {
109
109
  error: string;
110
110
  backtrace: string;
111
111
  };
112
- export {};
@@ -4,6 +4,9 @@ export declare const createFfmpegComplexFilter: ({ filters, downloadMap, }: {
4
4
  filters: PreprocessedAudioTrack[];
5
5
  downloadMap: DownloadMap;
6
6
  }) => Promise<{
7
- complexFilterFlag: [string, string] | null;
7
+ complexFilterFlag: [
8
+ string,
9
+ string
10
+ ] | null;
8
11
  cleanup: () => void;
9
12
  }>;
@@ -6,6 +6,7 @@ import type { ChromiumOptions } from './open-browser';
6
6
  import type { ToOptions } from './options/option';
7
7
  import type { optionsMap } from './options/options-map';
8
8
  import type { RemotionServer } from './prepare-server';
9
+ import type { RequiredInputPropsInV5 } from './v5-required-input-props';
9
10
  type InternalGetCompositionsOptions = {
10
11
  serializedInputPropsWithCustomSchema: string;
11
12
  envVariables: Record<string, string>;
@@ -18,8 +19,7 @@ type InternalGetCompositionsOptions = {
18
19
  indent: boolean;
19
20
  serveUrlOrWebpackUrl: string;
20
21
  } & ToOptions<typeof optionsMap.getCompositions>;
21
- export type GetCompositionsOptions = {
22
- inputProps?: Record<string, unknown> | null;
22
+ export type GetCompositionsOptions = RequiredInputPropsInV5 & {
23
23
  envVariables?: Record<string, string>;
24
24
  puppeteerInstance?: HeadlessBrowser;
25
25
  onBrowserLog?: (log: BrowserLog) => void;
@@ -1,5 +1,6 @@
1
- import type { GetSilentPartsResponse } from './compositor/payloads';
1
+ import type { GetSilentPartsResponse, SilentPart } from './compositor/payloads';
2
2
  import type { LogLevel } from './log-level';
3
+ export type { SilentPart };
3
4
  export declare const getSilentParts: ({ src, noiseThresholdInDecibels: passedNoiseThresholdInDecibels, minDurationInSeconds: passedMinDuration, logLevel, binariesDirectory, }: {
4
5
  src: string;
5
6
  minDurationInSeconds?: number | undefined;
package/dist/index.d.ts CHANGED
@@ -19,7 +19,7 @@ export type { FfmpegOverrideFn } from './ffmpeg-override';
19
19
  export { FileExtension } from './file-extensions';
20
20
  export { FrameRange } from './frame-range';
21
21
  export { GetCompositionsOptions, getCompositions } from './get-compositions';
22
- export { getSilentParts } from './get-silent-parts';
22
+ export { SilentPart, getSilentParts } from './get-silent-parts';
23
23
  export { VideoMetadata, getVideoMetadata } from './get-video-metadata';
24
24
  export { ImageFormat, StillImageFormat, VideoImageFormat, validateSelectedPixelFormatAndImageFormatCombination, } from './image-format';
25
25
  export type { LogLevel } from './log-level';
@@ -408,12 +408,12 @@ export declare const RenderInternals: {
408
408
  Log: {
409
409
  verbose: (options: import("./logger").LogOptions & {
410
410
  tag?: string | undefined;
411
- }, message?: any, ...optionalParams: any[]) => void;
412
- info: (options: import("./logger").LogOptions, message?: any, ...optionalParams: any[]) => void;
413
- warn: (options: import("./logger").LogOptions, message?: any, ...optionalParams: any[]) => void;
411
+ }, ...args: any[]) => void;
412
+ info: (options: import("./logger").LogOptions, ...args: any[]) => void;
413
+ warn: (options: import("./logger").LogOptions, ...args: any[]) => void;
414
414
  error: (options: import("./logger").LogOptions & {
415
415
  tag?: string | undefined;
416
- }, message?: any, ...optionalParams: any[]) => void;
416
+ }, ...args: any[]) => void;
417
417
  };
418
418
  INDENT_TOKEN: string;
419
419
  isColorSupported: () => boolean;
package/dist/index.js CHANGED
@@ -207,4 +207,4 @@ exports.RenderInternals = {
207
207
  internalEnsureBrowser: ensure_browser_2.internalEnsureBrowser,
208
208
  };
209
209
  // Warn of potential performance issues with Apple Silicon (M1 chip under Rosetta)
210
- (0, check_version_requirements_1.checkNodeVersionAndWarnAboutRosetta)('info', false);
210
+ (0, check_version_requirements_1.checkRuntimeVersion)('info', false);
package/dist/logger.d.ts CHANGED
@@ -10,9 +10,9 @@ type VerboseLogOptions = LogOptions & {
10
10
  export declare const verboseTag: (str: string) => string;
11
11
  export declare const secondverboseTag: (str: string) => string;
12
12
  export declare const Log: {
13
- verbose: (options: VerboseLogOptions, message?: any, ...optionalParams: any[]) => void;
14
- info: (options: LogOptions, message?: any, ...optionalParams: any[]) => void;
15
- warn: (options: LogOptions, message?: any, ...optionalParams: any[]) => void;
16
- error: (options: VerboseLogOptions, message?: any, ...optionalParams: any[]) => void;
13
+ verbose: (options: VerboseLogOptions, ...args: Parameters<typeof console.log>) => void;
14
+ info: (options: LogOptions, ...args: Parameters<typeof console.log>) => void;
15
+ warn: (options: LogOptions, ...args: Parameters<typeof console.log>) => void;
16
+ error: (options: VerboseLogOptions, ...args: Parameters<typeof console.log>) => void;
17
17
  };
18
18
  export {};
@@ -120,6 +120,8 @@ const internalOpenBrowser = async ({ browser, browserExecutable, chromiumOptions
120
120
  '--no-pings', // https://source.chromium.org/search?q=lang:cpp+symbol:kNoPings&ss=chromium
121
121
  '--font-render-hinting=none',
122
122
  '--no-zygote', // https://source.chromium.org/search?q=lang:cpp+symbol:kNoZygote&ss=chromium,
123
+ '--ignore-gpu-blocklist',
124
+ '--enable-unsafe-webgpu',
123
125
  typeof forceDeviceScaleFactor === 'undefined'
124
126
  ? null
125
127
  : `--force-device-scale-factor=${forceDeviceScaleFactor}`,
@@ -1,8 +1,11 @@
1
1
  /// <reference types="node" />
2
2
  /// <reference types="node" />
3
+ /// <reference types="bun-types" />
3
4
  /// <reference types="node" />
4
5
  /// <reference types="node" />
5
6
  /// <reference types="node" />
7
+ /// <reference types="bun-types" />
8
+ /// <reference types="bun-types" />
6
9
  import type { NetworkInterfaceInfo } from 'os';
7
10
  import os from 'os';
8
11
  type PortConfig = {
@@ -31,6 +31,8 @@ const preprocessAudioTrackUnlimited = async ({ outName, asset, fps, downloadMap,
31
31
  trimRightOffset,
32
32
  forSeamlessAacConcatenation,
33
33
  volume: (0, flatten_volume_array_1.flattenVolumeArray)(asset.volume),
34
+ indent,
35
+ logLevel,
34
36
  });
35
37
  if (filter === null) {
36
38
  return null;
package/dist/repro.d.ts CHANGED
@@ -13,7 +13,7 @@ type ReproWriter = {
13
13
  }) => Promise<void>;
14
14
  };
15
15
  export declare const getReproWriter: () => ReproWriter;
16
- export declare const writeInRepro: (level: string, message?: any, ...optionalParams: any[]) => void;
16
+ export declare const writeInRepro: (level: string, ...args: Parameters<typeof console.log>) => void;
17
17
  export declare const enableRepro: ({ serveUrl, compositionName, serializedInputPropsWithCustomSchema, serializedResolvedPropsWithCustomSchema, }: {
18
18
  serveUrl: string;
19
19
  compositionName: string;
@@ -6,6 +6,7 @@ import type { ChromiumOptions } from './open-browser';
6
6
  import type { ToOptions } from './options/option';
7
7
  import type { optionsMap } from './options/options-map';
8
8
  import type { RemotionServer } from './prepare-server';
9
+ import type { RequiredInputPropsInV5 } from './v5-required-input-props';
9
10
  type InternalSelectCompositionsConfig = {
10
11
  serializedInputPropsWithCustomSchema: string;
11
12
  envVariables: Record<string, string>;
@@ -19,8 +20,7 @@ type InternalSelectCompositionsConfig = {
19
20
  serveUrl: string;
20
21
  id: string;
21
22
  } & ToOptions<typeof optionsMap.selectComposition>;
22
- export type SelectCompositionOptions = {
23
- inputProps?: Record<string, unknown> | null;
23
+ export type SelectCompositionOptions = RequiredInputPropsInV5 & {
24
24
  envVariables?: Record<string, string>;
25
25
  puppeteerInstance?: HeadlessBrowser;
26
26
  onBrowserLog?: (log: BrowserLog) => void;
@@ -1,4 +1,5 @@
1
1
  import type { AssetVolume, MediaAsset } from './assets/types';
2
+ import type { LogLevel } from './log-level';
2
3
  export type FilterWithoutPaddingApplied = ProcessedTrack & {
3
4
  filter: string;
4
5
  };
@@ -12,7 +13,7 @@ export declare const getActualTrimLeft: ({ asset, fps, trimLeftOffset, seamless,
12
13
  trimLeftOffset: number;
13
14
  seamless: boolean;
14
15
  }) => number;
15
- export declare const stringifyFfmpegFilter: ({ channels, volume, fps, assetDuration, chunkLengthInSeconds, forSeamlessAacConcatenation, trimLeftOffset, trimRightOffset, asset, }: {
16
+ export declare const stringifyFfmpegFilter: ({ channels, volume, fps, assetDuration, chunkLengthInSeconds, forSeamlessAacConcatenation, trimLeftOffset, trimRightOffset, asset, indent, logLevel, }: {
16
17
  channels: number;
17
18
  volume: AssetVolume;
18
19
  fps: number;
@@ -22,4 +23,6 @@ export declare const stringifyFfmpegFilter: ({ channels, volume, fps, assetDurat
22
23
  trimLeftOffset: number;
23
24
  trimRightOffset: number;
24
25
  asset: MediaAsset;
26
+ indent: boolean;
27
+ logLevel: LogLevel;
25
28
  }) => FilterWithoutPaddingApplied | null;
@@ -3,6 +3,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.stringifyFfmpegFilter = exports.getActualTrimLeft = void 0;
4
4
  const calculate_atempo_1 = require("./assets/calculate-atempo");
5
5
  const ffmpeg_volume_expression_1 = require("./assets/ffmpeg-volume-expression");
6
+ const logger_1 = require("./logger");
6
7
  const sample_rate_1 = require("./sample-rate");
7
8
  const truthy_1 = require("./truthy");
8
9
  const stringifyTrim = (trim) => {
@@ -29,7 +30,7 @@ const getActualTrimLeft = ({ asset, fps, trimLeftOffset, seamless, }) => {
29
30
  throw new Error('This should never happen');
30
31
  };
31
32
  exports.getActualTrimLeft = getActualTrimLeft;
32
- const trimAndSetTempo = ({ forSeamlessAacConcatenation, assetDuration, asset, trimLeftOffset, trimRightOffset, fps, }) => {
33
+ const trimAndSetTempo = ({ forSeamlessAacConcatenation, assetDuration, asset, trimLeftOffset, trimRightOffset, fps, indent, logLevel, }) => {
33
34
  // If we need seamless AAC stitching, we need to apply the tempo filter first
34
35
  // because the atempo filter is not frame-perfect. It creates a small offset
35
36
  // and the offset needs to be the same for all audio tracks, before processing it further.
@@ -42,25 +43,26 @@ const trimAndSetTempo = ({ forSeamlessAacConcatenation, assetDuration, asset, tr
42
43
  seamless: true,
43
44
  });
44
45
  const trimRight = trimLeft + asset.duration / fps - trimLeftOffset + trimRightOffset;
45
- const trimRightOrAssetDuration = assetDuration
46
+ let trimRightOrAssetDuration = assetDuration
46
47
  ? Math.min(trimRight, assetDuration / asset.playbackRate)
47
48
  : trimRight;
48
49
  if (trimRightOrAssetDuration < trimLeft) {
49
- throw new Error('trimRightOrAssetDuration < trimLeft: ' +
50
+ logger_1.Log.warn({ indent, logLevel }, 'trimRightOrAssetDuration < trimLeft: ' +
50
51
  JSON.stringify({
51
52
  trimRight,
52
53
  trimLeft,
53
54
  assetDuration,
54
55
  assetTrimLeft: asset.trimLeft,
55
56
  }));
57
+ trimRightOrAssetDuration = trimLeft;
56
58
  }
57
59
  return {
58
60
  filter: [
59
61
  (0, calculate_atempo_1.calculateATempo)(asset.playbackRate),
60
- `atrim=${stringifyTrim(trimLeft)}:${stringifyTrim(trimRight)}`,
62
+ `atrim=${stringifyTrim(trimLeft)}:${stringifyTrim(trimRightOrAssetDuration)}`,
61
63
  ],
62
64
  actualTrimLeft: trimLeft,
63
- audibleDuration: trimRight - trimLeft,
65
+ audibleDuration: trimRightOrAssetDuration - trimLeft,
64
66
  };
65
67
  }
66
68
  // Otherwise, we first trim and then apply playback rate, as then the atempo
@@ -87,7 +89,7 @@ const trimAndSetTempo = ({ forSeamlessAacConcatenation, assetDuration, asset, tr
87
89
  }
88
90
  throw new Error('This should never happen');
89
91
  };
90
- const stringifyFfmpegFilter = ({ channels, volume, fps, assetDuration, chunkLengthInSeconds, forSeamlessAacConcatenation, trimLeftOffset, trimRightOffset, asset, }) => {
92
+ const stringifyFfmpegFilter = ({ channels, volume, fps, assetDuration, chunkLengthInSeconds, forSeamlessAacConcatenation, trimLeftOffset, trimRightOffset, asset, indent, logLevel, }) => {
91
93
  if (channels === 0) {
92
94
  return null;
93
95
  }
@@ -113,6 +115,8 @@ const stringifyFfmpegFilter = ({ channels, volume, fps, assetDuration, chunkLeng
113
115
  trimRightOffset,
114
116
  asset,
115
117
  fps,
118
+ indent,
119
+ logLevel,
116
120
  });
117
121
  const volumeFilter = (0, ffmpeg_volume_expression_1.ffmpegVolumeExpression)({
118
122
  volume,
@@ -0,0 +1,6 @@
1
+ import type { NoReactInternals } from 'remotion/no-react';
2
+ export type RequiredInputPropsInV5 = typeof NoReactInternals.ENABLE_V5_BREAKING_CHANGES extends true ? {
3
+ inputProps: Record<string, unknown>;
4
+ } : {
5
+ inputProps?: Record<string, unknown>;
6
+ };
@@ -0,0 +1,2 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@remotion/renderer",
3
- "version": "4.0.141",
3
+ "version": "4.0.143",
4
4
  "description": "Renderer for Remotion",
5
5
  "main": "dist/index.js",
6
6
  "types": "dist/index.d.ts",
@@ -18,7 +18,7 @@
18
18
  "extract-zip": "2.0.1",
19
19
  "source-map": "^0.8.0-beta.0",
20
20
  "ws": "8.7.0",
21
- "remotion": "4.0.141"
21
+ "remotion": "4.0.143"
22
22
  },
23
23
  "peerDependencies": {
24
24
  "react": ">=16.8.0",
@@ -30,8 +30,10 @@
30
30
  "@testing-library/react": "13.3.0",
31
31
  "@types/node": "18.14.6",
32
32
  "@types/progress": "2.0.5",
33
+ "@types/bun": "1.0.12",
33
34
  "@types/react": "18.2.48",
34
35
  "@types/react-dom": "18.2.18",
36
+ "jsdom": "^24.0.0",
35
37
  "eslint": "8.56.0",
36
38
  "prettier": "3.2.5",
37
39
  "prettier-plugin-organize-imports": "3.2.4",
@@ -41,13 +43,13 @@
41
43
  "@types/ws": "8.5.10"
42
44
  },
43
45
  "optionalDependencies": {
44
- "@remotion/compositor-darwin-arm64": "4.0.141",
45
- "@remotion/compositor-darwin-x64": "4.0.141",
46
- "@remotion/compositor-linux-arm64-musl": "4.0.141",
47
- "@remotion/compositor-win32-x64-msvc": "4.0.141",
48
- "@remotion/compositor-linux-x64-musl": "4.0.141",
49
- "@remotion/compositor-linux-x64-gnu": "4.0.141",
50
- "@remotion/compositor-linux-arm64-gnu": "4.0.141"
46
+ "@remotion/compositor-darwin-arm64": "4.0.143",
47
+ "@remotion/compositor-darwin-x64": "4.0.143",
48
+ "@remotion/compositor-linux-arm64-gnu": "4.0.143",
49
+ "@remotion/compositor-linux-arm64-musl": "4.0.143",
50
+ "@remotion/compositor-linux-x64-gnu": "4.0.143",
51
+ "@remotion/compositor-linux-x64-musl": "4.0.143",
52
+ "@remotion/compositor-win32-x64-msvc": "4.0.143"
51
53
  },
52
54
  "keywords": [
53
55
  "remotion",