@remotion/renderer 4.1.0-alpha3 → 4.1.0-alpha4

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 (87) hide show
  1. package/dist/assets/get-video-stream-duration.d.ts +9 -0
  2. package/dist/assets/get-video-stream-duration.js +71 -0
  3. package/dist/browser/Browser.d.ts +7 -6
  4. package/dist/browser/Browser.js +12 -12
  5. package/dist/browser/BrowserPage.d.ts +13 -2
  6. package/dist/browser/BrowserPage.js +15 -8
  7. package/dist/browser/BrowserRunner.js +2 -2
  8. package/dist/browser/LaunchOptions.d.ts +2 -0
  9. package/dist/browser/Launcher.js +2 -1
  10. package/dist/browser/Target.d.ts +2 -1
  11. package/dist/browser/Target.js +3 -1
  12. package/dist/browser/should-log-message.js +8 -0
  13. package/dist/calculate-sar-dar-pixels.d.ts +9 -0
  14. package/dist/calculate-sar-dar-pixels.js +19 -0
  15. package/dist/compositor/compositor.d.ts +3 -2
  16. package/dist/compositor/compositor.js +6 -5
  17. package/dist/cycle-browser-tabs.d.ts +2 -1
  18. package/dist/cycle-browser-tabs.js +2 -2
  19. package/dist/determine-resize-params.d.ts +4 -0
  20. package/dist/determine-resize-params.js +10 -0
  21. package/dist/determine-vcodec-ffmpeg-flags.d.ts +2 -0
  22. package/dist/determine-vcodec-ffmpeg-flags.js +13 -0
  23. package/dist/ensure-ffmpeg.d.ts +18 -0
  24. package/dist/ensure-ffmpeg.js +58 -0
  25. package/dist/ensure-presentation-timestamp.d.ts +15 -0
  26. package/dist/ensure-presentation-timestamp.js +88 -0
  27. package/dist/extract-frame-from-video.d.ts +16 -0
  28. package/dist/extract-frame-from-video.js +191 -0
  29. package/dist/ffmpeg-executable.d.ts +1 -0
  30. package/dist/ffmpeg-executable.js +2 -0
  31. package/dist/ffmpeg-flags.d.ts +31 -0
  32. package/dist/ffmpeg-flags.js +245 -0
  33. package/dist/format-logs.d.ts +3 -0
  34. package/dist/format-logs.js +201 -0
  35. package/dist/frame-to-ffmpeg-timestamp.d.ts +1 -0
  36. package/dist/frame-to-ffmpeg-timestamp.js +8 -0
  37. package/dist/get-browser-instance.d.ts +3 -2
  38. package/dist/get-browser-instance.js +5 -5
  39. package/dist/get-can-extract-frames-fast.d.ts +14 -0
  40. package/dist/get-can-extract-frames-fast.js +71 -0
  41. package/dist/get-compositions.d.ts +4 -3
  42. package/dist/get-compositions.js +6 -5
  43. package/dist/get-frame-of-video-slow.d.ts +17 -0
  44. package/dist/get-frame-of-video-slow.js +72 -0
  45. package/dist/get-video-info.d.ts +8 -0
  46. package/dist/get-video-info.js +59 -0
  47. package/dist/index.d.ts +14 -15
  48. package/dist/is-beyond-last-frame.d.ts +3 -0
  49. package/dist/is-beyond-last-frame.js +12 -0
  50. package/dist/last-frame-from-video-cache.d.ts +17 -0
  51. package/dist/last-frame-from-video-cache.js +55 -0
  52. package/dist/legacy-webpack-config.d.ts +9 -0
  53. package/dist/legacy-webpack-config.js +13 -0
  54. package/dist/logger.d.ts +0 -1
  55. package/dist/logger.js +5 -10
  56. package/dist/offthread-video-server.d.ts +3 -2
  57. package/dist/offthread-video-server.js +4 -3
  58. package/dist/open-browser.d.ts +3 -2
  59. package/dist/open-browser.js +7 -5
  60. package/dist/perf.js +4 -2
  61. package/dist/prepare-server.d.ts +3 -2
  62. package/dist/prepare-server.js +4 -4
  63. package/dist/prespawn-ffmpeg.d.ts +2 -1
  64. package/dist/prespawn-ffmpeg.js +2 -30
  65. package/dist/quality.d.ts +1 -0
  66. package/dist/quality.js +21 -0
  67. package/dist/render-frames.d.ts +11 -4
  68. package/dist/render-frames.js +15 -11
  69. package/dist/render-media.d.ts +11 -4
  70. package/dist/render-media.js +12 -14
  71. package/dist/render-still.d.ts +8 -2
  72. package/dist/render-still.js +8 -8
  73. package/dist/replace-browser.d.ts +2 -1
  74. package/dist/replace-browser.js +2 -2
  75. package/dist/select-composition.d.ts +2 -1
  76. package/dist/select-composition.js +8 -8
  77. package/dist/serve-static.d.ts +2 -1
  78. package/dist/serve-static.js +1 -1
  79. package/dist/stitch-frames-to-video.d.ts +2 -1
  80. package/dist/stitch-frames-to-video.js +12 -22
  81. package/dist/try-to-extract-frame-of-video-fast.d.ts +12 -0
  82. package/dist/try-to-extract-frame-of-video-fast.js +55 -0
  83. package/dist/validate-ffmpeg.d.ts +7 -0
  84. package/dist/validate-ffmpeg.js +77 -0
  85. package/dist/warn-about-ffmpeg-version.d.ts +5 -0
  86. package/dist/warn-about-ffmpeg-version.js +37 -0
  87. package/package.json +9 -9
