@remotion/renderer 4.0.0-alpha17 → 4.0.0-alpha18

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 (47) hide show
  1. package/dist/assets/download-file.d.ts +1 -1
  2. package/dist/assets/download-file.js +11 -4
  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 +14 -6
  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/compositor/compositor.d.ts +3 -2
  14. package/dist/compositor/compositor.js +6 -5
  15. package/dist/cycle-browser-tabs.d.ts +2 -1
  16. package/dist/cycle-browser-tabs.js +2 -2
  17. package/dist/get-browser-instance.d.ts +3 -2
  18. package/dist/get-browser-instance.js +5 -5
  19. package/dist/get-compositions.d.ts +4 -3
  20. package/dist/get-compositions.js +6 -5
  21. package/dist/index.d.ts +19 -20
  22. package/dist/logger.d.ts +1 -1
  23. package/dist/logger.js +4 -4
  24. package/dist/offthread-video-server.d.ts +3 -2
  25. package/dist/offthread-video-server.js +4 -3
  26. package/dist/open-browser.d.ts +3 -2
  27. package/dist/open-browser.js +7 -5
  28. package/dist/perf.js +4 -2
  29. package/dist/prepare-server.d.ts +3 -2
  30. package/dist/prepare-server.js +4 -4
  31. package/dist/prespawn-ffmpeg.d.ts +13 -1
  32. package/dist/prespawn-ffmpeg.js +21 -31
  33. package/dist/render-frames.d.ts +11 -4
  34. package/dist/render-frames.js +15 -11
  35. package/dist/render-media.d.ts +11 -4
  36. package/dist/render-media.js +19 -14
  37. package/dist/render-still.d.ts +8 -2
  38. package/dist/render-still.js +8 -8
  39. package/dist/replace-browser.d.ts +2 -1
  40. package/dist/replace-browser.js +2 -2
  41. package/dist/select-composition.d.ts +2 -1
  42. package/dist/select-composition.js +8 -8
  43. package/dist/serve-static.d.ts +2 -1
  44. package/dist/serve-static.js +1 -1
  45. package/dist/stitch-frames-to-video.d.ts +2 -1
  46. package/dist/stitch-frames-to-video.js +12 -22
  47. package/package.json +9 -9
@@ -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,
@@ -263,13 +263,19 @@ const internalRenderMedia = ({ proResProfile, crf, composition, inputProps, pixe
263
263
  return;
264
264
  }
265
265
  const id = (0, perf_1.startPerfMeasure)('piping');
266
+ const exitStatus = preStitcher === null || preStitcher === void 0 ? void 0 : preStitcher.getExitStatus();
267
+ if ((exitStatus === null || exitStatus === void 0 ? void 0 : exitStatus.type) === 'quit-successfully') {
268
+ throw new Error(`FFmpeg already quit while trying to pipe frame ${frame} to it. Stderr: ${exitStatus.stderr}}`);
269
+ }
270
+ if ((exitStatus === null || exitStatus === void 0 ? void 0 : exitStatus.type) === 'quit-with-error') {
271
+ throw new Error(`FFmpeg quit with code ${exitStatus.exitCode} while piping frame ${frame}. Stderr: ${exitStatus.stderr}}`);
272
+ }
266
273
  (_a = stitcherFfmpeg === null || stitcherFfmpeg === void 0 ? void 0 : stitcherFfmpeg.stdin) === null || _a === void 0 ? void 0 : _a.write(buffer);
267
274
  (0, perf_1.stopPerfMeasure)(id);
268
275
  setFrameToStitch(Math.min(realFrameRange[1] + 1, frame + everyNthFrame));
269
276
  }
270
277
  : null,
271
278
  webpackBundleOrServeUrl: serveUrl,
272
- dumpBrowserLogs,
273
279
  onBrowserLog,
274
280
  onDownload,
275
281
  timeoutInMilliseconds,
@@ -279,7 +285,7 @@ const internalRenderMedia = ({ proResProfile, crf, composition, inputProps, pixe
279
285
  port,
280
286
  cancelSignal: cancelRenderFrames.cancelSignal,
281
287
  muted: disableAudio,
282
- verbose,
288
+ logLevel,
283
289
  indent,
284
290
  server,
285
291
  });
