@remotion/renderer 4.0.533 → 4.0.535

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 (285) hide show
  1. package/dist/aac-priming.js +6 -2
  2. package/dist/browser/BrowserFetcher.d.ts +7 -1
  3. package/dist/browser/BrowserFetcher.js +33 -13
  4. package/dist/browser/BrowserPage.js +4 -0
  5. package/dist/browser/Connection.js +5 -17
  6. package/dist/browser/DOMWorld.js +19 -13
  7. package/dist/browser/devtools-commands.d.ts +13 -1
  8. package/dist/browser/devtools-types.d.ts +62 -0
  9. package/dist/browser/get-chrome-download-url.d.ts +1 -1
  10. package/dist/browser/get-chrome-download-url.js +19 -33
  11. package/dist/can-use-parallel-encoding.d.ts +0 -1
  12. package/dist/can-use-parallel-encoding.js +10 -10
  13. package/dist/client.d.ts +402 -4
  14. package/dist/client.js +2 -0
  15. package/dist/combine-chunks.d.ts +2 -1
  16. package/dist/combine-chunks.js +81 -52
  17. package/dist/combine-video-streams.js +3 -0
  18. package/dist/compositor/get-executable-path.js +30 -15
  19. package/dist/cycle-browser-tabs.js +9 -1
  20. package/dist/ensure-browser.d.ts +3 -0
  21. package/dist/ensure-browser.js +30 -6
  22. package/dist/esm/client.mjs +1325 -954
  23. package/dist/esm/index.mjs +4465 -3324
  24. package/dist/esm/pure.mjs +36 -10
  25. package/dist/file-extensions.js +4 -1
  26. package/dist/get-mp4-brand.d.ts +1 -0
  27. package/dist/get-mp4-brand.js +21 -0
  28. package/dist/get-video-threads-flag.js +5 -1
  29. package/dist/image-format.d.ts +1 -0
  30. package/dist/image-format.js +8 -4
  31. package/dist/index.d.ts +58 -2
  32. package/dist/index.js +4 -0
  33. package/dist/memory/from-macos-sysctl.d.ts +1 -0
  34. package/dist/memory/from-macos-sysctl.js +50 -0
  35. package/dist/memory/from-proc-meminfo.d.ts +1 -1
  36. package/dist/memory/from-proc-meminfo.js +7 -4
  37. package/dist/memory/get-available-memory.js +29 -21
  38. package/dist/mux-video-and-audio.js +11 -2
  39. package/dist/next-frame-to-render.d.ts +3 -7
  40. package/dist/next-frame-to-render.js +3 -22
  41. package/dist/open-browser.js +1 -0
  42. package/dist/options/allow-html-in-canvas.d.ts +1 -0
  43. package/dist/options/allow-html-in-canvas.js +2 -1
  44. package/dist/options/api-key.d.ts +1 -0
  45. package/dist/options/api-key.js +2 -1
  46. package/dist/options/ask-ai.d.ts +1 -0
  47. package/dist/options/ask-ai.js +2 -1
  48. package/dist/options/audio-bitrate.d.ts +1 -0
  49. package/dist/options/audio-bitrate.js +2 -1
  50. package/dist/options/audio-codec.d.ts +1 -0
  51. package/dist/options/audio-codec.js +13 -6
  52. package/dist/options/beep-on-finish.d.ts +1 -0
  53. package/dist/options/beep-on-finish.js +2 -1
  54. package/dist/options/benchmark-concurrencies.d.ts +1 -0
  55. package/dist/options/benchmark-concurrencies.js +2 -1
  56. package/dist/options/binaries-directory.d.ts +1 -0
  57. package/dist/options/binaries-directory.js +2 -1
  58. package/dist/options/browser-executable.d.ts +1 -0
  59. package/dist/options/browser-executable.js +2 -1
  60. package/dist/options/browser.d.ts +1 -0
  61. package/dist/options/browser.js +2 -1
  62. package/dist/options/bundle-cache.d.ts +1 -0
  63. package/dist/options/bundle-cache.js +2 -1
  64. package/dist/options/canvas-tabs.d.ts +1 -0
  65. package/dist/options/canvas-tabs.js +2 -1
  66. package/dist/options/chrome-mode.d.ts +1 -0
  67. package/dist/options/chrome-mode.js +2 -1
  68. package/dist/options/color-space.d.ts +1 -0
  69. package/dist/options/color-space.js +2 -1
  70. package/dist/options/concurrency.d.ts +1 -0
  71. package/dist/options/concurrency.js +2 -1
  72. package/dist/options/config.d.ts +1 -0
  73. package/dist/options/config.js +2 -1
  74. package/dist/options/crf.d.ts +1 -0
  75. package/dist/options/crf.js +2 -1
  76. package/dist/options/cross-site-isolation.d.ts +1 -0
  77. package/dist/options/cross-site-isolation.js +2 -1
  78. package/dist/options/dark-mode.d.ts +1 -0
  79. package/dist/options/dark-mode.js +2 -1
  80. package/dist/options/default-coding-agent.d.ts +1 -0
  81. package/dist/options/default-coding-agent.js +2 -1
  82. package/dist/options/default-editor.d.ts +1 -0
  83. package/dist/options/default-editor.js +2 -1
  84. package/dist/options/default-premount-in-seconds.d.ts +19 -0
  85. package/dist/options/default-premount-in-seconds.js +36 -0
  86. package/dist/options/delete-after.d.ts +1 -0
  87. package/dist/options/delete-after.js +2 -1
  88. package/dist/options/disable-git-source.d.ts +1 -0
  89. package/dist/options/disable-git-source.js +2 -1
  90. package/dist/options/disable-shared-memory-capture.d.ts +17 -0
  91. package/dist/options/disable-shared-memory-capture.js +30 -0
  92. package/dist/options/disable-web-security.d.ts +1 -0
  93. package/dist/options/disable-web-security.js +2 -1
  94. package/dist/options/disallow-parallel-encoding.d.ts +1 -0
  95. package/dist/options/disallow-parallel-encoding.js +2 -1
  96. package/dist/options/enable-cancellation.d.ts +1 -0
  97. package/dist/options/enable-cancellation.js +2 -1
  98. package/dist/options/enable-lambda-insights.d.ts +1 -0
  99. package/dist/options/enable-lambda-insights.js +2 -1
  100. package/dist/options/enable-multiprocess-on-linux.d.ts +1 -0
  101. package/dist/options/enable-multiprocess-on-linux.js +2 -1
  102. package/dist/options/encoding-buffer-size.d.ts +1 -0
  103. package/dist/options/encoding-buffer-size.js +2 -1
  104. package/dist/options/encoding-max-rate.d.ts +1 -0
  105. package/dist/options/encoding-max-rate.js +2 -1
  106. package/dist/options/enforce-audio.d.ts +1 -0
  107. package/dist/options/enforce-audio.js +2 -1
  108. package/dist/options/env-file.d.ts +1 -0
  109. package/dist/options/env-file.js +2 -1
  110. package/dist/options/every-nth-frame.d.ts +1 -0
  111. package/dist/options/every-nth-frame.js +2 -1
  112. package/dist/options/experimental-keep-audio-context-alive.d.ts +1 -0
  113. package/dist/options/experimental-keep-audio-context-alive.js +2 -1
  114. package/dist/options/experimental-sequence-activity-limit.d.ts +19 -0
  115. package/dist/options/experimental-sequence-activity-limit.js +40 -0
  116. package/dist/options/experimental-sequence-activity.d.ts +19 -0
  117. package/dist/options/experimental-sequence-activity.js +38 -0
  118. package/dist/options/experimental-tracks.d.ts +19 -0
  119. package/dist/options/experimental-tracks.js +43 -0
  120. package/dist/options/folder-expiry.d.ts +1 -0
  121. package/dist/options/folder-expiry.js +2 -1
  122. package/dist/options/for-seamless-aac-concatenation.d.ts +1 -0
  123. package/dist/options/for-seamless-aac-concatenation.js +2 -1
  124. package/dist/options/force-new-studio.d.ts +1 -0
  125. package/dist/options/force-new-studio.js +2 -1
  126. package/dist/options/frames.d.ts +1 -0
  127. package/dist/options/frames.js +2 -1
  128. package/dist/options/gl.d.ts +1 -0
  129. package/dist/options/gl.js +2 -1
  130. package/dist/options/gop-size.d.ts +1 -0
  131. package/dist/options/gop-size.js +2 -1
  132. package/dist/options/hardware-acceleration.d.ts +1 -0
  133. package/dist/options/hardware-acceleration.js +2 -1
  134. package/dist/options/headless.d.ts +1 -0
  135. package/dist/options/headless.js +2 -1
  136. package/dist/options/ignore-certificate-errors.d.ts +1 -0
  137. package/dist/options/ignore-certificate-errors.js +2 -1
  138. package/dist/options/image-sequence-pattern.d.ts +2 -1
  139. package/dist/options/image-sequence-pattern.js +2 -1
  140. package/dist/options/image-sequence.d.ts +1 -0
  141. package/dist/options/image-sequence.js +2 -1
  142. package/dist/options/index.d.ts +211 -2
  143. package/dist/options/index.js +12 -0
  144. package/dist/options/interactivity.d.ts +1 -0
  145. package/dist/options/interactivity.js +2 -1
  146. package/dist/options/ipv4.d.ts +1 -0
  147. package/dist/options/ipv4.js +2 -1
  148. package/dist/options/is-production.d.ts +1 -0
  149. package/dist/options/is-production.js +2 -1
  150. package/dist/options/jpeg-quality.d.ts +1 -0
  151. package/dist/options/jpeg-quality.js +6 -2
  152. package/dist/options/keyboard-shortcuts.d.ts +1 -0
  153. package/dist/options/keyboard-shortcuts.js +2 -1
  154. package/dist/options/latency-hint.d.ts +1 -0
  155. package/dist/options/latency-hint.js +2 -1
  156. package/dist/options/license-key.d.ts +1 -0
  157. package/dist/options/license-key.js +2 -1
  158. package/dist/options/log-level.d.ts +1 -0
  159. package/dist/options/log-level.js +2 -1
  160. package/dist/options/metadata.d.ts +1 -0
  161. package/dist/options/metadata.js +2 -1
  162. package/dist/options/mute.d.ts +1 -0
  163. package/dist/options/mute.js +2 -1
  164. package/dist/options/no-open.d.ts +1 -0
  165. package/dist/options/no-open.js +2 -1
  166. package/dist/options/number-of-gif-loops.d.ts +1 -0
  167. package/dist/options/number-of-gif-loops.js +2 -1
  168. package/dist/options/number-of-shared-audio-tags.d.ts +1 -0
  169. package/dist/options/number-of-shared-audio-tags.js +2 -1
  170. package/dist/options/offthreadvideo-cache-size.d.ts +1 -0
  171. package/dist/options/offthreadvideo-cache-size.js +2 -1
  172. package/dist/options/offthreadvideo-threads.d.ts +1 -0
  173. package/dist/options/offthreadvideo-threads.js +2 -1
  174. package/dist/options/on-browser-download.d.ts +1 -0
  175. package/dist/options/on-browser-download.js +2 -1
  176. package/dist/options/option.d.ts +1 -0
  177. package/dist/options/options-map.d.ts +189 -1
  178. package/dist/options/options-map.js +4 -0
  179. package/dist/options/out-dir.d.ts +1 -0
  180. package/dist/options/out-dir.js +2 -1
  181. package/dist/options/override-duration.d.ts +1 -0
  182. package/dist/options/override-duration.js +2 -1
  183. package/dist/options/override-fps.d.ts +1 -0
  184. package/dist/options/override-fps.js +2 -1
  185. package/dist/options/override-height.d.ts +1 -0
  186. package/dist/options/override-height.js +2 -1
  187. package/dist/options/override-width.d.ts +1 -0
  188. package/dist/options/override-width.js +2 -1
  189. package/dist/options/overwrite.d.ts +1 -0
  190. package/dist/options/overwrite.js +2 -1
  191. package/dist/options/package-manager.d.ts +1 -0
  192. package/dist/options/package-manager.js +2 -1
  193. package/dist/options/pixel-format.d.ts +1 -0
  194. package/dist/options/pixel-format.js +2 -1
  195. package/dist/options/port.d.ts +1 -0
  196. package/dist/options/port.js +2 -1
  197. package/dist/options/prefer-lossless.d.ts +1 -0
  198. package/dist/options/prefer-lossless.js +2 -1
  199. package/dist/options/preview-sample-rate.d.ts +1 -0
  200. package/dist/options/preview-sample-rate.js +2 -1
  201. package/dist/options/props.d.ts +1 -0
  202. package/dist/options/props.js +2 -1
  203. package/dist/options/prores-profile.d.ts +1 -0
  204. package/dist/options/prores-profile.js +2 -1
  205. package/dist/options/public-dir.d.ts +1 -0
  206. package/dist/options/public-dir.js +2 -1
  207. package/dist/options/public-license-key.d.ts +1 -0
  208. package/dist/options/public-license-key.js +2 -1
  209. package/dist/options/public-path.d.ts +1 -0
  210. package/dist/options/public-path.js +2 -1
  211. package/dist/options/repro.d.ts +1 -0
  212. package/dist/options/repro.js +2 -1
  213. package/dist/options/rspack.d.ts +2 -1
  214. package/dist/options/rspack.js +2 -1
  215. package/dist/options/runs.d.ts +1 -0
  216. package/dist/options/runs.js +2 -1
  217. package/dist/options/sample-rate.d.ts +1 -0
  218. package/dist/options/sample-rate.js +2 -1
  219. package/dist/options/scale.d.ts +1 -0
  220. package/dist/options/scale.js +2 -1
  221. package/dist/options/separate-audio.d.ts +1 -0
  222. package/dist/options/separate-audio.js +3 -2
  223. package/dist/options/show-premounting.d.ts +19 -0
  224. package/dist/options/show-premounting.js +33 -0
  225. package/dist/options/skip-skills.d.ts +1 -0
  226. package/dist/options/skip-skills.js +2 -1
  227. package/dist/options/still-frame.d.ts +1 -0
  228. package/dist/options/still-frame.js +2 -1
  229. package/dist/options/still-image-format.d.ts +1 -0
  230. package/dist/options/still-image-format.js +2 -1
  231. package/dist/options/throw-if-site-exists.d.ts +1 -0
  232. package/dist/options/throw-if-site-exists.js +2 -1
  233. package/dist/options/timeout.d.ts +1 -0
  234. package/dist/options/timeout.js +2 -1
  235. package/dist/options/user-agent.d.ts +1 -0
  236. package/dist/options/user-agent.js +2 -1
  237. package/dist/options/version-flag.d.ts +1 -0
  238. package/dist/options/version-flag.js +2 -1
  239. package/dist/options/video-bitrate.d.ts +1 -0
  240. package/dist/options/video-bitrate.js +2 -1
  241. package/dist/options/video-cache-size.d.ts +1 -0
  242. package/dist/options/video-cache-size.js +2 -1
  243. package/dist/options/video-codec.d.ts +1 -0
  244. package/dist/options/video-codec.js +5 -3
  245. package/dist/options/video-image-format.d.ts +1 -0
  246. package/dist/options/video-image-format.js +7 -2
  247. package/dist/options/webhook-custom-data.d.ts +1 -0
  248. package/dist/options/webhook-custom-data.js +2 -1
  249. package/dist/options/webpack-poll.d.ts +1 -0
  250. package/dist/options/webpack-poll.js +2 -1
  251. package/dist/options/x264-preset.d.ts +1 -0
  252. package/dist/options/x264-preset.js +2 -1
  253. package/dist/prespawn-ffmpeg.d.ts +20 -0
  254. package/dist/prespawn-ffmpeg.js +157 -29
  255. package/dist/probe-shared-memory-capture.d.ts +8 -0
  256. package/dist/probe-shared-memory-capture.js +111 -0
  257. package/dist/puppeteer-screenshot.d.ts +3 -1
  258. package/dist/puppeteer-screenshot.js +1 -0
  259. package/dist/pure.d.ts +1 -1
  260. package/dist/remotion-shared-memory-ffmpeg.d.ts +26 -0
  261. package/dist/remotion-shared-memory-ffmpeg.js +312 -0
  262. package/dist/remotion-shared-memory.d.ts +49 -0
  263. package/dist/remotion-shared-memory.js +359 -0
  264. package/dist/render-frame-and-retry-target-close.d.ts +5 -2
  265. package/dist/render-frame-and-retry-target-close.js +20 -4
  266. package/dist/render-frame-with-option-to-reject.d.ts +4 -1
  267. package/dist/render-frame-with-option-to-reject.js +206 -115
  268. package/dist/render-frame.d.ts +4 -5
  269. package/dist/render-frame.js +3 -1
  270. package/dist/render-frames.d.ts +3 -0
  271. package/dist/render-frames.js +15 -18
  272. package/dist/render-media.d.ts +1 -1
  273. package/dist/render-media.js +131 -46
  274. package/dist/render-still.js +1 -0
  275. package/dist/screenshot-background.d.ts +2 -0
  276. package/dist/screenshot-background.js +20 -0
  277. package/dist/screenshot-task.d.ts +4 -2
  278. package/dist/screenshot-task.js +40 -21
  279. package/dist/seek-to-frame.js +1 -1
  280. package/dist/stitch-frames-to-video.js +71 -10
  281. package/dist/take-frame.d.ts +11 -3
  282. package/dist/take-frame.js +10 -8
  283. package/dist/validate-output-filename.d.ts +1 -1
  284. package/dist/validate-output-filename.js +10 -2
  285. package/package.json +13 -13
