@remotion/renderer 4.0.355 → 4.0.357

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 (44) hide show
  1. package/dist/assets/apply-tone-frequency.d.ts +11 -0
  2. package/dist/assets/apply-tone-frequency.js +34 -0
  3. package/dist/assets/change-tempo.d.ts +34 -0
  4. package/dist/assets/change-tempo.js +287 -0
  5. package/dist/assets/change-tonefrequency.d.ts +2 -0
  6. package/dist/assets/change-tonefrequency.js +28 -0
  7. package/dist/assets/inline-audio-mixing.d.ts +8 -0
  8. package/dist/assets/inline-audio-mixing.js +39 -9
  9. package/dist/assets/resample-audiodata.d.ts +6 -0
  10. package/dist/assets/resample-audiodata.js +54 -0
  11. package/dist/assets/types.d.ts +1 -1
  12. package/dist/browser/Browser.d.ts +7 -4
  13. package/dist/browser/Browser.js +6 -3
  14. package/dist/browser/BrowserPage.d.ts +10 -2
  15. package/dist/browser/BrowserPage.js +9 -16
  16. package/dist/browser/Target.d.ts +3 -2
  17. package/dist/browser/Target.js +2 -1
  18. package/dist/create-audio.js +6 -0
  19. package/dist/default-on-log.d.ts +2 -0
  20. package/dist/default-on-log.js +8 -0
  21. package/dist/esm/error-handling.mjs +22 -14
  22. package/dist/esm/index.mjs +207 -108
  23. package/dist/get-browser-instance.d.ts +3 -2
  24. package/dist/get-browser-instance.js +3 -1
  25. package/dist/get-compositions.d.ts +2 -0
  26. package/dist/get-compositions.js +4 -1
  27. package/dist/index.d.ts +10 -1
  28. package/dist/index.js +2 -0
  29. package/dist/logger.d.ts +1 -0
  30. package/dist/logger.js +24 -24
  31. package/dist/make-page.d.ts +3 -2
  32. package/dist/make-page.js +2 -2
  33. package/dist/render-frames.d.ts +2 -0
  34. package/dist/render-frames.js +6 -2
  35. package/dist/render-media.d.ts +2 -0
  36. package/dist/render-media.js +13 -15
  37. package/dist/render-still.d.ts +2 -0
  38. package/dist/render-still.js +4 -1
  39. package/dist/select-composition.js +2 -0
  40. package/dist/test-gpu.d.ts +3 -1
  41. package/dist/test-gpu.js +2 -1
  42. package/dist/validate-even-dimensions-with-codec.js +16 -23
  43. package/ensure-browser.mjs +22 -14
  44. package/package.json +12 -12
@@ -1,12 +1,12 @@
1
1
  import type { BrowserExecutable } from './browser-executable';
2
2
  import type { BrowserLog } from './browser-log';
3
3
  import type { HeadlessBrowser } from './browser/Browser';
4
- import type { Page } from './browser/BrowserPage';
4
+ import type { OnLog, Page } from './browser/BrowserPage';
5
5
  import type { LogLevel } from './log-level';
6
6
  import type { ChromiumOptions } from './open-browser';
7
7
  import type { ChromeMode } from './options/chrome-mode';
8
8
  import type { OnBrowserDownload } from './options/on-browser-download';
