@remotion/renderer 4.0.0-alpha13 → 4.0.0-alpha14

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 (149) hide show
  1. package/dist/assets/download-and-map-assets-to-file.d.ts +6 -4
  2. package/dist/assets/download-and-map-assets-to-file.js +30 -6
  3. package/dist/assets/download-file.d.ts +2 -2
  4. package/dist/assets/download-map.d.ts +3 -3
  5. package/dist/assets/ffmpeg-volume-expression.d.ts +2 -2
  6. package/dist/assets/get-audio-channels.d.ts +1 -0
  7. package/dist/assets/get-audio-channels.js +10 -5
  8. package/dist/assets/get-video-stream-duration.d.ts +9 -0
  9. package/dist/assets/get-video-stream-duration.js +71 -0
  10. package/dist/assets/read-file.js +1 -1
  11. package/dist/assets/types.d.ts +4 -4
  12. package/dist/audio-codec.d.ts +2 -2
  13. package/dist/browser/Browser.d.ts +9 -9
  14. package/dist/browser/Browser.js +26 -32
  15. package/dist/browser/BrowserFetcher.d.ts +1 -1
  16. package/dist/browser/BrowserPage.d.ts +11 -2
  17. package/dist/browser/BrowserPage.js +47 -12
  18. package/dist/browser/BrowserRunner.js +19 -2
  19. package/dist/browser/ConsoleMessage.d.ts +1 -1
  20. package/dist/browser/DOMWorld.js +8 -8
  21. package/dist/browser/EvalTypes.d.ts +7 -7
  22. package/dist/browser/FrameManager.js +11 -11
  23. package/dist/browser/JSHandle.js +14 -14
  24. package/dist/browser/LaunchOptions.d.ts +1 -1
  25. package/dist/browser/Launcher.js +0 -1
  26. package/dist/browser/LifecycleWatcher.d.ts +1 -1
  27. package/dist/browser/NetworkEventManager.d.ts +4 -4
  28. package/dist/browser/NodeWebSocketTransport.js +16 -16
  29. package/dist/browser/Product.d.ts +1 -1
  30. package/dist/browser/Target.d.ts +2 -1
  31. package/dist/browser/Target.js +8 -2
  32. package/dist/browser/devtools-types.d.ts +10 -10
  33. package/dist/browser/mitt/index.d.ts +6 -6
  34. package/dist/browser/revisions.d.ts +1 -1
  35. package/dist/browser/should-log-message.d.ts +24 -0
  36. package/dist/browser/should-log-message.js +72 -0
  37. package/dist/browser-executable.d.ts +1 -1
  38. package/dist/browser-log.d.ts +1 -1
  39. package/dist/browser.d.ts +1 -1
  40. package/dist/calculate-sar-dar-pixels.d.ts +9 -0
  41. package/dist/calculate-sar-dar-pixels.js +19 -0
  42. package/dist/chalk/index.d.ts +4 -4
  43. package/dist/codec-supports-media.d.ts +1 -1
  44. package/dist/codec.d.ts +2 -2
  45. package/dist/combine-videos.d.ts +1 -1
  46. package/dist/compositor/compose.d.ts +11 -2
  47. package/dist/compositor/compose.js +15 -4
  48. package/dist/compositor/compositor.d.ts +1 -1
  49. package/dist/compositor/compositor.js +1 -1
  50. package/dist/compositor/payloads.d.ts +5 -5
  51. package/dist/create-ffmpeg-complex-filter.d.ts +4 -1
  52. package/dist/crf.d.ts +1 -1
  53. package/dist/determine-resize-params.d.ts +1 -0
  54. package/dist/determine-resize-params.js +10 -0
  55. package/dist/determine-vcodec-ffmpeg-flags.d.ts +2 -0
  56. package/dist/determine-vcodec-ffmpeg-flags.js +13 -0
  57. package/dist/ensure-ffmpeg.d.ts +18 -0
  58. package/dist/ensure-ffmpeg.js +58 -0
  59. package/dist/ensure-presentation-timestamp.d.ts +15 -0
  60. package/dist/ensure-presentation-timestamp.js +88 -0
  61. package/dist/error-handling/symbolicate-error.js +4 -2
  62. package/dist/extract-frame-from-video.d.ts +16 -0
  63. package/dist/extract-frame-from-video.js +191 -0
  64. package/dist/ffmpeg-executable.d.ts +1 -0
  65. package/dist/ffmpeg-executable.js +2 -0
  66. package/dist/ffmpeg-flags.d.ts +31 -0
  67. package/dist/ffmpeg-flags.js +245 -0
  68. package/dist/ffmpeg-override.d.ts +1 -1
  69. package/dist/file-extensions.d.ts +1 -1
  70. package/dist/frame-range.d.ts +1 -1
  71. package/dist/frame-to-ffmpeg-timestamp.d.ts +1 -0
  72. package/dist/frame-to-ffmpeg-timestamp.js +8 -0
  73. package/dist/get-browser-instance.d.ts +6 -1
  74. package/dist/get-browser-instance.js +9 -4
  75. package/dist/get-can-extract-frames-fast.d.ts +14 -0
  76. package/dist/get-can-extract-frames-fast.js +71 -0
  77. package/dist/get-compositions.d.ts +18 -11
  78. package/dist/get-compositions.js +66 -49
  79. package/dist/get-frame-of-video-slow.d.ts +17 -0
  80. package/dist/get-frame-of-video-slow.js +72 -0
  81. package/dist/get-frame-padded-index.d.ts +1 -1
  82. package/dist/get-video-info.d.ts +8 -0
  83. package/dist/get-video-info.js +59 -0
  84. package/dist/image-format.d.ts +3 -3
  85. package/dist/index.d.ts +110 -21
  86. package/dist/index.js +25 -13
  87. package/dist/is-beyond-last-frame.d.ts +3 -0
  88. package/dist/is-beyond-last-frame.js +12 -0
  89. package/dist/jpeg-quality.d.ts +1 -0
  90. package/dist/jpeg-quality.js +2 -1
  91. package/dist/last-frame-from-video-cache.d.ts +17 -0
  92. package/dist/last-frame-from-video-cache.js +55 -0
  93. package/dist/legacy-webpack-config.d.ts +9 -0
  94. package/dist/legacy-webpack-config.js +13 -0
  95. package/dist/log-level.d.ts +1 -1
  96. package/dist/logger.d.ts +4 -2
  97. package/dist/logger.js +12 -5
  98. package/dist/make-cancel-signal.d.ts +2 -2
  99. package/dist/merge-audio-track.d.ts +1 -1
  100. package/dist/mime-types.js +1 -1
  101. package/dist/offthread-video-server.d.ts +36 -4
  102. package/dist/offthread-video-server.js +48 -4
  103. package/dist/open-browser.d.ts +19 -10
  104. package/dist/open-browser.js +34 -21
  105. package/dist/options/option.d.ts +1 -1
  106. package/dist/parse-browser-error-stack.d.ts +1 -1
  107. package/dist/perf.d.ts +1 -1
  108. package/dist/pixel-format.d.ts +1 -1
  109. package/dist/prepare-server.d.ts +20 -8
  110. package/dist/prepare-server.js +52 -8
  111. package/dist/preprocess-audio-track.d.ts +2 -2
  112. package/dist/prespawn-ffmpeg.d.ts +1 -1
  113. package/dist/prespawn-ffmpeg.js +7 -7
  114. package/dist/prores-profile.d.ts +1 -1
  115. package/dist/provide-screenshot.d.ts +0 -1
  116. package/dist/puppeteer-screenshot.d.ts +0 -1
  117. package/dist/puppeteer-screenshot.js +1 -2
  118. package/dist/quality.d.ts +1 -0
  119. package/dist/quality.js +21 -0
  120. package/dist/render-frames.d.ts +32 -11
  121. package/dist/render-frames.js +112 -77
  122. package/dist/render-media.d.ts +50 -21
  123. package/dist/render-media.js +249 -197
  124. package/dist/render-still.d.ts +33 -18
  125. package/dist/render-still.js +71 -43
  126. package/dist/replace-browser.d.ts +1 -1
  127. package/dist/screenshot-dom-element.d.ts +0 -1
  128. package/dist/screenshot-task.d.ts +0 -1
  129. package/dist/select-composition.d.ts +19 -11
  130. package/dist/select-composition.js +79 -42
  131. package/dist/serve-static.d.ts +2 -3
  132. package/dist/serve-static.js +2 -4
  133. package/dist/set-props-and-env.d.ts +1 -1
  134. package/dist/stitch-frames-to-video.d.ts +32 -11
  135. package/dist/stitch-frames-to-video.js +121 -99
  136. package/dist/stringify-ffmpeg-filter.d.ts +2 -2
  137. package/dist/symbolicate-stacktrace.d.ts +16 -3
  138. package/dist/symbolicate-stacktrace.js +49 -24
  139. package/dist/take-frame-and-compose.d.ts +0 -1
  140. package/dist/truthy.d.ts +1 -1
  141. package/dist/try-to-extract-frame-of-video-fast.d.ts +12 -0
  142. package/dist/try-to-extract-frame-of-video-fast.js +55 -0
  143. package/dist/types.d.ts +2 -2
  144. package/dist/validate-ffmpeg.d.ts +7 -0
  145. package/dist/validate-ffmpeg.js +77 -0
  146. package/dist/validate-opengl-renderer.d.ts +1 -1
  147. package/dist/warn-about-ffmpeg-version.d.ts +5 -0
  148. package/dist/warn-about-ffmpeg-version.js +37 -0
  149. package/package.json +11 -11