@@ -12,16 +12,19 @@ const handle_javascript_exception_1 = require("./error-handling/handle-javascrip
12
12
  const filter_asset_types_1 = require("./filter-asset-types");
13
13
  const get_frame_padded_index_1 = require("./get-frame-padded-index");
14
14
  const logger_1 = require("./logger");
15
+ const remotion_shared_memory_1 = require("./remotion-shared-memory");
15
16
  const seek_to_frame_1 = require("./seek-to-frame");
16
17
  const take_frame_1 = require("./take-frame");
17
- const renderFrameWithOptionToReject = async ({ reject, width, height, compId, attempt, stoppedSignal, indent, logLevel, timeoutInMilliseconds, outputDir, onFrameBuffer, imageFormat, onError, lastFrame, jpegQuality, frameDir, scale, countType, assets, assetIndex, framesToRender, onArtifact, onDownload, downloadMap, binariesDirectory, cancelSignal, framesRenderedObj, onFrameUpdate, frame, page, imageSequencePattern, fps, trimLeftOffset, trimRightOffset, allFramesAndExtraFrames, }) => {
18
+ const renderFrameWithOptionToReject = async ({ reject, width, height, compId, attempt, stoppedSignal, indent, logLevel, timeoutInMilliseconds, outputDir, onFrameBuffer, onFrame, remotionSharedMemory, imageFormat, onError, lastFrame, jpegQuality, frameDir, scale, countType, assets, assetIndex, framesToRender, onArtifact, onDownload, downloadMap, binariesDirectory, cancelSignal, framesRenderedObj, onFrameUpdate, frame, page, imageSequencePattern, fps, trimLeftOffset, trimRightOffset, allFramesAndExtraFrames, }) => {
18
19
  const startTime = performance.now();
19
20
  const index = framesToRender.indexOf(frame);
20
21
  const assetsOnly = index === -1;
21
22
  if (stoppedSignal.stopped) {
22
23
  return Promise.reject(new Error('Render was stopped'));
23
24
  }
25
+ let pageError = null;
24
26
  const errorCallbackOnFrame = (err) => {
27
+ pageError !== null && pageError !== void 0 ? pageError : (pageError = err);
25
28
  reject(err);
26
29
  };
27
30
  const cleanupPageError = (0, handle_javascript_exception_1.handleJavascriptException)({
@@ -30,129 +33,217 @@ const renderFrameWithOptionToReject = async ({ reject, width, height, compId, at
30
33
  frame,
31
34
  });
32
35
  page.on('error', errorCallbackOnFrame);
33
- const startSeeking = Date.now();
34
- await (0, seek_to_frame_1.seekToFrame)({
35
- frame,
36
- page,
37
- composition: compId,
38
- timeoutInMilliseconds,
39
- indent,
40
- logLevel,
41
- attempt,
42
- });
43
- const timeToSeek = Date.now() - startSeeking;
44
- if (timeToSeek > 1000) {
45
- logger_1.Log.verbose({ indent, logLevel }, `Seeking to frame ${frame} took ${timeToSeek}ms`);
46
- }
47
- if (!outputDir && !onFrameBuffer && imageFormat !== 'none') {
48
- throw new Error('Called renderFrames() without specifying either `outputDir` or `onFrameBuffer`');
49
- }
50
- if (outputDir && onFrameBuffer && imageFormat !== 'none') {
51
- throw new Error('Pass either `outputDir` or `onFrameBuffer` to renderFrames(), not both.');
52
- }
53
- const [buffer, collectedAssets] = await Promise.all([
54
- (0, take_frame_1.takeFrame)({
55
- freePage: page,
56
- height,
57
- imageFormat: assetsOnly ? 'none' : imageFormat,
58
- output: index === null
59
- ? null
60
- : path_1.default.join(frameDir, (0, get_frame_padded_index_1.getFrameOutputFileName)({
61
- frame,
62
- imageFormat,
63
- index,
64
- countType,
65
- lastFrame,
66
- totalFrames: framesToRender.length,
67
- imageSequencePattern,
68
- })),
69
- jpegQuality,
70
- width,
71
- scale,
72
- wantsBuffer: Boolean(onFrameBuffer),
73
- timeoutInMilliseconds,
74
- }),
75
- (0, collect_assets_1.collectAssets)({
36
+ let pageListenersCleaned = false;
37
+ const cleanupPageListeners = () => {
38
+ if (pageListenersCleaned) {
39
+ return;
40
+ }
41
+ pageListenersCleaned = true;
42
+ cleanupPageError();
43
+ page.off('error', errorCallbackOnFrame);
44
+ };
45
+ try {
46
+ const startSeeking = Date.now();
47
+ await (0, seek_to_frame_1.seekToFrame)({
76
48
  frame,
77
- freePage: page,
49
+ page,
50
+ composition: compId,
78
51
  timeoutInMilliseconds,
79
- }),
80
- ]);
81
- if (onFrameBuffer && !assetsOnly) {
82
- if (!buffer) {
83
- throw new Error('unexpected null buffer');
52
+ indent,
53
+ logLevel,
54
+ attempt,
55
+ });
56
+ const timeToSeek = Date.now() - startSeeking;
57
+ if (timeToSeek > 1000) {
58
+ logger_1.Log.verbose({ indent, logLevel }, `Seeking to frame ${frame} took ${timeToSeek}ms`);
84
59
  }
85
- await onFrameBuffer(buffer, frame);
86
- }
87
- const audioAndVideoAssets = (0, filter_asset_types_1.onlyAudioAndVideoAssets)(collectedAssets);
88
- const artifactAssets = (0, filter_asset_types_1.onlyArtifact)({
89
- assets: collectedAssets,
90
- frameBuffer: buffer,
91
- });
92
- for (const artifact of artifactAssets) {
93
- const previousFrame = assetIndex.firstArtifactFrameByFilename.get(artifact.filename);
94
- if (previousFrame !== undefined) {
95
- return Promise.reject(new Error(`An artifact with output "${artifact.filename}" was already registered at frame ${previousFrame}, but now registered again at frame ${artifact.frame}. Artifacts must have unique names. https://remotion.dev/docs/artifacts`));
60
+ if (!outputDir && !onFrameBuffer && !onFrame && imageFormat !== 'none') {
61
+ throw new Error('Called renderFrames() without specifying either `outputDir` or `onFrameBuffer`');
96
62
  }
97
- onArtifact === null || onArtifact === void 0 ? void 0 : onArtifact(artifact);
98
- }
99
- const compressedAssets = audioAndVideoAssets.map((asset) => {
100
- return (0, compress_assets_1.compressAsset)(assetIndex.firstAssetBySrc, asset);
101
- });
102
- const inlineAudioAssets = (0, filter_asset_types_1.onlyInlineAudio)(collectedAssets);
103
- const outputFrame = allFramesAndExtraFrames[0] + allFramesAndExtraFrames.indexOf(frame);
104
- assets.push({
105
- audioAndVideoAssets: compressedAssets,
106
- frame,
107
- artifactAssets: artifactAssets.map((a) => {
108
- return {
109
- frame: a.frame,
110
- filename: a.filename,
111
- };
112
- }),
113
- inlineAudioAssets,
114
- });
115
- for (const asset of compressedAssets) {
116
- if (asset.src.length >= 400 && !assetIndex.firstAssetBySrc.has(asset.src)) {
117
- assetIndex.firstAssetBySrc.set(asset.src, asset);
63
+ if (outputDir && (onFrameBuffer || onFrame) && imageFormat !== 'none') {
64
+ throw new Error('Pass either `outputDir` or `onFrameBuffer` to renderFrames(), not both.');
118
65
  }
119
- }
120
- for (const artifact of artifactAssets) {
121
- if (!assetIndex.firstArtifactFrameByFilename.has(artifact.filename)) {
122
- assetIndex.firstArtifactFrameByFilename.set(artifact.filename, artifact.frame);
66
+ const [captureResult, assetsResult] = await Promise.allSettled([
67
+ (0, take_frame_1.takeFrame)({
68
+ freePage: page,
69
+ height,
70
+ imageFormat: assetsOnly ? 'none' : imageFormat,
71
+ output: index === null
72
+ ? null
73
+ : path_1.default.join(frameDir, (0, get_frame_padded_index_1.getFrameOutputFileName)({
74
+ frame,
75
+ imageFormat,
76
+ index,
77
+ countType,
78
+ lastFrame,
79
+ totalFrames: framesToRender.length,
80
+ imageSequencePattern,
81
+ })),
82
+ jpegQuality,
83
+ width,
84
+ scale,
85
+ wantsBuffer: Boolean(onFrameBuffer || onFrame),
86
+ timeoutInMilliseconds,
87
+ remotionSharedMemory,
88
+ }),
89
+ (0, collect_assets_1.collectAssets)({
90
+ frame,
91
+ freePage: page,
92
+ timeoutInMilliseconds,
93
+ }),
94
+ ]);
95
+ if (captureResult.status === 'rejected') {
96
+ throw captureResult.reason;
123
97
  }
124
- }
125
- for (const renderAsset of compressedAssets) {
126
- (0, download_and_map_assets_to_file_1.downloadAndMapAssetsToFileUrl)({
127
- renderAsset,
128
- onDownload,
129
- downloadMap,
130
- indent,
131
- logLevel,
132
- binariesDirectory,
133
- cancelSignalForAudioAnalysis: cancelSignal,
134
- shouldAnalyzeAudioImmediately: true,
135
- }).catch((err) => {
136
- const truncateWithEllipsis = renderAsset.src.substring(0, 1000) +
137
- (renderAsset.src.length > 1000 ? '...' : '');
138
- onError(new Error(`Error while downloading ${truncateWithEllipsis}: ${err.stack}`));
98
+ const buffer = captureResult.value;
99
+ if (assetsResult.status === 'rejected') {
100
+ if (buffer !== null && (0, remotion_shared_memory_1.isRemotionRawFrame)(buffer)) {
101
+ try {
102
+ await buffer.release();
103
+ }
104
+ catch (_a) {
105
+ // Preserve the asset collection error so the frame can be retried.
106
+ }
107
+ }
108
+ throw assetsResult.reason;
109
+ }
110
+ const collectedAssets = assetsResult.value;
111
+ let frameBufferForArtifacts = Buffer.isBuffer(buffer) ? buffer : null;
112
+ if (buffer !== null &&
113
+ (0, remotion_shared_memory_1.isRemotionRawFrame)(buffer) &&
114
+ collectedAssets.some((asset) => asset.type === 'artifact' && asset.contentType === 'thumbnail')) {
115
+ try {
116
+ const thumbnail = await (0, take_frame_1.takeFrame)({
117
+ freePage: page,
118
+ height,
119
+ imageFormat,
120
+ output: null,
121
+ jpegQuality,
122
+ width,
123
+ scale,
124
+ wantsBuffer: true,
125
+ timeoutInMilliseconds,
126
+ remotionSharedMemory: null,
127
+ });
128
+ if (!thumbnail) {
129
+ throw new Error('Could not capture a thumbnail artifact.');
130
+ }
131
+ frameBufferForArtifacts = thumbnail;
132
+ }
133
+ catch (error) {
134
+ try {
135
+ await buffer.release();
136
+ }
137
+ catch (_b) {
138
+ // Preserve the thumbnail capture error so the frame can be retried.
139
+ }
140
+ throw error;
141
+ }
142
+ }
143
+ cleanupPageListeners();
144
+ if (pageError) {
145
+ if (buffer !== null && (0, remotion_shared_memory_1.isRemotionRawFrame)(buffer)) {
146
+ try {
147
+ await buffer.release();
148
+ }
149
+ catch (_c) {
150
+ // Preserve the page error so the frame can be retried.
151
+ }
152
+ }
153
+ throw pageError;
154
+ }
155
+ if ((onFrameBuffer || onFrame) && !assetsOnly) {
156
+ if (!buffer) {
157
+ throw new Error('unexpected null buffer');
158
+ }
159
+ if (onFrame) {
160
+ await onFrame(buffer, frame);
161
+ }
162
+ else {
163
+ if ((0, remotion_shared_memory_1.isRemotionRawFrame)(buffer)) {
164
+ try {
165
+ await buffer.release();
166
+ }
167
+ catch (_d) {
168
+ // The type mismatch is the primary error.
169
+ }
170
+ throw new Error('Raw shared-memory frames cannot be passed to renderFrames().');
171
+ }
172
+ await (onFrameBuffer === null || onFrameBuffer === void 0 ? void 0 : onFrameBuffer(buffer, frame));
173
+ }
174
+ }
175
+ const audioAndVideoAssets = (0, filter_asset_types_1.onlyAudioAndVideoAssets)(collectedAssets);
176
+ const artifactAssets = (0, filter_asset_types_1.onlyArtifact)({
177
+ assets: collectedAssets,
178
+ frameBuffer: frameBufferForArtifacts,
139
179
  });
140
- }
141
- for (const renderAsset of inlineAudioAssets) {
142
- downloadMap.inlineAudioMixing.addAsset({
143
- asset: { ...renderAsset, frame: outputFrame },
144
- fps,
145
- totalNumberOfFrames: allFramesAndExtraFrames.length,
146
- firstFrame: allFramesAndExtraFrames[0],
147
- trimLeftOffset,
148
- trimRightOffset,
180
+ for (const artifact of artifactAssets) {
181
+ const previousFrame = assetIndex.firstArtifactFrameByFilename.get(artifact.filename);
182
+ if (previousFrame !== undefined) {
183
+ return Promise.reject(new Error(`An artifact with output "${artifact.filename}" was already registered at frame ${previousFrame}, but now registered again at frame ${artifact.frame}. Artifacts must have unique names. https://remotion.dev/docs/artifacts`));
184
+ }
185
+ onArtifact === null || onArtifact === void 0 ? void 0 : onArtifact(artifact);
186
+ }
187
+ const compressedAssets = audioAndVideoAssets.map((asset) => {
188
+ return (0, compress_assets_1.compressAsset)(assetIndex.firstAssetBySrc, asset);
149
189
  });
190
+ const inlineAudioAssets = (0, filter_asset_types_1.onlyInlineAudio)(collectedAssets);
191
+ const outputFrame = allFramesAndExtraFrames[0] + allFramesAndExtraFrames.indexOf(frame);
192
+ assets.push({
193
+ audioAndVideoAssets: compressedAssets,
194
+ frame,
195
+ artifactAssets: artifactAssets.map((a) => {
196
+ return {
197
+ frame: a.frame,
198
+ filename: a.filename,
199
+ };
200
+ }),
201
+ inlineAudioAssets,
202
+ });
203
+ for (const asset of compressedAssets) {
204
+ if (asset.src.length >= 400 &&
205
+ !assetIndex.firstAssetBySrc.has(asset.src)) {
206
+ assetIndex.firstAssetBySrc.set(asset.src, asset);
207
+ }
208
+ }
209
+ for (const artifact of artifactAssets) {
210
+ if (!assetIndex.firstArtifactFrameByFilename.has(artifact.filename)) {
211
+ assetIndex.firstArtifactFrameByFilename.set(artifact.filename, artifact.frame);
212
+ }
213
+ }
214
+ for (const renderAsset of compressedAssets) {
215
+ (0, download_and_map_assets_to_file_1.downloadAndMapAssetsToFileUrl)({
216
+ renderAsset,
217
+ onDownload,
218
+ downloadMap,
219
+ indent,
220
+ logLevel,
221
+ binariesDirectory,
222
+ cancelSignalForAudioAnalysis: cancelSignal,
223
+ shouldAnalyzeAudioImmediately: true,
224
+ }).catch((err) => {
225
+ const truncateWithEllipsis = renderAsset.src.substring(0, 1000) +
226
+ (renderAsset.src.length > 1000 ? '...' : '');
227
+ onError(new Error(`Error while downloading ${truncateWithEllipsis}: ${err.stack}`));
228
+ });
229
+ }
230
+ for (const renderAsset of inlineAudioAssets) {
231
+ downloadMap.inlineAudioMixing.addAsset({
232
+ asset: { ...renderAsset, frame: outputFrame },
233
+ fps,
234
+ totalNumberOfFrames: allFramesAndExtraFrames.length,
235
+ firstFrame: allFramesAndExtraFrames[0],
236
+ trimLeftOffset,
237
+ trimRightOffset,
238
+ });
239
+ }
240
+ if (!assetsOnly) {
241
+ framesRenderedObj.count++;
242
+ onFrameUpdate === null || onFrameUpdate === void 0 ? void 0 : onFrameUpdate(framesRenderedObj.count, frame, performance.now() - startTime);
243
+ }
150
244
  }
151
- cleanupPageError();
152
- page.off('error', errorCallbackOnFrame);
153
- if (!assetsOnly) {
154
- framesRenderedObj.count++;
155
- onFrameUpdate === null || onFrameUpdate === void 0 ? void 0 : onFrameUpdate(framesRenderedObj.count, frame, performance.now() - startTime);
245
+ finally {
246
+ cleanupPageListeners();
156
247
  }
157
248
  };
158
249
  exports.renderFrameWithOptionToReject = renderFrameWithOptionToReject;
@@ -4,8 +4,9 @@ import type { DownloadMap } from './assets/download-map';
4
4
  import type { Page } from './browser/BrowserPage';
5
5
  import type { CountType } from './get-frame-padded-index';
6
6
  import type { CancelSignal } from './make-cancel-signal';
7
+ import type { CapturedFrame, RemotionSharedMemoryCapture } from './remotion-shared-memory';
7
8
  import type { AssetIndex, FrameAndAssets, OnArtifact } from './render-frames';
8
- export declare const renderFrame: ({ attempt, binariesDirectory, cancelSignal, imageFormat, indent, logLevel, assets, assetIndex, countType, downloadMap, frameDir, framesToRender, jpegQuality, onArtifact, onDownload, scale, composition, onError, outputDir, stoppedSignal, timeoutInMilliseconds, lastFrame, onFrameBuffer, onFrameUpdate, framesRenderedObj, frame, page, imageSequencePattern, trimLeftOffset, trimRightOffset, allFramesAndExtraFrames, }: {
9
+ export declare const renderFrame: ({ attempt, binariesDirectory, cancelSignal, imageFormat, indent, logLevel, assets, assetIndex, countType, downloadMap, frameDir, framesToRender, jpegQuality, onArtifact, onDownload, scale, composition, onError, outputDir, stoppedSignal, timeoutInMilliseconds, lastFrame, onFrameBuffer, onFrame, remotionSharedMemory, onFrameUpdate, framesRenderedObj, frame, page, imageSequencePattern, trimLeftOffset, trimRightOffset, allFramesAndExtraFrames, }: {
9
10
  attempt: number;
10
11
  indent: boolean;
11
12
  logLevel: "error" | "info" | "trace" | "verbose" | "warn";
@@ -30,15 +31,13 @@ export declare const renderFrame: ({ attempt, binariesDirectory, cancelSignal, i
30
31
  timeoutInMilliseconds: number;
31
32
  outputDir: string | null;
32
33
  onFrameBuffer: ((buffer: Buffer, frame: number) => void | Promise<void>) | null | undefined;
34
+ onFrame: ((frame: CapturedFrame, frameNumber: number) => void | Promise<void>) | null;
35
+ remotionSharedMemory: RemotionSharedMemoryCapture | null;
33
36
  lastFrame: number;
34
37
  onFrameUpdate: ((framesRendered: number, frameIndex: number, timeToRenderInMilliseconds: number) => void) | null;
35
38
  framesRenderedObj: {
36
39
  count: number;
37
40
  };
38
- nextFrameToRender: {
39
- getNextFrame: (_pageIndex: number) => number;
40
- returnFrame: (frame: number) => void;
41
- };
42
41
  frame: number;
43
42
  page: Page;
44
43
  imageSequencePattern: string | null;
@@ -2,7 +2,7 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.renderFrame = void 0;
4
4
  const render_frame_with_option_to_reject_1 = require("./render-frame-with-option-to-reject");
5
- const renderFrame = ({ attempt, binariesDirectory, cancelSignal, imageFormat, indent, logLevel, assets, assetIndex, countType, downloadMap, frameDir, framesToRender, jpegQuality, onArtifact, onDownload, scale, composition, onError, outputDir, stoppedSignal, timeoutInMilliseconds, lastFrame, onFrameBuffer, onFrameUpdate, framesRenderedObj, frame, page, imageSequencePattern, trimLeftOffset, trimRightOffset, allFramesAndExtraFrames, }) => {
5
+ const renderFrame = ({ attempt, binariesDirectory, cancelSignal, imageFormat, indent, logLevel, assets, assetIndex, countType, downloadMap, frameDir, framesToRender, jpegQuality, onArtifact, onDownload, scale, composition, onError, outputDir, stoppedSignal, timeoutInMilliseconds, lastFrame, onFrameBuffer, onFrame, remotionSharedMemory, onFrameUpdate, framesRenderedObj, frame, page, imageSequencePattern, trimLeftOffset, trimRightOffset, allFramesAndExtraFrames, }) => {
6
6
  return new Promise((resolve, reject) => {
7
7
  (0, render_frame_with_option_to_reject_1.renderFrameWithOptionToReject)({
8
8
  reject,
@@ -16,6 +16,8 @@ const renderFrame = ({ attempt, binariesDirectory, cancelSignal, imageFormat, in
16
16
  timeoutInMilliseconds,
17
17
  imageFormat,
18
18
  onFrameBuffer,
19
+ onFrame,
20
+ remotionSharedMemory,
19
21
  outputDir,
20
22
  assets,
21
23
  assetIndex,
@@ -11,6 +11,7 @@ import type { ChromiumOptions } from './open-browser';
11
11
  import type { ToOptions } from './options/option';
12
12
  import type { optionsMap } from './options/options-map';
13
13
  import type { RemotionServer } from './prepare-server';
14
+ import type { CapturedFrame, RemotionSharedMemoryCapture } from './remotion-shared-memory';
14
15
  import type { EmittedArtifact } from './serialize-artifact';
15
16
  import type { OnStartData, RenderFramesOutput } from './types';
16
17
  export type OnArtifact = (asset: EmittedArtifact) => void;
@@ -29,6 +30,8 @@ type InternalRenderFramesOptions = {
29
30
  browserExecutable: BrowserExecutable | null;
30
31
  onBrowserLog: null | ((log: BrowserLog) => void);
31
32
  onFrameBuffer: null | ((buffer: Buffer, frame: number) => void | Promise<void>);
33
+ onFrame: null | ((frame: CapturedFrame, frameNumber: number) => void | Promise<void>);
34
+ remotionSharedMemory: RemotionSharedMemoryCapture | null;
32
35
  onDownload: RenderMediaOnDownload | null;
33
36
  chromiumOptions: ChromiumOptions;
34
37
  scale: number;
@@ -11,7 +11,6 @@ const browser_1 = require("./browser");
11
11
  const browser_download_progress_bar_1 = require("./browser/browser-download-progress-bar");
12
12
  const flaky_errors_1 = require("./browser/flaky-errors");
13
13
  const TimeoutSettings_1 = require("./browser/TimeoutSettings");
14
- const can_use_parallel_encoding_1 = require("./can-use-parallel-encoding");
15
14
  const cycle_browser_tabs_1 = require("./cycle-browser-tabs");
16
15
  const default_on_log_1 = require("./default-on-log");
17
16
  const find_closest_package_json_1 = require("./find-closest-package-json");
@@ -37,7 +36,7 @@ const validate_scale_1 = require("./validate-scale");
37
36
  const validate_selected_frames_1 = require("./validate-selected-frames");
38
37
  const wrap_with_error_handling_1 = require("./wrap-with-error-handling");
39
38
  const MAX_RETRIES_PER_FRAME = 1;
40
- const innerRenderFrames = async ({ onFrameUpdate, outputDir, onStart, serializedInputPropsWithCustomSchema, serializedResolvedPropsWithCustomSchema, jpegQuality, imageFormat, frameRange, frames, outputFramesInSequence, 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, darkMode, sampleRate, }) => {
39
+ const innerRenderFrames = async ({ onFrameUpdate, outputDir, onStart, serializedInputPropsWithCustomSchema, serializedResolvedPropsWithCustomSchema, jpegQuality, imageFormat, frameRange, frames, outputFramesInSequence, onError, envVariables, onBrowserLog, onFrameBuffer, onFrame, remotionSharedMemory, 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, darkMode, sampleRate, }) => {
41
40
  if (outputDir) {
42
41
  if (!node_fs_1.default.existsSync(outputDir)) {
43
42
  node_fs_1.default.mkdirSync(outputDir, {
@@ -68,8 +67,8 @@ const innerRenderFrames = async ({ onFrameUpdate, outputDir, onStart, serialized
68
67
  : framesToRender.length / composition.fps;
69
68
  const lastFrame = framesToRender[framesToRender.length - 1];
70
69
  const concurrencyOrFramesToRender = Math.min(framesToRender.length, resolvedConcurrency);
71
- const makeNewPage = (frame, pageIndex) => {
72
- return (0, make_page_1.makePage)({
70
+ const makeNewPage = async (frame, pageIndex) => {
71
+ const page = await (0, make_page_1.makePage)({
73
72
  context: sourceMapGetter,
74
73
  initialFrame: frame,
75
74
  browserReplacer,
@@ -94,6 +93,8 @@ const innerRenderFrames = async ({ onFrameUpdate, outputDir, onStart, serialized
94
93
  darkMode,
95
94
  sampleRate,
96
95
  });
96
+ await (remotionSharedMemory === null || remotionSharedMemory === void 0 ? void 0 : remotionSharedMemory.ensurePage(page));
97
+ return page;
97
98
  };
98
99
  const getPool = async () => {
99
100
  const pages = new Array(concurrencyOrFramesToRender)
@@ -145,19 +146,9 @@ const innerRenderFrames = async ({ onFrameUpdate, outputDir, onStart, serialized
145
146
  ...framesToRender,
146
147
  ...extraFramesToCaptureAssetsBackend,
147
148
  ];
148
- const shouldUsePartitionedRendering = (0, can_use_parallel_encoding_1.getShouldUsePartitionedRendering)();
149
- if (shouldUsePartitionedRendering) {
150
- logger_1.Log.info({ indent, logLevel }, 'Experimental: Using partitioned rendering (https://github.com/remotion-dev/remotion/pull/4830)');
151
- }
152
- const nextFrameToRender = shouldUsePartitionedRendering
153
- ? (0, next_frame_to_render_1.partitionedNextFrameToRenderState)({
154
- allFramesAndExtraFrames,
155
- concurrencyOrFramesToRender,
156
- })
157
- : (0, next_frame_to_render_1.nextFrameToRenderState)({
158
- allFramesAndExtraFrames,
159
- concurrencyOrFramesToRender,
160
- });
149
+ const nextFrameToRender = (0, next_frame_to_render_1.nextFrameToRenderState)({
150
+ allFramesAndExtraFrames,
151
+ });
161
152
  const pattern = imageSequencePattern || `element-[frame].[ext]`;
162
153
  const imageSequenceName = pattern
163
154
  .replace(/\[frame\]/g, `%0${filePadLength}d`)
@@ -194,6 +185,8 @@ const innerRenderFrames = async ({ onFrameUpdate, outputDir, onStart, serialized
194
185
  lastFrame,
195
186
  makeNewPage,
196
187
  onFrameBuffer,
188
+ onFrame,
189
+ remotionSharedMemory,
197
190
  onFrameUpdate,
198
191
  nextFrameToRender,
199
192
  imageSequencePattern: pattern,
@@ -220,7 +213,7 @@ const innerRenderFrames = async ({ onFrameUpdate, outputDir, onStart, serialized
220
213
  frameCount: framesToRender.length,
221
214
  };
222
215
  };
223
- const internalRenderFramesRaw = ({ browserExecutable, cancelSignal, chromiumOptions, composition, concurrency, envVariables, everyNthFrame, frameRange, frames, outputFramesInSequence, 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, sampleRate, }) => {
216
+ const internalRenderFramesRaw = ({ browserExecutable, cancelSignal, chromiumOptions, composition, concurrency, envVariables, everyNthFrame, frameRange, frames, outputFramesInSequence, imageFormat, indent, jpegQuality, muted, onBrowserLog, onDownload, onFrameBuffer, onFrame, remotionSharedMemory, onFrameUpdate, onStart, outputDir, port, puppeteerInstance, scale, server, timeoutInMilliseconds, logLevel, webpackBundleOrServeUrl, serializedInputPropsWithCustomSchema, serializedResolvedPropsWithCustomSchema, offthreadVideoCacheSizeInBytes, parallelEncodingEnabled, binariesDirectory, forSeamlessAacConcatenation, compositionStart, onBrowserDownload, onArtifact, chromeMode, offthreadVideoThreads, imageSequencePattern, mediaCacheSizeInBytes, onLog, sampleRate, }) => {
224
217
  (0, validate_1.validateDimension)(composition.height, 'height', 'in the `config` object passed to `renderFrames()`');
225
218
  (0, validate_1.validateDimension)(composition.width, 'width', 'in the `config` object passed to `renderFrames()`');
226
219
  (0, validate_1.validateFps)(composition.fps, 'in the `config` object of `renderFrames()`', false);
@@ -309,6 +302,8 @@ const internalRenderFramesRaw = ({ browserExecutable, cancelSignal, chromiumOpti
309
302
  muted,
310
303
  onBrowserLog,
311
304
  onFrameBuffer,
305
+ onFrame,
306
+ remotionSharedMemory,
312
307
  onFrameUpdate,
313
308
  onStart,
314
309
  outputDir,
@@ -441,6 +436,8 @@ const renderFrames = (options) => {
441
436
  muted: muted !== null && muted !== void 0 ? muted : false,
442
437
  onBrowserLog: onBrowserLog !== null && onBrowserLog !== void 0 ? onBrowserLog : null,
443
438
  onFrameBuffer: onFrameBuffer !== null && onFrameBuffer !== void 0 ? onFrameBuffer : null,
439
+ onFrame: null,
440
+ remotionSharedMemory: null,
444
441
  onFrameUpdate,
445
442
  onStart,
446
443
  outputDir,
@@ -148,5 +148,5 @@ type RenderMediaResult = {
148
148
  contentType: string;
149
149
  };
150
150
  export declare const internalRenderMedia: (args_0: InternalRenderMediaOptions) => Promise<RenderMediaResult>;
151
- export declare const renderMedia: ({ proResProfile, x264Preset, gopSize, crf, composition, inputProps, pixelFormat, codec, envVariables, frameRange, puppeteerInstance, outputLocation, onProgress, overwrite, onDownload, onBrowserLog, onStart, timeoutInMilliseconds, chromiumOptions, scale, browserExecutable, port, cancelSignal, muted, enforceAudioTrack, ffmpegOverride, audioBitrate, videoBitrate, encodingMaxRate, encodingBufferSize, audioCodec, jpegQuality, concurrency, serveUrl, disallowParallelEncoding, everyNthFrame, imageFormat, numberOfGifLoops, dumpBrowserLogs, preferLossless, verbose, quality, logLevel: passedLogLevel, offthreadVideoCacheSizeInBytes, colorSpace, repro, binariesDirectory, separateAudioTo, forSeamlessAacConcatenation, onBrowserDownload, onArtifact, metadata, hardwareAcceleration, chromeMode, offthreadVideoThreads, compositionStart, mediaCacheSizeInBytes, isProduction, sampleRate, ...apiKeyOrLicenseKey }: RenderMediaOptions) => Promise<RenderMediaResult>;
151
+ export declare const renderMedia: ({ proResProfile, x264Preset, gopSize, crf, composition, inputProps, pixelFormat, codec, envVariables, frameRange, puppeteerInstance, outputLocation, onProgress, overwrite, onDownload, onBrowserLog, onStart, timeoutInMilliseconds, chromiumOptions, scale, browserExecutable, port, cancelSignal, muted, enforceAudioTrack, ffmpegOverride, audioBitrate, videoBitrate, encodingMaxRate, encodingBufferSize, audioCodec, jpegQuality, concurrency, serveUrl, disallowParallelEncoding, disableSharedMemoryCapture, everyNthFrame, imageFormat, numberOfGifLoops, dumpBrowserLogs, preferLossless, verbose, quality, logLevel: passedLogLevel, offthreadVideoCacheSizeInBytes, colorSpace, repro, binariesDirectory, separateAudioTo, forSeamlessAacConcatenation, onBrowserDownload, onArtifact, metadata, hardwareAcceleration, chromeMode, offthreadVideoThreads, compositionStart, mediaCacheSizeInBytes, isProduction, sampleRate, ...apiKeyOrLicenseKey }: RenderMediaOptions) => Promise<RenderMediaResult>;
152
152
  export {};