@@ -320,7 +326,7 @@ const internalRenderMedia = ({ proResProfile, crf, composition, inputProps, pixe
320
326
  },
321
327
  onDownload,
322
328
  numberOfGifLoops,
323
- verbose,
329
+ logLevel,
324
330
  dir: workingDir,
325
331
  cancelSignal: cancelStitcher.cancelSignal,
326
332
  muted: disableAudio,
@@ -394,7 +400,7 @@ exports.internalRenderMedia = internalRenderMedia;
394
400
  * @description Render a video from a composition
395
401
  * @see [Documentation](https://www.remotion.dev/docs/renderer/render-media)
396
402
  */
397
- 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, }) => {
398
404
  var _a;
399
405
  if (quality !== undefined) {
400
406
  console.warn(`The "quality" option has been renamed. Please use "jpegQuality" instead.`);
@@ -412,7 +418,6 @@ const renderMedia = ({ proResProfile, crf, composition, inputProps, pixelFormat,
412
418
  concurrency: concurrency !== null && concurrency !== void 0 ? concurrency : null,
413
419
  crf: crf !== null && crf !== void 0 ? crf : null,
414
420
  disallowParallelEncoding: disallowParallelEncoding !== null && disallowParallelEncoding !== void 0 ? disallowParallelEncoding : false,
415
- dumpBrowserLogs: dumpBrowserLogs !== null && dumpBrowserLogs !== void 0 ? dumpBrowserLogs : false,
416
421
  enforceAudioTrack: enforceAudioTrack !== null && enforceAudioTrack !== void 0 ? enforceAudioTrack : false,
417
422
  envVariables: envVariables !== null && envVariables !== void 0 ? envVariables : {},
418
423
  everyNthFrame: everyNthFrame !== null && everyNthFrame !== void 0 ? everyNthFrame : 1,
@@ -435,7 +440,7 @@ const renderMedia = ({ proResProfile, crf, composition, inputProps, pixelFormat,
435
440
  scale: scale !== null && scale !== void 0 ? scale : 1,
436
441
  timeoutInMilliseconds: timeoutInMilliseconds !== null && timeoutInMilliseconds !== void 0 ? timeoutInMilliseconds : TimeoutSettings_1.DEFAULT_TIMEOUT,
437
442
  videoBitrate: videoBitrate !== null && videoBitrate !== void 0 ? videoBitrate : null,
438
- verbose: verbose !== null && verbose !== void 0 ? verbose : false,
443
+ logLevel: verbose || dumpBrowserLogs ? 'verbose' : logLevel !== null && logLevel !== void 0 ? logLevel : (0, logger_1.getLogLevel)(),
439
444
  preferLossless: preferLossless !== null && preferLossless !== void 0 ? preferLossless : false,
440
445
  indent: false,
441
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;
@@ -59,7 +59,7 @@ const packageJsonPath = node_path_1.default.join(__dirname, '..', 'package.json'
59
59
  const packageJson = node_fs_1.default.existsSync(packageJsonPath)
60
60
  ? JSON.parse(node_fs_1.default.readFileSync(packageJsonPath, 'utf-8'))
61
61
  : null;
62
- const getAssetsData = async ({ assets, onDownload, fps, expectedFrames, verbose, onProgress, downloadMap, remotionRoot, indent, }) => {
62
+ const getAssetsData = async ({ assets, onDownload, fps, expectedFrames, logLevel, onProgress, downloadMap, remotionRoot, indent, }) => {
63
63
  const fileUrlAssets = await (0, convert_assets_to_file_urls_1.convertAssetsToFileUrls)({
64
64
  assets,
65
65
  onDownload: onDownload !== null && onDownload !== void 0 ? onDownload : (() => () => undefined),
@@ -67,7 +67,7 @@ const getAssetsData = async ({ assets, onDownload, fps, expectedFrames, verbose,
67
67
  });
68
68
  (0, download_and_map_assets_to_file_1.markAllAssetsAsDownloaded)(downloadMap);
69
69
  const assetPositions = (0, calculate_asset_positions_1.calculateAssetPositions)(fileUrlAssets);
70
- logger_1.Log.verboseAdvanced({ indent, logLevel: verbose ? 'verbose' : 'info', tag: 'audio' }, 'asset positions', JSON.stringify(assetPositions));
70
+ logger_1.Log.verboseAdvanced({ indent, logLevel, tag: 'audio' }, 'asset positions', JSON.stringify(assetPositions));
71
71
  const preprocessProgress = new Array(assetPositions.length).fill(0);
72
72
  const updateProgress = () => {
73
73
  onProgress(preprocessProgress.reduce((a, b) => a + b, 0) / assetPositions.length);
@@ -100,7 +100,7 @@ const getAssetsData = async ({ assets, onDownload, fps, expectedFrames, verbose,
100
100
  });
101
101
  return outName;
102
102
  };
103
- const innerStitchFramesToVideo = async ({ assetsInfo, audioBitrate, audioCodec, cancelSignal, codec, crf, dir, enforceAudioTrack, ffmpegOverride, force, fps, height, indent, muted, onDownload, outputLocation, pixelFormat, preEncodedFileLocation, preferLossless, proResProfile, verbose, videoBitrate, width, numberOfGifLoops, onProgress, }, remotionRoot) => {
103
+ const innerStitchFramesToVideo = async ({ assetsInfo, audioBitrate, audioCodec, cancelSignal, codec, crf, dir, enforceAudioTrack, ffmpegOverride, force, fps, height, indent, muted, onDownload, outputLocation, pixelFormat, preEncodedFileLocation, preferLossless, proResProfile, logLevel, videoBitrate, width, numberOfGifLoops, onProgress, }, remotionRoot) => {
104
104
  var _a;
105
105
  remotion_1.Internals.validateDimension(height, 'height', 'passed to `stitchFramesToVideo()`');
106
106
  remotion_1.Internals.validateDimension(width, 'width', 'passed to `stitchFramesToVideo()`');
@@ -136,39 +136,29 @@ const innerStitchFramesToVideo = async ({ assetsInfo, audioBitrate, audioCodec,
136
136
  : node_path_1.default.join(assetsInfo.downloadMap.stitchFrames, `out.${(0, get_extension_from_codec_1.getFileExtensionFromCodec)(codec, resolvedAudioCodec)}`);
137
137
  logger_1.Log.verboseAdvanced({
138
138
  indent,
139
- logLevel: verbose ? 'verbose' : 'info',
140
- tag: 'stitchFramesToVideo()',
141
- }, 'encoder', encoderName);
142
- logger_1.Log.verboseAdvanced({
143
- indent,
144
- logLevel: verbose ? 'verbose' : 'info',
139
+ logLevel,
145
140
  tag: 'stitchFramesToVideo()',
146
141
  }, 'audioCodec', resolvedAudioCodec);
147
142
  logger_1.Log.verboseAdvanced({
148
143
  indent,
149
- logLevel: verbose ? 'verbose' : 'info',
144
+ logLevel,
150
145
  tag: 'stitchFramesToVideo()',
151
146
  }, 'pixelFormat', pixelFormat);
152
147
  logger_1.Log.verboseAdvanced({
153
148
  indent,
154
- logLevel: verbose ? 'verbose' : 'info',
149
+ logLevel,
155
150
  tag: 'stitchFramesToVideo()',
156
151
  }, 'codec', codec);
157
152
  logger_1.Log.verboseAdvanced({
158
153
  indent,
159
- logLevel: verbose ? 'verbose' : 'info',
154
+ logLevel,
160
155
  tag: 'stitchFramesToVideo()',
161
156
  }, 'shouldRenderAudio', shouldRenderAudio);
162
157
  logger_1.Log.verboseAdvanced({
163
158
  indent,
164
- logLevel: verbose ? 'verbose' : 'info',
159
+ logLevel,
165
160
  tag: 'stitchFramesToVideo()',
166
161
  }, 'shouldRenderVideo', shouldRenderVideo);
167
- logger_1.Log.verboseAdvanced({
168
- indent,
169
- logLevel: verbose ? 'verbose' : 'info',
170
- tag: 'stitchFramesToVideo()',
171
- }, 'proResProfileName', proResProfileName);
172
162
  (0, crf_1.validateQualitySettings)({
173
163
  crf,
174
164
  codec,
@@ -186,7 +176,7 @@ const innerStitchFramesToVideo = async ({ assetsInfo, audioBitrate, audioCodec,
186
176
  onDownload,
187
177
  fps,
188
178
  expectedFrames,
189
- verbose,
179
+ logLevel,
190
180
  onProgress: (prog) => updateProgress(prog, 0),
191
181
  downloadMap: assetsInfo.downloadMap,
192
182
  remotionRoot,
@@ -288,12 +278,12 @@ const innerStitchFramesToVideo = async ({ assetsInfo, audioBitrate, audioCodec,
288
278
  : ffmpegString;
289
279
  logger_1.Log.verboseAdvanced({
290
280
  indent: indent !== null && indent !== void 0 ? indent : false,
291
- logLevel: verbose ? 'verbose' : 'info',
281
+ logLevel,
292
282
  tag: 'stitchFramesToVideo()',
293
283
  }, 'Generated final FFMPEG command:');
294
284
  logger_1.Log.verboseAdvanced({
295
285
  indent,
296
- logLevel: verbose ? 'verbose' : 'info',
286
+ logLevel,
297
287
  tag: 'stitchFramesToVideo()',
298
288
  }, finalFfmpegString.join(' '));
299
289
  const task = (0, call_ffmpeg_1.callFf)('ffmpeg', finalFfmpegString, {
@@ -391,7 +381,7 @@ const stitchFramesToVideo = ({ assetsInfo, force, fps, height, width, audioBitra
391
381
  outputLocation: outputLocation !== null && outputLocation !== void 0 ? outputLocation : null,
392
382
  pixelFormat: pixelFormat !== null && pixelFormat !== void 0 ? pixelFormat : pixel_format_1.DEFAULT_PIXEL_FORMAT,
393
383
  proResProfile,
394
- verbose: verbose !== null && verbose !== void 0 ? verbose : false,
384
+ logLevel: verbose ? 'verbose' : 'info',
395
385
  videoBitrate: videoBitrate !== null && videoBitrate !== void 0 ? videoBitrate : null,
396
386
  width,
397
387
  preEncodedFileLocation: null,
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@remotion/renderer",
3
- "version": "4.0.0-alpha17",
3
+ "version": "4.0.0-alpha18",
4
4
  "description": "Renderer for Remotion",
5
5
  "main": "dist/index.js",
6
6
  "types": "dist/index.d.ts",
@@ -18,7 +18,7 @@
18
18
  "extract-zip": "2.0.1",
19
19
  "source-map": "^0.8.0-beta.0",
20
20
  "ws": "8.7.0",
21
- "remotion": "4.0.0-alpha17"
21
+ "remotion": "4.0.0-alpha18"
22
22
  },
23
23
  "peerDependencies": {
24
24
  "react": ">=16.8.0",
@@ -42,13 +42,13 @@
42
42
  "zod": "^3.21.4"
43
43
  },
44
44
  "optionalDependencies": {
45
- "@remotion/compositor-darwin-arm64": "4.0.0-alpha17",
46
- "@remotion/compositor-linux-arm64-gnu": "4.0.0-alpha17",
47
- "@remotion/compositor-linux-arm64-musl": "4.0.0-alpha17",
48
- "@remotion/compositor-darwin-x64": "4.0.0-alpha17",
49
- "@remotion/compositor-linux-x64-gnu": "4.0.0-alpha17",
50
- "@remotion/compositor-win32-x64-msvc": "4.0.0-alpha17",
51
- "@remotion/compositor-linux-x64-musl": "4.0.0-alpha17"
45
+ "@remotion/compositor-darwin-x64": "4.0.0-alpha18",
46
+ "@remotion/compositor-linux-arm64-musl": "4.0.0-alpha18",
47
+ "@remotion/compositor-darwin-arm64": "4.0.0-alpha18",
48
+ "@remotion/compositor-linux-x64-gnu": "4.0.0-alpha18",
49
+ "@remotion/compositor-linux-x64-musl": "4.0.0-alpha18",
50
+ "@remotion/compositor-win32-x64-msvc": "4.0.0-alpha18",
51
+ "@remotion/compositor-linux-arm64-gnu": "4.0.0-alpha18"
52
52
  },
53
53
  "keywords": [
54
54
  "remotion",