@remotion/renderer 4.0.55 → 4.0.57

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 (43) hide show
  1. package/dist/assets/download-file.js +1 -1
  2. package/dist/browser/BrowserFetcher.js +1 -1
  3. package/dist/browser/BrowserPage.js +3 -3
  4. package/dist/browser/BrowserRunner.js +2 -2
  5. package/dist/browser/FrameManager.d.ts +2 -1
  6. package/dist/browser/FrameManager.js +2 -2
  7. package/dist/browser/NetworkManager.d.ts +2 -1
  8. package/dist/browser/NetworkManager.js +8 -4
  9. package/dist/client.d.ts +38 -38
  10. package/dist/combine-videos.js +4 -4
  11. package/dist/compositor/compositor.js +1 -1
  12. package/dist/compositor/get-executable-path.js +2 -2
  13. package/dist/get-available-memory.d.ts +2 -1
  14. package/dist/get-available-memory.js +3 -3
  15. package/dist/get-compositions.js +7 -1
  16. package/dist/get-extension-from-codec.d.ts +2 -2
  17. package/dist/get-local-browser-executable.js +1 -1
  18. package/dist/get-video-threads-flag.d.ts +2 -1
  19. package/dist/get-video-threads-flag.js +2 -2
  20. package/dist/guess-extension-for-media.d.ts +1 -1
  21. package/dist/index.d.ts +10 -25
  22. package/dist/logger.d.ts +3 -5
  23. package/dist/logger.js +2 -10
  24. package/dist/offthread-video-server.js +1 -1
  25. package/dist/open-browser.js +1 -1
  26. package/dist/options/color-space.d.ts +1 -1
  27. package/dist/options/gl.d.ts +1 -1
  28. package/dist/options/index.d.ts +2 -2
  29. package/dist/prepare-server.js +2 -2
  30. package/dist/prespawn-ffmpeg.js +2 -2
  31. package/dist/prestitcher-memory-usage.d.ts +3 -1
  32. package/dist/prestitcher-memory-usage.js +2 -2
  33. package/dist/render-frames.js +3 -1
  34. package/dist/render-media.js +9 -8
  35. package/dist/render-still.js +2 -0
  36. package/dist/seek-to-frame.d.ts +7 -2
  37. package/dist/seek-to-frame.js +12 -6
  38. package/dist/select-composition.js +9 -3
  39. package/dist/set-props-and-env.js +2 -2
  40. package/dist/stitch-frames-to-video.d.ts +0 -1
  41. package/dist/stitch-frames-to-video.js +8 -8
  42. package/dist/validate-output-filename.d.ts +1 -1
  43. package/package.json +9 -9
@@ -100,7 +100,7 @@ const downloadFile = async (options, retries = 2, attempt = 1) => {
100
100
  if (retries === 0) {
101
101
  throw err;
102
102
  }
103
- logger_1.Log.warnAdvanced({ indent: options.indent, logLevel: options.logLevel }, `Downloading ${options.url} failed (will retry): ${message}`);
103
+ logger_1.Log.warn({ indent: options.indent, logLevel: options.logLevel }, `Downloading ${options.url} failed (will retry): ${message}`);
104
104
  const backoffInSeconds = (attempt + 1) ** 2;
105
105
  await new Promise((resolve) => {
106
106
  setTimeout(() => resolve(), backoffInSeconds * 1000);
@@ -120,7 +120,7 @@ const downloadBrowser = async (options) => {
120
120
  onProgress: (progress) => {
121
121
  if (progress.downloaded > lastProgress + 10000000) {
122
122
  lastProgress = progress.downloaded;
123
- logger_1.Log.info(`Downloading Thorium - ${toMegabytes(progress.downloaded)}/${toMegabytes(progress.totalSize)}`);
123
+ logger_1.Log.infoAdvanced({ indent: options.indent, logLevel: options.logLevel }, `Downloading Thorium - ${toMegabytes(progress.downloaded)}/${toMegabytes(progress.totalSize)}`);
124
124
  }
125
125
  },
126
126
  indent: options.indent,
@@ -74,7 +74,7 @@ class Page extends EventEmitter_1.EventEmitter {
74
74
  this.sourcemapContext = null;
75
75
  __classPrivateFieldSet(this, _Page_client, client, "f");
76
76
  __classPrivateFieldSet(this, _Page_target, target, "f");
77
- __classPrivateFieldSet(this, _Page_frameManager, new FrameManager_1.FrameManager(client, this), "f");
77
+ __classPrivateFieldSet(this, _Page_frameManager, new FrameManager_1.FrameManager(client, this, indent, logLevel), "f");
78
78
  this.screenshotTaskQueue = new TaskQueue_1.TaskQueue();
79
79
  this.browser = browser;
80
80
  this.id = String(Math.random());
@@ -143,7 +143,7 @@ class Page extends EventEmitter_1.EventEmitter {
143
143
  }, log.previewString);
144
144
  }
145
145
  else {
146
- logger_1.Log.verboseAdvanced({
146
+ logger_1.Log.verbose({
147
147
  logLevel,
148
148
  tag,
149
149
  indent,
@@ -159,7 +159,7 @@ class Page extends EventEmitter_1.EventEmitter {
159
159
  }
160
160
  }
161
161
  else {
162
- logger_1.Log.verboseAdvanced({ logLevel, tag: `console.${log.type}`, indent }, log.text);
162
+ logger_1.Log.verbose({ logLevel, tag: `console.${log.type}`, indent }, log.text);
163
163
  }
164
164
  });
165
165
  }
@@ -104,7 +104,7 @@ class BrowserRunner {
104
104
  return;
105
105
  }
106
106
  const { output, tag } = formatted;
107
- logger_1.Log.verboseAdvanced({ indent: options.indent, logLevel: options.logLevel, tag }, output);
107
+ logger_1.Log.verbose({ indent: options.indent, logLevel: options.logLevel, tag }, output);
108
108
  }
109
109
  });
110
110
  (_b = this.proc.stderr) === null || _b === void 0 ? void 0 : _b.on('data', (d) => {
@@ -115,7 +115,7 @@ class BrowserRunner {
115
115
  return;
116
116
  }
117
117
  const { output, tag } = formatted;
118
- logger_1.Log.verboseAdvanced({ indent: options.indent, logLevel: options.logLevel, tag }, output);
118
+ logger_1.Log.verbose({ indent: options.indent, logLevel: options.logLevel, tag }, output);
119
119
  }
120
120
  });
121
121
  }
@@ -13,6 +13,7 @@
13
13
  * See the License for the specific language governing permissions and
14
14
  * limitations under the License.
15
15
  */
16
+ import type { LogLevel } from '../log-level';
16
17
  import type { Page } from './BrowserPage';
17
18
  import type { CDPSession } from './Connection';
18
19
  import type { Frame as TFrame } from './devtools-types';
