@remotion/renderer 4.0.84 → 4.0.85

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.
@@ -1 +1,3 @@
1
- export declare const checkNodeVersionAndWarnAboutRosetta: () => void;
1
+ import type { LogLevel } from './log-level';
2
+ export declare const gLibCErrorMessage: (libCString: string) => string | null;
3
+ export declare const checkNodeVersionAndWarnAboutRosetta: (logLevel: LogLevel, indent: boolean) => void;
@@ -1,12 +1,42 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.checkNodeVersionAndWarnAboutRosetta = void 0;
4
- const checkNodeVersionAndWarnAboutRosetta = () => {
3
+ exports.checkNodeVersionAndWarnAboutRosetta = exports.gLibCErrorMessage = void 0;
4
+ const logger_1 = require("./logger");
5
+ const gLibCErrorMessage = (libCString) => {
6
+ const split = libCString.split('.');
7
+ if (split.length !== 2) {
8
+ return null;
9
+ }
10
+ if (split[0] === '2' && Number(split[1]) >= 35) {
11
+ return null;
12
+ }
13
+ if (Number(split[0]) > 2) {
14
+ return null;
15
+ }
16
+ return `Rendering videos requires glibc 2.35 or higher. Your system has glibc ${libCString}.`;
17
+ };
18
+ exports.gLibCErrorMessage = gLibCErrorMessage;
19
+ const checkLibCRequirement = (logLevel, indent) => {
20
+ const { report } = process;
21
+ if (report) {
22
+ // @ts-expect-error no types
23
+ const { glibcVersionRuntime } = report.getReport().header;
24
+ if (!glibcVersionRuntime) {
25
+ return;
26
+ }
27
+ const error = (0, exports.gLibCErrorMessage)(glibcVersionRuntime);
28
+ if (error) {
29
+ logger_1.Log.warn({ logLevel, indent }, error);
30
+ }
31
+ }
32
+ };
33
+ const checkNodeVersionAndWarnAboutRosetta = (logLevel, indent) => {
5
34
  const version = process.version.replace('v', '').split('.');
6
35
  const majorVersion = Number(version[0]);
7
36
  const requiredNodeVersion = 16;
8
37
  if (majorVersion < 16) {
9
38
  throw new Error(`Remotion requires at least Node ${requiredNodeVersion}. You currently have ${process.version}. Update your node version to ${requiredNodeVersion} to use Remotion.`);
10
39
  }
40
+ checkLibCRequirement(logLevel, indent);
11
41
  };
12
42
  exports.checkNodeVersionAndWarnAboutRosetta = checkNodeVersionAndWarnAboutRosetta;
package/dist/client.d.ts CHANGED
@@ -287,7 +287,7 @@ export declare const BrowserSafeApis: {
287
287
  description: () => JSX.Element;
288
288
  docLink: string;
289
289
  ssrName: string;
290
- type: "default" | "bt709";
290
+ type: "default" | "bt709" | "bt2020-ncl";
291
291
  };
292
292
  deleteAfterOption: {
293
293
  name: string;
@@ -353,8 +353,16 @@ export declare const BrowserSafeApis: {
353
353
  docLink: string;
354
354
  type: boolean;
355
355
  };
356
+ numberOfGifLoopsOption: {
357
+ name: string;
358
+ cliFlag: "number-of-gif-loops";
359
+ description: () => JSX.Element;
360
+ ssrName: "numberOfGifLoops";
361
+ docLink: string;
362
+ type: number | null;
363
+ };
356
364
  };
357
- validColorSpaces: readonly ["default", "bt709"];
365
+ validColorSpaces: readonly ["default", "bt709", "bt2020-ncl"];
358
366
  optionsMap: {
359
367
  readonly renderMedia: {
360
368
  readonly offthreadVideoCacheSizeInBytes: {
@@ -373,6 +381,14 @@ export declare const BrowserSafeApis: {
373
381
  docLink: string;
374
382
  type: string | null;
375
383
  };
384
+ readonly numberOfGifLoops: {
385
+ name: string;
386
+ cliFlag: "number-of-gif-loops";
387
+ description: () => JSX.Element;
388
+ ssrName: "numberOfGifLoops";
389
+ docLink: string;
390
+ type: number | null;
391
+ };
376
392
  };
377
393
  readonly renderStill: {
378
394
  readonly offthreadVideoCacheSizeInBytes: {
@@ -431,6 +447,14 @@ export declare const BrowserSafeApis: {
431
447
  docLink: string;
432
448
  type: string | null;
433
449
  };
450
+ readonly numberOfGifLoops: {
451
+ name: string;
452
+ cliFlag: "number-of-gif-loops";
453
+ description: () => JSX.Element;
454
+ ssrName: "numberOfGifLoops";
455
+ docLink: string;
456
+ type: number | null;
457
+ };
434
458
  };
435
459
  readonly renderStillOnLambda: {
436
460
  readonly offthreadVideoCacheSizeInBytes: {
@@ -461,6 +485,14 @@ export declare const BrowserSafeApis: {
461
485
  docLink: string;
462
486
  type: number | null;
463
487
  };
488
+ readonly numberOfGifLoops: {
489
+ name: string;
490
+ cliFlag: "number-of-gif-loops";
491
+ description: () => JSX.Element;
492
+ ssrName: "numberOfGifLoops";
493
+ docLink: string;
494
+ type: number | null;
495
+ };
464
496
  };
465
497
  readonly renderStillOnCloudRun: {
466
498
  readonly offthreadVideoCacheSizeInBytes: {
@@ -6,6 +6,7 @@ const node_fs_1 = require("node:fs");
6
6
  const node_path_1 = require("node:path");
7
7
  const audio_codec_1 = require("./audio-codec");
8
8
  const call_ffmpeg_1 = require("./call-ffmpeg");
9
+ const convert_number_of_gif_loops_to_ffmpeg_1 = require("./convert-number-of-gif-loops-to-ffmpeg");
9
10
  const is_audio_codec_1 = require("./is-audio-codec");
10
11
  const logger_1 = require("./logger");
11
12
  const parse_ffmpeg_progress_1 = require("./parse-ffmpeg-progress");
@@ -29,9 +30,7 @@ const combineVideos = async (options) => {
29
30
  numberOfGifLoops === null ? null : '-loop',
30
31
  numberOfGifLoops === null
31
32
  ? null
32
- : typeof numberOfGifLoops === 'number'
33
- ? String(numberOfGifLoops)
34
- : '-1',
33
+ : (0, convert_number_of_gif_loops_to_ffmpeg_1.convertNumberOfGifLoopsToFfmpegSyntax)(numberOfGifLoops),
35
34
  (0, is_audio_codec_1.isAudioCodec)(codec) ? null : '-c:v',
36
35
  (0, is_audio_codec_1.isAudioCodec)(codec) ? null : codec === 'gif' ? 'gif' : 'copy',
37
36
  resolvedAudioCodec ? '-c:a' : null,
@@ -37,7 +37,17 @@ const generateFfmpegArgs = ({ hasPreencoded, proResProfileName, pixelFormat, x26
37
37
  ['-color_range', 'tv'],
38
38
  hasPreencoded ? [] : ['-vf', 'zscale=m=709:min=709:r=limited'],
39
39
  ]
40
- : [];
40
+ : colorSpace === 'bt2020-ncl'
41
+ ? [
42
+ ['-colorspace:v', 'bt2020nc'],
43
+ ['-color_primaries:v', 'bt2020'],
44
+ ['-color_trc:v', 'arib-std-b67'],
45
+ ['-color_range', 'tv'],
46
+ hasPreencoded
47
+ ? []
48
+ : ['-vf', 'zscale=m=2020_ncl:min=2020_ncl:r=limited'],
49
+ ]
50
+ : [];
41
51
  return [
42
52
  ['-c:v', hasPreencoded ? 'copy' : encoderName],
43
53
  // -c:v is the same as -vcodec as -codec:video
package/dist/index.js CHANGED
@@ -198,4 +198,4 @@ exports.RenderInternals = {
198
198
  getPortConfig: port_config_1.getPortConfig,
199
199
  };
200
200
  // Warn of potential performance issues with Apple Silicon (M1 chip under Rosetta)
201
- (0, check_apple_silicon_1.checkNodeVersionAndWarnAboutRosetta)();
201
+ (0, check_apple_silicon_1.checkNodeVersionAndWarnAboutRosetta)('info', false);
@@ -1,5 +1,5 @@
1
1
  /// <reference types="react" />
2
- export declare const validColorSpaces: readonly ["default", "bt709"];
2
+ export declare const validColorSpaces: readonly ["default", "bt709", "bt2020-ncl"];
3
3
  export type ColorSpace = (typeof validColorSpaces)[number];
4
4
  export declare const colorSpaceOption: {
5
5
  name: string;
@@ -7,6 +7,6 @@ export declare const colorSpaceOption: {
7
7
  description: () => JSX.Element;
8
8
  docLink: string;
9
9
  ssrName: string;
10
- type: "default" | "bt709";
10
+ type: "default" | "bt709" | "bt2020-ncl";
11
11
  };
12
12
  export declare const validateColorSpace: (option: unknown) => void;
@@ -2,11 +2,11 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.validateColorSpace = exports.colorSpaceOption = exports.validColorSpaces = void 0;
4
4
  const jsx_runtime_1 = require("react/jsx-runtime");
5
- exports.validColorSpaces = ['default', 'bt709'];
5
+ exports.validColorSpaces = ['default', 'bt709', 'bt2020-ncl'];
6
6
  exports.colorSpaceOption = {
7
7
  name: 'Color space',
8
8
  cliFlag: 'color-space',
9
- description: () => ((0, jsx_runtime_1.jsxs)(jsx_runtime_1.Fragment, { children: ["Color space to use for the video. Acceptable values:", ' ', (0, jsx_runtime_1.jsxs)("code", { children: ['"', "default", '"'] }), ",", ' ', (0, jsx_runtime_1.jsxs)("code", { children: ['"', "bt709", '"'] }), ".", (0, jsx_runtime_1.jsx)("br", {}), "If", ' ', (0, jsx_runtime_1.jsxs)("code", { children: ['"', "bt709", '"'] }), ' ', "is used, it is recommended to also use", ' ', (0, jsx_runtime_1.jsxs)("code", { children: ['"', "png", '"'] }), ' ', "as the image format to have accurate color transformations throughout. Only since v4.0.83, colorspace conversion is actually performed, previously it would only tag the metadata of the video."] })),
9
+ description: () => ((0, jsx_runtime_1.jsxs)(jsx_runtime_1.Fragment, { children: ["Color space to use for the video. Acceptable values:", ' ', (0, jsx_runtime_1.jsxs)("code", { children: ['"', "default", '"'] }), ",", ' ', (0, jsx_runtime_1.jsxs)("code", { children: ['"', "bt709", '"'] }), ' ', "(since v4.0.28),", ' ', (0, jsx_runtime_1.jsxs)("code", { children: ['"', "bt2020-ncl", '"'] }), ' ', "(since v4.0.88),", ' ', (0, jsx_runtime_1.jsxs)("code", { children: ['"', "bt2020-cl", '"'] }), ' ', "(since v4.0.88), .", (0, jsx_runtime_1.jsx)("br", {}), "If a non-default colorspace is used, it is recommended to also use", ' ', (0, jsx_runtime_1.jsxs)("code", { children: ['"', "png", '"'] }), ' ', "as the image format to have accurate color transformations throughout. Only since v4.0.83, colorspace conversion is actually performed, previously it would only tag the metadata of the video."] })),
10
10
  docLink: 'https://www.remotion.dev/docs/renderer/render-media#colorspace',
11
11
  ssrName: 'colorSpace',
12
12
  type: 'default',
@@ -86,7 +86,7 @@ export declare const allOptions: {
86
86
  description: () => JSX.Element;
87
87
  docLink: string;
88
88
  ssrName: string;
89
- type: "default" | "bt709";
89
+ type: "default" | "bt709" | "bt2020-ncl";
90
90
  };
91
91
  deleteAfterOption: {
92
92
  name: string;
@@ -152,5 +152,13 @@ export declare const allOptions: {
152
152
  docLink: string;
153
153
  type: boolean;
154
154
  };
155
+ numberOfGifLoopsOption: {
156
+ name: string;
157
+ cliFlag: "number-of-gif-loops";
158
+ description: () => JSX.Element;
159
+ ssrName: "numberOfGifLoops";
160
+ docLink: string;
161
+ type: number | null;
162
+ };
155
163
  };
156
164
  export type AvailableOptions = keyof typeof allOptions;
@@ -15,6 +15,7 @@ const folder_expiry_1 = require("./folder-expiry");
15
15
  const gl_1 = require("./gl");
16
16
  const jpeg_quality_1 = require("./jpeg-quality");
17
17
  const mute_1 = require("./mute");
18
+ const number_of_gif_loops_1 = require("./number-of-gif-loops");
18
19
  const offthreadvideo_cache_size_1 = require("./offthreadvideo-cache-size");
19
20
  const scale_1 = require("./scale");
20
21
  const video_bitrate_1 = require("./video-bitrate");
@@ -40,4 +41,5 @@ exports.allOptions = {
40
41
  encodingMaxRateOption: encoding_max_rate_1.encodingMaxRateOption,
41
42
  encodingBufferSizeOption: encoding_buffer_size_1.encodingBufferSizeOption,
42
43
  beepOnFinishOption: beep_on_finish_1.beepOnFinishOption,
44
+ numberOfGifLoopsOption: number_of_gif_loops_1.numberOfGifLoopsOption,
43
45
  };
@@ -0,0 +1,9 @@
1
+ /// <reference types="react" />
2
+ export declare const numberOfGifLoopsOption: {
3
+ name: string;
4
+ cliFlag: "number-of-gif-loops";
5
+ description: () => JSX.Element;
6
+ ssrName: "numberOfGifLoops";
7
+ docLink: string;
8
+ type: number | null;
9
+ };
@@ -0,0 +1,14 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.numberOfGifLoopsOption = void 0;
4
+ const jsx_runtime_1 = require("react/jsx-runtime");
5
+ exports.numberOfGifLoopsOption = {
6
+ name: 'Number of GIF loops',
7
+ cliFlag: 'number-of-gif-loops',
8
+ description: () => {
9
+ return ((0, jsx_runtime_1.jsxs)(jsx_runtime_1.Fragment, { children: ["Allows you to set the number of loops as follows:", (0, jsx_runtime_1.jsxs)("ul", { children: [(0, jsx_runtime_1.jsxs)("li", { children: [(0, jsx_runtime_1.jsx)("code", { children: "null" }), " (or omitting in the CLI) plays the GIF indefinitely."] }), (0, jsx_runtime_1.jsxs)("li", { children: [(0, jsx_runtime_1.jsx)("code", { children: "0" }), " disables looping"] }), (0, jsx_runtime_1.jsxs)("li", { children: [(0, jsx_runtime_1.jsx)("code", { children: "1" }), " loops the GIF once (plays twice in total)"] }), (0, jsx_runtime_1.jsxs)("li", { children: [(0, jsx_runtime_1.jsx)("code", { children: "2" }), " loops the GIF twice (plays three times in total) and so on."] })] })] }));
10
+ },
11
+ ssrName: 'numberOfGifLoops',
12
+ docLink: 'https://www.remotion.dev/docs/render-as-gif#changing-the-number-of-loops',
13
+ type: 0,
14
+ };
@@ -17,6 +17,14 @@ export declare const optionsMap: {
17
17
  docLink: string;
18
18
  type: string | null;
19
19
  };
20
+ readonly numberOfGifLoops: {
21
+ name: string;
22
+ cliFlag: "number-of-gif-loops";
23
+ description: () => JSX.Element;
24
+ ssrName: "numberOfGifLoops";
25
+ docLink: string;
26
+ type: number | null;
27
+ };
20
28
  };
21
29
  readonly renderStill: {
22
30
  readonly offthreadVideoCacheSizeInBytes: {
@@ -75,6 +83,14 @@ export declare const optionsMap: {
75
83
  docLink: string;
76
84
  type: string | null;
77
85
  };
86
+ readonly numberOfGifLoops: {
87
+ name: string;
88
+ cliFlag: "number-of-gif-loops";
89
+ description: () => JSX.Element;
90
+ ssrName: "numberOfGifLoops";
91
+ docLink: string;
92
+ type: number | null;
93
+ };
78
94
  };
79
95
  readonly renderStillOnLambda: {
80
96
  readonly offthreadVideoCacheSizeInBytes: {
@@ -105,6 +121,14 @@ export declare const optionsMap: {
105
121
  docLink: string;
106
122
  type: number | null;
107
123
  };
124
+ readonly numberOfGifLoops: {
125
+ name: string;
126
+ cliFlag: "number-of-gif-loops";
127
+ description: () => JSX.Element;
128
+ ssrName: "numberOfGifLoops";
129
+ docLink: string;
130
+ type: number | null;
131
+ };
108
132
  };
109
133
  readonly renderStillOnCloudRun: {
110
134
  readonly offthreadVideoCacheSizeInBytes: {
@@ -1,12 +1,14 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.optionsMap = void 0;
4
+ const number_of_gif_loops_1 = require("./number-of-gif-loops");
4
5
  const offthreadvideo_cache_size_1 = require("./offthreadvideo-cache-size");
5
6
  const video_bitrate_1 = require("./video-bitrate");
6
7
  exports.optionsMap = {
7
8
  renderMedia: {
8
9
  offthreadVideoCacheSizeInBytes: offthreadvideo_cache_size_1.offthreadVideoCacheSizeInBytes,
9
10
  videoBitrate: video_bitrate_1.videoBitrate,
11
+ numberOfGifLoops: number_of_gif_loops_1.numberOfGifLoopsOption,
10
12
  },
11
13
  renderStill: {
12
14
  offthreadVideoCacheSizeInBytes: offthreadvideo_cache_size_1.offthreadVideoCacheSizeInBytes,
@@ -23,6 +25,7 @@ exports.optionsMap = {
23
25
  renderMediaOnLambda: {
24
26
  offthreadVideoCacheSizeInBytes: offthreadvideo_cache_size_1.offthreadVideoCacheSizeInBytes,
25
27
  videoBitrate: video_bitrate_1.videoBitrate,
28
+ numberOfGifLoops: number_of_gif_loops_1.numberOfGifLoopsOption,
26
29
  },
27
30
  renderStillOnLambda: {
28
31
  offthreadVideoCacheSizeInBytes: offthreadvideo_cache_size_1.offthreadVideoCacheSizeInBytes,
@@ -32,6 +35,7 @@ exports.optionsMap = {
32
35
  },
33
36
  renderMediaOnCloudRun: {
34
37
  offthreadVideoCacheSizeInBytes: offthreadvideo_cache_size_1.offthreadVideoCacheSizeInBytes,
38
+ numberOfGifLoops: number_of_gif_loops_1.numberOfGifLoopsOption,
35
39
  },
36
40
  renderStillOnCloudRun: {
37
41
  offthreadVideoCacheSizeInBytes: offthreadvideo_cache_size_1.offthreadVideoCacheSizeInBytes,
@@ -47,7 +47,6 @@ export type InternalRenderMediaOptions = {
47
47
  jpegQuality: number;
48
48
  frameRange: FrameRange | null;
49
49
  everyNthFrame: number;
50
- numberOfGifLoops: number | null;
51
50
  puppeteerInstance: HeadlessBrowser | undefined;
52
51
  overwrite: boolean;
53
52
  onProgress: RenderMediaOnProgress;
@@ -99,7 +98,6 @@ export type RenderMediaOptions = Prettify<{
99
98
  jpegQuality?: number;
100
99
  frameRange?: FrameRange | null;
101
100
  everyNthFrame?: number;
102
- numberOfGifLoops?: number | null;
103
101
  puppeteerInstance?: HeadlessBrowser;
104
102
  overwrite?: boolean;
105
103
  onProgress?: RenderMediaOnProgress;
@@ -127,7 +125,6 @@ export type RenderMediaOptions = Prettify<{
127
125
  enforceAudioTrack?: boolean;
128
126
  ffmpegOverride?: FfmpegOverrideFn;
129
127
  audioBitrate?: string | null;
130
- videoBitrate?: string | null;
131
128
  encodingMaxRate?: string | null;
132
129
  encodingBufferSize?: string | null;
133
130
  disallowParallelEncoding?: boolean;
@@ -135,9 +132,8 @@ export type RenderMediaOptions = Prettify<{
135
132
  serveUrl: string;
136
133
  concurrency?: number | string | null;
137
134
  logLevel?: LogLevel;
138
- offthreadVideoCacheSizeInBytes?: number | null;
139
135
  colorSpace?: ColorSpace;
140
- }>;
136
+ }> & Partial<MoreRenderMediaOptions>;
141
137
  type RenderMediaResult = {
142
138
  buffer: Buffer | null;
143
139
  slowestFrames: SlowFrame[];
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@remotion/renderer",
3
- "version": "4.0.84",
3
+ "version": "4.0.85",
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.84"
21
+ "remotion": "4.0.85"
22
22
  },
23
23
  "peerDependencies": {
24
24
  "react": ">=16.8.0",
@@ -40,13 +40,13 @@
40
40
  "vitest": "0.31.1"
41
41
  },
42
42
  "optionalDependencies": {
43
- "@remotion/compositor-darwin-arm64": "4.0.84",
44
- "@remotion/compositor-linux-arm64-gnu": "4.0.84",
45
- "@remotion/compositor-darwin-x64": "4.0.84",
46
- "@remotion/compositor-linux-x64-gnu": "4.0.84",
47
- "@remotion/compositor-linux-arm64-musl": "4.0.84",
48
- "@remotion/compositor-linux-x64-musl": "4.0.84",
49
- "@remotion/compositor-win32-x64-msvc": "4.0.84"
43
+ "@remotion/compositor-darwin-arm64": "4.0.85",
44
+ "@remotion/compositor-linux-arm64-gnu": "4.0.85",
45
+ "@remotion/compositor-darwin-x64": "4.0.85",
46
+ "@remotion/compositor-linux-arm64-musl": "4.0.85",
47
+ "@remotion/compositor-win32-x64-msvc": "4.0.85",
48
+ "@remotion/compositor-linux-x64-musl": "4.0.85",
49
+ "@remotion/compositor-linux-x64-gnu": "4.0.85"
50
50
  },
51
51
  "keywords": [
52
52
  "remotion",