@@ -26,12 +26,12 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
26
26
  return (mod && mod.__esModule) ? mod : { "default": mod };
27
27
  };
28
28
  Object.defineProperty(exports, "__esModule", { value: true });
29
- exports.renderStill = void 0;
29
+ exports.renderStill = exports.internalRenderStill = void 0;
30
30
  const node_fs_1 = __importStar(require("node:fs"));
31
31
  const node_path_1 = __importDefault(require("node:path"));
32
32
  const remotion_1 = require("remotion");
33
- const download_map_1 = require("./assets/download-map");
34
33
  const browser_1 = require("./browser");
34
+ const TimeoutSettings_1 = require("./browser/TimeoutSettings");
35
35
  const convert_to_positive_frame_index_1 = require("./convert-to-positive-frame-index");
36
36
  const ensure_output_directory_1 = require("./ensure-output-directory");
37
37
  const handle_javascript_exception_1 = require("./error-handling/handle-javascript-exception");
@@ -40,6 +40,7 @@ const image_format_1 = require("./image-format");
40
40
  const jpeg_quality_1 = require("./jpeg-quality");
41
41
  const make_cancel_signal_1 = require("./make-cancel-signal");
42
42
  const open_browser_1 = require("./open-browser");
43
+ const overwrite_1 = require("./overwrite");
43
44
  const prepare_server_1 = require("./prepare-server");
