@remotion/renderer 4.1.0-alpha1 → 4.1.0-alpha10

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 (96) hide show
  1. package/dist/assets/download-and-map-assets-to-file.d.ts +2 -4
  2. package/dist/assets/download-and-map-assets-to-file.js +14 -10
  3. package/dist/assets/download-map.d.ts +4 -0
  4. package/dist/assets/download-map.js +3 -0
  5. package/dist/audio-codec.d.ts +1 -1
  6. package/dist/browser/Browser.d.ts +7 -6
  7. package/dist/browser/Browser.js +13 -13
  8. package/dist/browser/BrowserPage.d.ts +21 -6
  9. package/dist/browser/BrowserPage.js +80 -19
  10. package/dist/browser/BrowserRunner.d.ts +0 -1
  11. package/dist/browser/BrowserRunner.js +6 -6
  12. package/dist/browser/Connection.d.ts +9 -3
  13. package/dist/browser/Connection.js +11 -3
  14. package/dist/browser/ConsoleMessage.d.ts +8 -1
  15. package/dist/browser/ConsoleMessage.js +2 -1
  16. package/dist/browser/DOMWorld.d.ts +10 -4
  17. package/dist/browser/DOMWorld.js +16 -15
  18. package/dist/browser/ExecutionContext.js +4 -4
  19. package/dist/browser/FrameManager.d.ts +3 -6
  20. package/dist/browser/FrameManager.js +11 -16
  21. package/dist/browser/LaunchOptions.d.ts +2 -0
  22. package/dist/browser/Launcher.js +3 -3
  23. package/dist/browser/NetworkManager.d.ts +4 -1
  24. package/dist/browser/Target.d.ts +2 -1
  25. package/dist/browser/Target.js +3 -1
  26. package/dist/browser/create-browser-fetcher.js +19 -24
  27. package/dist/browser/devtools-types.d.ts +59 -0
  28. package/dist/browser/should-log-message.js +14 -0
  29. package/dist/chalk/index.d.ts +2 -1
  30. package/dist/chalk/index.js +3 -8
  31. package/dist/chalk/is-color-supported.d.ts +1 -1
  32. package/dist/chalk/is-color-supported.js +18 -10
  33. package/dist/client.d.ts +26 -31
  34. package/dist/compositor/compose.js +6 -1
  35. package/dist/compositor/compositor.d.ts +3 -2
  36. package/dist/compositor/compositor.js +10 -10
  37. package/dist/compositor/payloads.d.ts +15 -1
  38. package/dist/create-ffmpeg-merge-filter.js +1 -2
  39. package/dist/cycle-browser-tabs.d.ts +2 -1
  40. package/dist/cycle-browser-tabs.js +2 -2
  41. package/dist/format-logs.d.ts +3 -0
  42. package/dist/format-logs.js +207 -0
  43. package/dist/get-browser-instance.d.ts +3 -2
  44. package/dist/get-browser-instance.js +5 -5
  45. package/dist/get-bundle-url-from-serve-url.d.ts +2 -0
  46. package/dist/get-bundle-url-from-serve-url.js +30 -0
  47. package/dist/get-compositions.d.ts +7 -6
  48. package/dist/get-compositions.js +21 -11
  49. package/dist/get-extension-from-codec.d.ts +2 -2
  50. package/dist/get-local-browser-executable.js +15 -0
  51. package/dist/get-video-metadata.d.ts +2 -0
  52. package/dist/get-video-metadata.js +14 -0
  53. package/dist/index.d.ts +64 -61
  54. package/dist/index.js +3 -1
  55. package/dist/logger.d.ts +2 -2
  56. package/dist/logger.js +23 -18
  57. package/dist/offthread-video-server.d.ts +3 -3
  58. package/dist/offthread-video-server.js +65 -29
  59. package/dist/open-browser.d.ts +3 -2
  60. package/dist/open-browser.js +7 -5
  61. package/dist/options/crf.js +1 -1
  62. package/dist/options/video-codec.js +1 -1
  63. package/dist/perf.js +4 -2
  64. package/dist/prepare-server.d.ts +4 -5
  65. package/dist/prepare-server.js +16 -14
  66. package/dist/prespawn-ffmpeg.d.ts +2 -1
  67. package/dist/prespawn-ffmpeg.js +3 -31
  68. package/dist/puppeteer-evaluate.d.ts +4 -1
  69. package/dist/puppeteer-evaluate.js +5 -5
  70. package/dist/render-frames.d.ts +16 -8
  71. package/dist/render-frames.js +50 -22
  72. package/dist/render-media.d.ts +17 -9
  73. package/dist/render-media.js +41 -26
  74. package/dist/render-still.d.ts +13 -6
  75. package/dist/render-still.js +32 -17
  76. package/dist/replace-browser.d.ts +2 -1
  77. package/dist/replace-browser.js +2 -2
  78. package/dist/screenshot-task.js +4 -2
  79. package/dist/seek-to-frame.d.ts +8 -2
  80. package/dist/seek-to-frame.js +87 -25
  81. package/dist/select-composition.d.ts +10 -5
  82. package/dist/select-composition.js +39 -18
  83. package/dist/serialize-props.d.ts +6 -0
  84. package/dist/serialize-props.js +36 -0
  85. package/dist/serve-handler/index.js +1 -1
  86. package/dist/serve-static.d.ts +2 -3
  87. package/dist/serve-static.js +10 -4
  88. package/dist/set-props-and-env.d.ts +4 -1
  89. package/dist/set-props-and-env.js +52 -22
  90. package/dist/stitch-frames-to-video.d.ts +2 -1
  91. package/dist/stitch-frames-to-video.js +12 -22
  92. package/dist/symbolicate-stacktrace.d.ts +3 -2
  93. package/dist/symbolicate-stacktrace.js +14 -7
  94. package/dist/take-frame-and-compose.js +1 -1
  95. package/dist/validate-output-filename.d.ts +1 -1
  96. package/package.json +10 -10