@@ -33,8 +33,9 @@ const set_props_and_env_1 = require("./set-props-and-env");
33
33
  const take_frame_and_compose_1 = require("./take-frame-and-compose");
34
34
  const truthy_1 = require("./truthy");
35
35
  const validate_scale_1 = require("./validate-scale");
36
+ const logger_1 = require("./logger");
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, inputProps, 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,
@@ -283,7 +286,7 @@ const innerRenderFrames = async ({ onFrameUpdate, outputDir, onStart, inputProps
283
286
  await Promise.all(downloadPromises);
284
287
  return result;
285
288
  };
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, }) => {
289
+ const internalRenderFrames = ({ browserExecutable, cancelSignal, chromiumOptions, composition, concurrency, envVariables, everyNthFrame, frameRange, imageFormat, indent, inputProps, jpegQuality, muted, onBrowserLog, onDownload, onFrameBuffer, onFrameUpdate, onStart, outputDir, port, puppeteerInstance, scale, server, timeoutInMilliseconds, logLevel, webpackBundleOrServeUrl, }) => {
287
290
  remotion_1.Internals.validateDimension(composition.height, 'height', 'in the `config` object passed to `renderFrames()`');
288
291
  remotion_1.Internals.validateDimension(composition.width, 'width', 'in the `config` object passed to `renderFrames()`');
289
292
  remotion_1.Internals.validateFps(composition.fps, 'in the `config` object of `renderFrames()`', false);
@@ -296,12 +299,12 @@ const internalRenderFrames = ({ browserExecutable, cancelSignal, chromiumOptions
296
299
  (0, validate_scale_1.validateScale)(scale);
297
300
  const makeBrowser = () => (0, open_browser_1.internalOpenBrowser)({
298
301
  browser: browser_1.DEFAULT_BROWSER,
299
- shouldDumpIo: dumpBrowserLogs,
300
302
  browserExecutable,
301
303
  chromiumOptions,
302
304
  forceDeviceScaleFactor: scale,
303
305
  indent,
304
306
  viewport: null,
307
+ logLevel,
305
308
  });
306
309
  const browserInstance = puppeteerInstance !== null && puppeteerInstance !== void 0 ? puppeteerInstance : makeBrowser();
307
310
  const actualConcurrency = (0, get_concurrency_1.getActualConcurrency)(concurrency);
@@ -323,7 +326,7 @@ const internalRenderFrames = ({ browserExecutable, cancelSignal, chromiumOptions
323
326
  port,
324
327
  remotionRoot: (0, find_closest_package_json_1.findRemotionRoot)(),
325
328
  concurrency: actualConcurrency,
326
- verbose,
329
+ logLevel,
327
330
  indent,
328
331
  }, {
329
332
  onDownload,
@@ -331,8 +334,8 @@ const internalRenderFrames = ({ browserExecutable, cancelSignal, chromiumOptions
331
334
  }),
332
335
  browserInstance,
333
336
  ]).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);
337
+ const browserReplacer = (0, replace_browser_1.handleBrowserCrash)(pInstance, logLevel, indent);
338
+ cleanup.push((0, cycle_browser_tabs_1.cycleBrowserTabs)(browserReplacer, actualConcurrency, logLevel, indent).stopCycling);
336
339
  cleanup.push(() => cleanupServer(false));
337
340
  return innerRenderFrames({
338
341
  onError,
@@ -362,6 +365,8 @@ const internalRenderFrames = ({ browserExecutable, cancelSignal, chromiumOptions
362
365
  outputDir,
363
366
  scale,
364
367
  timeoutInMilliseconds,
368
+ logLevel,
369
+ indent,
365
370
  });
366
371
  }),
367
372
  ])
@@ -384,7 +389,7 @@ const internalRenderFrames = ({ browserExecutable, cancelSignal, chromiumOptions
384
389
  else {
385
390
  Promise.resolve(browserInstance)
386
391
  .then((instance) => {
387
- return instance.close(true);
392
+ return instance.close(true, logLevel, indent);
388
393
  })
389
394
  .catch((err) => {
390
395
  if (!(err === null || err === void 0 ? void 0 : err.message.includes('Target closed'))) {
@@ -405,7 +410,7 @@ exports.internalRenderFrames = internalRenderFrames;
405
410
  * @see [Documentation](https://www.remotion.dev/docs/renderer/render-frames)
406
411
  */
407
412
  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;
413
+ 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
414
  if (!composition) {
410
415
  throw new Error('No `composition` option has been specified for renderFrames()');
411
416
  }
@@ -421,7 +426,6 @@ const renderFrames = (options) => {
421
426
  chromiumOptions: chromiumOptions !== null && chromiumOptions !== void 0 ? chromiumOptions : {},
422
427
  composition,
423
428
  concurrency: concurrency !== null && concurrency !== void 0 ? concurrency : null,
424
- dumpBrowserLogs: dumpBrowserLogs !== null && dumpBrowserLogs !== void 0 ? dumpBrowserLogs : false,
425
429
  envVariables: envVariables !== null && envVariables !== void 0 ? envVariables : {},
426
430
  everyNthFrame: everyNthFrame !== null && everyNthFrame !== void 0 ? everyNthFrame : 1,
427
431
  frameRange: frameRange !== null && frameRange !== void 0 ? frameRange : null,
@@ -439,7 +443,7 @@ const renderFrames = (options) => {
439
443
  outputDir,
440
444
  port: port !== null && port !== void 0 ? port : null,
441
445
  scale: scale !== null && scale !== void 0 ? scale : 1,
442
- verbose: verbose !== null && verbose !== void 0 ? verbose : false,
446
+ logLevel: verbose || dumpBrowserLogs ? 'verbose' : logLevel !== null && logLevel !== void 0 ? logLevel : (0, logger_1.getLogLevel)(),
443
447
  timeoutInMilliseconds: timeoutInMilliseconds !== null && timeoutInMilliseconds !== void 0 ? timeoutInMilliseconds : TimeoutSettings_1.DEFAULT_TIMEOUT,
444
448
  webpackBundleOrServeUrl: serveUrl,
445
449
  server: undefined,
@@ -15,6 +15,7 @@ import type { PixelFormat } from './pixel-format';
15
15
  import type { RemotionServer } from './prepare-server';
16
16
  import type { ProResProfile } from './prores-profile';
17
17
  import type { OnStartData } from './types';
18
+ import { type LogLevel } from './log-level';
18
19
  export type StitchingState = 'encoding' | 'muxing';
19
20
  export type SlowFrame = {
20
21
  frame: number;
@@ -46,7 +47,6 @@ export type InternalRenderMediaOptions = {
46
47
  onProgress: RenderMediaOnProgress;
47
48
  onDownload: RenderMediaOnDownload;
48
49
  proResProfile: ProResProfile | undefined;
49
- dumpBrowserLogs: boolean;
50
50
  onBrowserLog: ((log: BrowserLog) => void) | null;
51
51
  onStart: (data: OnStartData) => void;
52
52
  timeoutInMilliseconds: number;
@@ -55,7 +55,7 @@ export type InternalRenderMediaOptions = {
55
55
  port: number | null;
56
56
  cancelSignal: CancelSignal | undefined;
57
57
  browserExecutable: BrowserExecutable | null;
58
- verbose: boolean;
58
+ logLevel: LogLevel;
59
59
  onCtrlCExit: (fn: () => void) => void;
60
60
  indent: boolean;
61
61
  server: RemotionServer | undefined;
@@ -92,6 +92,9 @@ export type RenderMediaOptions = {
92
92
  onProgress?: RenderMediaOnProgress;
93
93
  onDownload?: RenderMediaOnDownload;
94
94
  proResProfile?: ProResProfile;
95
+ /**
96
+ * @deprecated Use "logLevel": "verbose" instead
97
+ */
95
98
  dumpBrowserLogs?: boolean;
96
99
  onBrowserLog?: ((log: BrowserLog) => void) | undefined;
97
100
  onStart?: (data: OnStartData) => void;
@@ -101,6 +104,9 @@ export type RenderMediaOptions = {
101
104
  port?: number | null;
102
105
  cancelSignal?: CancelSignal;
103
106
  browserExecutable?: BrowserExecutable;
107
+ /**
108
+ * @deprecated Use "logLevel" instead
109
+ */
104
110
  verbose?: boolean;
105
111
  preferLossless?: boolean;
106
112
  muted?: boolean;
@@ -112,16 +118,17 @@ export type RenderMediaOptions = {
112
118
  audioCodec?: AudioCodec | null;
113
119
  serveUrl: string;
114
120
  concurrency?: number | string | null;
121
+ logLevel?: LogLevel;
115
122
  };
116
123
  type RenderMediaResult = {
117
124
  buffer: Buffer | null;
118
125
  slowestFrames: SlowFrame[];
119
126
  };
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>;
127
+ export declare const internalRenderMedia: ({ 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, concurrency, disallowParallelEncoding, everyNthFrame, imageFormat: provisionalImageFormat, indent, jpegQuality, numberOfGifLoops, onCtrlCExit, preferLossless, serveUrl, server: reusedServer, logLevel, }: InternalRenderMediaOptions) => Promise<RenderMediaResult>;
121
128
  /**
122
129
  *
123
130
  * @description Render a video from a composition
124
131
  * @see [Documentation](https://www.remotion.dev/docs/renderer/render-media)
125
132
  */
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>;
133
+ 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
134
  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, inputProps, 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, }) => {
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');
@@ -86,30 +86,30 @@ const internalRenderMedia = ({ proResProfile, crf, composition, inputProps, pixe
86
86
  (0, can_use_parallel_encoding_1.canUseParallelEncoding)(codec);
87
87
  logger_1.Log.verboseAdvanced({
88
88
  indent,
89
- logLevel: verbose ? 'verbose' : 'info',
89
+ logLevel,
90
90
  tag: 'renderMedia()',
91
91
  }, 'Free memory:', freeMemory, 'Estimated usage parallel encoding', estimatedUsage);
92
92
  logger_1.Log.verboseAdvanced({
93
93
  indent,
94
- logLevel: verbose ? 'verbose' : 'info',
94
+ logLevel,
95
95
  tag: 'renderMedia()',
96
96
  }, 'Codec supports parallel rendering:', (0, can_use_parallel_encoding_1.canUseParallelEncoding)(codec));
97
97
  logger_1.Log.verboseAdvanced({
98
98
  indent,
99
- logLevel: verbose ? 'verbose' : 'info',
99
+ logLevel,
100
100
  tag: 'renderMedia()',
101
101
  }, 'User disallowed parallel encoding:', Boolean(disallowParallelEncoding));
102
102
  if (parallelEncoding) {
103
103
  logger_1.Log.verboseAdvanced({
104
104
  indent,
105
- logLevel: verbose ? 'verbose' : 'info',
105
+ logLevel,
106
106
  tag: 'renderMedia()',
107
107
  }, 'Parallel encoding is enabled.');
108
108
  }
109
109
  else {
110
110
  logger_1.Log.verboseAdvanced({
111
111
  indent,
112
- logLevel: verbose ? 'verbose' : 'info',
112
+ logLevel,
113
113
  tag: 'renderMedia()',
114
114
  }, 'Parallel encoding is disabled.');
115
115
  }
@@ -167,7 +167,7 @@ const internalRenderMedia = ({ proResProfile, crf, composition, inputProps, pixe
167
167
  encodedFrames = frame;
168
168
  callUpdate();
169
169
  },
170
- verbose,
170
+ logLevel,
171
171
  imageFormat,
172
172
  signal: cancelPrestitcher.cancelSignal,
173
173
  ffmpegOverride: ffmpegOverride !== null && ffmpegOverride !== void 0 ? ffmpegOverride : (({ args }) => args),
@@ -225,7 +225,7 @@ const internalRenderMedia = ({ proResProfile, crf, composition, inputProps, pixe
225
225
  indent,
226
226
  port,
227
227
  remotionRoot: (0, find_closest_package_json_1.findRemotionRoot)(),
228
- verbose,
228
+ logLevel,
229
229
  webpackConfigOrServeUrl: serveUrl,
230
230
  }, {
231
231
  onDownload,
@@ -276,7 +276,6 @@ const internalRenderMedia = ({ proResProfile, crf, composition, inputProps, pixe
276
276
  }
277
277
  : null,
278
278
  webpackBundleOrServeUrl: serveUrl,
279
- dumpBrowserLogs,
280
279
  onBrowserLog,
281
280
  onDownload,
282
281
  timeoutInMilliseconds,
@@ -286,7 +285,7 @@ const internalRenderMedia = ({ proResProfile, crf, composition, inputProps, pixe
286
285
  port,
287
286
  cancelSignal: cancelRenderFrames.cancelSignal,
288
287
  muted: disableAudio,
289
- verbose,
288
+ logLevel,
290
289
  indent,
291
290
  server,
292
291
  });
@@ -327,7 +326,7 @@ const internalRenderMedia = ({ proResProfile, crf, composition, inputProps, pixe
327
326
  },
328
327
  onDownload,
329
328
  numberOfGifLoops,
330
- verbose,
329
+ logLevel,
331
330
  dir: workingDir,
332
331
  cancelSignal: cancelStitcher.cancelSignal,
333
332
  muted: disableAudio,
@@ -401,7 +400,7 @@ exports.internalRenderMedia = internalRenderMedia;
401
400
  * @description Render a video from a composition
402
401
  * @see [Documentation](https://www.remotion.dev/docs/renderer/render-media)
403
402
  */
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, }) => {
403
+ 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, }) => {
405
404
  var _a;
406
405
  if (quality !== undefined) {
407
406
  console.warn(`The "quality" option has been renamed. Please use "jpegQuality" instead.`);
@@ -419,7 +418,6 @@ const renderMedia = ({ proResProfile, crf, composition, inputProps, pixelFormat,
419
418
  concurrency: concurrency !== null && concurrency !== void 0 ? concurrency : null,
420
419
  crf: crf !== null && crf !== void 0 ? crf : null,
421
420
  disallowParallelEncoding: disallowParallelEncoding !== null && disallowParallelEncoding !== void 0 ? disallowParallelEncoding : false,
422
- dumpBrowserLogs: dumpBrowserLogs !== null && dumpBrowserLogs !== void 0 ? dumpBrowserLogs : false,
423
421
  enforceAudioTrack: enforceAudioTrack !== null && enforceAudioTrack !== void 0 ? enforceAudioTrack : false,
424
422
  envVariables: envVariables !== null && envVariables !== void 0 ? envVariables : {},
425
423
  everyNthFrame: everyNthFrame !== null && everyNthFrame !== void 0 ? everyNthFrame : 1,
@@ -442,7 +440,7 @@ const renderMedia = ({ proResProfile, crf, composition, inputProps, pixelFormat,
442
440
  scale: scale !== null && scale !== void 0 ? scale : 1,
443
441
  timeoutInMilliseconds: timeoutInMilliseconds !== null && timeoutInMilliseconds !== void 0 ? timeoutInMilliseconds : TimeoutSettings_1.DEFAULT_TIMEOUT,
444
442
  videoBitrate: videoBitrate !== null && videoBitrate !== void 0 ? videoBitrate : null,
445
- verbose: verbose !== null && verbose !== void 0 ? verbose : false,
443
+ logLevel: verbose || dumpBrowserLogs ? 'verbose' : logLevel !== null && logLevel !== void 0 ? logLevel : (0, logger_1.getLogLevel)(),
446
444
  preferLossless: preferLossless !== null && preferLossless !== void 0 ? preferLossless : false,
447
445
  indent: false,
448
446
  onCtrlCExit: () => undefined,
@@ -8,6 +8,7 @@ import type { StillImageFormat } from './image-format';
8
8
  import type { CancelSignal } from './make-cancel-signal';
9
9
  import type { ChromiumOptions } from './open-browser';
10
10
  import type { RemotionServer } from './prepare-server';
11
+ import type { LogLevel } from './log-level';
11
12
  type InternalRenderStillOptions = {
12
13
  composition: AnySmallCompMetadata;
13
14
  output: string | null;
@@ -16,7 +17,6 @@ type InternalRenderStillOptions = {
16
17
  imageFormat: StillImageFormat;
17
18
  jpegQuality: number;
18
19
  puppeteerInstance: HeadlessBrowser | null;
19
- dumpBrowserLogs: boolean;
20
20
  envVariables: Record<string, string>;
21
21
  overwrite: boolean;
22
22
  browserExecutable: BrowserExecutable;
@@ -28,7 +28,7 @@ type InternalRenderStillOptions = {
28
28
  cancelSignal: CancelSignal | null;
29
29
  indent: boolean;
30
30
  server: RemotionServer | undefined;
31
- verbose: boolean;
31
+ logLevel: LogLevel;
32
32
  serveUrl: string;
33
33
  port: number | null;
34
34
  };
@@ -41,6 +41,9 @@ export type RenderStillOptions = {
41
41
  imageFormat?: StillImageFormat;
42
42
  jpegQuality?: number;
43
43
  puppeteerInstance?: HeadlessBrowser;
44
+ /**
45
+ * @deprecated Use "logLevel": "verbose" instead
46
+ */
44
47
  dumpBrowserLogs?: boolean;
45
48
  envVariables?: Record<string, string>;
46
49
  overwrite?: boolean;
@@ -51,6 +54,9 @@ export type RenderStillOptions = {
51
54
  scale?: number;
52
55
  onDownload?: RenderMediaOnDownload;
53
56
  cancelSignal?: CancelSignal;
57
+ /**
58
+ * @deprecated Use "logLevel" instead
59
+ */
54
60
  verbose?: boolean;
55
61
  serveUrl: string;
56
62
  /**
@@ -48,7 +48,8 @@ const set_props_and_env_1 = require("./set-props-and-env");
48
48
  const take_frame_and_compose_1 = require("./take-frame-and-compose");
49
49
  const validate_puppeteer_timeout_1 = require("./validate-puppeteer-timeout");
50
50
  const validate_scale_1 = require("./validate-scale");
51
- const innerRenderStill = async ({ composition, imageFormat = image_format_1.DEFAULT_STILL_IMAGE_FORMAT, serveUrl, puppeteerInstance, dumpBrowserLogs = false, onError, inputProps, envVariables, output, frame = 0, overwrite, browserExecutable, timeoutInMilliseconds, chromiumOptions, scale, proxyPort, cancelSignal, jpegQuality, onBrowserLog, compositor, sourceMapContext, downloadMap, }) => {
51
+ const logger_1 = require("./logger");
52
+ const innerRenderStill = async ({ composition, imageFormat = image_format_1.DEFAULT_STILL_IMAGE_FORMAT, serveUrl, puppeteerInstance, onError, inputProps, envVariables, output, frame = 0, overwrite, browserExecutable, timeoutInMilliseconds, chromiumOptions, scale, proxyPort, cancelSignal, jpegQuality, onBrowserLog, compositor, sourceMapContext, downloadMap, logLevel, indent, }) => {
52
53
  remotion_1.Internals.validateDimension(composition.height, 'height', 'in the `config` object passed to `renderStill()`');
53
54
  remotion_1.Internals.validateDimension(composition.width, 'width', 'in the `config` object passed to `renderStill()`');
54
55
  remotion_1.Internals.validateFps(composition.fps, 'in the `config` object of `renderStill()`', false);
@@ -87,13 +88,13 @@ const innerRenderStill = async ({ composition, imageFormat = image_format_1.DEFA
87
88
  const browserInstance = puppeteerInstance !== null && puppeteerInstance !== void 0 ? puppeteerInstance : (await (0, open_browser_1.internalOpenBrowser)({
88
89
  browser: browser_1.DEFAULT_BROWSER,
89
90
  browserExecutable,
90
- shouldDumpIo: dumpBrowserLogs,
91
91
  chromiumOptions,
92
92
  forceDeviceScaleFactor: scale,
93
- indent: false,
93
+ indent,
94
94
  viewport: null,
95
+ logLevel,
95
96
  }));
96
- const page = await browserInstance.newPage(sourceMapContext);
97
+ const page = await browserInstance.newPage(sourceMapContext, logLevel, indent);
97
98
  await page.setViewport({
98
99
  width: composition.width,
99
100
  height: composition.height,
@@ -122,7 +123,7 @@ const innerRenderStill = async ({ composition, imageFormat = image_format_1.DEFA
122
123
  await page.close();
123
124
  }
124
125
  else {
125
- browserInstance.close(true).catch((err) => {
126
+ browserInstance.close(true, logLevel, indent).catch((err) => {
126
127
  console.log('Unable to close browser', err);
127
128
  });
128
129
  }
@@ -195,7 +196,7 @@ const internalRenderStill = (options) => {
195
196
  port: options.port,
196
197
  remotionRoot: (0, find_closest_package_json_1.findRemotionRoot)(),
197
198
  concurrency: 1,
198
- verbose: options.verbose,
199
+ logLevel: options.logLevel,
199
200
  indent: options.indent,
200
201
  }, {
201
202
  onDownload: options.onDownload,
@@ -252,7 +253,6 @@ const renderStill = (options) => {
252
253
  browserExecutable: browserExecutable !== null && browserExecutable !== void 0 ? browserExecutable : null,
253
254
  cancelSignal: cancelSignal !== null && cancelSignal !== void 0 ? cancelSignal : null,
254
255
  chromiumOptions: chromiumOptions !== null && chromiumOptions !== void 0 ? chromiumOptions : {},
255
- dumpBrowserLogs: dumpBrowserLogs !== null && dumpBrowserLogs !== void 0 ? dumpBrowserLogs : false,
256
256
  envVariables: envVariables !== null && envVariables !== void 0 ? envVariables : {},
257
257
  frame: frame !== null && frame !== void 0 ? frame : 0,
258
258
  imageFormat: imageFormat !== null && imageFormat !== void 0 ? imageFormat : image_format_1.DEFAULT_STILL_IMAGE_FORMAT,
@@ -269,7 +269,7 @@ const renderStill = (options) => {
269
269
  server: undefined,
270
270
  serveUrl,
271
271
  timeoutInMilliseconds: timeoutInMilliseconds !== null && timeoutInMilliseconds !== void 0 ? timeoutInMilliseconds : TimeoutSettings_1.DEFAULT_TIMEOUT,
272
- verbose: verbose !== null && verbose !== void 0 ? verbose : false,
272
+ logLevel: verbose || dumpBrowserLogs ? 'verbose' : (0, logger_1.getLogLevel)(),
273
273
  });
274
274
  };
275
275
  exports.renderStill = renderStill;
@@ -1,6 +1,7 @@
1
1
  import type { HeadlessBrowser } from './browser/Browser';
2
+ import type { LogLevel } from './log-level';
2
3
  export type BrowserReplacer = {
3
4
  getBrowser: () => HeadlessBrowser;
4
5
  replaceBrowser: (make: () => Promise<HeadlessBrowser>, makeNewPages: () => Promise<void>) => Promise<HeadlessBrowser>;
5
6
  };
6
- export declare const handleBrowserCrash: (instance: HeadlessBrowser) => BrowserReplacer;
7
+ export declare const handleBrowserCrash: (instance: HeadlessBrowser, logLevel: LogLevel, indent: boolean) => BrowserReplacer;
@@ -1,7 +1,7 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.handleBrowserCrash = void 0;
4
- const handleBrowserCrash = (instance) => {
4
+ const handleBrowserCrash = (instance, logLevel, indent) => {
5
5
  let _instance = instance;
6
6
  const waiters = [];
7
7
  let replacing = false;
@@ -20,7 +20,7 @@ const handleBrowserCrash = (instance) => {
20
20
  try {
21
21
  replacing = true;
22
22
  await _instance
23
- .close(true)
23
+ .close(true, logLevel, indent)
24
24
  .then(() => {
25
25
  console.log('Killed previous browser and making new one');
26
26
  })
@@ -4,6 +4,7 @@ import type { BrowserLog } from './browser-log';
4
4
  import type { HeadlessBrowser } from './browser/Browser';
5
5
  import type { ChromiumOptions } from './open-browser';
6
6
  import type { RemotionServer } from './prepare-server';
7
+ import { type LogLevel } from './log-level';
7
8
  type InternalSelectCompositionsConfig = {
8
9
  inputProps: Record<string, unknown>;
9
10
  envVariables: Record<string, string>;
@@ -15,7 +16,7 @@ type InternalSelectCompositionsConfig = {
15
16
  port: number | null;
16
17
  indent: boolean;
17
18
  server: RemotionServer | undefined;
18
- verbose: boolean;
19
+ logLevel: LogLevel;
19
20
  serveUrl: string;
20
21
  id: string;
21
22
  };
@@ -11,7 +11,7 @@ const puppeteer_evaluate_1 = require("./puppeteer-evaluate");
11
11
  const seek_to_frame_1 = require("./seek-to-frame");
12
12
  const set_props_and_env_1 = require("./set-props-and-env");
13
13
  const validate_puppeteer_timeout_1 = require("./validate-puppeteer-timeout");
14
- const innerSelectComposition = async ({ page, onBrowserLog, inputProps, envVariables, serveUrl, timeoutInMilliseconds, port, id, indent, verbose, }) => {
14
+ const innerSelectComposition = async ({ page, onBrowserLog, inputProps, envVariables, serveUrl, timeoutInMilliseconds, port, id, indent, logLevel, }) => {
15
15
  if (onBrowserLog) {
16
16
  page.on('console', (log) => {
17
17
  onBrowserLog({
@@ -48,7 +48,7 @@ const innerSelectComposition = async ({ page, onBrowserLog, inputProps, envVaria
48
48
  logger_1.Log.verboseAdvanced({
49
49
  indent,
50
50
  tag: 'selectComposition()',
51
- logLevel: verbose ? 'verbose' : 'info',
51
+ logLevel,
52
52
  }, 'Running calculateMetadata()...');
53
53
  const time = Date.now();
54
54
  const result = await (0, puppeteer_evaluate_1.puppeteerEvaluateWithCatch)({
@@ -62,13 +62,13 @@ const innerSelectComposition = async ({ page, onBrowserLog, inputProps, envVaria
62
62
  logger_1.Log.verboseAdvanced({
63
63
  indent,
64
64
  tag: 'selectComposition()',
65
- logLevel: verbose ? 'verbose' : 'info',
65
+ logLevel,
66
66
  }, `calculateMetadata() took ${Date.now() - time}ms`);
67
67
  return result;
68
68
  };
69
69
  const internalSelectComposition = async (options) => {
70
70
  const cleanup = [];
71
- const { puppeteerInstance, browserExecutable, chromiumOptions, serveUrl: serveUrlOrWebpackUrl, verbose, indent, port, envVariables, id, inputProps, onBrowserLog, server, timeoutInMilliseconds, } = options;
71
+ const { puppeteerInstance, browserExecutable, chromiumOptions, serveUrl: serveUrlOrWebpackUrl, logLevel, indent, port, envVariables, id, inputProps, onBrowserLog, server, timeoutInMilliseconds, } = options;
72
72
  const { page, cleanup: cleanupPage } = await (0, get_browser_instance_1.getPageAndCleanupFn)({
73
73
  passedInInstance: puppeteerInstance,
74
74
  browserExecutable,
@@ -76,7 +76,7 @@ const internalSelectComposition = async (options) => {
76
76
  context: null,
77
77
  forceDeviceScaleFactor: undefined,
78
78
  indent,
79
- shouldDumpIo: verbose,
79
+ logLevel,
80
80
  });
81
81
  cleanup.push(() => cleanupPage());
82
82
  return new Promise((resolve, reject) => {
@@ -91,7 +91,7 @@ const internalSelectComposition = async (options) => {
91
91
  port,
92
92
  remotionRoot: (0, find_closest_package_json_1.findRemotionRoot)(),
93
93
  concurrency: 1,
94
- verbose,
94
+ logLevel,
95
95
  indent,
96
96
  }, {
97
97
  onDownload: () => undefined,
@@ -111,7 +111,7 @@ const internalSelectComposition = async (options) => {
111
111
  inputProps,
112
112
  onBrowserLog,
113
113
  timeoutInMilliseconds,
114
- verbose,
114
+ logLevel,
115
115
  indent,
116
116
  puppeteerInstance,
117
117
  server,
@@ -148,7 +148,7 @@ const selectComposition = (options) => {
148
148
  port: port !== null && port !== void 0 ? port : null,
149
149
  puppeteerInstance,
150
150
  timeoutInMilliseconds: timeoutInMilliseconds !== null && timeoutInMilliseconds !== void 0 ? timeoutInMilliseconds : TimeoutSettings_1.DEFAULT_TIMEOUT,
151
- verbose: verbose !== null && verbose !== void 0 ? verbose : false,
151
+ logLevel: verbose ? 'verbose' : 'info',
152
152
  indent: false,
153
153
  server: undefined,
154
154
  });
@@ -1,12 +1,13 @@
1
1
  import type { DownloadMap } from './assets/download-map';
2
2
  import type { Compositor } from './compositor/compositor';
3
3
  import type { OffthreadVideoServerEmitter } from './offthread-video-server';
4
+ import type { LogLevel } from './log-level';
4
5
  export declare const serveStatic: (path: string | null, options: {
5
6
  port: number | null;
6
7
  downloadMap: DownloadMap;
7
8
  remotionRoot: string;
8
9
  concurrency: number;
9
- verbose: boolean;
10
+ logLevel: LogLevel;
10
11
  indent: boolean;
11
12
  }) => Promise<{
12
13
  port: number;
@@ -12,7 +12,7 @@ const serveStatic = async (path, options) => {
12
12
  const { listener: offthreadRequest, close: closeCompositor, compositor, events, } = (0, offthread_video_server_1.startOffthreadVideoServer)({
13
13
  downloadMap: options.downloadMap,
14
14
  concurrency: options.concurrency,
15
- verbose: options.verbose,
15
+ logLevel: options.logLevel,
16
16
  indent: options.indent,
17
17
  });
18
18
  const connections = {};
@@ -7,6 +7,7 @@ import type { FfmpegOverrideFn } from './ffmpeg-override';
7
7
  import type { CancelSignal } from './make-cancel-signal';
8
8
  import type { PixelFormat } from './pixel-format';
9
9
  import type { ProResProfile } from './prores-profile';
10
+ import type { LogLevel } from './log-level';
10
11
  type InternalStitchFramesToVideoOptions = {
11
12
  audioBitrate: string | null;
12
13
  videoBitrate: string | null;
@@ -24,7 +25,7 @@ type InternalStitchFramesToVideoOptions = {
24
25
  onProgress?: null | ((progress: number) => void);
25
26
  onDownload: undefined | RenderMediaOnDownload;
26
27
  proResProfile: undefined | ProResProfile;
27
- verbose: boolean;
28
+ logLevel: LogLevel;
28
29
  dir: string;
29
30
  cancelSignal: CancelSignal | null;
30
31
  preEncodedFileLocation: string | null;