9
- export declare const getPageAndCleanupFn: ({ passedInInstance, browserExecutable, chromiumOptions, forceDeviceScaleFactor, indent, logLevel, onBrowserDownload, chromeMode, pageIndex, onBrowserLog, }: {
9
+ export declare const getPageAndCleanupFn: ({ passedInInstance, browserExecutable, chromiumOptions, forceDeviceScaleFactor, indent, logLevel, onBrowserDownload, chromeMode, pageIndex, onBrowserLog, onLog, }: {
10
10
  passedInInstance: HeadlessBrowser | undefined;
11
11
  browserExecutable: BrowserExecutable | null;
12
12
  chromiumOptions: ChromiumOptions;
@@ -17,6 +17,7 @@ export declare const getPageAndCleanupFn: ({ passedInInstance, browserExecutable
17
17
  chromeMode: ChromeMode;
18
18
  pageIndex: number;
19
19
  onBrowserLog: null | ((log: BrowserLog) => void);
20
+ onLog: OnLog;
20
21
  }) => Promise<{
21
22
  cleanupPage: () => Promise<void>;
22
23
  page: Page;
@@ -4,7 +4,7 @@ exports.getPageAndCleanupFn = void 0;
4
4
  const browser_1 = require("./browser");
5
5
  const logger_1 = require("./logger");
6
6
  const open_browser_1 = require("./open-browser");
7
- const getPageAndCleanupFn = async ({ passedInInstance, browserExecutable, chromiumOptions, forceDeviceScaleFactor, indent, logLevel, onBrowserDownload, chromeMode, pageIndex, onBrowserLog, }) => {
7
+ const getPageAndCleanupFn = async ({ passedInInstance, browserExecutable, chromiumOptions, forceDeviceScaleFactor, indent, logLevel, onBrowserDownload, chromeMode, pageIndex, onBrowserLog, onLog, }) => {
8
8
  if (passedInInstance) {
9
9
  const page = await passedInInstance.newPage({
10
10
  context: () => null,
@@ -12,6 +12,7 @@ const getPageAndCleanupFn = async ({ passedInInstance, browserExecutable, chromi
12
12
  indent,
13
13
  pageIndex,
14
14
  onBrowserLog,
15
+ onLog,
15
16
  });
16
17
  return {
17
18
  page,
@@ -44,6 +45,7 @@ const getPageAndCleanupFn = async ({ passedInInstance, browserExecutable, chromi
44
45
  indent,
45
46
  pageIndex,
46
47
  onBrowserLog,
48
+ onLog,
47
49
  });
48
50
  return {
49
51
  page: browserPage,
@@ -2,6 +2,7 @@ import type { VideoConfig } from 'remotion/no-react';
2
2
  import type { BrowserExecutable } from './browser-executable';
3
3
  import type { BrowserLog } from './browser-log';
4
4
  import type { HeadlessBrowser } from './browser/Browser';
5
+ import type { OnLog } from './browser/BrowserPage';
5
6
  import type { ChromiumOptions } from './open-browser';
6
7
  import type { ToOptions } from './options/option';
7
8
  import type { optionsMap } from './options/options-map';
@@ -18,6 +19,7 @@ type InternalGetCompositionsOptions = {
18
19
  server: RemotionServer | undefined;
19
20
  indent: boolean;
20
21
  serveUrlOrWebpackUrl: string;
22
+ onLog: OnLog;
21
23
  } & ToOptions<typeof optionsMap.getCompositions>;
22
24
  export type GetCompositionsOptions = RequiredInputPropsInV5 & {
23
25
  envVariables?: Record<string, string>;
@@ -4,6 +4,7 @@ exports.getCompositions = exports.internalGetCompositions = void 0;
4
4
  const no_react_1 = require("remotion/no-react");
5
5
  const TimeoutSettings_1 = require("./browser/TimeoutSettings");
6
6
  const browser_download_progress_bar_1 = require("./browser/browser-download-progress-bar");
7
+ const default_on_log_1 = require("./default-on-log");
7
8
  const handle_javascript_exception_1 = require("./error-handling/handle-javascript-exception");
8
9
  const find_closest_package_json_1 = require("./find-closest-package-json");
9
10
  const get_browser_instance_1 = require("./get-browser-instance");
@@ -80,7 +81,7 @@ const innerGetCompositions = async ({ envVariables, serializedInputPropsWithCust
80
81
  };
81
82
  });
82
83
  };
83
- const internalGetCompositionsRaw = async ({ browserExecutable, chromiumOptions, envVariables, indent, serializedInputPropsWithCustomSchema, onBrowserLog, port, puppeteerInstance, serveUrlOrWebpackUrl, server, timeoutInMilliseconds, logLevel, offthreadVideoCacheSizeInBytes, binariesDirectory, onBrowserDownload, chromeMode, offthreadVideoThreads, mediaCacheSizeInBytes, }) => {
84
+ const internalGetCompositionsRaw = async ({ browserExecutable, chromiumOptions, envVariables, indent, serializedInputPropsWithCustomSchema, onBrowserLog, port, puppeteerInstance, serveUrlOrWebpackUrl, server, timeoutInMilliseconds, logLevel, offthreadVideoCacheSizeInBytes, binariesDirectory, onBrowserDownload, chromeMode, offthreadVideoThreads, mediaCacheSizeInBytes, onLog, }) => {
84
85
  const { page, cleanupPage } = await (0, get_browser_instance_1.getPageAndCleanupFn)({
85
86
  passedInInstance: puppeteerInstance,
86
87
  browserExecutable,
@@ -92,6 +93,7 @@ const internalGetCompositionsRaw = async ({ browserExecutable, chromiumOptions,
92
93
  chromeMode,
93
94
  pageIndex: 0,
94
95
  onBrowserLog,
96
+ onLog,
95
97
  });
96
98
  const cleanup = [cleanupPage];
97
99
  return new Promise((resolve, reject) => {
@@ -188,6 +190,7 @@ const getCompositions = (serveUrlOrWebpackUrl, config) => {
188
190
  chromeMode: chromeMode !== null && chromeMode !== void 0 ? chromeMode : 'headless-shell',
189
191
  offthreadVideoThreads: offthreadVideoThreads !== null && offthreadVideoThreads !== void 0 ? offthreadVideoThreads : null,
190
192
  mediaCacheSizeInBytes: mediaCacheSizeInBytes !== null && mediaCacheSizeInBytes !== void 0 ? mediaCacheSizeInBytes : null,
193
+ onLog: default_on_log_1.defaultOnLog,
191
194
  });
192
195
  };
193
196
  exports.getCompositions = getCompositions;
package/dist/index.d.ts CHANGED
@@ -8,6 +8,7 @@ export { Browser } from './browser';
8
8
  export { BrowserExecutable } from './browser-executable';
9
9
  export { BrowserLog } from './browser-log';
10
10
  export type { HeadlessBrowser } from './browser/Browser';
11
+ export type { OnLog } from './browser/BrowserPage';
11
12
  export { Codec, CodecOrUndefined } from './codec';
12
13
  export { CombineChunksOnProgress, CombineChunksOptions, combineChunks, } from './combine-chunks';
13
14
  export { Crf } from './crf';
@@ -391,6 +392,9 @@ export declare const RenderInternals: {
391
392
  bgWhiteBright: (str: string) => string;
392
393
  };
393
394
  Log: {
395
+ formatLogs: (logLevel: import("./log-level").LogLevel, options: import("./logger").LogOptions & {
396
+ tag?: string;
397
+ }, args: Parameters<typeof console.log>) => string[];
394
398
  trace: (options: import("./logger").LogOptions & {
395
399
  tag?: string;
396
400
  }, message?: any, ...optionalParams: any[]) => boolean | void;
@@ -455,6 +459,7 @@ export declare const RenderInternals: {
455
459
  serveUrl: string;
456
460
  port: number | null;
457
461
  onArtifact: import("./render-frames").OnArtifact | null;
462
+ onLog: import("./browser/BrowserPage").OnLog;
458
463
  } & import("./options/option").ToOptions<{
459
464
  readonly mediaCacheSizeInBytes: {
460
465
  name: string;
@@ -800,6 +805,7 @@ export declare const RenderInternals: {
800
805
  server: import("./prepare-server").RemotionServer | undefined;
801
806
  indent: boolean;
802
807
  serveUrlOrWebpackUrl: string;
808
+ onLog: import("./browser/BrowserPage").OnLog;
803
809
  } & import("./options/option").ToOptions<{
804
810
  readonly mediaCacheSizeInBytes: {
805
811
  name: string;
@@ -955,6 +961,7 @@ export declare const RenderInternals: {
955
961
  parallelEncodingEnabled: boolean;
956
962
  compositionStart: number;
957
963
  onArtifact: import("./render-frames").OnArtifact | null;
964
+ onLog: import("./browser/BrowserPage").OnLog;
958
965
  } & import("./options/option").ToOptions<{
959
966
  readonly mediaCacheSizeInBytes: {
960
967
  name: string;
@@ -1135,7 +1142,7 @@ export declare const RenderInternals: {
1135
1142
  }>;
1136
1143
  validOpenGlRenderers: readonly ["swangle", "angle", "egl", "swiftshader", "vulkan", "angle-egl"];
1137
1144
  isIpV6Supported: (flattened: import("os").NetworkInterfaceInfo[]) => boolean;
1138
- getChromiumGpuInformation: ({ browserExecutable, indent, logLevel, chromiumOptions, timeoutInMilliseconds, onBrowserDownload, chromeMode, }: {
1145
+ getChromiumGpuInformation: ({ browserExecutable, indent, logLevel, chromiumOptions, timeoutInMilliseconds, onBrowserDownload, chromeMode, onLog, }: {
1139
1146
  browserExecutable: import("./browser-executable").BrowserExecutable;
1140
1147
  indent: boolean;
1141
1148
  logLevel: import("./log-level").LogLevel;
@@ -1143,6 +1150,7 @@ export declare const RenderInternals: {
1143
1150
  timeoutInMilliseconds: number;
1144
1151
  onBrowserDownload: import("./options/on-browser-download").OnBrowserDownload;
1145
1152
  chromeMode: import("./options/chrome-mode").ChromeMode;
1153
+ onLog: import("./browser/BrowserPage").OnLog;
1146
1154
  }) => Promise<{
1147
1155
  feature: string;
1148
1156
  status: string;
@@ -1244,4 +1252,5 @@ export declare const RenderInternals: {
1244
1252
  }) & {
1245
1253
  indent: boolean;
1246
1254
  }) => Promise<void>;
1255
+ defaultOnLog: import("./browser/BrowserPage").OnLog;
1247
1256
  };
package/dist/index.js CHANGED
@@ -124,6 +124,7 @@ const can_concat_seamlessly_1 = require("./can-concat-seamlessly");
124
124
  const codec_supports_media_1 = require("./codec-supports-media");
125
125
  const combine_chunks_2 = require("./combine-chunks");
126
126
  const make_file_executable_1 = require("./compositor/make-file-executable");
127
+ const default_on_log_1 = require("./default-on-log");
127
128
  const ensure_browser_2 = require("./ensure-browser");
128
129
  const audio_codec_1 = require("./options/audio-codec");
129
130
  const offthreadvideo_threads_1 = require("./options/offthreadvideo-threads");
@@ -220,6 +221,7 @@ exports.RenderInternals = {
220
221
  canConcatVideoSeamlessly: can_concat_seamlessly_1.canConcatVideoSeamlessly,
221
222
  canConcatAudioSeamlessly: can_concat_seamlessly_1.canConcatAudioSeamlessly,
222
223
  internalCombineChunks: combine_chunks_2.internalCombineChunks,
224
+ defaultOnLog: default_on_log_1.defaultOnLog,
223
225
  };
224
226
  // Warn of potential performance issues with Apple Silicon (M1 chip under Rosetta)
225
227
  (0, check_version_requirements_1.checkRuntimeVersion)('info', false);
package/dist/logger.d.ts CHANGED
@@ -10,6 +10,7 @@ type VerboseLogOptions = LogOptions & {
10
10
  export declare const verboseTag: (str: string) => string;
11
11
  export declare const secondverboseTag: (str: string) => string;
12
12
  export declare const Log: {
13
+ formatLogs: (logLevel: LogLevel, options: VerboseLogOptions, args: Parameters<typeof console.log>) => string[];
13
14
  trace: (options: VerboseLogOptions, message?: any, ...optionalParams: any[]) => boolean | void;
14
15
  verbose: (options: VerboseLogOptions, message?: any, ...optionalParams: any[]) => boolean | void;
15
16
  info: (options: LogOptions, message?: any, ...optionalParams: any[]) => boolean | void;
package/dist/logger.js CHANGED
@@ -17,6 +17,25 @@ const secondverboseTag = (str) => {
17
17
  };
18
18
  exports.secondverboseTag = secondverboseTag;
19
19
  exports.Log = {
20
+ formatLogs: (logLevel, options, args) => {
21
+ return [
22
+ options.indent ? exports.INDENT_TOKEN : null,
23
+ options.tag ? (0, exports.verboseTag)(options.tag) : null,
24
+ ]
25
+ .filter(truthy_1.truthy)
26
+ .concat(args.map((a) => {
27
+ if (logLevel === 'warn') {
28
+ return chalk_1.chalk.yellow(a);
29
+ }
30
+ if (logLevel === 'error') {
31
+ return chalk_1.chalk.red(a);
32
+ }
33
+ if (logLevel === 'verbose' || logLevel === 'trace') {
34
+ return chalk_1.chalk.gray(a);
35
+ }
36
+ return a;
37
+ }));
38
+ },
20
39
  trace: (options, ...args) => {
21
40
  (0, repro_1.writeInRepro)('trace', ...args);
22
41
  if ((0, log_level_1.isEqualOrBelowLogLevel)(options.logLevel, 'trace')) {
@@ -24,12 +43,7 @@ exports.Log = {
24
43
  // Lambda will print "undefined" otherwise
25
44
  return process.stdout.write('\n');
26
45
  }
27
- return console.log(...[
28
- options.indent ? exports.INDENT_TOKEN : null,
29
- options.tag ? (0, exports.verboseTag)(options.tag) : null,
30
- ]
31
- .filter(truthy_1.truthy)
32
- .concat(args.map((a) => chalk_1.chalk.gray(a))));
46
+ return console.log(...exports.Log.formatLogs('trace', options, args));
33
47
  }
34
48
  },
35
49
  verbose: (options, ...args) => {
@@ -39,12 +53,7 @@ exports.Log = {
39
53
  // Lambda will print "undefined" otherwise
40
54
  return process.stdout.write('\n');
41
55
  }
42
- return console.log(...[
43
- options.indent ? exports.INDENT_TOKEN : null,
44
- options.tag ? (0, exports.verboseTag)(options.tag) : null,
45
- ]
46
- .filter(truthy_1.truthy)
47
- .concat(args.map((a) => chalk_1.chalk.gray(a))));
56
+ return console.log(...exports.Log.formatLogs('verbose', options, args));
48
57
  }
49
58
  },
50
59
  info: (options, ...args) => {
@@ -54,9 +63,7 @@ exports.Log = {
54
63
  // Lambda will print "undefined" otherwise
55
64
  return process.stdout.write('\n');
56
65
  }
57
- return console.log(...[options.indent ? exports.INDENT_TOKEN : null]
58
- .filter(truthy_1.truthy)
59
- .concat(args !== null && args !== void 0 ? args : []));
66
+ return console.log(...exports.Log.formatLogs('info', options, args));
60
67
  }
61
68
  },
62
69
  warn: (options, ...args) => {
@@ -66,9 +73,7 @@ exports.Log = {
66
73
  // Lambda will print "undefined" otherwise
67
74
  return process.stdout.write('\n');
68
75
  }
69
- return console.warn(...[options.indent ? chalk_1.chalk.yellow(exports.INDENT_TOKEN) : null]
70
- .filter(truthy_1.truthy)
71
- .concat(args.map((a) => chalk_1.chalk.yellow(a))));
76
+ return console.warn(...exports.Log.formatLogs('warn', options, args));
72
77
  }
73
78
  },
74
79
  error: (options, ...args) => {
@@ -78,12 +83,7 @@ exports.Log = {
78
83
  // Lambda will print "undefined" otherwise
79
84
  return process.stdout.write('\n');
80
85
  }
81
- return console.error(...[
82
- options.indent ? exports.INDENT_TOKEN : null,
83
- options.tag ? (0, exports.verboseTag)(options.tag) : null,
84
- ]
85
- .filter(truthy_1.truthy)
86
- .concat(args.map((a) => chalk_1.chalk.red(a))));
86
+ return console.error(...exports.Log.formatLogs('error', options, args));
87
87
  }
88
88
  },
89
89
  };
@@ -1,11 +1,11 @@
1
1
  import type { VideoConfig } from 'remotion/no-react';
2
2
  import type { BrowserLog } from './browser-log';
3
- import type { Page } from './browser/BrowserPage';
3
+ import type { OnLog, Page } from './browser/BrowserPage';
4
4
  import type { SourceMapGetter } from './browser/source-map-getter';
5
5
  import type { VideoImageFormat } from './image-format';
6
6
  import type { LogLevel } from './log-level';
7
7
  import type { BrowserReplacer } from './replace-browser';
8
- export declare const makePage: ({ context, initialFrame, browserReplacer, logLevel, indent, pagesArray, onBrowserLog, scale, timeoutInMilliseconds, composition, proxyPort, serveUrl, muted, envVariables, serializedInputPropsWithCustomSchema, imageFormat, serializedResolvedPropsWithCustomSchema, pageIndex, isMainTab, mediaCacheSizeInBytes, }: {
8
+ export declare const makePage: ({ context, initialFrame, browserReplacer, logLevel, indent, pagesArray, onBrowserLog, scale, timeoutInMilliseconds, composition, proxyPort, serveUrl, muted, envVariables, serializedInputPropsWithCustomSchema, imageFormat, serializedResolvedPropsWithCustomSchema, pageIndex, isMainTab, mediaCacheSizeInBytes, onLog, }: {
9
9
  context: SourceMapGetter;
10
10
  initialFrame: number;
11
11
  browserReplacer: BrowserReplacer;
@@ -26,4 +26,5 @@ export declare const makePage: ({ context, initialFrame, browserReplacer, logLev
26
26
  pageIndex: number;
27
27
  isMainTab: boolean;
28
28
  mediaCacheSizeInBytes: number | null;
29
+ onLog: OnLog;
29
30
  }) => Promise<Page>;
package/dist/make-page.js CHANGED
@@ -4,10 +4,10 @@ exports.makePage = void 0;
4
4
  const get_available_memory_1 = require("./memory/get-available-memory");
5
5
  const puppeteer_evaluate_1 = require("./puppeteer-evaluate");
6
6
  const set_props_and_env_1 = require("./set-props-and-env");
7
- const makePage = async ({ context, initialFrame, browserReplacer, logLevel, indent, pagesArray, onBrowserLog, scale, timeoutInMilliseconds, composition, proxyPort, serveUrl, muted, envVariables, serializedInputPropsWithCustomSchema, imageFormat, serializedResolvedPropsWithCustomSchema, pageIndex, isMainTab, mediaCacheSizeInBytes, }) => {
7
+ const makePage = async ({ context, initialFrame, browserReplacer, logLevel, indent, pagesArray, onBrowserLog, scale, timeoutInMilliseconds, composition, proxyPort, serveUrl, muted, envVariables, serializedInputPropsWithCustomSchema, imageFormat, serializedResolvedPropsWithCustomSchema, pageIndex, isMainTab, mediaCacheSizeInBytes, onLog, }) => {
8
8
  const page = await browserReplacer
9
9
  .getBrowser()
10
- .newPage({ context, logLevel, indent, pageIndex, onBrowserLog });
10
+ .newPage({ context, logLevel, indent, pageIndex, onBrowserLog, onLog });
11
11
  pagesArray.push(page);
12
12
  await page.setViewport({
13
13
  width: composition.width,
@@ -3,6 +3,7 @@ import type { RenderMediaOnDownload } from './assets/download-and-map-assets-to-
3
3
  import type { BrowserExecutable } from './browser-executable';
4
4
  import type { BrowserLog } from './browser-log';
5
5
  import type { HeadlessBrowser } from './browser/Browser';
6
+ import type { OnLog } from './browser/BrowserPage';
6
7
  import type { FrameRange } from './frame-range';
7
8
  import type { VideoImageFormat } from './image-format';
8
9
  import type { CancelSignal } from './make-cancel-signal';
@@ -42,6 +43,7 @@ type InternalRenderFramesOptions = {
42
43
  parallelEncodingEnabled: boolean;
43
44
  compositionStart: number;
44
45
  onArtifact: OnArtifact | null;
46
+ onLog: OnLog;
45
47
  } & ToOptions<typeof optionsMap.renderFrames>;
46
48
  type ArtifactWithoutContent = {
47
49
  frame: number;
@@ -13,6 +13,7 @@ const browser_download_progress_bar_1 = require("./browser/browser-download-prog
13
13
  const flaky_errors_1 = require("./browser/flaky-errors");
14
14
  const can_use_parallel_encoding_1 = require("./can-use-parallel-encoding");
15
15
  const cycle_browser_tabs_1 = require("./cycle-browser-tabs");
16
+ const default_on_log_1 = require("./default-on-log");
16
17
  const find_closest_package_json_1 = require("./find-closest-package-json");
17
18
  const get_concurrency_1 = require("./get-concurrency");
18
19
  const get_duration_from_frame_range_1 = require("./get-duration-from-frame-range");
@@ -34,7 +35,7 @@ const validate_1 = require("./validate");
34
35
  const validate_scale_1 = require("./validate-scale");
35
36
  const wrap_with_error_handling_1 = require("./wrap-with-error-handling");
36
37
  const MAX_RETRIES_PER_FRAME = 1;
37
- const innerRenderFrames = async ({ onFrameUpdate, outputDir, onStart, serializedInputPropsWithCustomSchema, serializedResolvedPropsWithCustomSchema, jpegQuality, imageFormat, frameRange, onError, envVariables, onBrowserLog, onFrameBuffer, onDownload, pagesArray, serveUrl, composition, timeoutInMilliseconds, scale, resolvedConcurrency, everyNthFrame, proxyPort, cancelSignal, downloadMap, muted, makeBrowser, browserReplacer, sourceMapGetter, logLevel, indent, parallelEncodingEnabled, compositionStart, forSeamlessAacConcatenation, onArtifact, binariesDirectory, imageSequencePattern, mediaCacheSizeInBytes, }) => {
38
+ const innerRenderFrames = async ({ onFrameUpdate, outputDir, onStart, serializedInputPropsWithCustomSchema, serializedResolvedPropsWithCustomSchema, jpegQuality, imageFormat, frameRange, onError, envVariables, onBrowserLog, onFrameBuffer, onDownload, pagesArray, serveUrl, composition, timeoutInMilliseconds, scale, resolvedConcurrency, everyNthFrame, proxyPort, cancelSignal, downloadMap, muted, makeBrowser, browserReplacer, sourceMapGetter, logLevel, indent, parallelEncodingEnabled, compositionStart, forSeamlessAacConcatenation, onArtifact, binariesDirectory, imageSequencePattern, mediaCacheSizeInBytes, onLog, }) => {
38
39
  if (outputDir) {
39
40
  if (!node_fs_1.default.existsSync(outputDir)) {
40
41
  node_fs_1.default.mkdirSync(outputDir, {
@@ -75,6 +76,7 @@ const innerRenderFrames = async ({ onFrameUpdate, outputDir, onStart, serialized
75
76
  pageIndex,
76
77
  isMainTab: pageIndex === 0,
77
78
  mediaCacheSizeInBytes,
79
+ onLog,
78
80
  });
79
81
  };
80
82
  const getPool = async () => {
@@ -193,7 +195,7 @@ const innerRenderFrames = async ({ onFrameUpdate, outputDir, onStart, serialized
193
195
  frameCount: framesToRender.length,
194
196
  };
195
197
  };
196
- const internalRenderFramesRaw = ({ browserExecutable, cancelSignal, chromiumOptions, composition, concurrency, envVariables, everyNthFrame, frameRange, imageFormat, indent, jpegQuality, muted, onBrowserLog, onDownload, onFrameBuffer, onFrameUpdate, onStart, outputDir, port, puppeteerInstance, scale, server, timeoutInMilliseconds, logLevel, webpackBundleOrServeUrl, serializedInputPropsWithCustomSchema, serializedResolvedPropsWithCustomSchema, offthreadVideoCacheSizeInBytes, parallelEncodingEnabled, binariesDirectory, forSeamlessAacConcatenation, compositionStart, onBrowserDownload, onArtifact, chromeMode, offthreadVideoThreads, imageSequencePattern, mediaCacheSizeInBytes, }) => {
198
+ const internalRenderFramesRaw = ({ browserExecutable, cancelSignal, chromiumOptions, composition, concurrency, envVariables, everyNthFrame, frameRange, imageFormat, indent, jpegQuality, muted, onBrowserLog, onDownload, onFrameBuffer, onFrameUpdate, onStart, outputDir, port, puppeteerInstance, scale, server, timeoutInMilliseconds, logLevel, webpackBundleOrServeUrl, serializedInputPropsWithCustomSchema, serializedResolvedPropsWithCustomSchema, offthreadVideoCacheSizeInBytes, parallelEncodingEnabled, binariesDirectory, forSeamlessAacConcatenation, compositionStart, onBrowserDownload, onArtifact, chromeMode, offthreadVideoThreads, imageSequencePattern, mediaCacheSizeInBytes, onLog, }) => {
197
199
  (0, validate_1.validateDimension)(composition.height, 'height', 'in the `config` object passed to `renderFrames()`');
198
200
  (0, validate_1.validateDimension)(composition.width, 'width', 'in the `config` object passed to `renderFrames()`');
199
201
  (0, validate_1.validateFps)(composition.fps, 'in the `config` object of `renderFrames()`', false);
@@ -297,6 +299,7 @@ const internalRenderFramesRaw = ({ browserExecutable, cancelSignal, chromiumOpti
297
299
  offthreadVideoThreads,
298
300
  imageSequencePattern,
299
301
  mediaCacheSizeInBytes,
302
+ onLog,
300
303
  });
301
304
  }),
302
305
  ])
@@ -404,6 +407,7 @@ const renderFrames = (options) => {
404
407
  offthreadVideoThreads: offthreadVideoThreads !== null && offthreadVideoThreads !== void 0 ? offthreadVideoThreads : null,
405
408
  imageSequencePattern: imageSequencePattern !== null && imageSequencePattern !== void 0 ? imageSequencePattern : null,
406
409
  mediaCacheSizeInBytes: mediaCacheSizeInBytes !== null && mediaCacheSizeInBytes !== void 0 ? mediaCacheSizeInBytes : null,
410
+ onLog: default_on_log_1.defaultOnLog,
407
411
  });
408
412
  };
409
413
  exports.renderFrames = renderFrames;
@@ -3,6 +3,7 @@ import { type RenderMediaOnDownload } from './assets/download-and-map-assets-to-
3
3
  import type { BrowserExecutable } from './browser-executable';
4
4
  import type { BrowserLog } from './browser-log';
5
5
  import type { HeadlessBrowser } from './browser/Browser';
6
+ import type { OnLog } from './browser/BrowserPage';
6
7
  import type { Codec } from './codec';
7
8
  import type { FfmpegOverrideFn } from './ffmpeg-override';
8
9
  import type { FrameRange } from './frame-range';
@@ -68,6 +69,7 @@ export type InternalRenderMediaOptions = {
68
69
  compositionStart: number;
69
70
  onArtifact: OnArtifact | null;
70
71
  metadata: Record<string, string> | null;
72
+ onLog: OnLog;
71
73
  } & MoreRenderMediaOptions;
72
74
  type Prettify<T> = {
73
75
  [K in keyof T]: T[K];
@@ -13,6 +13,7 @@ const browser_download_progress_bar_1 = require("./browser/browser-download-prog
13
13
  const can_use_parallel_encoding_1 = require("./can-use-parallel-encoding");
14
14
  const codec_supports_media_1 = require("./codec-supports-media");
15
15
  const crf_1 = require("./crf");
16
+ const default_on_log_1 = require("./default-on-log");
16
17
  const delete_directory_1 = require("./delete-directory");
17
18
  const ensure_frames_in_order_1 = require("./ensure-frames-in-order");
18
19
  const ensure_output_directory_1 = require("./ensure-output-directory");
@@ -51,8 +52,8 @@ const validate_scale_1 = require("./validate-scale");
51
52
  const validate_videobitrate_1 = require("./validate-videobitrate");
52
53
  const wrap_with_error_handling_1 = require("./wrap-with-error-handling");
53
54
  const SLOWEST_FRAME_COUNT = 10;
54
- const MAX_RECENT_FRAME_TIMINGS = 50;
55
- const internalRenderMediaRaw = ({ proResProfile, x264Preset, crf, composition: compositionWithPossibleUnevenDimensions, serializedInputPropsWithCustomSchema, pixelFormat: userPixelFormat, codec, envVariables, frameRange, puppeteerInstance, outputLocation, onProgress, overwrite, onDownload, onBrowserLog, onStart, timeoutInMilliseconds, chromiumOptions, scale, browserExecutable, port, cancelSignal, muted, enforceAudioTrack, ffmpegOverride, audioBitrate, videoBitrate, encodingMaxRate, encodingBufferSize, audioCodec, concurrency, disallowParallelEncoding, everyNthFrame, imageFormat: provisionalImageFormat, indent, jpegQuality, numberOfGifLoops, onCtrlCExit, preferLossless, serveUrl, server: reusedServer, logLevel, serializedResolvedPropsWithCustomSchema, offthreadVideoCacheSizeInBytes, colorSpace, repro, binariesDirectory, separateAudioTo, forSeamlessAacConcatenation, compositionStart, onBrowserDownload, onArtifact, metadata, hardwareAcceleration, chromeMode, offthreadVideoThreads, mediaCacheSizeInBytes, }) => {
55
+ const MAX_RECENT_FRAME_TIMINGS = 150;
56
+ const internalRenderMediaRaw = ({ proResProfile, x264Preset, crf, composition: compositionWithPossibleUnevenDimensions, serializedInputPropsWithCustomSchema, pixelFormat: userPixelFormat, codec, envVariables, frameRange, puppeteerInstance, outputLocation, onProgress, overwrite, onDownload, onBrowserLog, onStart, timeoutInMilliseconds, chromiumOptions, scale, browserExecutable, port, cancelSignal, muted, enforceAudioTrack, ffmpegOverride, audioBitrate, videoBitrate, encodingMaxRate, encodingBufferSize, audioCodec, concurrency, disallowParallelEncoding, everyNthFrame, imageFormat: provisionalImageFormat, indent, jpegQuality, numberOfGifLoops, onCtrlCExit, preferLossless, serveUrl, server: reusedServer, logLevel, serializedResolvedPropsWithCustomSchema, offthreadVideoCacheSizeInBytes, colorSpace, repro, binariesDirectory, separateAudioTo, forSeamlessAacConcatenation, compositionStart, onBrowserDownload, onArtifact, metadata, hardwareAcceleration, chromeMode, offthreadVideoThreads, mediaCacheSizeInBytes, onLog, }) => {
56
57
  var _a, _b;
57
58
  const pixelFormat = (_a = userPixelFormat !== null && userPixelFormat !== void 0 ? userPixelFormat : compositionWithPossibleUnevenDimensions.defaultPixelFormat) !== null && _a !== void 0 ? _a : pixel_format_1.DEFAULT_PIXEL_FORMAT;
58
59
  if (repro) {
@@ -177,18 +178,7 @@ const internalRenderMediaRaw = ({ proResProfile, x264Preset, crf, composition: c
177
178
  if (onCtrlCExit && workingDir) {
178
179
  onCtrlCExit(`Delete ${workingDir}`, () => (0, delete_directory_1.deleteDirectory)(workingDir));
179
180
  }
180
- const { actualWidth: widthEvenDimensionsUndivided, actualHeight: heightEvenDimensionsUndivided, } = (0, validate_even_dimensions_with_codec_1.validateEvenDimensionsWithCodec)({
181
- codec,
182
- height: compositionWithPossibleUnevenDimensions.height,
183
- scale,
184
- width: compositionWithPossibleUnevenDimensions.width,
185
- wantsImageSequence: false,
186
- indent,
187
- logLevel,
188
- });
189
- const heightEvenDimensions = Math.round(heightEvenDimensionsUndivided / scale);
190
- const widthEvenDimensions = Math.round(widthEvenDimensionsUndivided / scale);
191
- const { actualWidth, actualHeight } = (0, validate_even_dimensions_with_codec_1.validateEvenDimensionsWithCodec)({
181
+ const { actualWidth: widthEvenDimensions, actualHeight: heightEvenDimensions } = (0, validate_even_dimensions_with_codec_1.validateEvenDimensionsWithCodec)({
192
182
  codec,
193
183
  height: compositionWithPossibleUnevenDimensions.height,
194
184
  scale,
@@ -197,6 +187,8 @@ const internalRenderMediaRaw = ({ proResProfile, x264Preset, crf, composition: c
197
187
  indent,
198
188
  logLevel,
199
189
  });
190
+ const actualWidth = widthEvenDimensions * scale;
191
+ const actualHeight = heightEvenDimensions * scale;
200
192
  const composition = {
201
193
  ...compositionWithPossibleUnevenDimensions,
202
194
  height: heightEvenDimensions,
@@ -318,10 +310,14 @@ const internalRenderMediaRaw = ({ proResProfile, x264Preset, crf, composition: c
318
310
  })
319
311
  .then(({ server, cleanupServer }) => {
320
312
  cleanupServerFn = cleanupServer;
313
+ let timeOfLastFrame = Date.now();
321
314
  const renderFramesProc = (0, render_frames_1.internalRenderFrames)({
322
315
  composition,
323
- onFrameUpdate: (frame, frameIndex, timeToRenderInMilliseconds) => {
316
+ onFrameUpdate: (frame, frameIndex) => {
324
317
  renderedFrames = frame;
318
+ const now = Date.now();
319
+ const timeToRenderInMilliseconds = now - timeOfLastFrame;
320
+ timeOfLastFrame = now;
325
321
  // Track recent frame timings (at most 50)
326
322
  recentFrameTimings.push(timeToRenderInMilliseconds);
327
323
  if (recentFrameTimings.length > MAX_RECENT_FRAME_TIMINGS) {
@@ -395,6 +391,7 @@ const internalRenderMediaRaw = ({ proResProfile, x264Preset, crf, composition: c
395
391
  chromeMode,
396
392
  imageSequencePattern: null,
397
393
  mediaCacheSizeInBytes,
394
+ onLog,
398
395
  });
399
396
  return renderFramesProc;
400
397
  })
@@ -618,6 +615,7 @@ const renderMedia = ({ proResProfile, x264Preset, crf, composition, inputProps,
618
615
  hardwareAcceleration: hardwareAcceleration !== null && hardwareAcceleration !== void 0 ? hardwareAcceleration : 'disable',
619
616
  chromeMode: chromeMode !== null && chromeMode !== void 0 ? chromeMode : 'headless-shell',
620
617
  mediaCacheSizeInBytes: mediaCacheSizeInBytes !== null && mediaCacheSizeInBytes !== void 0 ? mediaCacheSizeInBytes : null,
618
+ onLog: default_on_log_1.defaultOnLog,
621
619
  });
622
620
  };
623
621
  exports.renderMedia = renderMedia;
@@ -3,6 +3,7 @@ import type { RenderMediaOnDownload } from './assets/download-and-map-assets-to-
3
3
  import type { BrowserExecutable } from './browser-executable';
4
4
  import type { BrowserLog } from './browser-log';
5
5
  import type { HeadlessBrowser } from './browser/Browser';
6
+ import type { OnLog } from './browser/BrowserPage';
6
7
  import type { StillImageFormat } from './image-format';
7
8
  import type { CancelSignal } from './make-cancel-signal';
8
9
  import type { ChromiumOptions } from './open-browser';
@@ -32,6 +33,7 @@ type InternalRenderStillOptions = {
32
33
  serveUrl: string;
33
34
  port: number | null;
34
35
  onArtifact: OnArtifact | null;
36
+ onLog: OnLog;
35
37
  } & ToOptions<typeof optionsMap.renderStill>;
36
38
  export type RenderStillOptions = {
37
39
  port?: number | null;
@@ -45,6 +45,7 @@ const TimeoutSettings_1 = require("./browser/TimeoutSettings");
45
45
  const browser_download_progress_bar_1 = require("./browser/browser-download-progress-bar");
46
46
  const collect_assets_1 = require("./collect-assets");
47
47
  const convert_to_positive_frame_index_1 = require("./convert-to-positive-frame-index");
48
+ const default_on_log_1 = require("./default-on-log");
48
49
  const ensure_output_directory_1 = require("./ensure-output-directory");
49
50
  const handle_javascript_exception_1 = require("./error-handling/handle-javascript-exception");
50
51
  const filter_asset_types_1 = require("./filter-asset-types");
@@ -65,7 +66,7 @@ const validate_1 = require("./validate");
65
66
  const validate_puppeteer_timeout_1 = require("./validate-puppeteer-timeout");
66
67
  const validate_scale_1 = require("./validate-scale");
67
68
  const wrap_with_error_handling_1 = require("./wrap-with-error-handling");
68
- const innerRenderStill = async ({ composition, imageFormat = image_format_1.DEFAULT_STILL_IMAGE_FORMAT, serveUrl, puppeteerInstance, onError, serializedInputPropsWithCustomSchema, envVariables, output, frame = 0, overwrite, browserExecutable, timeoutInMilliseconds, chromiumOptions, scale, proxyPort, cancelSignal, jpegQuality, onBrowserLog, sourceMapGetter, logLevel, indent, serializedResolvedPropsWithCustomSchema, onBrowserDownload, onArtifact, chromeMode, mediaCacheSizeInBytes, }) => {
69
+ const innerRenderStill = async ({ composition, imageFormat = image_format_1.DEFAULT_STILL_IMAGE_FORMAT, serveUrl, puppeteerInstance, onError, serializedInputPropsWithCustomSchema, envVariables, output, frame = 0, overwrite, browserExecutable, timeoutInMilliseconds, chromiumOptions, scale, proxyPort, cancelSignal, jpegQuality, onBrowserLog, sourceMapGetter, logLevel, indent, serializedResolvedPropsWithCustomSchema, onBrowserDownload, onArtifact, chromeMode, mediaCacheSizeInBytes, onLog, }) => {
69
70
  (0, validate_1.validateDimension)(composition.height, 'height', 'in the `config` object passed to `renderStill()`');
70
71
  (0, validate_1.validateDimension)(composition.width, 'width', 'in the `config` object passed to `renderStill()`');
71
72
  (0, validate_1.validateFps)(composition.fps, 'in the `config` object of `renderStill()`', false);
@@ -117,6 +118,7 @@ const innerRenderStill = async ({ composition, imageFormat = image_format_1.DEFA
117
118
  indent,
118
119
  pageIndex: 0,
119
120
  onBrowserLog,
121
+ onLog,
120
122
  });
121
123
  await page.setViewport({
122
124
  width: composition.width,
@@ -348,6 +350,7 @@ const renderStill = (options) => {
348
350
  chromeMode: chromeMode !== null && chromeMode !== void 0 ? chromeMode : 'headless-shell',
349
351
  offthreadVideoThreads: offthreadVideoThreads !== null && offthreadVideoThreads !== void 0 ? offthreadVideoThreads : null,
350
352
  mediaCacheSizeInBytes: mediaCacheSizeInBytes !== null && mediaCacheSizeInBytes !== void 0 ? mediaCacheSizeInBytes : null,
353
+ onLog: default_on_log_1.defaultOnLog,
351
354
  });
352
355
  };
353
356
  exports.renderStill = renderStill;
@@ -2,6 +2,7 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.selectComposition = exports.internalSelectComposition = exports.internalSelectCompositionRaw = void 0;
4
4
  const no_react_1 = require("remotion/no-react");
5
+ const _1 = require(".");
5
6
  const TimeoutSettings_1 = require("./browser/TimeoutSettings");
6
7
  const browser_download_progress_bar_1 = require("./browser/browser-download-progress-bar");
7
8
  const handle_javascript_exception_1 = require("./error-handling/handle-javascript-exception");
@@ -107,6 +108,7 @@ const internalSelectCompositionRaw = async (options) => {
107
108
  chromeMode,
108
109
  pageIndex: 0,
109
110
  onBrowserLog,
111
+ onLog: _1.RenderInternals.defaultOnLog,
110
112
  }),
111
113
  (0, prepare_server_1.makeOrReuseServer)(options.server, {
112
114
  webpackConfigOrServeUrl: serveUrlOrWebpackUrl,
@@ -1,4 +1,5 @@
1
1
  import type { BrowserExecutable } from './browser-executable';
2
+ import type { OnLog } from './browser/BrowserPage';
2
3
  import type { LogLevel } from './log-level';
3
4
  import type { ChromiumOptions } from './open-browser';
4
5
  import type { ChromeMode } from './options/chrome-mode';
@@ -7,7 +8,7 @@ type Item = {
7
8
  feature: string;
8
9
  status: string;
9
10
  };
10
- export declare const getChromiumGpuInformation: ({ browserExecutable, indent, logLevel, chromiumOptions, timeoutInMilliseconds, onBrowserDownload, chromeMode, }: {
11
+ export declare const getChromiumGpuInformation: ({ browserExecutable, indent, logLevel, chromiumOptions, timeoutInMilliseconds, onBrowserDownload, chromeMode, onLog, }: {
11
12
  browserExecutable: BrowserExecutable;
12
13
  indent: boolean;
13
14
  logLevel: LogLevel;
@@ -15,5 +16,6 @@ export declare const getChromiumGpuInformation: ({ browserExecutable, indent, lo
15
16
  timeoutInMilliseconds: number;
16
17
  onBrowserDownload: OnBrowserDownload;
17
18
  chromeMode: ChromeMode;
19
+ onLog: OnLog;
18
20
  }) => Promise<Item[]>;
19
21
  export {};
package/dist/test-gpu.js CHANGED
@@ -3,7 +3,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.getChromiumGpuInformation = void 0;
4
4
  const get_browser_instance_1 = require("./get-browser-instance");
5
5
  const puppeteer_evaluate_1 = require("./puppeteer-evaluate");
6
- const getChromiumGpuInformation = async ({ browserExecutable, indent, logLevel, chromiumOptions, timeoutInMilliseconds, onBrowserDownload, chromeMode, }) => {
6
+ const getChromiumGpuInformation = async ({ browserExecutable, indent, logLevel, chromiumOptions, timeoutInMilliseconds, onBrowserDownload, chromeMode, onLog, }) => {
7
7
  const { page, cleanupPage: cleanup } = await (0, get_browser_instance_1.getPageAndCleanupFn)({
8
8
  passedInInstance: undefined,
9
9
  browserExecutable,
@@ -15,6 +15,7 @@ const getChromiumGpuInformation = async ({ browserExecutable, indent, logLevel,
15
15
  chromeMode,
16
16
  pageIndex: 0,
17
17
  onBrowserLog: null,
18
+ onLog,
18
19
  });
19
20
  await page.goto({ url: 'chrome://gpu', timeout: 12000 });
20
21
  const { value } = await (0, puppeteer_evaluate_1.puppeteerEvaluateWithCatch)({