@@ -21,6 +21,7 @@ const get_duration_from_frame_range_1 = require("./get-duration-from-frame-range
21
21
  const get_frame_padded_index_1 = require("./get-frame-padded-index");
22
22
  const get_frame_to_render_1 = require("./get-frame-to-render");
23
23
  const jpeg_quality_1 = require("./jpeg-quality");
24
+ const logger_1 = require("./logger");
24
25
  const make_cancel_signal_1 = require("./make-cancel-signal");
25
26
  const open_browser_1 = require("./open-browser");
26
27
  const perf_1 = require("./perf");
@@ -34,7 +35,7 @@ const take_frame_and_compose_1 = require("./take-frame-and-compose");
34
35
  const truthy_1 = require("./truthy");
35
36
  const validate_scale_1 = require("./validate-scale");
36
37
  const MAX_RETRIES_PER_FRAME = 1;
37
- const innerRenderFrames = async ({ onFrameUpdate, outputDir, onStart, inputProps, jpegQuality, imageFormat, frameRange, onError, envVariables, onBrowserLog, onFrameBuffer, onDownload, pagesArray, serveUrl, composition, timeoutInMilliseconds, scale, actualConcurrency, everyNthFrame, proxyPort, cancelSignal, downloadMap, muted, makeBrowser, browserReplacer, compositor, sourcemapContext, }) => {
38
+ const innerRenderFrames = async ({ onFrameUpdate, outputDir, onStart, serializedInputPropsWithCustomSchema, serializedResolvedPropsWithCustomSchema, jpegQuality, imageFormat, frameRange, onError, envVariables, onBrowserLog, onFrameBuffer, onDownload, pagesArray, serveUrl, composition, timeoutInMilliseconds, scale, actualConcurrency, everyNthFrame, proxyPort, cancelSignal, downloadMap, muted, makeBrowser, browserReplacer, compositor, sourcemapContext, logLevel, indent, }) => {
38
39
  if (outputDir) {
39
40
  if (!node_fs_1.default.existsSync(outputDir)) {
40
41
  node_fs_1.default.mkdirSync(outputDir, {
@@ -47,7 +48,9 @@ const innerRenderFrames = async ({ onFrameUpdate, outputDir, onStart, inputProps
47
48
  const framesToRender = (0, get_duration_from_frame_range_1.getFramesToRender)(realFrameRange, everyNthFrame);
48
49
  const lastFrame = framesToRender[framesToRender.length - 1];
49
50
  const makePage = async (context) => {
50
- const page = await browserReplacer.getBrowser().newPage(context);
51
+ const page = await browserReplacer
52
+ .getBrowser()
53
+ .newPage(context, logLevel, indent);
51
54
  pagesArray.push(page);
52
55
  await page.setViewport({
53
56
  width: composition.width,
@@ -66,7 +69,7 @@ const innerRenderFrames = async ({ onFrameUpdate, outputDir, onStart, inputProps
66
69
  }
67
70
  const initialFrame = realFrameRange[0];
68
71
  await (0, set_props_and_env_1.setPropsAndEnv)({
69
- inputProps,
72
+ serializedInputPropsWithCustomSchema,
70
73
  envVariables,
71
74
  page,
72
75
  serveUrl,
@@ -76,14 +79,16 @@ const innerRenderFrames = async ({ onFrameUpdate, outputDir, onStart, inputProps
76
79
  retriesRemaining: 2,
77
80
  audioEnabled: !muted,
78
81
  videoEnabled: imageFormat !== 'none',
82
+ indent,
83
+ logLevel,
79
84
  });
80
85
  await (0, puppeteer_evaluate_1.puppeteerEvaluateWithCatch)({
81
86
  // eslint-disable-next-line max-params
82
- pageFunction: (id, defaultProps, durationInFrames, fps, height, width) => {
87
+ pageFunction: (id, props, durationInFrames, fps, height, width) => {
83
88
  window.remotion_setBundleMode({
84
89
  type: 'composition',
85
90
  compositionName: id,
86
- compositionDefaultProps: defaultProps,
91
+ serializedResolvedPropsWithSchema: props,
87
92
  compositionDurationInFrames: durationInFrames,
88
93
  compositionFps: fps,
89
94
  compositionHeight: height,
@@ -92,7 +97,7 @@ const innerRenderFrames = async ({ onFrameUpdate, outputDir, onStart, inputProps
92
97
  },
93
98
  args: [
94
99
  composition.id,
95
- composition.defaultProps,
100
+ serializedResolvedPropsWithCustomSchema,
96
101
  composition.durationInFrames,
97
102
  composition.fps,
98
103
  composition.height,
@@ -130,7 +135,7 @@ const innerRenderFrames = async ({ onFrameUpdate, outputDir, onStart, inputProps
130
135
  cancelSignal === null || cancelSignal === void 0 ? void 0 : cancelSignal(() => {
131
136
  stopped = true;
132
137
  });
133
- const renderFrameWithOptionToReject = async ({ frame, index, reject, width, height, }) => {
138
+ const renderFrameWithOptionToReject = async ({ frame, index, reject, width, height, compId, }) => {
134
139
  const pool = await poolPromise;
135
140
  const freePage = await pool.acquire();
136
141
  if (stopped) {
@@ -146,7 +151,17 @@ const innerRenderFrames = async ({ onFrameUpdate, outputDir, onStart, inputProps
146
151
  frame,
147
152
  });
148
153
  freePage.on('error', errorCallbackOnFrame);
149
- await (0, seek_to_frame_1.seekToFrame)({ frame, page: freePage });
154
+ const startSeeking = Date.now();
155
+ await (0, seek_to_frame_1.seekToFrame)({
156
+ frame,
157
+ page: freePage,
158
+ composition: compId,
159
+ timeoutInMilliseconds,
160
+ });
161
+ const timeToSeek = Date.now() - startSeeking;
162
+ if (timeToSeek > 1000) {
163
+ logger_1.Log.verbose(`Seeking to frame ${frame} took ${timeToSeek}ms`);
164
+ }
150
165
  if (!outputDir && !onFrameBuffer && imageFormat !== 'none') {
151
166
  throw new Error('Called renderFrames() without specifying either `outputDir` or `onFrameBuffer`');
152
167
  }
@@ -207,6 +222,7 @@ const innerRenderFrames = async ({ onFrameUpdate, outputDir, onStart, inputProps
207
222
  reject,
208
223
  width: composition.width,
209
224
  height: composition.height,
225
+ compId: composition.id,
210
226
  })
211
227
  .then(() => {
212
228
  resolve();
@@ -283,12 +299,11 @@ const innerRenderFrames = async ({ onFrameUpdate, outputDir, onStart, inputProps
283
299
  await Promise.all(downloadPromises);
284
300
  return result;
285
301
  };
286
- const internalRenderFrames = ({ browserExecutable, cancelSignal, chromiumOptions, composition, concurrency, dumpBrowserLogs, envVariables, everyNthFrame, frameRange, imageFormat, indent, inputProps, jpegQuality, muted, onBrowserLog, onDownload, onFrameBuffer, onFrameUpdate, onStart, outputDir, port, puppeteerInstance, scale, server, timeoutInMilliseconds, verbose, webpackBundleOrServeUrl, }) => {
302
+ const internalRenderFrames = ({ browserExecutable, cancelSignal, chromiumOptions, composition, concurrency, envVariables, everyNthFrame, frameRange, imageFormat, indent, jpegQuality, muted, onBrowserLog, onDownload, onFrameBuffer, onFrameUpdate, onStart, outputDir, port, puppeteerInstance, scale, server, timeoutInMilliseconds, logLevel, webpackBundleOrServeUrl, serializedInputPropsWithCustomSchema, serializedResolvedPropsWithCustomSchema, }) => {
287
303
  remotion_1.Internals.validateDimension(composition.height, 'height', 'in the `config` object passed to `renderFrames()`');
288
304
  remotion_1.Internals.validateDimension(composition.width, 'width', 'in the `config` object passed to `renderFrames()`');
289
305
  remotion_1.Internals.validateFps(composition.fps, 'in the `config` object of `renderFrames()`', false);
290
- remotion_1.Internals.validateDurationInFrames({
291
- durationInFrames: composition.durationInFrames,
306
+ remotion_1.Internals.validateDurationInFrames(composition.durationInFrames, {
292
307
  component: 'in the `config` object passed to `renderFrames()`',
293
308
  allowFloats: false,
294
309
  });
@@ -296,12 +311,12 @@ const internalRenderFrames = ({ browserExecutable, cancelSignal, chromiumOptions
296
311
  (0, validate_scale_1.validateScale)(scale);
297
312
  const makeBrowser = () => (0, open_browser_1.internalOpenBrowser)({
298
313
  browser: browser_1.DEFAULT_BROWSER,
299
- shouldDumpIo: dumpBrowserLogs,
300
314
  browserExecutable,
301
315
  chromiumOptions,
302
316
  forceDeviceScaleFactor: scale,
303
317
  indent,
304
318
  viewport: null,
319
+ logLevel,
305
320
  });
306
321
  const browserInstance = puppeteerInstance !== null && puppeteerInstance !== void 0 ? puppeteerInstance : makeBrowser();
307
322
  const actualConcurrency = (0, get_concurrency_1.getActualConcurrency)(concurrency);
@@ -323,16 +338,18 @@ const internalRenderFrames = ({ browserExecutable, cancelSignal, chromiumOptions
323
338
  port,
324
339
  remotionRoot: (0, find_closest_package_json_1.findRemotionRoot)(),
325
340
  concurrency: actualConcurrency,
326
- verbose,
341
+ logLevel,
327
342
  indent,
328
343
  }, {
329
344
  onDownload,
330
345
  onError,
331
346
  }),
332
347
  browserInstance,
333
- ]).then(([{ server: { serveUrl, offthreadPort, compositor, sourceMap, downloadMap, }, cleanupServer, }, pInstance,]) => {
334
- const browserReplacer = (0, replace_browser_1.handleBrowserCrash)(pInstance);
335
- cleanup.push((0, cycle_browser_tabs_1.cycleBrowserTabs)(browserReplacer, actualConcurrency).stopCycling);
348
+ ]).then(([{ server: openedServer, cleanupServer }, pInstance]) => {
349
+ const { serveUrl, offthreadPort, compositor, sourceMap, downloadMap } = openedServer;
350
+ const browserReplacer = (0, replace_browser_1.handleBrowserCrash)(pInstance, logLevel, indent);
351
+ cleanup.push((0, cycle_browser_tabs_1.cycleBrowserTabs)(browserReplacer, actualConcurrency, logLevel, indent)
352
+ .stopCycling);
336
353
  cleanup.push(() => cleanupServer(false));
337
354
  return innerRenderFrames({
338
355
  onError,
@@ -352,7 +369,6 @@ const internalRenderFrames = ({ browserExecutable, cancelSignal, chromiumOptions
352
369
  everyNthFrame,
353
370
  frameRange,
354
371
  imageFormat,
355
- inputProps,
356
372
  jpegQuality,
357
373
  muted,
358
374
  onBrowserLog,
@@ -362,6 +378,10 @@ const internalRenderFrames = ({ browserExecutable, cancelSignal, chromiumOptions
362
378
  outputDir,
363
379
  scale,
364
380
  timeoutInMilliseconds,
381
+ logLevel,
382
+ indent,
383
+ serializedInputPropsWithCustomSchema,
384
+ serializedResolvedPropsWithCustomSchema,
365
385
  });
366
386
  }),
367
387
  ])
@@ -384,7 +404,7 @@ const internalRenderFrames = ({ browserExecutable, cancelSignal, chromiumOptions
384
404
  else {
385
405
  Promise.resolve(browserInstance)
386
406
  .then((instance) => {
387
- return instance.close(true);
407
+ return instance.close(true, logLevel, indent);
388
408
  })
389
409
  .catch((err) => {
390
410
  if (!(err === null || err === void 0 ? void 0 : err.message.includes('Target closed'))) {
@@ -405,7 +425,7 @@ exports.internalRenderFrames = internalRenderFrames;
405
425
  * @see [Documentation](https://www.remotion.dev/docs/renderer/render-frames)
406
426
  */
407
427
  const renderFrames = (options) => {
408
- const { composition, inputProps, onFrameUpdate, onStart, outputDir, serveUrl, browserExecutable, cancelSignal, chromiumOptions, concurrency, dumpBrowserLogs, envVariables, everyNthFrame, frameRange, imageFormat, jpegQuality, muted, onBrowserLog, onDownload, onFrameBuffer, port, puppeteerInstance, scale, timeoutInMilliseconds, verbose, quality, } = options;
428
+ const { composition, inputProps, onFrameUpdate, onStart, outputDir, serveUrl, browserExecutable, cancelSignal, chromiumOptions, concurrency, dumpBrowserLogs, envVariables, everyNthFrame, frameRange, imageFormat, jpegQuality, muted, onBrowserLog, onDownload, onFrameBuffer, port, puppeteerInstance, scale, timeoutInMilliseconds, verbose, quality, logLevel, } = options;
409
429
  if (!composition) {
410
430
  throw new Error('No `composition` option has been specified for renderFrames()');
411
431
  }
@@ -421,7 +441,6 @@ const renderFrames = (options) => {
421
441
  chromiumOptions: chromiumOptions !== null && chromiumOptions !== void 0 ? chromiumOptions : {},
422
442
  composition,
423
443
  concurrency: concurrency !== null && concurrency !== void 0 ? concurrency : null,
424
- dumpBrowserLogs: dumpBrowserLogs !== null && dumpBrowserLogs !== void 0 ? dumpBrowserLogs : false,
425
444
  envVariables: envVariables !== null && envVariables !== void 0 ? envVariables : {},
426
445
  everyNthFrame: everyNthFrame !== null && everyNthFrame !== void 0 ? everyNthFrame : 1,
427
446
  frameRange: frameRange !== null && frameRange !== void 0 ? frameRange : null,
@@ -429,7 +448,16 @@ const renderFrames = (options) => {
429
448
  indent: false,
430
449
  jpegQuality: jpegQuality !== null && jpegQuality !== void 0 ? jpegQuality : jpeg_quality_1.DEFAULT_JPEG_QUALITY,
431
450
  onDownload: onDownload !== null && onDownload !== void 0 ? onDownload : null,
432
- inputProps,
451
+ serializedInputPropsWithCustomSchema: remotion_1.Internals.serializeJSONWithDate({
452
+ indent: undefined,
453
+ staticBase: null,
454
+ data: inputProps !== null && inputProps !== void 0 ? inputProps : {},
455
+ }).serializedString,
456
+ serializedResolvedPropsWithCustomSchema: remotion_1.Internals.serializeJSONWithDate({
457
+ indent: undefined,
458
+ staticBase: null,
459
+ data: composition.props,
460
+ }).serializedString,
433
461
  puppeteerInstance,
434
462
  muted: muted !== null && muted !== void 0 ? muted : false,
435
463
  onBrowserLog: onBrowserLog !== null && onBrowserLog !== void 0 ? onBrowserLog : null,
@@ -439,7 +467,7 @@ const renderFrames = (options) => {
439
467
  outputDir,
440
468
  port: port !== null && port !== void 0 ? port : null,
441
469
  scale: scale !== null && scale !== void 0 ? scale : 1,
442
- verbose: verbose !== null && verbose !== void 0 ? verbose : false,
470
+ logLevel: verbose || dumpBrowserLogs ? 'verbose' : logLevel !== null && logLevel !== void 0 ? logLevel : (0, logger_1.getLogLevel)(),
443
471
  timeoutInMilliseconds: timeoutInMilliseconds !== null && timeoutInMilliseconds !== void 0 ? timeoutInMilliseconds : TimeoutSettings_1.DEFAULT_TIMEOUT,
444
472
  webpackBundleOrServeUrl: serveUrl,
445
473
  server: undefined,
@@ -1,6 +1,6 @@
1
1
  /// <reference types="node" />
2
- import type { AnySmallCompMetadata } from 'remotion';
3
- import type { RenderMediaOnDownload } from './assets/download-and-map-assets-to-file';
2
+ import type { VideoConfig } from 'remotion';
3
+ import { type RenderMediaOnDownload } from './assets/download-and-map-assets-to-file';
4
4
  import type { AudioCodec } from './audio-codec';
5
5
  import type { BrowserExecutable } from './browser-executable';
6
6
  import type { BrowserLog } from './browser-log';
@@ -9,6 +9,7 @@ import type { Codec } from './codec';
9
9
  import type { FfmpegOverrideFn } from './ffmpeg-override';
10
10
  import type { FrameRange } from './frame-range';
11
11
  import type { VideoImageFormat } from './image-format';
12
+ import { type LogLevel } from './log-level';
12
13
  import type { CancelSignal } from './make-cancel-signal';
13
14
  import type { ChromiumOptions } from './open-browser';
14
15
  import type { PixelFormat } from './pixel-format';
@@ -31,8 +32,9 @@ export type RenderMediaOnProgress = (progress: {
31
32
  export type InternalRenderMediaOptions = {
32
33
  outputLocation: string | null;
33
34
  codec: Codec;
34
- composition: AnySmallCompMetadata;
35
- inputProps: Record<string, unknown>;
35
+ composition: Omit<VideoConfig, 'props' | 'defaultProps'>;
36
+ serializedInputPropsWithCustomSchema: string;
37
+ serializedResolvedPropsWithCustomSchema: string;
36
38
  crf: number | null;
37
39
  imageFormat: VideoImageFormat;
38
40
  pixelFormat: PixelFormat;
@@ -46,7 +48,6 @@ export type InternalRenderMediaOptions = {
46
48
  onProgress: RenderMediaOnProgress;
47
49
  onDownload: RenderMediaOnDownload;
48
50
  proResProfile: ProResProfile | undefined;
49
- dumpBrowserLogs: boolean;
50
51
  onBrowserLog: ((log: BrowserLog) => void) | null;
51
52
  onStart: (data: OnStartData) => void;
52
53
  timeoutInMilliseconds: number;
@@ -55,7 +56,7 @@ export type InternalRenderMediaOptions = {
55
56
  port: number | null;
56
57
  cancelSignal: CancelSignal | undefined;
57
58
  browserExecutable: BrowserExecutable | null;
58
- verbose: boolean;
59
+ logLevel: LogLevel;
59
60
  onCtrlCExit: (fn: () => void) => void;
60
61
  indent: boolean;
61
62
  server: RemotionServer | undefined;
@@ -73,7 +74,7 @@ export type InternalRenderMediaOptions = {
73
74
  export type RenderMediaOptions = {
74
75
  outputLocation?: string | null;
75
76
  codec: Codec;
76
- composition: AnySmallCompMetadata;
77
+ composition: VideoConfig;
77
78
  inputProps?: Record<string, unknown>;
78
79
  crf?: number | null;
79
80
  imageFormat?: VideoImageFormat;
@@ -92,6 +93,9 @@ export type RenderMediaOptions = {
92
93
  onProgress?: RenderMediaOnProgress;
93
94
  onDownload?: RenderMediaOnDownload;
94
95
  proResProfile?: ProResProfile;
96
+ /**
97
+ * @deprecated Use "logLevel": "verbose" instead
98
+ */
95
99
  dumpBrowserLogs?: boolean;
96
100
  onBrowserLog?: ((log: BrowserLog) => void) | undefined;
97
101
  onStart?: (data: OnStartData) => void;
@@ -101,6 +105,9 @@ export type RenderMediaOptions = {
101
105
  port?: number | null;
102
106
  cancelSignal?: CancelSignal;
103
107
  browserExecutable?: BrowserExecutable;
108
+ /**
109
+ * @deprecated Use "logLevel" instead
110
+ */
104
111
  verbose?: boolean;
105
112
  preferLossless?: boolean;
106
113
  muted?: boolean;
@@ -112,16 +119,17 @@ export type RenderMediaOptions = {
112
119
  audioCodec?: AudioCodec | null;
113
120
  serveUrl: string;
114
121
  concurrency?: number | string | null;
122
+ logLevel?: LogLevel;
115
123
  };
116
124
  type RenderMediaResult = {
117
125
  buffer: Buffer | null;
118
126
  slowestFrames: SlowFrame[];
119
127
  };
120
- export declare const internalRenderMedia: ({ proResProfile, crf, composition, inputProps, pixelFormat, codec, envVariables, frameRange, puppeteerInstance, outputLocation, onProgress, overwrite, onDownload, dumpBrowserLogs, onBrowserLog, onStart, timeoutInMilliseconds, chromiumOptions, scale, browserExecutable, port, cancelSignal, muted, enforceAudioTrack, ffmpegOverride, audioBitrate, videoBitrate, audioCodec, concurrency, disallowParallelEncoding, everyNthFrame, imageFormat: provisionalImageFormat, indent, jpegQuality, numberOfGifLoops, onCtrlCExit, preferLossless, serveUrl, server: reusedServer, verbose, }: InternalRenderMediaOptions) => Promise<RenderMediaResult>;
128
+ export declare const internalRenderMedia: ({ proResProfile, crf, composition, serializedInputPropsWithCustomSchema, pixelFormat, codec, envVariables, frameRange, puppeteerInstance, outputLocation, onProgress, overwrite, onDownload, onBrowserLog, onStart, timeoutInMilliseconds, chromiumOptions, scale, browserExecutable, port, cancelSignal, muted, enforceAudioTrack, ffmpegOverride, audioBitrate, videoBitrate, audioCodec, concurrency, disallowParallelEncoding, everyNthFrame, imageFormat: provisionalImageFormat, indent, jpegQuality, numberOfGifLoops, onCtrlCExit, preferLossless, serveUrl, server: reusedServer, logLevel, serializedResolvedPropsWithCustomSchema, }: InternalRenderMediaOptions) => Promise<RenderMediaResult>;
121
129
  /**
122
130
  *
123
131
  * @description Render a video from a composition
124
132
  * @see [Documentation](https://www.remotion.dev/docs/renderer/render-media)
125
133
  */
126
- export declare const renderMedia: ({ proResProfile, crf, composition, inputProps, pixelFormat, codec, envVariables, frameRange, puppeteerInstance, outputLocation, onProgress, overwrite, onDownload, dumpBrowserLogs, onBrowserLog, onStart, timeoutInMilliseconds, chromiumOptions, scale, browserExecutable, port, cancelSignal, muted, enforceAudioTrack, ffmpegOverride, audioBitrate, videoBitrate, audioCodec, jpegQuality, concurrency, serveUrl, disallowParallelEncoding, everyNthFrame, imageFormat, numberOfGifLoops, preferLossless, verbose, quality, }: RenderMediaOptions) => Promise<RenderMediaResult>;
134
+ export declare const renderMedia: ({ proResProfile, crf, composition, inputProps, pixelFormat, codec, envVariables, frameRange, puppeteerInstance, outputLocation, onProgress, overwrite, onDownload, onBrowserLog, onStart, timeoutInMilliseconds, chromiumOptions, scale, browserExecutable, port, cancelSignal, muted, enforceAudioTrack, ffmpegOverride, audioBitrate, videoBitrate, audioCodec, jpegQuality, concurrency, serveUrl, disallowParallelEncoding, everyNthFrame, imageFormat, numberOfGifLoops, dumpBrowserLogs, preferLossless, verbose, quality, logLevel, }: RenderMediaOptions) => Promise<RenderMediaResult>;
127
135
  export {};
@@ -43,7 +43,7 @@ const validate_output_filename_1 = require("./validate-output-filename");
43
43
  const validate_scale_1 = require("./validate-scale");
44
44
  const validate_videobitrate_1 = require("./validate-videobitrate");
45
45
  const SLOWEST_FRAME_COUNT = 10;
46
- const internalRenderMedia = ({ proResProfile, crf, composition, inputProps, pixelFormat, codec, envVariables, frameRange, puppeteerInstance, outputLocation, onProgress, overwrite, onDownload, dumpBrowserLogs, onBrowserLog, onStart, timeoutInMilliseconds, chromiumOptions, scale, browserExecutable, port, cancelSignal, muted, enforceAudioTrack, ffmpegOverride, audioBitrate, videoBitrate, audioCodec, concurrency, disallowParallelEncoding, everyNthFrame, imageFormat: provisionalImageFormat, indent, jpegQuality, numberOfGifLoops, onCtrlCExit, preferLossless, serveUrl, server: reusedServer, verbose, }) => {
46
+ const internalRenderMedia = ({ proResProfile, crf, composition, serializedInputPropsWithCustomSchema, pixelFormat, codec, envVariables, frameRange, puppeteerInstance, outputLocation, onProgress, overwrite, onDownload, onBrowserLog, onStart, timeoutInMilliseconds, chromiumOptions, scale, browserExecutable, port, cancelSignal, muted, enforceAudioTrack, ffmpegOverride, audioBitrate, videoBitrate, audioCodec, concurrency, disallowParallelEncoding, everyNthFrame, imageFormat: provisionalImageFormat, indent, jpegQuality, numberOfGifLoops, onCtrlCExit, preferLossless, serveUrl, server: reusedServer, logLevel, serializedResolvedPropsWithCustomSchema, }) => {
47
47
  (0, jpeg_quality_1.validateJpegQuality)(jpegQuality);
48
48
  (0, crf_1.validateQualitySettings)({ crf, codec, videoBitrate });
49
49
  (0, validate_videobitrate_1.validateBitrate)(audioBitrate, 'audioBitrate');
@@ -72,6 +72,7 @@ const internalRenderMedia = ({ proResProfile, crf, composition, inputProps, pixe
72
72
  let stitcherFfmpeg;
73
73
  let preStitcher = null;
74
74
  let encodedFrames = 0;
75
+ let muxedFrames = 0;
75
76
  let renderedFrames = 0;
76
77
  let renderedDoneIn = null;
77
78
  let encodedDoneIn = null;
@@ -86,30 +87,32 @@ const internalRenderMedia = ({ proResProfile, crf, composition, inputProps, pixe
86
87
  (0, can_use_parallel_encoding_1.canUseParallelEncoding)(codec);
87
88
  logger_1.Log.verboseAdvanced({
88
89
  indent,
89
- logLevel: verbose ? 'verbose' : 'info',
90
+ logLevel,
90
91
  tag: 'renderMedia()',
91
92
  }, 'Free memory:', freeMemory, 'Estimated usage parallel encoding', estimatedUsage);
92
93
  logger_1.Log.verboseAdvanced({
93
94
  indent,
94
- logLevel: verbose ? 'verbose' : 'info',
95
+ logLevel,
95
96
  tag: 'renderMedia()',
96
97
  }, 'Codec supports parallel rendering:', (0, can_use_parallel_encoding_1.canUseParallelEncoding)(codec));
97
- logger_1.Log.verboseAdvanced({
98
- indent,
99
- logLevel: verbose ? 'verbose' : 'info',
100
- tag: 'renderMedia()',
101
- }, 'User disallowed parallel encoding:', Boolean(disallowParallelEncoding));
98
+ if (disallowParallelEncoding) {
99
+ logger_1.Log.verboseAdvanced({
100
+ indent,
101
+ logLevel,
102
+ tag: 'renderMedia()',
103
+ }, 'User disallowed parallel encoding.');
104
+ }
102
105
  if (parallelEncoding) {
103
106
  logger_1.Log.verboseAdvanced({
104
107
  indent,
105
- logLevel: verbose ? 'verbose' : 'info',
108
+ logLevel,
106
109
  tag: 'renderMedia()',
107
110
  }, 'Parallel encoding is enabled.');
108
111
  }
109
112
  else {
110
113
  logger_1.Log.verboseAdvanced({
111
114
  indent,
112
- logLevel: verbose ? 'verbose' : 'info',
115
+ logLevel,
113
116
  tag: 'renderMedia()',
114
117
  }, 'Parallel encoding is disabled.');
115
118
  }
@@ -133,13 +136,12 @@ const internalRenderMedia = ({ proResProfile, crf, composition, inputProps, pixe
133
136
  const callUpdate = () => {
134
137
  onProgress === null || onProgress === void 0 ? void 0 : onProgress({
135
138
  encodedDoneIn,
136
- encodedFrames,
139
+ encodedFrames: Math.round(0.5 * encodedFrames + 0.5 * muxedFrames),
137
140
  renderedDoneIn,
138
141
  renderedFrames,
139
142
  stitchStage,
140
- progress: Math.round(((0.7 * renderedFrames + 0.3 * encodedFrames) /
141
- composition.durationInFrames) *
142
- 100) / 100,
143
+ progress: Math.round((70 * renderedFrames + 15 * encodedFrames + 15 * muxedFrames) /
144
+ composition.durationInFrames) / 100,
143
145
  });
144
146
  };
145
147
  const realFrameRange = (0, get_frame_to_render_1.getRealFrameRange)(composition.durationInFrames, frameRange);
@@ -167,7 +169,7 @@ const internalRenderMedia = ({ proResProfile, crf, composition, inputProps, pixe
167
169
  encodedFrames = frame;
168
170
  callUpdate();
169
171
  },
170
- verbose,
172
+ logLevel,
171
173
  imageFormat,
172
174
  signal: cancelPrestitcher.cancelSignal,
173
175
  ffmpegOverride: ffmpegOverride !== null && ffmpegOverride !== void 0 ? ffmpegOverride : (({ args }) => args),
@@ -225,7 +227,7 @@ const internalRenderMedia = ({ proResProfile, crf, composition, inputProps, pixe
225
227
  indent,
226
228
  port,
227
229
  remotionRoot: (0, find_closest_package_json_1.findRemotionRoot)(),
228
- verbose,
230
+ logLevel,
229
231
  webpackConfigOrServeUrl: serveUrl,
230
232
  }, {
231
233
  onDownload,
@@ -248,7 +250,7 @@ const internalRenderMedia = ({ proResProfile, crf, composition, inputProps, pixe
248
250
  callUpdate();
249
251
  onStart === null || onStart === void 0 ? void 0 : onStart(data);
250
252
  },
251
- inputProps,
253
+ serializedInputPropsWithCustomSchema,
252
254
  envVariables,
253
255
  imageFormat,
254
256
  jpegQuality,
@@ -276,7 +278,6 @@ const internalRenderMedia = ({ proResProfile, crf, composition, inputProps, pixe
276
278
  }
277
279
  : null,
278
280
  webpackBundleOrServeUrl: serveUrl,
279
- dumpBrowserLogs,
280
281
  onBrowserLog,
281
282
  onDownload,
282
283
  timeoutInMilliseconds,
@@ -286,9 +287,10 @@ const internalRenderMedia = ({ proResProfile, crf, composition, inputProps, pixe
286
287
  port,
287
288
  cancelSignal: cancelRenderFrames.cancelSignal,
288
289
  muted: disableAudio,
289
- verbose,
290
+ logLevel,
290
291
  indent,
291
292
  server,
293
+ serializedResolvedPropsWithCustomSchema,
292
294
  });
293
295
  return renderFramesProc;
294
296
  })
@@ -322,12 +324,17 @@ const internalRenderMedia = ({ proResProfile, crf, composition, inputProps, pixe
322
324
  assetsInfo,
323
325
  onProgress: (frame) => {
324
326
  stitchStage = 'muxing';
325
- encodedFrames = frame;
327
+ if (preEncodedFileLocation) {
328
+ muxedFrames = frame;
329
+ }
330
+ else {
331
+ encodedFrames = frame;
332
+ }
326
333
  callUpdate();
327
334
  },
328
335
  onDownload,
329
336
  numberOfGifLoops,
330
- verbose,
337
+ logLevel,
331
338
  dir: workingDir,
332
339
  cancelSignal: cancelStitcher.cancelSignal,
333
340
  muted: disableAudio,
@@ -401,8 +408,8 @@ exports.internalRenderMedia = internalRenderMedia;
401
408
  * @description Render a video from a composition
402
409
  * @see [Documentation](https://www.remotion.dev/docs/renderer/render-media)
403
410
  */
404
- const renderMedia = ({ proResProfile, crf, composition, inputProps, pixelFormat, codec, envVariables, frameRange, puppeteerInstance, outputLocation, onProgress, overwrite, onDownload, dumpBrowserLogs, onBrowserLog, onStart, timeoutInMilliseconds, chromiumOptions, scale, browserExecutable, port, cancelSignal, muted, enforceAudioTrack, ffmpegOverride, audioBitrate, videoBitrate, audioCodec, jpegQuality, concurrency, serveUrl, disallowParallelEncoding, everyNthFrame, imageFormat, numberOfGifLoops, preferLossless, verbose, quality, }) => {
405
- var _a;
411
+ const renderMedia = ({ proResProfile, crf, composition, inputProps, pixelFormat, codec, envVariables, frameRange, puppeteerInstance, outputLocation, onProgress, overwrite, onDownload, onBrowserLog, onStart, timeoutInMilliseconds, chromiumOptions, scale, browserExecutable, port, cancelSignal, muted, enforceAudioTrack, ffmpegOverride, audioBitrate, videoBitrate, audioCodec, jpegQuality, concurrency, serveUrl, disallowParallelEncoding, everyNthFrame, imageFormat, numberOfGifLoops, dumpBrowserLogs, preferLossless, verbose, quality, logLevel, }) => {
412
+ var _a, _b;
406
413
  if (quality !== undefined) {
407
414
  console.warn(`The "quality" option has been renamed. Please use "jpegQuality" instead.`);
408
415
  }
@@ -419,14 +426,17 @@ const renderMedia = ({ proResProfile, crf, composition, inputProps, pixelFormat,
419
426
  concurrency: concurrency !== null && concurrency !== void 0 ? concurrency : null,
420
427
  crf: crf !== null && crf !== void 0 ? crf : null,
421
428
  disallowParallelEncoding: disallowParallelEncoding !== null && disallowParallelEncoding !== void 0 ? disallowParallelEncoding : false,
422
- dumpBrowserLogs: dumpBrowserLogs !== null && dumpBrowserLogs !== void 0 ? dumpBrowserLogs : false,
423
429
  enforceAudioTrack: enforceAudioTrack !== null && enforceAudioTrack !== void 0 ? enforceAudioTrack : false,
424
430
  envVariables: envVariables !== null && envVariables !== void 0 ? envVariables : {},
425
431
  everyNthFrame: everyNthFrame !== null && everyNthFrame !== void 0 ? everyNthFrame : 1,
426
432
  ffmpegOverride: ffmpegOverride !== null && ffmpegOverride !== void 0 ? ffmpegOverride : undefined,
427
433
  frameRange: frameRange !== null && frameRange !== void 0 ? frameRange : null,
428
434
  imageFormat: imageFormat !== null && imageFormat !== void 0 ? imageFormat : image_format_1.DEFAULT_VIDEO_IMAGE_FORMAT,
429
- inputProps: inputProps !== null && inputProps !== void 0 ? inputProps : {},
435
+ serializedInputPropsWithCustomSchema: remotion_1.Internals.serializeJSONWithDate({
436
+ indent: undefined,
437
+ staticBase: null,
438
+ data: inputProps !== null && inputProps !== void 0 ? inputProps : {},
439
+ }).serializedString,
430
440
  jpegQuality: (_a = jpegQuality !== null && jpegQuality !== void 0 ? jpegQuality : quality) !== null && _a !== void 0 ? _a : jpeg_quality_1.DEFAULT_JPEG_QUALITY,
431
441
  muted: muted !== null && muted !== void 0 ? muted : false,
432
442
  numberOfGifLoops: numberOfGifLoops !== null && numberOfGifLoops !== void 0 ? numberOfGifLoops : null,
@@ -442,11 +452,16 @@ const renderMedia = ({ proResProfile, crf, composition, inputProps, pixelFormat,
442
452
  scale: scale !== null && scale !== void 0 ? scale : 1,
443
453
  timeoutInMilliseconds: timeoutInMilliseconds !== null && timeoutInMilliseconds !== void 0 ? timeoutInMilliseconds : TimeoutSettings_1.DEFAULT_TIMEOUT,
444
454
  videoBitrate: videoBitrate !== null && videoBitrate !== void 0 ? videoBitrate : null,
445
- verbose: verbose !== null && verbose !== void 0 ? verbose : false,
455
+ logLevel: verbose || dumpBrowserLogs ? 'verbose' : logLevel !== null && logLevel !== void 0 ? logLevel : (0, logger_1.getLogLevel)(),
446
456
  preferLossless: preferLossless !== null && preferLossless !== void 0 ? preferLossless : false,
447
457
  indent: false,
448
458
  onCtrlCExit: () => undefined,
449
459
  server: undefined,
460
+ serializedResolvedPropsWithCustomSchema: remotion_1.Internals.serializeJSONWithDate({
461
+ indent: undefined,
462
+ staticBase: null,
463
+ data: (_b = composition.props) !== null && _b !== void 0 ? _b : {},
464
+ }).serializedString,
450
465
  });
451
466
  };
452
467
  exports.renderMedia = renderMedia;
@@ -1,22 +1,23 @@
1
1
  /// <reference types="node" />
2
- import type { AnySmallCompMetadata } from 'remotion';
2
+ import type { VideoConfig } from 'remotion';
3
3
  import type { RenderMediaOnDownload } from './assets/download-and-map-assets-to-file';
4
4
  import type { BrowserExecutable } from './browser-executable';
5
5
  import type { BrowserLog } from './browser-log';
6
6
  import type { HeadlessBrowser } from './browser/Browser';
7
7
  import type { StillImageFormat } from './image-format';
8
+ import type { LogLevel } from './log-level';
8
9
  import type { CancelSignal } from './make-cancel-signal';
9
10
  import type { ChromiumOptions } from './open-browser';
10
11
  import type { RemotionServer } from './prepare-server';
11
12
  type InternalRenderStillOptions = {
12
- composition: AnySmallCompMetadata;
13
+ composition: VideoConfig;
13
14
  output: string | null;
14
15
  frame: number;
15
- inputProps: Record<string, unknown>;
16
+ serializedInputPropsWithCustomSchema: string;
17
+ serializedResolvedPropsWithCustomSchema: string;
16
18
  imageFormat: StillImageFormat;
17
19
  jpegQuality: number;
18
20
  puppeteerInstance: HeadlessBrowser | null;
19
- dumpBrowserLogs: boolean;
20
21
  envVariables: Record<string, string>;
21
22
  overwrite: boolean;
22
23
  browserExecutable: BrowserExecutable;
@@ -28,19 +29,22 @@ type InternalRenderStillOptions = {
28
29
  cancelSignal: CancelSignal | null;
29
30
  indent: boolean;
30
31
  server: RemotionServer | undefined;
31
- verbose: boolean;
32
+ logLevel: LogLevel;
32
33
  serveUrl: string;
33
34
  port: number | null;
34
35
  };
35
36
  export type RenderStillOptions = {
36
37
  port?: number | null;
37
- composition: AnySmallCompMetadata;
38
+ composition: VideoConfig;
38
39
  output?: string | null;
39
40
  frame?: number;
40
41
  inputProps?: Record<string, unknown>;
41
42
  imageFormat?: StillImageFormat;
42
43
  jpegQuality?: number;
43
44
  puppeteerInstance?: HeadlessBrowser;
45
+ /**
46
+ * @deprecated Use "logLevel": "verbose" instead
47
+ */
44
48
  dumpBrowserLogs?: boolean;
45
49
  envVariables?: Record<string, string>;
46
50
  overwrite?: boolean;
@@ -51,6 +55,9 @@ export type RenderStillOptions = {
51
55
  scale?: number;
52
56
  onDownload?: RenderMediaOnDownload;
53
57
  cancelSignal?: CancelSignal;
58
+ /**
59
+ * @deprecated Use "logLevel" instead
60
+ */
54
61
  verbose?: boolean;
55
62
  serveUrl: string;
56
63
  /**