@@ -36,7 +37,7 @@ export declare const FrameManagerEmittedEvents: {
36
37
  export declare class FrameManager extends EventEmitter {
37
38
  #private;
38
39
  get _client(): CDPSession;
39
- constructor(client: CDPSession, page: Page);
40
+ constructor(client: CDPSession, page: Page, indent: boolean, logLevel: LogLevel);
40
41
  private setupEventListeners;
41
42
  initialize(client?: CDPSession): Promise<void>;
42
43
  networkManager(): NetworkManager;
@@ -51,7 +51,7 @@ class FrameManager extends EventEmitter_1.EventEmitter {
51
51
  get _client() {
52
52
  return __classPrivateFieldGet(this, _FrameManager_client, "f");
53
53
  }
54
- constructor(client, page) {
54
+ constructor(client, page, indent, logLevel) {
55
55
  super();
56
56
  _FrameManager_instances.add(this);
57
57
  _FrameManager_page.set(this, void 0);
@@ -63,7 +63,7 @@ class FrameManager extends EventEmitter_1.EventEmitter {
63
63
  _FrameManager_client.set(this, void 0);
64
64
  __classPrivateFieldSet(this, _FrameManager_client, client, "f");
65
65
  __classPrivateFieldSet(this, _FrameManager_page, page, "f");
66
- __classPrivateFieldSet(this, _FrameManager_networkManager, new NetworkManager_1.NetworkManager(client, this), "f");
66
+ __classPrivateFieldSet(this, _FrameManager_networkManager, new NetworkManager_1.NetworkManager(client, this, indent, logLevel), "f");
67
67
  this.setupEventListeners(__classPrivateFieldGet(this, _FrameManager_client, "f"));
68
68
  }
69
69
  setupEventListeners(session) {
@@ -13,6 +13,7 @@
13
13
  * See the License for the specific language governing permissions and
14
14
  * limitations under the License.
15
15
  */
16
+ import type { LogLevel } from '../log-level';
16
17
  import type { Commands } from './devtools-commands';
17
18
  import { EventEmitter } from './EventEmitter';
18
19
  import type { Frame } from './FrameManager';
@@ -30,7 +31,7 @@ interface FrameManager {
30
31
  }
31
32
  export declare class NetworkManager extends EventEmitter {
32
33
  #private;
33
- constructor(client: CDPSession, frameManager: FrameManager);
34
+ constructor(client: CDPSession, frameManager: FrameManager, indent: boolean, logLevel: LogLevel);
34
35
  initialize(): Promise<void>;
35
36
  numRequestsInProgress(): number;
36
37
  }
@@ -25,7 +25,7 @@ var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (
25
25
  if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot read private member from an object whose class did not declare it");
26
26
  return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver);
27
27
  };
28
- var _NetworkManager_instances, _NetworkManager_client, _NetworkManager_frameManager, _NetworkManager_networkEventManager, _NetworkManager_onRequestWillBeSent, _NetworkManager_onRequestPaused, _NetworkManager_patchRequestEventHeaders, _NetworkManager_onRequest, _NetworkManager_onRequestServedFromCache, _NetworkManager_handleRequestRedirect, _NetworkManager_emitResponseEvent, _NetworkManager_onResponseReceived, _NetworkManager_onResponseReceivedExtraInfo, _NetworkManager_forgetRequest, _NetworkManager_onLoadingFinished, _NetworkManager_emitLoadingFinished, _NetworkManager_onLoadingFailed, _NetworkManager_emitLoadingFailed;
28
+ var _NetworkManager_instances, _NetworkManager_client, _NetworkManager_frameManager, _NetworkManager_networkEventManager, _NetworkManager_indent, _NetworkManager_logLevel, _NetworkManager_onRequestWillBeSent, _NetworkManager_onRequestPaused, _NetworkManager_patchRequestEventHeaders, _NetworkManager_onRequest, _NetworkManager_onRequestServedFromCache, _NetworkManager_handleRequestRedirect, _NetworkManager_emitResponseEvent, _NetworkManager_onResponseReceived, _NetworkManager_onResponseReceivedExtraInfo, _NetworkManager_forgetRequest, _NetworkManager_onLoadingFinished, _NetworkManager_emitLoadingFinished, _NetworkManager_onLoadingFailed, _NetworkManager_emitLoadingFailed;
29
29
  Object.defineProperty(exports, "__esModule", { value: true });
30
30
  exports.NetworkManager = exports.NetworkManagerEmittedEvents = void 0;
31
31
  const logger_1 = require("../logger");
@@ -37,14 +37,18 @@ exports.NetworkManagerEmittedEvents = {
37
37
  Request: Symbol('NetworkManager.Request'),
38
38
  };
39
39
  class NetworkManager extends EventEmitter_1.EventEmitter {
40
- constructor(client, frameManager) {
40
+ constructor(client, frameManager, indent, logLevel) {
41
41
  super();
42
42
  _NetworkManager_instances.add(this);
43
43
  _NetworkManager_client.set(this, void 0);
44
44
  _NetworkManager_frameManager.set(this, void 0);
45
45
  _NetworkManager_networkEventManager.set(this, new NetworkEventManager_1.NetworkEventManager());
46
+ _NetworkManager_indent.set(this, void 0);
47
+ _NetworkManager_logLevel.set(this, void 0);
46
48
  __classPrivateFieldSet(this, _NetworkManager_client, client, "f");
47
49
  __classPrivateFieldSet(this, _NetworkManager_frameManager, frameManager, "f");
50
+ __classPrivateFieldSet(this, _NetworkManager_indent, indent, "f");
51
+ __classPrivateFieldSet(this, _NetworkManager_logLevel, logLevel, "f");
48
52
  __classPrivateFieldGet(this, _NetworkManager_client, "f").on('Fetch.requestPaused', __classPrivateFieldGet(this, _NetworkManager_instances, "m", _NetworkManager_onRequestPaused).bind(this));
49
53
  __classPrivateFieldGet(this, _NetworkManager_client, "f").on('Network.requestWillBeSent', __classPrivateFieldGet(this, _NetworkManager_instances, "m", _NetworkManager_onRequestWillBeSent).bind(this));
50
54
  __classPrivateFieldGet(this, _NetworkManager_client, "f").on('Network.requestServedFromCache', __classPrivateFieldGet(this, _NetworkManager_instances, "m", _NetworkManager_onRequestServedFromCache).bind(this));
@@ -61,7 +65,7 @@ class NetworkManager extends EventEmitter_1.EventEmitter {
61
65
  }
62
66
  }
63
67
  exports.NetworkManager = NetworkManager;
64
- _NetworkManager_client = new WeakMap(), _NetworkManager_frameManager = new WeakMap(), _NetworkManager_networkEventManager = new WeakMap(), _NetworkManager_instances = new WeakSet(), _NetworkManager_onRequestWillBeSent = function _NetworkManager_onRequestWillBeSent(event) {
68
+ _NetworkManager_client = new WeakMap(), _NetworkManager_frameManager = new WeakMap(), _NetworkManager_networkEventManager = new WeakMap(), _NetworkManager_indent = new WeakMap(), _NetworkManager_logLevel = new WeakMap(), _NetworkManager_instances = new WeakSet(), _NetworkManager_onRequestWillBeSent = function _NetworkManager_onRequestWillBeSent(event) {
65
69
  __classPrivateFieldGet(this, _NetworkManager_instances, "m", _NetworkManager_onRequest).call(this, event, undefined);
66
70
  }, _NetworkManager_onRequestPaused = function _NetworkManager_onRequestPaused(event) {
67
71
  const { networkId: networkRequestId, requestId: fetchRequestId } = event;
@@ -229,7 +233,7 @@ _NetworkManager_client = new WeakMap(), _NetworkManager_frameManager = new WeakM
229
233
  return;
230
234
  }
231
235
  if (!event.canceled) {
232
- logger_1.Log.warn(`Browser failed to load ${request._url}: ${event.errorText}`);
236
+ logger_1.Log.warn({ indent: __classPrivateFieldGet(this, _NetworkManager_indent, "f"), logLevel: __classPrivateFieldGet(this, _NetworkManager_logLevel, "f") }, `Browser failed to load ${request._url}: ${event.errorText}`);
233
237
  }
234
238
  __classPrivateFieldGet(this, _NetworkManager_instances, "m", _NetworkManager_forgetRequest).call(this, request, true);
235
239
  };
package/dist/client.d.ts CHANGED
@@ -1,11 +1,11 @@
1
1
  /// <reference types="react" />
2
2
  export declare const BrowserSafeApis: {
3
- getFileExtensionFromCodec: <T extends "h264" | "h265" | "vp8" | "vp9" | "mp3" | "aac" | "wav" | "prores" | "h264-mkv" | "gif">(codec: T, audioCodec: "mp3" | "aac" | "pcm-16" | "opus" | null) => import("./file-extensions").FileExtension;
3
+ getFileExtensionFromCodec: <T extends "h264" | "h265" | "vp8" | "vp9" | "prores" | "aac" | "mp3" | "wav" | "h264-mkv" | "gif">(codec: T, audioCodec: "opus" | "aac" | "mp3" | "pcm-16" | null) => import("./file-extensions").FileExtension;
4
4
  validCodecs: readonly ["h264", "h265", "vp8", "vp9", "mp3", "aac", "wav", "prores", "h264-mkv", "gif"];
5
5
  validAudioCodecs: readonly ["pcm-16", "aac", "mp3", "opus"];
6
- getDefaultCrfForCodec: (codec: "h264" | "h265" | "vp8" | "vp9" | "mp3" | "aac" | "wav" | "prores" | "h264-mkv" | "gif") => number;
7
- getValidCrfRanges: (codec: "h264" | "h265" | "vp8" | "vp9" | "mp3" | "aac" | "wav" | "prores" | "h264-mkv" | "gif") => [number, number];
8
- isAudioCodec: (codec: "h264" | "h265" | "vp8" | "vp9" | "mp3" | "aac" | "wav" | "prores" | "h264-mkv" | "gif" | null | undefined) => boolean;
6
+ getDefaultCrfForCodec: (codec: "h264" | "h265" | "vp8" | "vp9" | "prores" | "aac" | "mp3" | "wav" | "h264-mkv" | "gif") => number;
7
+ getValidCrfRanges: (codec: "h264" | "h265" | "vp8" | "vp9" | "prores" | "aac" | "mp3" | "wav" | "h264-mkv" | "gif") => [number, number];
8
+ isAudioCodec: (codec: "h264" | "h265" | "vp8" | "vp9" | "prores" | "aac" | "mp3" | "wav" | "h264-mkv" | "gif" | null | undefined) => boolean;
9
9
  proResProfileOptions: readonly ["4444-xq", "4444", "hq", "standard", "light", "proxy"];
10
10
  x264PresetOptions: readonly ["ultrafast", "superfast", "veryfast", "faster", "fast", "medium", "slow", "slower", "veryslow", "placebo"];
11
11
  validPixelFormats: readonly ["yuv420p", "yuva420p", "yuv422p", "yuv444p", "yuv420p10le", "yuv422p10le", "yuv444p10le", "yuva444p10le"];
@@ -26,11 +26,11 @@ export declare const BrowserSafeApis: {
26
26
  h264: {
27
27
  default: import("./file-extensions").FileExtension;
28
28
  forAudioCodec: {
29
- mp3: {
29
+ aac: {
30
30
  possible: import("./file-extensions").FileExtension[];
31
31
  default: import("./file-extensions").FileExtension;
32
32
  };
33
- aac: {
33
+ mp3: {
34
34
  possible: import("./file-extensions").FileExtension[];
35
35
  default: import("./file-extensions").FileExtension;
36
36
  };
@@ -56,11 +56,11 @@ export declare const BrowserSafeApis: {
56
56
  vp8: {
57
57
  default: import("./file-extensions").FileExtension;
58
58
  forAudioCodec: {
59
- "pcm-16": {
59
+ opus: {
60
60
  possible: import("./file-extensions").FileExtension[];
61
61
  default: import("./file-extensions").FileExtension;
62
62
  };
63
- opus: {
63
+ "pcm-16": {
64
64
  possible: import("./file-extensions").FileExtension[];
65
65
  default: import("./file-extensions").FileExtension;
66
66
  };
@@ -69,20 +69,20 @@ export declare const BrowserSafeApis: {
69
69
  vp9: {
70
70
  default: import("./file-extensions").FileExtension;
71
71
  forAudioCodec: {
72
- "pcm-16": {
72
+ opus: {
73
73
  possible: import("./file-extensions").FileExtension[];
74
74
  default: import("./file-extensions").FileExtension;
75
75
  };
76
- opus: {
76
+ "pcm-16": {
77
77
  possible: import("./file-extensions").FileExtension[];
78
78
  default: import("./file-extensions").FileExtension;
79
79
  };
80
80
  };
81
81
  };
82
- mp3: {
82
+ prores: {
83
83
  default: import("./file-extensions").FileExtension;
84
84
  forAudioCodec: {
85
- mp3: {
85
+ aac: {
86
86
  possible: import("./file-extensions").FileExtension[];
87
87
  default: import("./file-extensions").FileExtension;
88
88
  };
@@ -105,22 +105,22 @@ export declare const BrowserSafeApis: {
105
105
  };
106
106
  };
107
107
  };
108
- wav: {
108
+ mp3: {
109
109
  default: import("./file-extensions").FileExtension;
110
110
  forAudioCodec: {
111
+ mp3: {
112
+ possible: import("./file-extensions").FileExtension[];
113
+ default: import("./file-extensions").FileExtension;
114
+ };
111
115
  "pcm-16": {
112
116
  possible: import("./file-extensions").FileExtension[];
113
117
  default: import("./file-extensions").FileExtension;
114
118
  };
115
119
  };
116
120
  };
117
- prores: {
121
+ wav: {
118
122
  default: import("./file-extensions").FileExtension;
119
123
  forAudioCodec: {
120
- aac: {
121
- possible: import("./file-extensions").FileExtension[];
122
- default: import("./file-extensions").FileExtension;
123
- };
124
124
  "pcm-16": {
125
125
  possible: import("./file-extensions").FileExtension[];
126
126
  default: import("./file-extensions").FileExtension;
@@ -147,37 +147,37 @@ export declare const BrowserSafeApis: {
147
147
  };
148
148
  defaultAudioCodecs: {
149
149
  h264: {
150
- compressed: "mp3" | "aac" | "pcm-16" | null;
151
- lossless: "mp3" | "aac" | "pcm-16" | null;
150
+ compressed: "aac" | "mp3" | "pcm-16" | null;
151
+ lossless: "aac" | "mp3" | "pcm-16" | null;
152
152
  };
153
153
  h265: {
154
154
  compressed: "aac" | "pcm-16" | null;
155
155
  lossless: "aac" | "pcm-16" | null;
156
156
  };
157
157
  vp8: {
158
- compressed: "pcm-16" | "opus" | null;
159
- lossless: "pcm-16" | "opus" | null;
158
+ compressed: "opus" | "pcm-16" | null;
159
+ lossless: "opus" | "pcm-16" | null;
160
160
  };
161
161
  vp9: {
162
- compressed: "pcm-16" | "opus" | null;
163
- lossless: "pcm-16" | "opus" | null;
162
+ compressed: "opus" | "pcm-16" | null;
163
+ lossless: "opus" | "pcm-16" | null;
164
164
  };
165
- mp3: {
166
- compressed: "mp3" | "pcm-16" | null;
167
- lossless: "mp3" | "pcm-16" | null;
165
+ prores: {
166
+ compressed: "aac" | "pcm-16" | null;
167
+ lossless: "aac" | "pcm-16" | null;
168
168
  };
169
169
  aac: {
170
170
  compressed: "aac" | "pcm-16" | null;
171
171
  lossless: "aac" | "pcm-16" | null;
172
172
  };
173
+ mp3: {
174
+ compressed: "mp3" | "pcm-16" | null;
175
+ lossless: "mp3" | "pcm-16" | null;
176
+ };
173
177
  wav: {
174
178
  compressed: "pcm-16" | null;
175
179
  lossless: "pcm-16" | null;
176
180
  };
177
- prores: {
178
- compressed: "aac" | "pcm-16" | null;
179
- lossless: "aac" | "pcm-16" | null;
180
- };
181
181
  "h264-mkv": {
182
182
  compressed: "mp3" | "pcm-16" | null;
183
183
  lossless: "mp3" | "pcm-16" | null;
@@ -187,10 +187,10 @@ export declare const BrowserSafeApis: {
187
187
  lossless: null;
188
188
  };
189
189
  };
190
- defaultCodecsForFileExtension: Record<import("./file-extensions").FileExtension, "h264" | "h265" | "vp8" | "vp9" | "mp3" | "aac" | "wav" | "prores" | "h264-mkv" | "gif">;
191
- validateOutputFilename: <T_1 extends "h264" | "h265" | "vp8" | "vp9" | "mp3" | "aac" | "wav" | "prores" | "h264-mkv" | "gif">({ codec, audioCodec, extension, preferLossless, }: {
190
+ defaultCodecsForFileExtension: Record<import("./file-extensions").FileExtension, "h264" | "h265" | "vp8" | "vp9" | "prores" | "aac" | "mp3" | "wav" | "h264-mkv" | "gif">;
191
+ validateOutputFilename: <T_1 extends "h264" | "h265" | "vp8" | "vp9" | "prores" | "aac" | "mp3" | "wav" | "h264-mkv" | "gif">({ codec, audioCodec, extension, preferLossless, }: {
192
192
  codec: T_1;
193
- audioCodec: "mp3" | "aac" | "pcm-16" | "opus" | null;
193
+ audioCodec: "opus" | "aac" | "mp3" | "pcm-16" | null;
194
194
  extension: string;
195
195
  preferLossless: boolean;
196
196
  }) => void;
@@ -281,7 +281,7 @@ export declare const BrowserSafeApis: {
281
281
  description: () => JSX.Element;
282
282
  docLink: string;
283
283
  ssrName: string;
284
- type: "default" | "bt709";
284
+ type: "bt709" | "default";
285
285
  };
286
286
  deleteAfterOption: {
287
287
  name: string;
@@ -311,7 +311,7 @@ export declare const BrowserSafeApis: {
311
311
  cliFlag: string;
312
312
  docLink: string;
313
313
  name: string;
314
- type: "angle" | "swangle" | "egl" | "swiftshader" | "vulkan" | "angle-egl";
314
+ type: "swangle" | "angle" | "egl" | "swiftshader" | "vulkan" | "angle-egl";
315
315
  ssrName: string;
316
316
  description: () => JSX.Element;
317
317
  };
@@ -399,6 +399,6 @@ export declare const BrowserSafeApis: {
399
399
  type: number | null;
400
400
  }];
401
401
  };
402
- codecSupportsCrf: (codec: "h264" | "h265" | "vp8" | "vp9" | "mp3" | "aac" | "wav" | "prores" | "h264-mkv" | "gif") => boolean;
403
- codecSupportsVideoBitrate: (codec: "h264" | "h265" | "vp8" | "vp9" | "mp3" | "aac" | "wav" | "prores" | "h264-mkv" | "gif") => boolean;
402
+ codecSupportsCrf: (codec: "h264" | "h265" | "vp8" | "vp9" | "prores" | "aac" | "mp3" | "wav" | "h264-mkv" | "gif") => boolean;
403
+ codecSupportsVideoBitrate: (codec: "h264" | "h265" | "vp8" | "vp9" | "prores" | "aac" | "mp3" | "wav" | "h264-mkv" | "gif") => boolean;
404
404
  };
@@ -12,7 +12,7 @@ const parse_ffmpeg_progress_1 = require("./parse-ffmpeg-progress");
12
12
  const truthy_1 = require("./truthy");
13
13
  const combineVideos = async (options) => {
14
14
  var _a;
15
- const { files, filelistDir, output, onProgress, numberOfFrames, codec, fps, numberOfGifLoops, audioCodec, audioBitrate, } = options;
15
+ const { files, filelistDir, output, onProgress, numberOfFrames, codec, fps, numberOfGifLoops, audioCodec, audioBitrate, indent, logLevel, } = options;
16
16
  const fileList = files.map((p) => `file '${p}'`).join('\n');
17
17
  const fileListTxt = (0, node_path_1.join)(filelistDir, 'files.txt');
18
18
  (0, node_fs_1.writeFileSync)(fileListTxt, fileList);
@@ -47,17 +47,17 @@ const combineVideos = async (options) => {
47
47
  '-y',
48
48
  output,
49
49
  ].filter(truthy_1.truthy);
50
- logger_1.Log.verbose('Combining command: ', command);
50
+ logger_1.Log.verbose({ indent, logLevel }, 'Combining command: ', command);
51
51
  try {
52
52
  const task = (0, call_ffmpeg_1.callFf)('ffmpeg', command, options.indent, options.logLevel);
53
53
  (_a = task.stderr) === null || _a === void 0 ? void 0 : _a.on('data', (data) => {
54
54
  if (onProgress) {
55
55
  const parsed = (0, parse_ffmpeg_progress_1.parseFfmpegProgress)(data.toString('utf8'));
56
56
  if (parsed === undefined) {
57
- logger_1.Log.verbose(data.toString('utf8'));
57
+ logger_1.Log.verbose({ indent, logLevel }, data.toString('utf8'));
58
58
  }
59
59
  else {
60
- logger_1.Log.verbose(`Combined ${parsed} frames`);
60
+ logger_1.Log.verbose({ indent, logLevel }, `Combined ${parsed} frames`);
61
61
  onProgress(parsed);
62
62
  }
63
63
  }
@@ -32,7 +32,7 @@ const startCompositor = (type, payload, logLevel, indent) => {
32
32
  const waiters = new Map();
33
33
  const onMessage = (statusType, nonce, data) => {
34
34
  if (nonce === '0') {
35
- logger_1.Log.verboseAdvanced({ indent, logLevel, tag: 'compositor' }, data.toString('utf8'));
35
+ logger_1.Log.verbose({ indent, logLevel, tag: 'compositor' }, data.toString('utf8'));
36
36
  }
37
37
  if (waiters.has(nonce)) {
38
38
  if (statusType === 'error') {
@@ -6,9 +6,9 @@ const logger_1 = require("../logger");
6
6
  let warned = false;
7
7
  function isMusl({ indent, logLevel }) {
8
8
  // @ts-expect-error bun no types
9
- if (process.report && typeof Bun !== 'undefined') {
9
+ if (!process.report && typeof Bun !== 'undefined') {
10
10
  if (!warned) {
11
- logger_1.Log.warnAdvanced({ indent, logLevel }, 'Bun limitation: Could not determine if your Linux is using musl or glibc. Assuming glibc.');
11
+ logger_1.Log.warn({ indent, logLevel }, 'Bun limitation: Could not determine if your Linux is using musl or glibc. Assuming glibc.');
12
12
  }
13
13
  warned = true;
14
14
  return false;
@@ -1 +1,2 @@
1
- export declare const getAvailableMemory: () => number;
1
+ import type { LogLevel } from './log-level';
2
+ export declare const getAvailableMemory: (logLevel: LogLevel) => number;
@@ -32,14 +32,14 @@ const getFreeMemoryFromProcMeminfo = () => {
32
32
  throw new Error(`Unknown unit: ${unit}`);
33
33
  }
34
34
  };
35
- const getAvailableMemory = () => {
35
+ const getAvailableMemory = (logLevel) => {
36
36
  if ((0, node_fs_1.existsSync)('/proc/meminfo')) {
37
37
  try {
38
38
  getFreeMemoryFromProcMeminfo();
39
39
  }
40
40
  catch (err) {
41
- logger_1.Log.warn('Tried to get available memory from /proc/meminfo but failed. Falling back to os.freemem(). Error:');
42
- logger_1.Log.warn(err);
41
+ logger_1.Log.warn({ indent: false, logLevel }, 'Tried to get available memory from /proc/meminfo but failed. Falling back to os.freemem(). Error:');
42
+ logger_1.Log.warn({ indent: false, logLevel }, err);
43
43
  }
44
44
  }
45
45
  return (0, node_os_1.freemem)();
@@ -48,7 +48,13 @@ const innerGetCompositions = async ({ envVariables, serializedInputPropsWithCust
48
48
  frame: null,
49
49
  args: [],
50
50
  });
51
- await (0, seek_to_frame_1.waitForReady)({ page, timeoutInMilliseconds, frame: null });
51
+ await (0, seek_to_frame_1.waitForReady)({
52
+ page,
53
+ timeoutInMilliseconds,
54
+ frame: null,
55
+ indent,
56
+ logLevel,
57
+ });
52
58
  const { value: result } = await (0, puppeteer_evaluate_1.puppeteerEvaluateWithCatch)({
53
59
  pageFunction: () => {
54
60
  return window.getStaticCompositions();
@@ -1,6 +1,6 @@
1
1
  import type { AudioCodec } from './audio-codec';
2
2
  import type { Codec } from './codec';
3
3
  import type { FileExtension } from './file-extensions';
4
- export declare const getFileExtensionFromCodec: <T extends "h264" | "h265" | "vp8" | "vp9" | "mp3" | "aac" | "wav" | "prores" | "h264-mkv" | "gif">(codec: T, audioCodec: AudioCodec | null) => FileExtension;
5
- export declare const makeFileExtensionMap: () => Record<string, ("h264" | "h265" | "vp8" | "vp9" | "mp3" | "aac" | "wav" | "prores" | "h264-mkv" | "gif")[]>;
4
+ export declare const getFileExtensionFromCodec: <T extends "h264" | "h265" | "vp8" | "vp9" | "prores" | "aac" | "mp3" | "wav" | "h264-mkv" | "gif">(codec: T, audioCodec: AudioCodec | null) => FileExtension;
5
+ export declare const makeFileExtensionMap: () => Record<string, ("h264" | "h265" | "vp8" | "vp9" | "prores" | "aac" | "mp3" | "wav" | "h264-mkv" | "gif")[]>;
6
6
  export declare const defaultCodecsForFileExtension: Record<FileExtension, Codec>;
@@ -71,7 +71,7 @@ const getBrowserStatus = (browserExecutablePath) => {
71
71
  const ensureLocalBrowser = async ({ indent, logLevel, preferredBrowserExecutable, }) => {
72
72
  const status = getBrowserStatus(preferredBrowserExecutable);
73
73
  if (status.type === 'no-browser') {
74
- logger_1.Log.info('No local browser could be found. Downloading Thorium https://www.remotion.dev/docs/miscellaneous/thorium-browser');
74
+ logger_1.Log.infoAdvanced({ indent, logLevel }, 'No local browser could be found. Downloading Thorium https://www.remotion.dev/docs/miscellaneous/thorium-browser');
75
75
  await (0, BrowserFetcher_1.downloadBrowser)({ indent, logLevel });
76
76
  }
77
77
  };
@@ -1 +1,2 @@
1
- export declare const getIdealVideoThreadsFlag: () => number;
1
+ import type { LogLevel } from './log-level';
2
+ export declare const getIdealVideoThreadsFlag: (logLevel: LogLevel) => number;
@@ -5,8 +5,8 @@ const get_available_memory_1 = require("./get-available-memory");
5
5
  const get_cpu_count_1 = require("./get-cpu-count");
6
6
  const MEMORY_USAGE_PER_THREAD = 400000000; // 400MB
7
7
  const RESERVED_MEMORY = 2000000000;
8
- const getIdealVideoThreadsFlag = () => {
9
- const freeMemory = (0, get_available_memory_1.getAvailableMemory)();
8
+ const getIdealVideoThreadsFlag = (logLevel) => {
9
+ const freeMemory = (0, get_available_memory_1.getAvailableMemory)(logLevel);
10
10
  const cpus = (0, get_cpu_count_1.getCpuCount)();
11
11
  const maxRecommendedBasedOnCpus = (cpus * 2) / 3;
12
12
  const maxRecommendedBasedOnMemory = (freeMemory - RESERVED_MEMORY) / MEMORY_USAGE_PER_THREAD;
@@ -3,4 +3,4 @@ export declare const guessExtensionForVideo: ({ src, indent, logLevel, }: {
3
3
  src: string;
4
4
  indent: boolean;
5
5
  logLevel: LogLevel;
6
- }) => Promise<"mp3" | "wav" | "mp4" | "webm">;
6
+ }) => Promise<"mp3" | "webm" | "wav" | "mp4">;
package/dist/index.d.ts CHANGED
@@ -1,5 +1,3 @@
1
- /// <reference types="node" />
2
- /// <reference types="react" />
3
1
  import execa from 'execa';
4
2
  import { HeadlessBrowser } from './browser/Browser';
5
3
  import { SymbolicateableError } from './error-handling/symbolicateable-error';
@@ -23,6 +21,7 @@ export { getSilentParts } from './get-silent-parts';
23
21
  export { getVideoMetadata, VideoMetadata } from './get-video-metadata';
24
22
  export { ImageFormat, StillImageFormat, validateSelectedPixelFormatAndImageFormatCombination, VideoImageFormat, } from './image-format';
25
23
  export type { LogLevel } from './log-level';
24
+ export { LogOptions } from './logger';
26
25
  export { CancelSignal, makeCancelSignal } from './make-cancel-signal';
27
26
  export { openBrowser } from './open-browser';
28
27
  export type { ChromiumOptions } from './open-browser';
@@ -136,8 +135,8 @@ export declare const RenderInternals: {
136
135
  validPixelFormats: readonly ["yuv420p", "yuva420p", "yuv422p", "yuv444p", "yuv420p10le", "yuv422p10le", "yuv444p10le", "yuva444p10le"];
137
136
  DEFAULT_BROWSER: "chrome";
138
137
  validateFrameRange: (frameRange: import("./frame-range").FrameRange | null) => void;
139
- DEFAULT_OPENGL_RENDERER: "angle" | "swangle" | "egl" | "swiftshader" | "vulkan" | "angle-egl" | null;
140
- validateOpenGlRenderer: (option: "angle" | "swangle" | "egl" | "swiftshader" | "vulkan" | "angle-egl" | null) => "angle" | "swangle" | "egl" | "swiftshader" | "vulkan" | "angle-egl" | null;
138
+ DEFAULT_OPENGL_RENDERER: "swangle" | "angle" | "egl" | "swiftshader" | "vulkan" | "angle-egl" | null;
139
+ validateOpenGlRenderer: (option: "swangle" | "angle" | "egl" | "swiftshader" | "vulkan" | "angle-egl" | null) => "swangle" | "angle" | "egl" | "swiftshader" | "vulkan" | "angle-egl" | null;
141
140
  validCodecs: readonly ["h264", "h265", "vp8", "vp9", "mp3", "aac", "wav", "prores", "h264-mkv", "gif"];
142
141
  DEFAULT_PIXEL_FORMAT: "yuv420p" | "yuva420p" | "yuv422p" | "yuv444p" | "yuv420p10le" | "yuv422p10le" | "yuv444p10le" | "yuva444p10le";
143
142
  validateJpegQuality: (q: number | undefined) => void;
@@ -328,8 +327,8 @@ export declare const RenderInternals: {
328
327
  };
329
328
  validStillImageFormats: readonly ["png", "jpeg", "pdf", "webp"];
330
329
  validVideoImageFormats: readonly ["png", "jpeg", "none"];
331
- DEFAULT_STILL_IMAGE_FORMAT: "jpeg" | "png" | "webp" | "pdf";
332
- DEFAULT_VIDEO_IMAGE_FORMAT: "jpeg" | "png" | "none";
330
+ DEFAULT_STILL_IMAGE_FORMAT: "png" | "jpeg" | "pdf" | "webp";
331
+ DEFAULT_VIDEO_IMAGE_FORMAT: "png" | "jpeg" | "none";
333
332
  DEFAULT_JPEG_QUALITY: number;
334
333
  chalk: {
335
334
  enabled: () => boolean;
@@ -382,28 +381,14 @@ export declare const RenderInternals: {
382
381
  bgWhiteBright: (str: string) => string;
383
382
  };
384
383
  Log: {
385
- verbose: (message?: any, ...optionalParams: any[]) => void;
386
- verboseAdvanced: (options: {
387
- indent: boolean;
388
- logLevel: "verbose" | "info" | "warn" | "error";
389
- } & {
384
+ verbose: (options: import("./logger").LogOptions & {
390
385
  tag?: string | undefined;
391
386
  }, message?: any, ...optionalParams: any[]) => void;
392
387
  info: (message?: any, ...optionalParams: any[]) => void;
393
- infoAdvanced: (options: {
394
- indent: boolean;
395
- logLevel: "verbose" | "info" | "warn" | "error";
396
- }, message?: any, ...optionalParams: any[]) => void;
397
- warn: (message?: any, ...optionalParams: any[]) => void;
398
- warnAdvanced: (options: {
399
- indent: boolean;
400
- logLevel: "verbose" | "info" | "warn" | "error";
401
- }, message?: any, ...optionalParams: any[]) => void;
388
+ infoAdvanced: (options: import("./logger").LogOptions, message?: any, ...optionalParams: any[]) => void;
389
+ warn: (options: import("./logger").LogOptions, message?: any, ...optionalParams: any[]) => void;
402
390
  error: (message?: any, ...optionalParams: any[]) => void;
403
- errorAdvanced: (options: {
404
- indent: boolean;
405
- logLevel: "verbose" | "info" | "warn" | "error";
406
- } & {
391
+ errorAdvanced: (options: import("./logger").LogOptions & {
407
392
  tag?: string | undefined;
408
393
  }, message?: any, ...optionalParams: any[]) => void;
409
394
  };
@@ -442,7 +427,7 @@ export declare const RenderInternals: {
442
427
  frame: number;
443
428
  serializedInputPropsWithCustomSchema: string;
444
429
  serializedResolvedPropsWithCustomSchema: string;
445
- imageFormat: "jpeg" | "png" | "webp" | "pdf";
430
+ imageFormat: "png" | "jpeg" | "pdf" | "webp";
446
431
  jpegQuality: number;
447
432
  puppeteerInstance: HeadlessBrowser | null;
448
433
  envVariables: Record<string, string>;
package/dist/logger.d.ts CHANGED
@@ -1,6 +1,6 @@
1
1
  import type { LogLevel } from './log-level';
2
2
  export declare const INDENT_TOKEN: string;
3
- type LogOptions = {
3
+ export type LogOptions = {
4
4
  indent: boolean;
5
5
  logLevel: LogLevel;
6
6
  };
@@ -10,12 +10,10 @@ 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
- verbose: (message?: any, ...optionalParams: any[]) => void;
14
- verboseAdvanced: (options: VerboseLogOptions, message?: any, ...optionalParams: any[]) => void;
13
+ verbose: (options: VerboseLogOptions, message?: any, ...optionalParams: any[]) => void;
15
14
  info: (message?: any, ...optionalParams: any[]) => void;
16
15
  infoAdvanced: (options: LogOptions, message?: any, ...optionalParams: any[]) => void;
17
- warn: (message?: any, ...optionalParams: any[]) => void;
18
- warnAdvanced: (options: LogOptions, message?: any, ...optionalParams: any[]) => void;
16
+ warn: (options: LogOptions, message?: any, ...optionalParams: any[]) => void;
19
17
  error: (message?: any, ...optionalParams: any[]) => void;
20
18
  errorAdvanced: (options: VerboseLogOptions, message?: any, ...optionalParams: any[]) => void;
21
19
  };
package/dist/logger.js CHANGED
@@ -15,10 +15,7 @@ const secondverboseTag = (str) => {
15
15
  };
16
16
  exports.secondverboseTag = secondverboseTag;
17
17
  exports.Log = {
18
- verbose: (...args) => {
19
- exports.Log.verboseAdvanced({ indent: false, logLevel: (0, exports.getLogLevel)() }, ...args);
20
- },
21
- verboseAdvanced: (options, ...args) => {
18
+ verbose: (options, ...args) => {
22
19
  if ((0, log_level_1.isEqualOrBelowLogLevel)(options.logLevel, 'verbose')) {
23
20
  return console.log(...[
24
21
  options.indent ? exports.INDENT_TOKEN : null,
@@ -34,12 +31,7 @@ exports.Log = {
34
31
  infoAdvanced: (options, ...args) => {
35
32
  return console.log(...[options.indent ? exports.INDENT_TOKEN : null].filter(truthy_1.truthy).concat(args));
36
33
  },
37
- warn: (...args) => {
38
- if ((0, log_level_1.isEqualOrBelowLogLevel)((0, exports.getLogLevel)(), 'warn')) {
39
- exports.Log.warnAdvanced({ indent: false, logLevel: (0, exports.getLogLevel)() }, ...args);
40
- }
41
- },
42
- warnAdvanced: (options, ...args) => {
34
+ warn: (options, ...args) => {
43
35
  if ((0, log_level_1.isEqualOrBelowLogLevel)(options.logLevel, 'warn')) {
44
36
  return console.warn(...[options.indent ? chalk_1.chalk.yellow(exports.INDENT_TOKEN) : null]
45
37
  .filter(truthy_1.truthy)
@@ -117,7 +117,7 @@ const startOffthreadVideoServer = ({ downloadMap, concurrency, logLevel, indent,
117
117
  const extractEnd = Date.now();
118
118
  const timeToExtract = extractEnd - extractStart;
119
119
  if (timeToExtract > 1000) {
120
- logger_1.Log.verbose(`Took ${timeToExtract}ms to extract frame from ${src} at ${time}`);
120
+ logger_1.Log.verbose({ indent, logLevel }, `Took ${timeToExtract}ms to extract frame from ${src} at ${time}`);
121
121
  }
122
122
  response.writeHead(200);
123
123
  response.write(readable, (err) => {
@@ -82,7 +82,7 @@ const internalOpenBrowser = async ({ browser, browserExecutable, chromiumOptions
82
82
  '--force-color-profile=srgb',
83
83
  '--metrics-recording-only',
84
84
  '--no-first-run',
85
- '--video-threads=' + (0, get_video_threads_flag_1.getIdealVideoThreadsFlag)(),
85
+ '--video-threads=' + (0, get_video_threads_flag_1.getIdealVideoThreadsFlag)(logLevel),
86
86
  '--enable-automation',
87
87
  '--password-store=basic',
88
88
  '--use-mock-keychain',
@@ -7,6 +7,6 @@ export declare const colorSpaceOption: {
7
7
  description: () => JSX.Element;
8
8
  docLink: string;
9
9
  ssrName: string;
10
- type: "default" | "bt709";
10
+ type: "bt709" | "default";
11
11
  };
12
12
  export declare const validateColorSpace: (option: unknown) => void;
@@ -4,7 +4,7 @@ export declare const glOption: {
4
4
  cliFlag: string;
5
5
  docLink: string;
6
6
  name: string;
7
- type: "angle" | "swangle" | "egl" | "swiftshader" | "vulkan" | "angle-egl";
7
+ type: "swangle" | "angle" | "egl" | "swiftshader" | "vulkan" | "angle-egl";
8
8
  ssrName: string;
9
9
  description: () => JSX.Element;
10
10
  };
@@ -86,7 +86,7 @@ export declare const allOptions: {
86
86
  description: () => JSX.Element;
87
87
  docLink: string;
88
88
  ssrName: string;
89
- type: "default" | "bt709";
89
+ type: "bt709" | "default";
90
90
  };
91
91
  deleteAfterOption: {
92
92
  name: string;
@@ -116,7 +116,7 @@ export declare const allOptions: {
116
116
  cliFlag: string;
117
117
  docLink: string;
118
118
  name: string;
119
- type: "angle" | "swangle" | "egl" | "swiftshader" | "vulkan" | "angle-egl";
119
+ type: "swangle" | "angle" | "egl" | "swiftshader" | "vulkan" | "angle-egl";
120
120
  ssrName: string;
121
121
  description: () => JSX.Element;
122
122
  };
@@ -17,7 +17,7 @@ const symbolicate_stacktrace_1 = require("./symbolicate-stacktrace");
17
17
  const wait_for_symbolication_error_to_be_done_1 = require("./wait-for-symbolication-error-to-be-done");
18
18
  const prepareServer = async ({ webpackConfigOrServeUrl, port, remotionRoot, concurrency, logLevel, indent, offthreadVideoCacheSizeInBytes, }) => {
19
19
  const downloadMap = (0, download_map_1.makeDownloadMap)();
20
- logger_1.Log.verboseAdvanced({ indent, logLevel }, 'Created directory for temporary files', downloadMap.assetDir);
20
+ logger_1.Log.verbose({ indent, logLevel }, 'Created directory for temporary files', downloadMap.assetDir);
21
21
  if ((0, is_serve_url_1.isServeUrl)(webpackConfigOrServeUrl)) {
22
22
  const { port: offthreadPort, close: closeProxy, compositor: comp, } = await (0, serve_static_1.serveStatic)(null, {
23
23
  port,
@@ -37,7 +37,7 @@ const prepareServer = async ({ webpackConfigOrServeUrl, port, remotionRoot, conc
37
37
  offthreadPort,
38
38
  compositor: comp,
39
39
  sourceMap: (0, symbolicate_stacktrace_1.getSourceMapFromRemoteUrl)((0, get_bundle_url_from_serve_url_1.getBundleMapUrlFromServeUrl)(webpackConfigOrServeUrl)).catch((err) => {
40
- logger_1.Log.verbose('Could not fetch sourcemap for ', webpackConfigOrServeUrl, err);
40
+ logger_1.Log.verbose({ indent, logLevel }, 'Could not fetch sourcemap for ', webpackConfigOrServeUrl, err);
41
41
  return null;
42
42
  }),
43
43
  downloadMap,
@@ -49,12 +49,12 @@ const prespawnFfmpeg = (options) => {
49
49
  '-y',
50
50
  options.outputLocation,
51
51
  ];
52
- logger_1.Log.verboseAdvanced({
52
+ logger_1.Log.verbose({
53
53
  indent: options.indent,
54
54
  logLevel: options.logLevel,
55
55
  tag: 'prespawnFfmpeg()',
56
56
  }, 'Generated FFMPEG command:');
57
- logger_1.Log.verboseAdvanced({
57
+ logger_1.Log.verbose({
58
58
  indent: options.indent,
59
59
  logLevel: options.logLevel,
60
60
  tag: 'prespawnFfmpeg()',
@@ -1,6 +1,8 @@
1
- export declare const shouldUseParallelEncoding: ({ width, height, }: {
1
+ import type { LogLevel } from './log-level';
2
+ export declare const shouldUseParallelEncoding: ({ width, height, logLevel, }: {
2
3
  width: number;
3
4
  height: number;
5
+ logLevel: LogLevel;
4
6
  }) => {
5
7
  hasEnoughMemory: boolean;
6
8
  freeMemory: number;
@@ -9,8 +9,8 @@ const estimateMemoryUsageForPrestitcher = ({ width, height, }) => {
9
9
  const memoryUsageOfPixel = memoryUsageFor4K / 1000000;
10
10
  return memoryUsageOfPixel * width * height;
11
11
  };
12
- const shouldUseParallelEncoding = ({ width, height, }) => {
13
- const freeMemory = (0, get_available_memory_1.getAvailableMemory)();
12
+ const shouldUseParallelEncoding = ({ width, height, logLevel, }) => {
13
+ const freeMemory = (0, get_available_memory_1.getAvailableMemory)(logLevel);
14
14
  const estimatedUsage = estimateMemoryUsageForPrestitcher({
15
15
  height,
16
16
  width,
@@ -162,10 +162,12 @@ const innerRenderFrames = async ({ onFrameUpdate, outputDir, onStart, serialized
162
162
  page: freePage,
163
163
  composition: compId,
164
164
  timeoutInMilliseconds,
165
+ indent,
166
+ logLevel,
165
167
  });
166
168
  const timeToSeek = Date.now() - startSeeking;
167
169
  if (timeToSeek > 1000) {
168
- logger_1.Log.verbose(`Seeking to frame ${frame} took ${timeToSeek}ms`);
170
+ logger_1.Log.verbose({ indent, logLevel }, `Seeking to frame ${frame} took ${timeToSeek}ms`);
169
171
  }
170
172
  if (!outputDir && !onFrameBuffer && imageFormat !== 'none') {
171
173
  throw new Error('Called renderFrames() without specifying either `outputDir` or `onFrameBuffer`');
@@ -89,42 +89,43 @@ const internalRenderMediaRaw = ({ proResProfile, x264Preset, crf, composition, s
89
89
  const { estimatedUsage, freeMemory, hasEnoughMemory } = (0, prestitcher_memory_usage_1.shouldUseParallelEncoding)({
90
90
  height: composition.height,
91
91
  width: composition.width,
92
+ logLevel,
92
93
  });
93
94
  const parallelEncoding = !disallowParallelEncoding &&
94
95
  hasEnoughMemory &&
95
96
  (0, can_use_parallel_encoding_1.canUseParallelEncoding)(codec);
96
- logger_1.Log.verboseAdvanced({
97
+ logger_1.Log.verbose({
97
98
  indent,
98
99
  logLevel,
99
100
  tag: 'renderMedia()',
100
101
  }, 'Free memory:', freeMemory, 'Estimated usage parallel encoding', estimatedUsage);
101
102
  const actualConcurrency = (0, get_concurrency_1.getActualConcurrency)(concurrency);
102
- logger_1.Log.verboseAdvanced({
103
+ logger_1.Log.verbose({
103
104
  indent,
104
105
  logLevel,
105
106
  tag: 'renderMedia()',
106
107
  }, 'Using concurrency:', actualConcurrency);
107
- logger_1.Log.verboseAdvanced({
108
+ logger_1.Log.verbose({
108
109
  indent,
109
110
  logLevel,
110
111
  tag: 'renderMedia()',
111
112
  }, 'Codec supports parallel rendering:', (0, can_use_parallel_encoding_1.canUseParallelEncoding)(codec));
112
113
  if (disallowParallelEncoding) {
113
- logger_1.Log.verboseAdvanced({
114
+ logger_1.Log.verbose({
114
115
  indent,
115
116
  logLevel,
116
117
  tag: 'renderMedia()',
117
118
  }, 'User disallowed parallel encoding.');
118
119
  }
119
120
  if (parallelEncoding) {
120
- logger_1.Log.verboseAdvanced({
121
+ logger_1.Log.verbose({
121
122
  indent,
122
123
  logLevel,
123
124
  tag: 'renderMedia()',
124
125
  }, 'Parallel encoding is enabled.');
125
126
  }
126
127
  else {
127
- logger_1.Log.verboseAdvanced({
128
+ logger_1.Log.verbose({
128
129
  indent,
129
130
  logLevel,
130
131
  tag: 'renderMedia()',
@@ -325,7 +326,7 @@ const internalRenderMediaRaw = ({ proResProfile, x264Preset, crf, composition, s
325
326
  .then(([{ assetsInfo }]) => {
326
327
  renderedDoneIn = Date.now() - renderStart;
327
328
  callUpdate();
328
- logger_1.Log.verboseAdvanced({ indent, logLevel }, 'Rendering frames done in', renderedDoneIn + 'ms');
329
+ logger_1.Log.verbose({ indent, logLevel }, 'Rendering frames done in', renderedDoneIn + 'ms');
329
330
  if (absoluteOutputLocation) {
330
331
  (0, ensure_output_directory_1.ensureOutputDirectory)(absoluteOutputLocation);
331
332
  }
@@ -377,7 +378,7 @@ const internalRenderMediaRaw = ({ proResProfile, x264Preset, crf, composition, s
377
378
  encodedFrames = (0, get_duration_from_frame_range_1.getFramesToRender)(realFrameRange, everyNthFrame).length;
378
379
  encodedDoneIn = Date.now() - stitchStart;
379
380
  callUpdate();
380
- logger_1.Log.verboseAdvanced({ indent, logLevel }, 'Stitching done in', encodedDoneIn + 'ms');
381
+ logger_1.Log.verbose({ indent, logLevel }, 'Stitching done in', encodedDoneIn + 'ms');
381
382
  slowestFrames.sort((a, b) => b.time - a.time);
382
383
  const result = {
383
384
  buffer,
@@ -180,6 +180,8 @@ const innerRenderStill = async ({ composition, imageFormat = image_format_1.DEFA
180
180
  page,
181
181
  composition: composition.id,
182
182
  timeoutInMilliseconds,
183
+ indent,
184
+ logLevel,
183
185
  });
184
186
  const { buffer } = await (0, take_frame_and_compose_1.takeFrameAndCompose)({
185
187
  frame: stillFrame,
@@ -1,12 +1,17 @@
1
1
  import type { Page } from './browser/BrowserPage';
2
- export declare const waitForReady: ({ page, timeoutInMilliseconds, frame, }: {
2
+ import type { LogLevel } from './log-level';
3
+ export declare const waitForReady: ({ page, timeoutInMilliseconds, frame, indent, logLevel, }: {
3
4
  page: Page;
4
5
  timeoutInMilliseconds: number;
5
6
  frame: number | null;
7
+ indent: boolean;
8
+ logLevel: LogLevel;
6
9
  }) => Promise<unknown>;
7
- export declare const seekToFrame: ({ frame, page, composition, timeoutInMilliseconds, }: {
10
+ export declare const seekToFrame: ({ frame, page, composition, timeoutInMilliseconds, logLevel, indent, }: {
8
11
  frame: number;
9
12
  composition: string;
10
13
  page: Page;
11
14
  timeoutInMilliseconds: number;
15
+ logLevel: LogLevel;
16
+ indent: boolean;
12
17
  }) => Promise<void>;
@@ -1,11 +1,11 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.seekToFrame = exports.waitForReady = void 0;
4
- const _1 = require(".");
5
4
  const symbolicateable_error_1 = require("./error-handling/symbolicateable-error");
5
+ const logger_1 = require("./logger");
6
6
  const parse_browser_error_stack_1 = require("./parse-browser-error-stack");
7
7
  const puppeteer_evaluate_1 = require("./puppeteer-evaluate");
8
- const waitForReady = ({ page, timeoutInMilliseconds, frame, }) => {
8
+ const waitForReady = ({ page, timeoutInMilliseconds, frame, indent, logLevel, }) => {
9
9
  const waitForReadyProm = new Promise((resolve, reject) => {
10
10
  page
11
11
  .mainFrame()
@@ -44,7 +44,7 @@ const waitForReady = ({ page, timeoutInMilliseconds, frame, }) => {
44
44
  reject(new Error(`Timeout exceeded rendering the component${frame ? ' at frame ' + frame : ''}. ${res.value ? `Open delayRender() handles: ${res.value}` : ''}`));
45
45
  })
46
46
  .catch((newErr) => {
47
- _1.RenderInternals.Log.warn('Tried to get delayRender() handles for timeout, but could not do so because of', newErr);
47
+ logger_1.Log.warn({ indent, logLevel }, 'Tried to get delayRender() handles for timeout, but could not do so because of', newErr);
48
48
  // Ignore, use prev error
49
49
  reject(err);
50
50
  });
@@ -110,8 +110,14 @@ const waitForReady = ({ page, timeoutInMilliseconds, frame, }) => {
110
110
  ]);
111
111
  };
112
112
  exports.waitForReady = waitForReady;
113
- const seekToFrame = async ({ frame, page, composition, timeoutInMilliseconds, }) => {
114
- await (0, exports.waitForReady)({ page, timeoutInMilliseconds, frame: null });
113
+ const seekToFrame = async ({ frame, page, composition, timeoutInMilliseconds, logLevel, indent, }) => {
114
+ await (0, exports.waitForReady)({
115
+ page,
116
+ timeoutInMilliseconds,
117
+ frame: null,
118
+ indent,
119
+ logLevel,
120
+ });
115
121
  await (0, puppeteer_evaluate_1.puppeteerEvaluateWithCatchAndTimeout)({
116
122
  pageFunction: (f, c) => {
117
123
  window.remotion_setFrame(f, c);
@@ -120,7 +126,7 @@ const seekToFrame = async ({ frame, page, composition, timeoutInMilliseconds, })
120
126
  frame,
121
127
  page,
122
128
  });
123
- await (0, exports.waitForReady)({ page, timeoutInMilliseconds, frame });
129
+ await (0, exports.waitForReady)({ page, timeoutInMilliseconds, frame, indent, logLevel });
124
130
  await page.evaluateHandle('document.fonts.ready');
125
131
  };
126
132
  exports.seekToFrame = seekToFrame;
@@ -48,8 +48,14 @@ const innerSelectComposition = async ({ page, onBrowserLog, serializedInputProps
48
48
  frame: null,
49
49
  args: [],
50
50
  });
51
- await (0, seek_to_frame_1.waitForReady)({ page, timeoutInMilliseconds, frame: null });
52
- logger_1.Log.verboseAdvanced({
51
+ await (0, seek_to_frame_1.waitForReady)({
52
+ page,
53
+ timeoutInMilliseconds,
54
+ frame: null,
55
+ logLevel,
56
+ indent,
57
+ });
58
+ logger_1.Log.verbose({
53
59
  indent,
54
60
  tag: 'selectComposition()',
55
61
  logLevel,
@@ -63,7 +69,7 @@ const innerSelectComposition = async ({ page, onBrowserLog, serializedInputProps
63
69
  page,
64
70
  args: [id],
65
71
  });
66
- logger_1.Log.verboseAdvanced({
72
+ logger_1.Log.verbose({
67
73
  indent,
68
74
  tag: 'selectComposition()',
69
75
  logLevel,
@@ -131,7 +131,7 @@ const innerSetPropsAndEnv = async ({ serializedInputPropsWithCustomSchema, envVa
131
131
  }
132
132
  if (remotionVersion !== version_1.VERSION && process.env.NODE_ENV !== 'test') {
133
133
  if (remotionVersion) {
134
- logger_1.Log.warnAdvanced({
134
+ logger_1.Log.warn({
135
135
  indent,
136
136
  logLevel,
137
137
  }, [
@@ -143,7 +143,7 @@ const innerSetPropsAndEnv = async ({ serializedInputPropsWithCustomSchema, envVa
143
143
  ].join('\n'));
144
144
  }
145
145
  else {
146
- logger_1.Log.warnAdvanced({
146
+ logger_1.Log.warn({
147
147
  indent,
148
148
  logLevel,
149
149
  }, `The site was bundled with an old version of Remotion, while @remotion/renderer is on version ${version_1.VERSION}. You may not have the newest bugfixes and features. Re-bundle the site to fix this issue.`);
@@ -1,4 +1,3 @@
1
- /// <reference types="node" />
2
1
  import type { RenderMediaOnDownload } from './assets/download-and-map-assets-to-file';
3
2
  import type { RenderAssetInfo } from './assets/download-map';
4
3
  import type { AudioCodec } from './audio-codec';
@@ -70,7 +70,7 @@ const getAssetsData = async ({ assets, onDownload, fps, expectedFrames, logLevel
70
70
  });
71
71
  (0, download_and_map_assets_to_file_1.markAllAssetsAsDownloaded)(downloadMap);
72
72
  const assetPositions = (0, calculate_asset_positions_1.calculateAssetPositions)(fileUrlAssets);
73
- logger_1.Log.verboseAdvanced({ indent, logLevel, tag: 'audio' }, 'asset positions', JSON.stringify(assetPositions));
73
+ logger_1.Log.verbose({ indent, logLevel, tag: 'audio' }, 'asset positions', JSON.stringify(assetPositions));
74
74
  const preprocessProgress = new Array(assetPositions.length).fill(0);
75
75
  const updateProgress = () => {
76
76
  onProgress(preprocessProgress.reduce((a, b) => a + b, 0) / assetPositions.length);
@@ -141,27 +141,27 @@ const innerStitchFramesToVideo = async ({ assetsInfo, audioBitrate, audioCodec,
141
141
  const tempFile = outputLocation
142
142
  ? null
143
143
  : node_path_1.default.join(assetsInfo.downloadMap.stitchFrames, `out.${(0, get_extension_from_codec_1.getFileExtensionFromCodec)(codec, resolvedAudioCodec)}`);
144
- logger_1.Log.verboseAdvanced({
144
+ logger_1.Log.verbose({
145
145
  indent,
146
146
  logLevel,
147
147
  tag: 'stitchFramesToVideo()',
148
148
  }, 'audioCodec', resolvedAudioCodec);
149
- logger_1.Log.verboseAdvanced({
149
+ logger_1.Log.verbose({
150
150
  indent,
151
151
  logLevel,
152
152
  tag: 'stitchFramesToVideo()',
153
153
  }, 'pixelFormat', pixelFormat);
154
- logger_1.Log.verboseAdvanced({
154
+ logger_1.Log.verbose({
155
155
  indent,
156
156
  logLevel,
157
157
  tag: 'stitchFramesToVideo()',
158
158
  }, 'codec', codec);
159
- logger_1.Log.verboseAdvanced({
159
+ logger_1.Log.verbose({
160
160
  indent,
161
161
  logLevel,
162
162
  tag: 'stitchFramesToVideo()',
163
163
  }, 'shouldRenderAudio', shouldRenderAudio);
164
- logger_1.Log.verboseAdvanced({
164
+ logger_1.Log.verbose({
165
165
  indent,
166
166
  logLevel,
167
167
  tag: 'stitchFramesToVideo()',
@@ -275,12 +275,12 @@ const innerStitchFramesToVideo = async ({ assetsInfo, audioBitrate, audioCodec,
275
275
  const finalFfmpegString = ffmpegOverride
276
276
  ? ffmpegOverride({ type: 'stitcher', args: ffmpegString })
277
277
  : ffmpegString;
278
- logger_1.Log.verboseAdvanced({
278
+ logger_1.Log.verbose({
279
279
  indent: indent !== null && indent !== void 0 ? indent : false,
280
280
  logLevel,
281
281
  tag: 'stitchFramesToVideo()',
282
282
  }, 'Generated final FFMPEG command:');
283
- logger_1.Log.verboseAdvanced({
283
+ logger_1.Log.verbose({
284
284
  indent,
285
285
  logLevel,
286
286
  tag: 'stitchFramesToVideo()',
@@ -1,5 +1,5 @@
1
1
  import type { AudioCodec } from './audio-codec';
2
- export declare const validateOutputFilename: <T extends "h264" | "h265" | "vp8" | "vp9" | "mp3" | "aac" | "wav" | "prores" | "h264-mkv" | "gif">({ codec, audioCodec, extension, preferLossless, }: {
2
+ export declare const validateOutputFilename: <T extends "h264" | "h265" | "vp8" | "vp9" | "prores" | "aac" | "mp3" | "wav" | "h264-mkv" | "gif">({ codec, audioCodec, extension, preferLossless, }: {
3
3
  codec: T;
4
4
  audioCodec: AudioCodec | null;
5
5
  extension: string;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@remotion/renderer",
3
- "version": "4.0.55",
3
+ "version": "4.0.57",
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.55"
21
+ "remotion": "4.0.57"
22
22
  },
23
23
  "peerDependencies": {
24
24
  "react": ">=16.8.0",
@@ -40,13 +40,13 @@
40
40
  "vitest": "0.31.1"
41
41
  },
42
42
  "optionalDependencies": {
43
- "@remotion/compositor-darwin-arm64": "4.0.55",
44
- "@remotion/compositor-linux-arm64-gnu": "4.0.55",
45
- "@remotion/compositor-darwin-x64": "4.0.55",
46
- "@remotion/compositor-linux-x64-gnu": "4.0.55",
47
- "@remotion/compositor-linux-x64-musl": "4.0.55",
48
- "@remotion/compositor-linux-arm64-musl": "4.0.55",
49
- "@remotion/compositor-win32-x64-msvc": "4.0.55"
43
+ "@remotion/compositor-darwin-x64": "4.0.57",
44
+ "@remotion/compositor-linux-arm64-gnu": "4.0.57",
45
+ "@remotion/compositor-linux-arm64-musl": "4.0.57",
46
+ "@remotion/compositor-darwin-arm64": "4.0.57",
47
+ "@remotion/compositor-win32-x64-msvc": "4.0.57",
48
+ "@remotion/compositor-linux-x64-gnu": "4.0.57",
49
+ "@remotion/compositor-linux-x64-musl": "4.0.57"
50
50
  },
51
51
  "keywords": [
52
52
  "remotion",