@remotion/renderer 4.1.0-alpha3 → 4.1.0-alpha5

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 (66) hide show
  1. package/dist/browser/Browser.d.ts +7 -6
  2. package/dist/browser/Browser.js +13 -13
  3. package/dist/browser/BrowserPage.d.ts +13 -2
  4. package/dist/browser/BrowserPage.js +45 -13
  5. package/dist/browser/BrowserRunner.js +2 -2
  6. package/dist/browser/Connection.d.ts +9 -3
  7. package/dist/browser/Connection.js +11 -3
  8. package/dist/browser/ConsoleMessage.d.ts +8 -1
  9. package/dist/browser/ConsoleMessage.js +2 -1
  10. package/dist/browser/ExecutionContext.js +4 -4
  11. package/dist/browser/FrameManager.js +2 -2
  12. package/dist/browser/LaunchOptions.d.ts +2 -0
  13. package/dist/browser/Launcher.js +2 -1
  14. package/dist/browser/NetworkManager.d.ts +4 -1
  15. package/dist/browser/Target.d.ts +2 -1
  16. package/dist/browser/Target.js +3 -1
  17. package/dist/browser/devtools-types.d.ts +59 -0
  18. package/dist/browser/should-log-message.js +8 -0
  19. package/dist/chalk/index.d.ts +2 -1
  20. package/dist/chalk/index.js +3 -8
  21. package/dist/chalk/is-color-supported.d.ts +1 -1
  22. package/dist/chalk/is-color-supported.js +18 -10
  23. package/dist/compositor/compositor.d.ts +3 -2
  24. package/dist/compositor/compositor.js +6 -5
  25. package/dist/create-ffmpeg-merge-filter.js +1 -2
  26. package/dist/cycle-browser-tabs.d.ts +2 -1
  27. package/dist/cycle-browser-tabs.js +2 -2
  28. package/dist/format-logs.d.ts +3 -0
  29. package/dist/format-logs.js +201 -0
  30. package/dist/get-browser-instance.d.ts +3 -2
  31. package/dist/get-browser-instance.js +5 -5
  32. package/dist/get-compositions.d.ts +6 -5
  33. package/dist/get-compositions.js +7 -6
  34. package/dist/index.d.ts +21 -19
  35. package/dist/logger.d.ts +1 -2
  36. package/dist/logger.js +7 -12
  37. package/dist/offthread-video-server.d.ts +3 -2
  38. package/dist/offthread-video-server.js +4 -3
  39. package/dist/open-browser.d.ts +3 -2
  40. package/dist/open-browser.js +7 -5
  41. package/dist/perf.js +4 -2
  42. package/dist/prepare-server.d.ts +3 -2
  43. package/dist/prepare-server.js +4 -4
  44. package/dist/prespawn-ffmpeg.d.ts +2 -1
  45. package/dist/prespawn-ffmpeg.js +2 -30
  46. package/dist/puppeteer-evaluate.d.ts +4 -1
  47. package/dist/puppeteer-evaluate.js +5 -5
  48. package/dist/render-frames.d.ts +14 -7
  49. package/dist/render-frames.js +18 -14
  50. package/dist/render-media.d.ts +14 -7
  51. package/dist/render-media.js +12 -14
  52. package/dist/render-still.d.ts +11 -5
  53. package/dist/render-still.js +11 -11
  54. package/dist/replace-browser.d.ts +2 -1
  55. package/dist/replace-browser.js +2 -2
  56. package/dist/screenshot-task.js +4 -2
  57. package/dist/seek-to-frame.js +1 -1
  58. package/dist/select-composition.d.ts +9 -4
  59. package/dist/select-composition.js +15 -14
  60. package/dist/serve-static.d.ts +2 -1
  61. package/dist/serve-static.js +1 -1
  62. package/dist/set-props-and-env.js +5 -5
  63. package/dist/stitch-frames-to-video.d.ts +2 -1
  64. package/dist/stitch-frames-to-video.js +12 -22
  65. package/dist/take-frame-and-compose.js +1 -1
  66. package/package.json +9 -9