44
45
  const puppeteer_evaluate_1 = require("./puppeteer-evaluate");
45
46
  const seek_to_frame_1 = require("./seek-to-frame");
@@ -47,10 +48,7 @@ const set_props_and_env_1 = require("./set-props-and-env");
47
48
  const take_frame_and_compose_1 = require("./take-frame-and-compose");
48
49
  const validate_puppeteer_timeout_1 = require("./validate-puppeteer-timeout");
49
50
  const validate_scale_1 = require("./validate-scale");
50
- const innerRenderStill = async ({ composition, quality, imageFormat = image_format_1.DEFAULT_STILL_IMAGE_FORMAT, serveUrl, puppeteerInstance, dumpBrowserLogs = false, onError, inputProps, envVariables, output, frame = 0, overwrite = true, browserExecutable, timeoutInMilliseconds, chromiumOptions, scale = 1, proxyPort, cancelSignal, downloadMap, jpegQuality, onBrowserLog, compositor, }) => {
51
- if (quality) {
52
- throw new Error('quality has been renamed to jpegQuality. Please rename the option.');
53
- }
51
+ const innerRenderStill = async ({ composition, imageFormat = image_format_1.DEFAULT_STILL_IMAGE_FORMAT, serveUrl, puppeteerInstance, dumpBrowserLogs = false, onError, inputProps, envVariables, output, frame = 0, overwrite, browserExecutable, timeoutInMilliseconds, chromiumOptions, scale, proxyPort, cancelSignal, jpegQuality, onBrowserLog, compositor, sourceMapContext, downloadMap, }) => {
54
52
  remotion_1.Internals.validateDimension(composition.height, 'height', 'in the `config` object passed to `renderStill()`');
55
53
  remotion_1.Internals.validateDimension(composition.width, 'width', 'in the `config` object passed to `renderStill()`');
56
54
  remotion_1.Internals.validateFps(composition.fps, 'in the `config` object of `renderStill()`', false);
@@ -73,9 +71,6 @@ const innerRenderStill = async ({ composition, quality, imageFormat = image_form
73
71
  (0, validate_scale_1.validateScale)(scale);
74
72
  output =
75
73
  typeof output === 'string' ? node_path_1.default.resolve(process.cwd(), output) : null;
76
- if (jpegQuality !== undefined && imageFormat !== 'jpeg') {
77
- throw new Error("You can only pass the `quality` option if `imageFormat` is 'jpeg'.");
78
- }
79
74
  (0, jpeg_quality_1.validateJpegQuality)(jpegQuality);
80
75
  if (output) {
81
76
  if (node_fs_1.default.existsSync(output)) {
@@ -89,18 +84,20 @@ const innerRenderStill = async ({ composition, quality, imageFormat = image_form
89
84
  }
90
85
  (0, ensure_output_directory_1.ensureOutputDirectory)(output);
91
86
  }
92
- const browserInstance = puppeteerInstance !== null && puppeteerInstance !== void 0 ? puppeteerInstance : (await (0, open_browser_1.openBrowser)(browser_1.DEFAULT_BROWSER, {
87
+ const browserInstance = puppeteerInstance !== null && puppeteerInstance !== void 0 ? puppeteerInstance : (await (0, open_browser_1.internalOpenBrowser)({
88
+ browser: browser_1.DEFAULT_BROWSER,
93
89
  browserExecutable,
94
90
  shouldDumpIo: dumpBrowserLogs,
95
91
  chromiumOptions,
96
- forceDeviceScaleFactor: scale !== null && scale !== void 0 ? scale : 1,
92
+ forceDeviceScaleFactor: scale,
97
93
  indent: false,
94
+ viewport: null,
98
95
  }));
99
- const page = await browserInstance.newPage();
96
+ const page = await browserInstance.newPage(sourceMapContext);
100
97
  await page.setViewport({
101
98
  width: composition.width,
102
99
  height: composition.height,
103
- deviceScaleFactor: scale !== null && scale !== void 0 ? scale : 1,
100
+ deviceScaleFactor: scale,
104
101
  });
105
102
  const errorCallback = (err) => {
106
103
  onError(err);
@@ -137,7 +134,7 @@ const innerRenderStill = async ({ composition, quality, imageFormat = image_form
137
134
  page.on('console', logCallback);
138
135
  }
139
136
  await (0, set_props_and_env_1.setPropsAndEnv)({
140
- inputProps: inputProps !== null && inputProps !== void 0 ? inputProps : {},
137
+ inputProps,
141
138
  envVariables,
142
139
  page,
143
140
  serveUrl,
@@ -151,7 +148,7 @@ const innerRenderStill = async ({ composition, quality, imageFormat = image_form
151
148
  await (0, puppeteer_evaluate_1.puppeteerEvaluateWithCatch)({
152
149
  // eslint-disable-next-line max-params
153
150
  pageFunction: (id, defaultProps, durationInFrames, fps, height, width) => {
154
- window.setBundleMode({
151
+ window.remotion_setBundleMode({
155
152
  type: 'composition',
156
153
  compositionName: id,
157
154
  compositionDefaultProps: defaultProps,
@@ -174,7 +171,6 @@ const innerRenderStill = async ({ composition, quality, imageFormat = image_form
174
171
  });
175
172
  await (0, seek_to_frame_1.seekToFrame)({ frame: stillFrame, page });
176
173
  const { buffer } = await (0, take_frame_and_compose_1.takeFrameAndCompose)({
177
- downloadMap,
178
174
  frame: stillFrame,
179
175
  freePage: page,
180
176
  height: composition.height,
@@ -185,53 +181,45 @@ const innerRenderStill = async ({ composition, quality, imageFormat = image_form
185
181
  jpegQuality,
186
182
  wantsBuffer: !output,
187
183
  compositor,
184
+ downloadMap,
188
185
  });
189
186
  await cleanup();
190
187
  return { buffer: output ? null : buffer };
191
188
  };
192
- /**
193
- *
194
- * @description Render a still frame from a composition
195
- * @see [Documentation](https://www.remotion.dev/docs/renderer/render-still)
196
- */
197
- const renderStill = (options) => {
198
- var _a, _b;
199
- const downloadMap = (_a = options.downloadMap) !== null && _a !== void 0 ? _a : (0, download_map_1.makeDownloadMap)();
200
- const onDownload = (_b = options.onDownload) !== null && _b !== void 0 ? _b : (() => () => undefined);
189
+ const internalRenderStill = (options) => {
190
+ const cleanup = [];
201
191
  const happyPath = new Promise((resolve, reject) => {
202
- var _a, _b, _c;
203
192
  const onError = (err) => reject(err);
204
- let close = null;
205
- (0, prepare_server_1.prepareServer)({
193
+ (0, prepare_server_1.makeOrReuseServer)(options.server, {
206
194
  webpackConfigOrServeUrl: options.serveUrl,
207
- onDownload,
208
- onError,
209
- port: (_a = options.port) !== null && _a !== void 0 ? _a : null,
210
- downloadMap,
195
+ port: options.port,
211
196
  remotionRoot: (0, find_closest_package_json_1.findRemotionRoot)(),
212
197
  concurrency: 1,
213
- verbose: (_b = options.verbose) !== null && _b !== void 0 ? _b : false,
214
- indent: (_c = options.indent) !== null && _c !== void 0 ? _c : false,
198
+ verbose: options.verbose,
199
+ indent: options.indent,
200
+ }, {
201
+ onDownload: options.onDownload,
202
+ onError,
215
203
  })
216
- .then(({ serveUrl, closeServer, offthreadPort, compositor }) => {
217
- close = closeServer;
204
+ .then(({ server, cleanupServer }) => {
205
+ cleanup.push(() => cleanupServer(false));
206
+ const { serveUrl, offthreadPort, compositor, sourceMap, downloadMap } = server;
218
207
  return innerRenderStill({
219
208
  ...options,
220
209
  serveUrl,
221
- onError: (err) => reject(err),
210
+ onError,
222
211
  proxyPort: offthreadPort,
223
- downloadMap,
224
212
  compositor,
213
+ sourceMapContext: sourceMap,
214
+ downloadMap,
225
215
  });
226
216
  })
227
217
  .then((res) => resolve(res))
228
218
  .catch((err) => reject(err))
229
219
  .finally(() => {
230
- // Clean download map if it was not passed in
231
- if (!(options === null || options === void 0 ? void 0 : options.downloadMap)) {
232
- (0, download_map_1.cleanDownloadMap)(downloadMap);
233
- }
234
- return close === null || close === void 0 ? void 0 : close(false);
220
+ cleanup.forEach((c) => {
221
+ c();
222
+ });
235
223
  });
236
224
  });
237
225
  return Promise.race([
@@ -244,4 +232,44 @@ const renderStill = (options) => {
244
232
  }),
245
233
  ]);
246
234
  };
235
+ exports.internalRenderStill = internalRenderStill;
236
+ /**
237
+ *
238
+ * @description Render a still frame from a composition
239
+ * @see [Documentation](https://www.remotion.dev/docs/renderer/render-still)
240
+ */
241
+ const renderStill = (options) => {
242
+ var _a;
243
+ const { composition, serveUrl, browserExecutable, cancelSignal, chromiumOptions, dumpBrowserLogs, envVariables, frame, imageFormat, inputProps, jpegQuality, onBrowserLog, onDownload, output, overwrite, port, puppeteerInstance, scale, timeoutInMilliseconds, verbose, quality, } = options;
244
+ if (typeof jpegQuality !== 'undefined' && imageFormat !== 'jpeg') {
245
+ throw new Error("You can only pass the `quality` option if `imageFormat` is 'jpeg'.");
246
+ }
247
+ if (quality) {
248
+ console.warn('Passing `quality()` to `renderStill` is deprecated. Use `jpegQuality` instead.');
249
+ }
250
+ return (0, exports.internalRenderStill)({
251
+ composition,
252
+ browserExecutable: browserExecutable !== null && browserExecutable !== void 0 ? browserExecutable : null,
253
+ cancelSignal: cancelSignal !== null && cancelSignal !== void 0 ? cancelSignal : null,
254
+ chromiumOptions: chromiumOptions !== null && chromiumOptions !== void 0 ? chromiumOptions : {},
255
+ dumpBrowserLogs: dumpBrowserLogs !== null && dumpBrowserLogs !== void 0 ? dumpBrowserLogs : false,
256
+ envVariables: envVariables !== null && envVariables !== void 0 ? envVariables : {},
257
+ frame: frame !== null && frame !== void 0 ? frame : 0,
258
+ imageFormat: imageFormat !== null && imageFormat !== void 0 ? imageFormat : image_format_1.DEFAULT_STILL_IMAGE_FORMAT,
259
+ indent: false,
260
+ inputProps: inputProps !== null && inputProps !== void 0 ? inputProps : {},
261
+ jpegQuality: (_a = jpegQuality !== null && jpegQuality !== void 0 ? jpegQuality : quality) !== null && _a !== void 0 ? _a : jpeg_quality_1.DEFAULT_JPEG_QUALITY,
262
+ onBrowserLog: onBrowserLog !== null && onBrowserLog !== void 0 ? onBrowserLog : null,
263
+ onDownload: onDownload !== null && onDownload !== void 0 ? onDownload : null,
264
+ output: output !== null && output !== void 0 ? output : null,
265
+ overwrite: overwrite !== null && overwrite !== void 0 ? overwrite : overwrite_1.DEFAULT_OVERWRITE,
266
+ port: port !== null && port !== void 0 ? port : null,
267
+ puppeteerInstance: puppeteerInstance !== null && puppeteerInstance !== void 0 ? puppeteerInstance : null,
268
+ scale: scale !== null && scale !== void 0 ? scale : 1,
269
+ server: undefined,
270
+ serveUrl,
271
+ timeoutInMilliseconds: timeoutInMilliseconds !== null && timeoutInMilliseconds !== void 0 ? timeoutInMilliseconds : TimeoutSettings_1.DEFAULT_TIMEOUT,
272
+ verbose: verbose !== null && verbose !== void 0 ? verbose : false,
273
+ });
274
+ };
247
275
  exports.renderStill = renderStill;
@@ -1,5 +1,5 @@
1
1
  import type { HeadlessBrowser } from './browser/Browser';
2
- export declare type BrowserReplacer = {
2
+ export type BrowserReplacer = {
3
3
  getBrowser: () => HeadlessBrowser;
4
4
  replaceBrowser: (make: () => Promise<HeadlessBrowser>, makeNewPages: () => Promise<void>) => Promise<HeadlessBrowser>;
5
5
  };
@@ -1,4 +1,3 @@
1
- /// <reference types="node" />
2
1
  import type { ClipRegion } from 'remotion';
3
2
  import type { Page } from './browser/BrowserPage';
4
3
  import type { StillImageFormat } from './image-format';
@@ -1,4 +1,3 @@
1
- /// <reference types="node" />
2
1
  import type { ClipRegion } from 'remotion';
3
2
  import type { Page } from './browser/BrowserPage';
4
3
  import type { StillImageFormat } from './image-format';
@@ -1,10 +1,25 @@
1
1
  import type { AnyCompMetadata } from 'remotion';
2
- import type { DownloadMap } from './assets/download-map';
3
2
  import type { BrowserExecutable } from './browser-executable';
4
3
  import type { BrowserLog } from './browser-log';
5
4
  import type { HeadlessBrowser } from './browser/Browser';
6
5
  import type { ChromiumOptions } from './open-browser';
7
- declare type SelectCompositionsConfig = {
6
+ import type { RemotionServer } from './prepare-server';
7
+ type InternalSelectCompositionsConfig = {
8
+ inputProps: Record<string, unknown>;
9
+ envVariables: Record<string, string>;
10
+ puppeteerInstance: HeadlessBrowser | undefined;
11
+ onBrowserLog: null | ((log: BrowserLog) => void);
12
+ browserExecutable: BrowserExecutable | null;
13
+ timeoutInMilliseconds: number;
14
+ chromiumOptions: ChromiumOptions;
15
+ port: number | null;
16
+ indent: boolean;
17
+ server: RemotionServer | undefined;
18
+ verbose: boolean;
19
+ serveUrl: string;
20
+ id: string;
21
+ };
22
+ export type SelectCompositionOptions = {
8
23
  inputProps?: Record<string, unknown> | null;
9
24
  envVariables?: Record<string, string>;
10
25
  puppeteerInstance?: HeadlessBrowser;
@@ -13,21 +28,14 @@ declare type SelectCompositionsConfig = {
13
28
  timeoutInMilliseconds?: number;
14
29
  chromiumOptions?: ChromiumOptions;
15
30
  port?: number | null;
16
- /**
17
- * @deprecated Only for Remotion internal usage
18
- */
19
- downloadMap?: DownloadMap;
20
- /**
21
- * @deprecated Only for Remotion internal usage
22
- */
23
- indent?: boolean;
24
31
  verbose?: boolean;
25
32
  serveUrl: string;
26
33
  id: string;
27
34
  };
35
+ export declare const internalSelectComposition: (options: InternalSelectCompositionsConfig) => Promise<AnyCompMetadata>;
28
36
  /**
29
37
  * @description Gets a composition defined in a Remotion project based on a Webpack bundle.
30
38
  * @see [Documentation](https://www.remotion.dev/docs/renderer/select-composition)
31
39
  */
32
- export declare const selectComposition: (options: SelectCompositionsConfig) => Promise<AnyCompMetadata>;
40
+ export declare const selectComposition: (options: SelectCompositionOptions) => Promise<AnyCompMetadata>;
33
41
  export {};
@@ -1,19 +1,20 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.selectComposition = void 0;
4
- const download_map_1 = require("./assets/download-map");
3
+ exports.selectComposition = exports.internalSelectComposition = void 0;
4
+ const TimeoutSettings_1 = require("./browser/TimeoutSettings");
5
5
  const handle_javascript_exception_1 = require("./error-handling/handle-javascript-exception");
6
6
  const find_closest_package_json_1 = require("./find-closest-package-json");
7
7
  const get_browser_instance_1 = require("./get-browser-instance");
8
+ const logger_1 = require("./logger");
8
9
  const prepare_server_1 = require("./prepare-server");
9
10
  const puppeteer_evaluate_1 = require("./puppeteer-evaluate");
10
11
  const seek_to_frame_1 = require("./seek-to-frame");
11
12
  const set_props_and_env_1 = require("./set-props-and-env");
12
13
  const validate_puppeteer_timeout_1 = require("./validate-puppeteer-timeout");
13
- const innerSelectComposition = async ({ page, onBrowserLog, inputProps, envVariables, serveUrl, timeoutInMilliseconds, port, id, }) => {
14
+ const innerSelectComposition = async ({ page, onBrowserLog, inputProps, envVariables, serveUrl, timeoutInMilliseconds, port, id, indent, verbose, }) => {
14
15
  if (onBrowserLog) {
15
16
  page.on('console', (log) => {
16
- onBrowserLog === null || onBrowserLog === void 0 ? void 0 : onBrowserLog({
17
+ onBrowserLog({
17
18
  stackTrace: log.stackTrace(),
18
19
  text: log.text,
19
20
  type: log.type,
@@ -22,7 +23,7 @@ const innerSelectComposition = async ({ page, onBrowserLog, inputProps, envVaria
22
23
  }
23
24
  (0, validate_puppeteer_timeout_1.validatePuppeteerTimeout)(timeoutInMilliseconds);
24
25
  await (0, set_props_and_env_1.setPropsAndEnv)({
25
- inputProps: inputProps !== null && inputProps !== void 0 ? inputProps : {},
26
+ inputProps,
26
27
  envVariables,
27
28
  page,
28
29
  serveUrl,
@@ -36,7 +37,7 @@ const innerSelectComposition = async ({ page, onBrowserLog, inputProps, envVaria
36
37
  await (0, puppeteer_evaluate_1.puppeteerEvaluateWithCatch)({
37
38
  page,
38
39
  pageFunction: () => {
39
- window.setBundleMode({
40
+ window.remotion_setBundleMode({
40
41
  type: 'evaluation',
41
42
  });
42
43
  },
@@ -44,76 +45,112 @@ const innerSelectComposition = async ({ page, onBrowserLog, inputProps, envVaria
44
45
  args: [],
45
46
  });
46
47
  await (0, seek_to_frame_1.waitForReady)(page);
48
+ logger_1.Log.verboseAdvanced({
49
+ indent,
50
+ tag: 'selectComposition()',
51
+ logLevel: verbose ? 'verbose' : 'info',
52
+ }, 'Running calculateMetadata()...');
53
+ const time = Date.now();
47
54
  const result = await (0, puppeteer_evaluate_1.puppeteerEvaluateWithCatch)({
48
55
  pageFunction: (_id) => {
49
- return window.calculateComposition(_id);
56
+ return window.remotion_calculateComposition(_id);
50
57
  },
51
58
  frame: null,
52
59
  page,
53
60
  args: [id],
54
61
  });
62
+ logger_1.Log.verboseAdvanced({
63
+ indent,
64
+ tag: 'selectComposition()',
65
+ logLevel: verbose ? 'verbose' : 'info',
66
+ }, `calculateMetadata() took ${Date.now() - time}ms`);
55
67
  return result;
56
68
  };
57
- /**
58
- * @description Gets a composition defined in a Remotion project based on a Webpack bundle.
59
- * @see [Documentation](https://www.remotion.dev/docs/renderer/select-composition)
60
- */
61
- const selectComposition = async (options) => {
62
- const { puppeteerInstance, browserExecutable, chromiumOptions, downloadMap: passedDownloadMap, serveUrl: serveUrlOrWebpackUrl, verbose, indent, port, } = options;
63
- const downloadMap = passedDownloadMap !== null && passedDownloadMap !== void 0 ? passedDownloadMap : (0, download_map_1.makeDownloadMap)();
64
- const { page, cleanup } = await (0, get_browser_instance_1.getPageAndCleanupFn)({
69
+ const internalSelectComposition = async (options) => {
70
+ const cleanup = [];
71
+ const { puppeteerInstance, browserExecutable, chromiumOptions, serveUrl: serveUrlOrWebpackUrl, verbose, indent, port, envVariables, id, inputProps, onBrowserLog, server, timeoutInMilliseconds, } = options;
72
+ const { page, cleanup: cleanupPage } = await (0, get_browser_instance_1.getPageAndCleanupFn)({
65
73
  passedInInstance: puppeteerInstance,
66
- browserExecutable: browserExecutable !== null && browserExecutable !== void 0 ? browserExecutable : null,
67
- chromiumOptions: chromiumOptions !== null && chromiumOptions !== void 0 ? chromiumOptions : {},
74
+ browserExecutable,
75
+ chromiumOptions,
76
+ context: null,
77
+ forceDeviceScaleFactor: undefined,
78
+ indent,
79
+ shouldDumpIo: verbose,
68
80
  });
81
+ cleanup.push(() => cleanupPage());
69
82
  return new Promise((resolve, reject) => {
70
83
  const onError = (err) => reject(err);
71
- const cleanupPageError = (0, handle_javascript_exception_1.handleJavascriptException)({
84
+ cleanup.push((0, handle_javascript_exception_1.handleJavascriptException)({
72
85
  page,
73
86
  frame: null,
74
87
  onError,
75
- });
76
- let close = null;
77
- (0, prepare_server_1.prepareServer)({
88
+ }));
89
+ (0, prepare_server_1.makeOrReuseServer)(options.server, {
78
90
  webpackConfigOrServeUrl: serveUrlOrWebpackUrl,
79
- onDownload: () => undefined,
80
- onError,
81
- port: port !== null && port !== void 0 ? port : null,
82
- downloadMap,
91
+ port,
83
92
  remotionRoot: (0, find_closest_package_json_1.findRemotionRoot)(),
84
93
  concurrency: 1,
85
- verbose: verbose !== null && verbose !== void 0 ? verbose : false,
86
- indent: indent !== null && indent !== void 0 ? indent : false,
94
+ verbose,
95
+ indent,
96
+ }, {
97
+ onDownload: () => undefined,
98
+ onError,
87
99
  })
88
- .then(({ serveUrl, closeServer, offthreadPort }) => {
89
- close = closeServer;
100
+ .then(({ server: { serveUrl, offthreadPort, sourceMap }, cleanupServer }) => {
101
+ page.setBrowserSourceMapContext(sourceMap);
102
+ cleanup.push(() => cleanupServer(true));
90
103
  return innerSelectComposition({
91
- ...options,
92
104
  serveUrl,
93
105
  page,
94
106
  port: offthreadPort,
107
+ browserExecutable,
108
+ chromiumOptions,
109
+ envVariables,
110
+ id,
111
+ inputProps,
112
+ onBrowserLog,
113
+ timeoutInMilliseconds,
114
+ verbose,
115
+ indent,
116
+ puppeteerInstance,
117
+ server,
95
118
  });
96
119
  })
97
120
  .then((comp) => {
98
- if (close) {
99
- return Promise.all([comp, close(true)]);
100
- }
101
- return Promise.resolve([comp, null]);
102
- })
103
- .then(([comp]) => {
104
121
  return resolve(comp);
105
122
  })
106
123
  .catch((err) => {
107
124
  reject(err);
108
125
  })
109
126
  .finally(() => {
110
- cleanup();
111
- cleanupPageError();
112
- // Clean download map if it was not passed in
113
- if (!passedDownloadMap) {
114
- (0, download_map_1.cleanDownloadMap)(downloadMap);
115
- }
127
+ cleanup.forEach((c) => {
128
+ c();
129
+ });
116
130
  });
117
131
  });
118
132
  };
133
+ exports.internalSelectComposition = internalSelectComposition;
134
+ /**
135
+ * @description Gets a composition defined in a Remotion project based on a Webpack bundle.
136
+ * @see [Documentation](https://www.remotion.dev/docs/renderer/select-composition)
137
+ */
138
+ const selectComposition = (options) => {
139
+ const { id, serveUrl, browserExecutable, chromiumOptions, envVariables, inputProps, onBrowserLog, port, puppeteerInstance, timeoutInMilliseconds, verbose, } = options;
140
+ return (0, exports.internalSelectComposition)({
141
+ id,
142
+ serveUrl,
143
+ browserExecutable: browserExecutable !== null && browserExecutable !== void 0 ? browserExecutable : null,
144
+ chromiumOptions: chromiumOptions !== null && chromiumOptions !== void 0 ? chromiumOptions : {},
145
+ envVariables: envVariables !== null && envVariables !== void 0 ? envVariables : {},
146
+ inputProps: inputProps !== null && inputProps !== void 0 ? inputProps : {},
147
+ onBrowserLog: onBrowserLog !== null && onBrowserLog !== void 0 ? onBrowserLog : null,
148
+ port: port !== null && port !== void 0 ? port : null,
149
+ puppeteerInstance,
150
+ timeoutInMilliseconds: timeoutInMilliseconds !== null && timeoutInMilliseconds !== void 0 ? timeoutInMilliseconds : TimeoutSettings_1.DEFAULT_TIMEOUT,
151
+ verbose: verbose !== null && verbose !== void 0 ? verbose : false,
152
+ indent: false,
153
+ server: undefined,
154
+ });
155
+ };
119
156
  exports.selectComposition = selectComposition;
@@ -1,10 +1,8 @@
1
- import type { RenderMediaOnDownload } from './assets/download-and-map-assets-to-file';
2
1
  import type { DownloadMap } from './assets/download-map';
3
2
  import type { Compositor } from './compositor/compositor';
3
+ import type { OffthreadVideoServerEmitter } from './offthread-video-server';
4
4
  export declare const serveStatic: (path: string | null, options: {
5
5
  port: number | null;
6
- onDownload: RenderMediaOnDownload;
7
- onError: (err: Error) => void;
8
6
  downloadMap: DownloadMap;
9
7
  remotionRoot: string;
10
8
  concurrency: number;
@@ -14,4 +12,5 @@ export declare const serveStatic: (path: string | null, options: {
14
12
  port: number;
15
13
  close: () => Promise<void>;
16
14
  compositor: Compositor;
15
+ events: OffthreadVideoServerEmitter;
17
16
  }>;
@@ -9,9 +9,7 @@ const get_port_1 = require("./get-port");
9
9
  const offthread_video_server_1 = require("./offthread-video-server");
10
10
  const serve_handler_1 = require("./serve-handler");
11
11
  const serveStatic = async (path, options) => {
12
- const { listener: offthreadRequest, close: closeCompositor, compositor, } = (0, offthread_video_server_1.startOffthreadVideoServer)({
13
- onDownload: options.onDownload,
14
- onError: options.onError,
12
+ const { listener: offthreadRequest, close: closeCompositor, compositor, events, } = (0, offthread_video_server_1.startOffthreadVideoServer)({
15
13
  downloadMap: options.downloadMap,
16
14
  concurrency: options.concurrency,
17
15
  verbose: options.verbose,
@@ -87,7 +85,7 @@ const serveStatic = async (path, options) => {
87
85
  }),
88
86
  ]);
89
87
  };
90
- return { port: selectedPort, close, compositor };
88
+ return { port: selectedPort, close, compositor, events };
91
89
  }
92
90
  catch (err) {
93
91
  if (!(err instanceof Error)) {
@@ -1,5 +1,5 @@
1
1
  import type { Page } from './browser/BrowserPage';
2
- declare type SetPropsAndEnv = {
2
+ type SetPropsAndEnv = {
3
3
  inputProps: Record<string, unknown>;
4
4
  envVariables: Record<string, string> | undefined;
5
5
  page: Page;
@@ -1,14 +1,39 @@
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';
5
4
  import type { Codec } from './codec';
6
5
  import type { FfmpegOverrideFn } from './ffmpeg-override';
7
- import type { VideoImageFormat } from './image-format';
8
6
  import type { CancelSignal } from './make-cancel-signal';
9
7
  import type { PixelFormat } from './pixel-format';
10
8
  import type { ProResProfile } from './prores-profile';
11
- export declare type StitcherOptions = {
9
+ type InternalStitchFramesToVideoOptions = {
10
+ audioBitrate: string | null;
11
+ videoBitrate: string | null;
12
+ fps: number;
13
+ width: number;
14
+ height: number;
15
+ outputLocation: string | null;
16
+ force: boolean;
17
+ assetsInfo: RenderAssetInfo;
18
+ pixelFormat: PixelFormat;
19
+ numberOfGifLoops: number | null;
20
+ codec: Codec;
21
+ audioCodec: AudioCodec | null;
22
+ crf: number | null;
23
+ onProgress?: null | ((progress: number) => void);
24
+ onDownload: undefined | RenderMediaOnDownload;
25
+ proResProfile: undefined | ProResProfile;
26
+ verbose: boolean;
27
+ dir: string;
28
+ cancelSignal: CancelSignal | null;
29
+ preEncodedFileLocation: string | null;
30
+ preferLossless: boolean;
31
+ indent: boolean;
32
+ muted: boolean;
33
+ enforceAudioTrack: boolean;
34
+ ffmpegOverride: null | FfmpegOverrideFn;
35
+ };
36
+ export type StitchFramesToVideoOptions = {
12
37
  audioBitrate?: string | null;
13
38
  videoBitrate?: string | null;
14
39
  fps: number;
@@ -26,20 +51,16 @@ export declare type StitcherOptions = {
26
51
  onDownload?: RenderMediaOnDownload;
27
52
  proResProfile?: ProResProfile;
28
53
  verbose?: boolean;
29
- dir?: string;
54
+ dir: string;
30
55
  cancelSignal?: CancelSignal;
31
- internalOptions?: {
32
- preEncodedFileLocation: string | null;
33
- imageFormat: VideoImageFormat;
34
- preferLossless: boolean;
35
- indent: boolean;
36
- };
37
56
  muted?: boolean;
38
57
  enforceAudioTrack?: boolean;
39
58
  ffmpegOverride?: FfmpegOverrideFn;
40
59
  };
60
+ export declare const internalStitchFramesToVideo: (options: InternalStitchFramesToVideoOptions) => Promise<Buffer | null>;
41
61
  /**
42
62
  * @description Takes a series of images and audio information generated by renderFrames() and encodes it to a video.
43
63
  * @see [Documentation](https://www.remotion.dev/docs/renderer/stitch-frames-to-video)
44
64
  */
45
- export declare const stitchFramesToVideo: (options: StitcherOptions) => Promise<Buffer | null>;
65
+ export declare const stitchFramesToVideo: ({ assetsInfo, force, fps, height, width, audioBitrate, audioCodec, cancelSignal, codec, crf, dir, enforceAudioTrack, ffmpegOverride, muted, numberOfGifLoops, onDownload, onProgress, outputLocation, pixelFormat, proResProfile, verbose, videoBitrate, }: StitchFramesToVideoOptions) => Promise<Buffer | null>;
66
+ export {};