package/dist/logger.js CHANGED
@@ -7,11 +7,11 @@ const log_level_1 = require("./log-level");
7
7
  const truthy_1 = require("./truthy");
8
8
  exports.INDENT_TOKEN = chalk_1.chalk.gray('│');
9
9
  const verboseTag = (str) => {
10
- return is_color_supported_1.isColorSupported ? chalk_1.chalk.bgBlack(` ${str} `) : `[${str}]`;
10
+ return (0, is_color_supported_1.isColorSupported)() ? chalk_1.chalk.bgBlack(` ${str} `) : `[${str}]`;
11
11
  };
12
12
  exports.verboseTag = verboseTag;
13
13
  const secondverboseTag = (str) => {
14
- return is_color_supported_1.isColorSupported ? chalk_1.chalk.bgWhite(` ${str} `) : `[${str}]`;
14
+ return (0, is_color_supported_1.isColorSupported)() ? chalk_1.chalk.bgWhite(` ${str} `) : `[${str}]`;
15
15
  };
16
16
  exports.secondverboseTag = secondverboseTag;
17
17
  exports.Log = {
@@ -22,12 +22,7 @@ exports.Log = {
22
22
  if ((0, log_level_1.isEqualOrBelowLogLevel)(options.logLevel, 'verbose')) {
23
23
  return console.log(...[
24
24
  options.indent ? exports.INDENT_TOKEN : null,
25
- [
26
- options.tag ? (0, exports.verboseTag)(options.tag) : null,
27
- options.secondTag ? (0, exports.secondverboseTag)(options.secondTag) : null,
28
- ]
29
- .filter(truthy_1.truthy)
30
- .join(''),
25
+ options.tag ? (0, exports.verboseTag)(options.tag) : null,
31
26
  ...args.map((a) => chalk_1.chalk.gray(a)),
32
27
  ].filter(truthy_1.truthy));
33
28
  }
@@ -36,12 +31,12 @@ exports.Log = {
36
31
  exports.Log.infoAdvanced({ indent: false, logLevel: (0, exports.getLogLevel)() }, ...args);
37
32
  },
38
33
  infoAdvanced: (options, ...args) => {
39
- if ((0, log_level_1.isEqualOrBelowLogLevel)(options.logLevel, 'info')) {
40
- return console.log(...[options.indent ? exports.INDENT_TOKEN : null, ...args].filter(truthy_1.truthy));
41
- }
34
+ return console.log(...[options.indent ? exports.INDENT_TOKEN : null, ...args].filter(truthy_1.truthy));
42
35
  },
43
36
  warn: (...args) => {
44
- exports.Log.warnAdvanced({ indent: false, logLevel: (0, exports.getLogLevel)() }, ...args);
37
+ if ((0, log_level_1.isEqualOrBelowLogLevel)((0, exports.getLogLevel)(), 'warn')) {
38
+ exports.Log.warnAdvanced({ indent: false, logLevel: (0, exports.getLogLevel)() }, ...args);
39
+ }
45
40
  },
46
41
  warnAdvanced: (options, ...args) => {
47
42
  if ((0, log_level_1.isEqualOrBelowLogLevel)(options.logLevel, 'warn')) {
@@ -1,15 +1,16 @@
1
1
  import type { RequestListener } from 'node:http';
2
2
  import type { DownloadMap } from './assets/download-map';
3
3
  import type { Compositor } from './compositor/compositor';
4
+ import type { LogLevel } from './log-level';
4
5
  export declare const extractUrlAndSourceFromUrl: (url: string) => {
5
6
  src: string;
6
7
  time: number;
7
8
  transparent: boolean;
8
9
  };
9
- export declare const startOffthreadVideoServer: ({ downloadMap, concurrency, verbose, indent, }: {
10
+ export declare const startOffthreadVideoServer: ({ downloadMap, concurrency, logLevel, indent, }: {
10
11
  downloadMap: DownloadMap;
11
12
  concurrency: number;
12
- verbose: boolean;
13
+ logLevel: LogLevel;
13
14
  indent: boolean;
14
15
  }) => {
15
16
  listener: RequestListener;
@@ -4,6 +4,7 @@ exports.OffthreadVideoServerEmitter = exports.startOffthreadVideoServer = export
4
4
  const node_url_1 = require("node:url");
5
5
  const download_and_map_assets_to_file_1 = require("./assets/download-and-map-assets-to-file");
6
6
  const compositor_1 = require("./compositor/compositor");
7
+ const log_level_1 = require("./log-level");
7
8
  const extractUrlAndSourceFromUrl = (url) => {
8
9
  const parsed = new URL(url, 'http://localhost');
9
10
  const query = parsed.search;
@@ -27,13 +28,13 @@ const extractUrlAndSourceFromUrl = (url) => {
27
28
  };
28
29
  };
29
30
  exports.extractUrlAndSourceFromUrl = extractUrlAndSourceFromUrl;
30
- const startOffthreadVideoServer = ({ downloadMap, concurrency, verbose, indent, }) => {
31
+ const startOffthreadVideoServer = ({ downloadMap, concurrency, logLevel, indent, }) => {
31
32
  const events = new OffthreadVideoServerEmitter();
32
33
  const compositor = (0, compositor_1.startCompositor)('StartLongRunningProcess', {
33
34
  concurrency,
34
35
  maximum_frame_cache_items: (0, compositor_1.getIdealMaximumFrameCacheItems)(),
35
- verbose,
36
- }, indent);
36
+ verbose: (0, log_level_1.isEqualOrBelowLogLevel)(logLevel, 'verbose'),
37
+ }, logLevel, indent);
37
38
  return {
38
39
  close: () => {
39
40
  compositor.finishCommands();
@@ -1,6 +1,7 @@
1
1
  import type { Browser } from './browser';
2
2
  import type { HeadlessBrowser } from './browser/Browser';
3
3
  import type { Viewport } from './browser/PuppeteerViewport';
4
+ import { type LogLevel } from './log-level';
4
5
  declare const validRenderers: readonly ["swangle", "angle", "egl", "swiftshader"];
5
6
  type OpenGlRenderer = typeof validRenderers[number];
6
7
  export type ChromiumOptions = {
@@ -12,13 +13,13 @@ export type ChromiumOptions = {
12
13
  };
13
14
  export declare const killAllBrowsers: () => Promise<void>;
14
15
  type InternalOpenBrowserOptions = {
15
- shouldDumpIo: boolean;
16
16
  browserExecutable: string | null;
17
17
  chromiumOptions: ChromiumOptions;
18
18
  forceDeviceScaleFactor: number | undefined;
19
19
  viewport: Viewport | null;
20
20
  indent: boolean;
21
21
  browser: Browser;
22
+ logLevel: LogLevel;
22
23
  };
23
24
  export type OpenBrowserOptions = {
24
25
  shouldDumpIo?: boolean;
@@ -26,7 +27,7 @@ export type OpenBrowserOptions = {
26
27
  chromiumOptions?: ChromiumOptions;
27
28
  forceDeviceScaleFactor?: number;
28
29
  };
29
- export declare const internalOpenBrowser: ({ browser, browserExecutable, chromiumOptions, forceDeviceScaleFactor, indent, shouldDumpIo, viewport, }: InternalOpenBrowserOptions) => Promise<HeadlessBrowser>;
30
+ export declare const internalOpenBrowser: ({ browser, browserExecutable, chromiumOptions, forceDeviceScaleFactor, indent, viewport, logLevel, }: InternalOpenBrowserOptions) => Promise<HeadlessBrowser>;
30
31
  /**
31
32
  * @description Opens a Chrome or Chromium browser instance.
32
33
  * @see [Documentation](https://www.remotion.dev/docs/renderer/open-browser)
@@ -4,6 +4,7 @@ exports.openBrowser = exports.internalOpenBrowser = exports.killAllBrowsers = vo
4
4
  const node_1 = require("./browser/node");
5
5
  const get_local_browser_executable_1 = require("./get-local-browser-executable");
6
6
  const get_video_threads_flag_1 = require("./get-video-threads-flag");
7
+ const log_level_1 = require("./log-level");
7
8
  const validate_opengl_renderer_1 = require("./validate-opengl-renderer");
8
9
  const validRenderers = ['swangle', 'angle', 'egl', 'swiftshader'];
9
10
  const getOpenGlRenderer = (option) => {
@@ -21,13 +22,13 @@ const browserInstances = [];
21
22
  const killAllBrowsers = async () => {
22
23
  for (const browser of browserInstances) {
23
24
  try {
24
- await browser.close(true);
25
+ await browser.close(true, 'info', false);
25
26
  }
26
27
  catch (err) { }
27
28
  }
28
29
  };
29
30
  exports.killAllBrowsers = killAllBrowsers;
30
- const internalOpenBrowser = async ({ browser, browserExecutable, chromiumOptions, forceDeviceScaleFactor, indent, shouldDumpIo, viewport, }) => {
31
+ const internalOpenBrowser = async ({ browser, browserExecutable, chromiumOptions, forceDeviceScaleFactor, indent, viewport, logLevel, }) => {
31
32
  var _a, _b;
32
33
  if (browser === 'firefox') {
33
34
  throw new TypeError('Firefox supported is not yet turned on. Stay tuned for the future.');
@@ -38,7 +39,8 @@ const internalOpenBrowser = async ({ browser, browserExecutable, chromiumOptions
38
39
  const browserInstance = await node_1.puppeteer.launch({
39
40
  executablePath,
40
41
  product: browser,
41
- dumpio: shouldDumpIo,
42
+ dumpio: (0, log_level_1.isEqualOrBelowLogLevel)(logLevel, 'verbose'),
43
+ logLevel,
42
44
  indent,
43
45
  args: [
44
46
  'about:blank',
@@ -109,7 +111,7 @@ const internalOpenBrowser = async ({ browser, browserExecutable, chromiumOptions
109
111
  deviceScaleFactor: 1,
110
112
  },
111
113
  });
112
- const pages = await browserInstance.pages();
114
+ const pages = await browserInstance.pages(logLevel, indent);
113
115
  await pages[0].close();
114
116
  browserInstances.push(browserInstance);
115
117
  return browserInstance;
@@ -127,8 +129,8 @@ const openBrowser = (browser, options) => {
127
129
  chromiumOptions: chromiumOptions !== null && chromiumOptions !== void 0 ? chromiumOptions : {},
128
130
  forceDeviceScaleFactor,
129
131
  indent: false,
130
- shouldDumpIo: shouldDumpIo !== null && shouldDumpIo !== void 0 ? shouldDumpIo : false,
131
132
  viewport: null,
133
+ logLevel: shouldDumpIo ? 'verbose' : 'info',
132
134
  });
133
135
  };
134
136
  exports.openBrowser = openBrowser;
package/dist/perf.js CHANGED
@@ -29,8 +29,10 @@ exports.stopPerfMeasure = stopPerfMeasure;
29
29
  const getPerf = () => {
30
30
  return [
31
31
  'Render performance:',
32
- ...Object.keys(perf).map((p) => {
33
- return ` ${p} => ${perf[p].reduce((a, b) => a + b, 0) / perf[p].length} (n = ${perf[p].length})`;
32
+ ...Object.keys(perf)
33
+ .filter((p) => perf[p].length)
34
+ .map((p) => {
35
+ return ` ${p} => ${perf[p].reduce((a, b) => a + b, 0) / perf[p].length}ms (n = ${perf[p].length})`;
34
36
  }),
35
37
  ];
36
38
  };
@@ -3,6 +3,7 @@ import type { DownloadMap } from './assets/download-map';
3
3
  import type { Compositor } from './compositor/compositor';
4
4
  import type { OffthreadVideoServerEmitter } from './offthread-video-server';
5
5
  import type { AnySourceMapConsumer } from './symbolicate-stacktrace';
6
+ import type { LogLevel } from './log-level';
6
7
  export type RemotionServer = {
7
8
  serveUrl: string;
8
9
  closeServer: (force: boolean) => Promise<unknown>;
@@ -17,10 +18,10 @@ type PrepareServerOptions = {
17
18
  port: number | null;
18
19
  remotionRoot: string;
19
20
  concurrency: number;
20
- verbose: boolean;
21
+ logLevel: LogLevel;
21
22
  indent: boolean;
22
23
  };
23
- export declare const prepareServer: ({ webpackConfigOrServeUrl, port, remotionRoot, concurrency, verbose, indent, }: PrepareServerOptions) => Promise<RemotionServer>;
24
+ export declare const prepareServer: ({ webpackConfigOrServeUrl, port, remotionRoot, concurrency, logLevel, indent, }: PrepareServerOptions) => Promise<RemotionServer>;
24
25
  export declare const makeOrReuseServer: (server: RemotionServer | undefined, config: PrepareServerOptions, { onDownload, onError, }: {
25
26
  onError: (err: Error) => void;
26
27
  onDownload: RenderMediaOnDownload | null;
@@ -14,16 +14,16 @@ const logger_1 = require("./logger");
14
14
  const serve_static_1 = require("./serve-static");
15
15
  const symbolicate_stacktrace_1 = require("./symbolicate-stacktrace");
16
16
  const wait_for_symbolication_error_to_be_done_1 = require("./wait-for-symbolication-error-to-be-done");
17
- const prepareServer = async ({ webpackConfigOrServeUrl, port, remotionRoot, concurrency, verbose, indent, }) => {
17
+ const prepareServer = async ({ webpackConfigOrServeUrl, port, remotionRoot, concurrency, logLevel, indent, }) => {
18
18
  const downloadMap = (0, download_map_1.makeDownloadMap)();
19
- logger_1.Log.verboseAdvanced({ indent, logLevel: verbose ? 'verbose' : 'info' }, 'Created directory for temporary files', downloadMap.assetDir);
19
+ logger_1.Log.verboseAdvanced({ indent, logLevel }, 'Created directory for temporary files', downloadMap.assetDir);
20
20
  if ((0, is_serve_url_1.isServeUrl)(webpackConfigOrServeUrl)) {
21
21
  const { port: offthreadPort, close: closeProxy, compositor: comp, events, } = await (0, serve_static_1.serveStatic)(null, {
22
22
  port,
23
23
  downloadMap,
24
24
  remotionRoot,
25
25
  concurrency,
26
- verbose,
26
+ logLevel,
27
27
  indent,
28
28
  });
29
29
  return Promise.resolve({
@@ -51,7 +51,7 @@ const prepareServer = async ({ webpackConfigOrServeUrl, port, remotionRoot, conc
51
51
  downloadMap,
52
52
  remotionRoot,
53
53
  concurrency,
54
- verbose,
54
+ logLevel,
55
55
  indent,
56
56
  });
57
57
  return Promise.resolve({
@@ -4,6 +4,7 @@ import type { VideoImageFormat } from './image-format';
4
4
  import type { CancelSignal } from './make-cancel-signal';
5
5
  import type { PixelFormat } from './pixel-format';
6
6
  import type { ProResProfile } from './prores-profile';
7
+ import type { LogLevel } from './log-level';
7
8
  type RunningStatus = {
8
9
  type: 'running';
9
10
  } | {
@@ -24,7 +25,7 @@ type PreStitcherOptions = {
24
25
  crf: number | null | undefined;
25
26
  onProgress: (progress: number) => void;
26
27
  proResProfile: ProResProfile | undefined;
27
- verbose: boolean;
28
+ logLevel: LogLevel;
28
29
  imageFormat: VideoImageFormat;
29
30
  ffmpegOverride: FfmpegOverrideFn;
30
31
  signal: CancelSignal;
@@ -29,34 +29,6 @@ const prespawnFfmpeg = (options) => {
29
29
  if (encoderName === null) {
30
30
  throw new TypeError('encoderName is null: ' + JSON.stringify(options));
31
31
  }
32
- const supportsCrf = codec !== 'prores';
33
- logger_1.Log.verboseAdvanced({
34
- indent: options.indent,
35
- logLevel: options.verbose ? 'verbose' : 'info',
36
- tag: 'prespawnFfmpeg()',
37
- }, 'encoder', encoderName);
38
- logger_1.Log.verboseAdvanced({
39
- indent: options.indent,
40
- logLevel: options.verbose ? 'verbose' : 'info',
41
- tag: 'prespawnFfmpeg()',
42
- }, 'pixelFormat', pixelFormat);
43
- if (supportsCrf) {
44
- logger_1.Log.verboseAdvanced({
45
- indent: options.indent,
46
- logLevel: options.verbose ? 'verbose' : 'info',
47
- tag: 'prespawnFfmpeg()',
48
- }, 'pixelFormat', options.crf);
49
- }
50
- logger_1.Log.verboseAdvanced({
51
- indent: options.indent,
52
- logLevel: options.verbose ? 'verbose' : 'info',
53
- tag: 'prespawnFfmpeg()',
54
- }, 'codec', codec);
55
- logger_1.Log.verboseAdvanced({
56
- indent: options.indent,
57
- logLevel: options.verbose ? 'verbose' : 'info',
58
- tag: 'prespawnFfmpeg()',
59
- }, 'proResProfileName', proResProfileName);
60
32
  (0, pixel_format_1.validateSelectedPixelFormatAndCodecCombination)(pixelFormat, codec);
61
33
  const ffmpegArgs = [
62
34
  ['-r', options.fps.toFixed(2)],
@@ -86,12 +58,12 @@ const prespawnFfmpeg = (options) => {
86
58
  ];
87
59
  logger_1.Log.verboseAdvanced({
88
60
  indent: options.indent,
89
- logLevel: options.verbose ? 'verbose' : 'info',
61
+ logLevel: options.logLevel,
90
62
  tag: 'prespawnFfmpeg()',
91
63
  }, 'Generated FFMPEG command:');
92
64
  logger_1.Log.verboseAdvanced({
93
65
  indent: options.indent,
94
- logLevel: options.verbose ? 'verbose' : 'info',
66
+ logLevel: options.logLevel,
95
67
  tag: 'prespawnFfmpeg()',
96
68
  }, ffmpegArgs.join(' '));
97
69
  const ffmpegString = ffmpegArgs.flat(2).filter(Boolean);
@@ -4,4 +4,7 @@ export declare function puppeteerEvaluateWithCatch<ReturnType>({ page, pageFunct
4
4
  pageFunction: Function | string;
5
5
  frame: number | null;
6
6
  args: unknown[];
7
- }): Promise<ReturnType>;
7
+ }): Promise<{
8
+ value: ReturnType;
9
+ size: number;
10
+ }>;
@@ -39,13 +39,13 @@ async function puppeteerEvaluateWithCatch({ page, pageFunction, frame, args, })
39
39
  const expressionWithSourceUrl = SOURCE_URL_REGEX.test(expression)
40
40
  ? expression
41
41
  : expression + '\n' + suffix;
42
- const { exceptionDetails: exceptDetails, result: remotObject } = (await client.send('Runtime.evaluate', {
42
+ const { value: { exceptionDetails: exceptDetails, result: remotObject }, size, } = await client.send('Runtime.evaluate', {
43
43
  expression: expressionWithSourceUrl,
44
44
  contextId,
45
45
  returnByValue: true,
46
46
  awaitPromise: true,
47
47
  userGesture: true,
48
- }));
48
+ });
49
49
  if (exceptDetails === null || exceptDetails === void 0 ? void 0 : exceptDetails.exception) {
50
50
  const err = new symbolicateable_error_1.SymbolicateableError({
51
51
  stack: exceptDetails.exception.description,
@@ -56,7 +56,7 @@ async function puppeteerEvaluateWithCatch({ page, pageFunction, frame, args, })
56
56
  });
57
57
  throw err;
58
58
  }
59
- return valueFromRemoteObject(remotObject);
59
+ return { value: valueFromRemoteObject(remotObject), size };
60
60
  }
61
61
  if (typeof pageFunction !== 'function')
62
62
  throw new Error(`Expected to get |string| or |function| as the first argument, but got "${pageFunction}" instead.`);
@@ -100,7 +100,7 @@ async function puppeteerEvaluateWithCatch({ page, pageFunction, frame, args, })
100
100
  throw error;
101
101
  }
102
102
  try {
103
- const { exceptionDetails, result: remoteObject } = await callFunctionOnPromise;
103
+ const { value: { exceptionDetails, result: remoteObject }, size, } = await callFunctionOnPromise;
104
104
  if (exceptionDetails) {
105
105
  const err = new symbolicateable_error_1.SymbolicateableError({
106
106
  stack: (_c = exceptionDetails.exception) === null || _c === void 0 ? void 0 : _c.description,
@@ -111,7 +111,7 @@ async function puppeteerEvaluateWithCatch({ page, pageFunction, frame, args, })
111
111
  });
112
112
  throw err;
113
113
  }
114
- return valueFromRemoteObject(remoteObject);
114
+ return { size, value: valueFromRemoteObject(remoteObject) };
115
115
  }
116
116
  catch (error) {
117
117
  if ((_h = error === null || error === void 0 ? void 0 : error.originalMessage) === null || _h === void 0 ? void 0 : _h.startsWith("Object couldn't be returned by value")) {
@@ -1,5 +1,5 @@
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';
@@ -10,6 +10,7 @@ import type { CancelSignal } from './make-cancel-signal';
10
10
  import type { ChromiumOptions } from './open-browser';
11
11
  import type { RemotionServer } from './prepare-server';
12
12
  import type { OnStartData, RenderFramesOutput } from './types';
13
+ import { type LogLevel } from './log-level';
13
14
  export type InternalRenderFramesOptions = {
14
15
  onStart: null | ((data: OnStartData) => void);
15
16
  onFrameUpdate: null | ((framesRendered: number, frameIndex: number, timeToRenderInMilliseconds: number) => void);
@@ -20,7 +21,6 @@ export type InternalRenderFramesOptions = {
20
21
  jpegQuality: number;
21
22
  frameRange: FrameRange | null;
22
23
  everyNthFrame: number;
23
- dumpBrowserLogs: boolean;
24
24
  puppeteerInstance: HeadlessBrowser | undefined;
25
25
  browserExecutable: BrowserExecutable | null;
26
26
  onBrowserLog: null | ((log: BrowserLog) => void);
@@ -31,13 +31,13 @@ export type InternalRenderFramesOptions = {
31
31
  scale: number;
32
32
  port: number | null;
33
33
  cancelSignal: CancelSignal | undefined;
34
- composition: AnySmallCompMetadata;
34
+ composition: VideoConfig;
35
35
  indent: boolean;
36
36
  server: RemotionServer | undefined;
37
37
  muted: boolean;
38
38
  concurrency: number | string | null;
39
39
  webpackBundleOrServeUrl: string;
40
- verbose: boolean;
40
+ logLevel: LogLevel;
41
41
  };
42
42
  export type RenderFramesOptions = {
43
43
  onStart: (data: OnStartData) => void;
@@ -53,7 +53,15 @@ export type RenderFramesOptions = {
53
53
  jpegQuality?: number;
54
54
  frameRange?: FrameRange | null;
55
55
  everyNthFrame?: number;
56
+ /**
57
+ * @deprecated Use "logLevel": "verbose" instead
58
+ */
56
59
  dumpBrowserLogs?: boolean;
60
+ /**
61
+ * @deprecated Use "logLevel" instead
62
+ */
63
+ verbose?: boolean;
64
+ logLevel?: LogLevel;
57
65
  puppeteerInstance?: HeadlessBrowser;
58
66
  browserExecutable?: BrowserExecutable;
59
67
  onBrowserLog?: (log: BrowserLog) => void;
@@ -64,13 +72,12 @@ export type RenderFramesOptions = {
64
72
  scale?: number;
65
73
  port?: number | null;
66
74
  cancelSignal?: CancelSignal;
67
- composition: AnySmallCompMetadata;
75
+ composition: VideoConfig;
68
76
  muted?: boolean;
69
77
  concurrency?: number | string | null;
70
78
  serveUrl: string;
71
- verbose?: boolean;
72
79
  };
73
- export declare 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, }: InternalRenderFramesOptions) => Promise<RenderFramesOutput>;
80
+ export declare 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, }: InternalRenderFramesOptions) => Promise<RenderFramesOutput>;
74
81
  /**
75
82
  * @description Renders a series of images using Puppeteer and computes information for mixing audio.
76
83
  * @see [Documentation](https://www.remotion.dev/docs/renderer/render-frames)
@@ -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,
@@ -79,11 +82,11 @@ const innerRenderFrames = async ({ onFrameUpdate, outputDir, onStart, inputProps
79
82
  });
80
83
  await (0, puppeteer_evaluate_1.puppeteerEvaluateWithCatch)({
81
84
  // eslint-disable-next-line max-params
82
- pageFunction: (id, defaultProps, durationInFrames, fps, height, width) => {
85
+ pageFunction: (id, props, durationInFrames, fps, height, width) => {
83
86
  window.remotion_setBundleMode({
84
87
  type: 'composition',
85
88
  compositionName: id,
86
- compositionDefaultProps: defaultProps,
89
+ props,
87
90
  compositionDurationInFrames: durationInFrames,
88
91
  compositionFps: fps,
89
92
  compositionHeight: height,
@@ -92,7 +95,7 @@ const innerRenderFrames = async ({ onFrameUpdate, outputDir, onStart, inputProps
92
95
  },
93
96
  args: [
94
97
  composition.id,
95
- composition.defaultProps,
98
+ composition.props,
96
99
  composition.durationInFrames,
97
100
  composition.fps,
98
101
  composition.height,
@@ -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,
@@ -1,5 +1,5 @@
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 { AudioCodec } from './audio-codec';
5
5
  import type { BrowserExecutable } from './browser-executable';
@@ -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;
@@ -31,7 +32,7 @@ export type RenderMediaOnProgress = (progress: {
31
32
  export type InternalRenderMediaOptions = {
32
33
  outputLocation: string | null;
33
34
  codec: Codec;
34
- composition: AnySmallCompMetadata;
35
+ composition: VideoConfig;
35
36
  inputProps: Record<string, unknown>;
36
37
  crf: number | null;
37
38
  imageFormat: VideoImageFormat;
@@ -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;
@@ -73,7 +73,7 @@ export type InternalRenderMediaOptions = {
73
73
  export type RenderMediaOptions = {
74
74
  outputLocation?: string | null;
75
75
  codec: Codec;
76
- composition: AnySmallCompMetadata;
76
+ composition: VideoConfig;
77
77
  inputProps?: Record<string, unknown>;
78
78
  crf?: number | null;
79
79
  imageFormat?: VideoImageFormat;
@@ -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 {};