@remotion/renderer 4.0.0-alpha.4 → 4.0.0-alpha4

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 (556) hide show
  1. package/LICENSE.md +8 -8
  2. package/README.md +47 -0
  3. package/client.d.ts +1 -0
  4. package/client.js +1 -0
  5. package/dist/assets/calculate-asset-positions.d.ts +0 -0
  6. package/dist/assets/calculate-asset-positions.js +1 -0
  7. package/dist/assets/calculate-atempo.d.ts +0 -0
  8. package/dist/assets/calculate-atempo.js +0 -0
  9. package/dist/assets/convert-assets-to-file-urls.d.ts +0 -0
  10. package/dist/assets/convert-assets-to-file-urls.js +0 -0
  11. package/dist/assets/download-and-map-assets-to-file.d.ts +2 -1
  12. package/dist/assets/download-and-map-assets-to-file.js +60 -11
  13. package/dist/assets/download-file.d.ts +7 -5
  14. package/dist/assets/download-file.js +49 -6
  15. package/dist/assets/download-map.d.ts +8 -3
  16. package/dist/assets/download-map.js +8 -4
  17. package/dist/assets/ffmpeg-volume-expression.d.ts +2 -1
  18. package/dist/assets/ffmpeg-volume-expression.js +5 -3
  19. package/dist/assets/flatten-volume-array.d.ts +0 -0
  20. package/dist/assets/flatten-volume-array.js +0 -0
  21. package/dist/assets/get-audio-channels.d.ts +1 -1
  22. package/dist/assets/get-audio-channels.js +5 -4
  23. package/dist/assets/get-video-stream-duration.d.ts +7 -1
  24. package/dist/assets/get-video-stream-duration.js +50 -14
  25. package/dist/assets/read-file.d.ts +0 -0
  26. package/dist/assets/read-file.js +2 -4
  27. package/dist/assets/round-volume-to-avoid-stack-overflow.d.ts +0 -0
  28. package/dist/assets/round-volume-to-avoid-stack-overflow.js +0 -0
  29. package/dist/assets/sanitize-filename.d.ts +0 -0
  30. package/dist/assets/sanitize-filename.js +0 -0
  31. package/dist/assets/sanitize-filepath.d.ts +0 -0
  32. package/dist/assets/sanitize-filepath.js +0 -0
  33. package/dist/assets/truncate-utf8-bytes.d.ts +0 -0
  34. package/dist/assets/truncate-utf8-bytes.js +0 -0
  35. package/dist/assets/types.d.ts +1 -0
  36. package/dist/assets/types.js +0 -0
  37. package/dist/audio-codec.d.ts +27 -0
  38. package/dist/audio-codec.js +89 -0
  39. package/dist/browser/Browser.d.ts +4 -2
  40. package/dist/browser/Browser.js +15 -12
  41. package/dist/browser/BrowserConnector.d.ts +0 -0
  42. package/dist/browser/BrowserConnector.js +0 -0
  43. package/dist/browser/BrowserFetcher.d.ts +16 -63
  44. package/dist/browser/BrowserFetcher.js +146 -231
  45. package/dist/browser/BrowserPage.d.ts +8 -2
  46. package/dist/browser/BrowserPage.js +8 -11
  47. package/dist/browser/BrowserRunner.d.ts +1 -4
  48. package/dist/browser/BrowserRunner.js +30 -73
  49. package/dist/browser/Connection.d.ts +0 -0
  50. package/dist/browser/Connection.js +1 -1
  51. package/dist/browser/ConsoleMessage.d.ts +0 -0
  52. package/dist/browser/ConsoleMessage.js +0 -0
  53. package/dist/browser/DOMWorld.d.ts +2 -1
  54. package/dist/browser/DOMWorld.js +8 -1
  55. package/dist/browser/Errors.d.ts +0 -0
  56. package/dist/browser/Errors.js +0 -0
  57. package/dist/browser/EvalTypes.d.ts +0 -0
  58. package/dist/browser/EvalTypes.js +0 -0
  59. package/dist/browser/EventEmitter.d.ts +0 -0
  60. package/dist/browser/EventEmitter.js +0 -0
  61. package/dist/browser/ExecutionContext.d.ts +0 -0
  62. package/dist/browser/ExecutionContext.js +0 -0
  63. package/dist/browser/FrameManager.d.ts +0 -2
  64. package/dist/browser/FrameManager.js +0 -3
  65. package/dist/browser/HTTPRequest.d.ts +0 -0
  66. package/dist/browser/HTTPRequest.js +0 -0
  67. package/dist/browser/HTTPResponse.d.ts +0 -0
  68. package/dist/browser/HTTPResponse.js +0 -0
  69. package/dist/browser/JSHandle.d.ts +0 -0
  70. package/dist/browser/JSHandle.js +0 -0
  71. package/dist/browser/LaunchOptions.d.ts +0 -4
  72. package/dist/browser/LaunchOptions.js +0 -0
  73. package/dist/browser/Launcher.d.ts +7 -1
  74. package/dist/browser/Launcher.js +12 -375
  75. package/dist/browser/LifecycleWatcher.d.ts +0 -0
  76. package/dist/browser/LifecycleWatcher.js +0 -0
  77. package/dist/browser/NetworkEventManager.d.ts +0 -0
  78. package/dist/browser/NetworkEventManager.js +0 -0
  79. package/dist/browser/NetworkManager.d.ts +0 -0
  80. package/dist/browser/NetworkManager.js +0 -0
  81. package/dist/browser/NodeWebSocketTransport.d.ts +0 -0
  82. package/dist/browser/NodeWebSocketTransport.js +1 -1
  83. package/dist/browser/Product.d.ts +0 -0
  84. package/dist/browser/Product.js +0 -0
  85. package/dist/browser/PuppeteerNode.d.ts +0 -3
  86. package/dist/browser/PuppeteerNode.js +2 -14
  87. package/dist/browser/PuppeteerViewport.d.ts +0 -0
  88. package/dist/browser/PuppeteerViewport.js +0 -0
  89. package/dist/browser/ScreenshotOptions.d.ts +0 -14
  90. package/dist/browser/ScreenshotOptions.js +0 -1
  91. package/dist/browser/Target.d.ts +0 -0
  92. package/dist/browser/Target.js +0 -0
  93. package/dist/browser/TaskQueue.d.ts +0 -0
  94. package/dist/browser/TaskQueue.js +0 -0
  95. package/dist/browser/TimeoutSettings.d.ts +0 -0
  96. package/dist/browser/TimeoutSettings.js +0 -0
  97. package/dist/browser/assert.d.ts +0 -0
  98. package/dist/browser/assert.js +0 -0
  99. package/dist/browser/create-browser-fetcher.d.ts +0 -0
  100. package/dist/browser/create-browser-fetcher.js +34 -90
  101. package/dist/browser/devtools-commands.d.ts +0 -0
  102. package/dist/browser/devtools-commands.js +0 -0
  103. package/dist/browser/devtools-types.d.ts +4 -0
  104. package/dist/browser/devtools-types.js +0 -0
  105. package/dist/browser/get-download-destination.d.ts +0 -0
  106. package/dist/browser/get-download-destination.js +0 -0
  107. package/dist/browser/mitt/index.d.ts +0 -0
  108. package/dist/browser/mitt/index.js +0 -0
  109. package/dist/browser/node.d.ts +0 -0
  110. package/dist/browser/node.js +0 -0
  111. package/dist/browser/revisions.d.ts +0 -1
  112. package/dist/browser/revisions.js +0 -1
  113. package/dist/browser/util.d.ts +0 -0
  114. package/dist/browser/util.js +0 -0
  115. package/dist/browser-executable.d.ts +0 -0
  116. package/dist/browser-executable.js +0 -0
  117. package/dist/browser-log.d.ts +0 -0
  118. package/dist/browser-log.js +0 -0
  119. package/dist/browser.d.ts +0 -0
  120. package/dist/browser.js +0 -0
  121. package/dist/calculate-ffmpeg-filters.d.ts +2 -1
  122. package/dist/calculate-ffmpeg-filters.js +1 -0
  123. package/dist/calculate-sar-dar-pixels.d.ts +0 -0
  124. package/dist/calculate-sar-dar-pixels.js +0 -0
  125. package/dist/can-use-parallel-encoding.d.ts +0 -0
  126. package/dist/can-use-parallel-encoding.js +0 -0
  127. package/dist/check-apple-silicon.d.ts +1 -0
  128. package/dist/check-apple-silicon.js +55 -0
  129. package/dist/chunk.d.ts +0 -0
  130. package/dist/chunk.js +0 -0
  131. package/dist/client.d.ts +179 -0
  132. package/dist/client.js +23 -0
  133. package/dist/codec-supports-media.d.ts +1 -0
  134. package/dist/codec-supports-media.js +8 -1
  135. package/dist/codec.d.ts +0 -0
  136. package/dist/codec.js +0 -0
  137. package/dist/combine-videos.d.ts +9 -2
  138. package/dist/combine-videos.js +12 -8
  139. package/dist/compositor/compose.d.ts +13 -0
  140. package/dist/compositor/compose.js +47 -0
  141. package/dist/compositor/get-executable-path.d.ts +1 -0
  142. package/dist/compositor/get-executable-path.js +47 -0
  143. package/dist/compositor/payloads.d.ts +41 -0
  144. package/dist/compositor/payloads.js +2 -0
  145. package/dist/compress-assets.d.ts +0 -0
  146. package/dist/compress-assets.js +0 -0
  147. package/dist/convert-number-of-gif-loops-to-ffmpeg.d.ts +0 -0
  148. package/dist/convert-number-of-gif-loops-to-ffmpeg.js +0 -0
  149. package/dist/convert-to-positive-frame-index.d.ts +4 -0
  150. package/dist/convert-to-positive-frame-index.js +8 -0
  151. package/dist/create-ffmpeg-complex-filter.d.ts +9 -5
  152. package/dist/create-ffmpeg-complex-filter.js +8 -4
  153. package/dist/create-ffmpeg-merge-filter.d.ts +8 -1
  154. package/dist/create-ffmpeg-merge-filter.js +29 -13
  155. package/dist/create-silent-audio.d.ts +2 -1
  156. package/dist/create-silent-audio.js +3 -2
  157. package/dist/crf.d.ts +5 -1
  158. package/dist/crf.js +33 -6
  159. package/dist/cycle-browser-tabs.d.ts +2 -5
  160. package/dist/cycle-browser-tabs.js +5 -5
  161. package/dist/delay-render-embedded-stack.d.ts +0 -0
  162. package/dist/delay-render-embedded-stack.js +0 -0
  163. package/dist/delete-directory.d.ts +1 -1
  164. package/dist/delete-directory.js +31 -5
  165. package/dist/determine-resize-params.d.ts +1 -0
  166. package/dist/determine-resize-params.js +10 -0
  167. package/dist/determine-vcodec-ffmpeg-flags.d.ts +2 -0
  168. package/dist/determine-vcodec-ffmpeg-flags.js +13 -0
  169. package/dist/does-have-m2-bug.d.ts +3 -0
  170. package/dist/does-have-m2-bug.js +12 -0
  171. package/dist/ensure-ffmpeg.d.ts +18 -0
  172. package/dist/ensure-ffmpeg.js +58 -0
  173. package/dist/ensure-frames-in-order.d.ts +0 -0
  174. package/dist/ensure-frames-in-order.js +0 -0
  175. package/dist/ensure-output-directory.d.ts +0 -0
  176. package/dist/ensure-output-directory.js +0 -0
  177. package/dist/ensure-presentation-timestamp.d.ts +14 -1
  178. package/dist/ensure-presentation-timestamp.js +36 -17
  179. package/dist/error-handling/handle-javascript-exception.d.ts +0 -0
  180. package/dist/error-handling/handle-javascript-exception.js +10 -0
  181. package/dist/error-handling/symbolicate-error.d.ts +0 -0
  182. package/dist/error-handling/symbolicate-error.js +2 -1
  183. package/dist/error-handling/symbolicateable-error.d.ts +0 -0
  184. package/dist/error-handling/symbolicateable-error.js +0 -0
  185. package/dist/extract-frame-from-video.d.ts +2 -0
  186. package/dist/extract-frame-from-video.js +47 -110
  187. package/dist/ffmpeg-executable.d.ts +0 -0
  188. package/dist/ffmpeg-executable.js +0 -0
  189. package/dist/ffmpeg-filter-file.d.ts +6 -1
  190. package/dist/ffmpeg-filter-file.js +36 -4
  191. package/dist/ffmpeg-flags.d.ts +20 -2
  192. package/dist/ffmpeg-flags.js +205 -9
  193. package/dist/ffmpeg-override.d.ts +4 -0
  194. package/dist/ffmpeg-override.js +2 -0
  195. package/dist/file-extensions.d.ts +25 -0
  196. package/dist/file-extensions.js +88 -0
  197. package/dist/find-closest-package-json.d.ts +2 -0
  198. package/dist/find-closest-package-json.js +31 -0
  199. package/dist/frame-range.d.ts +0 -0
  200. package/dist/frame-range.js +0 -0
  201. package/dist/frame-to-ffmpeg-timestamp.d.ts +0 -0
  202. package/dist/frame-to-ffmpeg-timestamp.js +0 -0
  203. package/dist/get-browser-instance.d.ts +0 -0
  204. package/dist/get-browser-instance.js +1 -1
  205. package/dist/get-can-extract-frames-fast.d.ts +14 -0
  206. package/dist/get-can-extract-frames-fast.js +71 -0
  207. package/dist/get-codec-name.d.ts +0 -0
  208. package/dist/get-codec-name.js +0 -0
  209. package/dist/get-compositions.d.ts +4 -0
  210. package/dist/get-compositions.js +26 -7
  211. package/dist/get-concurrency.d.ts +1 -1
  212. package/dist/get-concurrency.js +8 -1
  213. package/dist/get-duration-from-frame-range.d.ts +0 -0
  214. package/dist/get-duration-from-frame-range.js +0 -0
  215. package/dist/get-extension-from-codec.d.ts +5 -1
  216. package/dist/get-extension-from-codec.js +56 -32
  217. package/dist/get-extension-of-filename.d.ts +0 -0
  218. package/dist/get-extension-of-filename.js +5 -1
  219. package/dist/get-frame-of-video-slow.d.ts +15 -0
  220. package/dist/get-frame-of-video-slow.js +72 -0
  221. package/dist/get-frame-padded-index.d.ts +1 -1
  222. package/dist/get-frame-padded-index.js +3 -2
  223. package/dist/get-frame-to-render.d.ts +0 -0
  224. package/dist/get-frame-to-render.js +1 -1
  225. package/dist/get-local-browser-executable.d.ts +0 -0
  226. package/dist/get-local-browser-executable.js +4 -14
  227. package/dist/get-port.d.ts +4 -1
  228. package/dist/get-port.js +8 -8
  229. package/dist/get-prores-profile-name.d.ts +0 -0
  230. package/dist/get-prores-profile-name.js +0 -0
  231. package/dist/get-video-info.d.ts +6 -1
  232. package/dist/get-video-info.js +19 -9
  233. package/dist/get-video-threads-flag.d.ts +0 -0
  234. package/dist/get-video-threads-flag.js +0 -0
  235. package/dist/guess-extension-for-media.d.ts +5 -1
  236. package/dist/guess-extension-for-media.js +4 -3
  237. package/dist/image-format.d.ts +1 -1
  238. package/dist/image-format.js +3 -0
  239. package/dist/index.d.ts +187 -41
  240. package/dist/index.js +31 -28
  241. package/dist/is-audio-codec.d.ts +0 -0
  242. package/dist/is-audio-codec.js +0 -0
  243. package/dist/is-beyond-last-frame.d.ts +0 -0
  244. package/dist/is-beyond-last-frame.js +0 -0
  245. package/dist/is-serve-url.d.ts +0 -0
  246. package/dist/is-serve-url.js +0 -0
  247. package/dist/last-frame-from-video-cache.d.ts +2 -0
  248. package/dist/last-frame-from-video-cache.js +0 -0
  249. package/dist/legacy-webpack-config.d.ts +0 -0
  250. package/dist/legacy-webpack-config.js +0 -0
  251. package/dist/locks.d.ts +7 -0
  252. package/dist/locks.js +44 -0
  253. package/dist/log-level.d.ts +0 -0
  254. package/dist/log-level.js +0 -0
  255. package/dist/make-cancel-signal.d.ts +11 -0
  256. package/dist/make-cancel-signal.js +24 -1
  257. package/dist/merge-audio-track.d.ts +3 -1
  258. package/dist/merge-audio-track.js +43 -30
  259. package/dist/mime-db.d.ts +0 -0
  260. package/dist/mime-db.js +0 -0
  261. package/dist/mime-types.d.ts +1 -0
  262. package/dist/mime-types.js +6 -1
  263. package/dist/normalize-serve-url.d.ts +0 -0
  264. package/dist/normalize-serve-url.js +0 -0
  265. package/dist/offthread-video-server.d.ts +2 -1
  266. package/dist/offthread-video-server.js +13 -1
  267. package/dist/open-browser.d.ts +5 -0
  268. package/dist/open-browser.js +12 -15
  269. package/dist/overwrite.d.ts +0 -0
  270. package/dist/overwrite.js +0 -0
  271. package/dist/p-limit.d.ts +0 -0
  272. package/dist/p-limit.js +0 -0
  273. package/dist/parse-browser-error-stack.d.ts +0 -0
  274. package/dist/parse-browser-error-stack.js +0 -0
  275. package/dist/parse-ffmpeg-progress.d.ts +0 -0
  276. package/dist/parse-ffmpeg-progress.js +0 -0
  277. package/dist/perf.d.ts +0 -0
  278. package/dist/perf.js +0 -0
  279. package/dist/pixel-format.d.ts +1 -1
  280. package/dist/pixel-format.js +3 -0
  281. package/dist/pool.d.ts +0 -0
  282. package/dist/pool.js +0 -0
  283. package/dist/prepare-server.d.ts +3 -2
  284. package/dist/prepare-server.js +8 -3
  285. package/dist/preprocess-audio-track.d.ts +7 -1
  286. package/dist/preprocess-audio-track.js +7 -4
  287. package/dist/prespawn-ffmpeg.d.ts +4 -1
  288. package/dist/prespawn-ffmpeg.js +17 -12
  289. package/dist/prestitcher-memory-usage.d.ts +0 -0
  290. package/dist/prestitcher-memory-usage.js +0 -0
  291. package/dist/prores-profile.d.ts +4 -1
  292. package/dist/prores-profile.js +6 -6
  293. package/dist/provide-screenshot.d.ts +5 -1
  294. package/dist/provide-screenshot.js +4 -1
  295. package/dist/puppeteer-evaluate.d.ts +0 -0
  296. package/dist/puppeteer-evaluate.js +19 -11
  297. package/dist/puppeteer-screenshot.d.ts +11 -2
  298. package/dist/puppeteer-screenshot.js +11 -14
  299. package/dist/quality.d.ts +0 -0
  300. package/dist/quality.js +0 -0
  301. package/dist/redirect-status-codes.d.ts +1 -0
  302. package/dist/redirect-status-codes.js +6 -0
  303. package/dist/render-frames.d.ts +15 -3
  304. package/dist/render-frames.js +176 -84
  305. package/dist/render-media.d.ts +38 -6
  306. package/dist/render-media.js +123 -27
  307. package/dist/render-still.d.ts +8 -4
  308. package/dist/render-still.js +66 -31
  309. package/dist/replace-browser.d.ts +6 -0
  310. package/dist/replace-browser.js +47 -0
  311. package/dist/resolve-asset-src.d.ts +0 -0
  312. package/dist/resolve-asset-src.js +0 -0
  313. package/dist/sample-rate.d.ts +0 -0
  314. package/dist/sample-rate.js +0 -0
  315. package/dist/screenshot-dom-element.d.ts +5 -1
  316. package/dist/screenshot-dom-element.js +10 -2
  317. package/dist/screenshot-task.d.ts +12 -2
  318. package/dist/screenshot-task.js +24 -9
  319. package/dist/seek-to-frame.d.ts +1 -0
  320. package/dist/seek-to-frame.js +49 -3
  321. package/dist/serve-handler/index.d.ts +0 -0
  322. package/dist/serve-handler/index.js +0 -0
  323. package/dist/serve-handler/is-path-inside.d.ts +0 -0
  324. package/dist/serve-handler/is-path-inside.js +0 -0
  325. package/dist/serve-handler/range-parser.d.ts +0 -0
  326. package/dist/serve-handler/range-parser.js +0 -0
  327. package/dist/serve-static.d.ts +1 -0
  328. package/dist/serve-static.js +77 -41
  329. package/dist/set-props-and-env.d.ts +3 -1
  330. package/dist/set-props-and-env.js +39 -15
  331. package/dist/stitch-frames-to-video.d.ts +14 -1
  332. package/dist/stitch-frames-to-video.js +122 -50
  333. package/dist/stringify-ffmpeg-filter.d.ts +10 -2
  334. package/dist/stringify-ffmpeg-filter.js +37 -34
  335. package/dist/symbolicate-stacktrace.d.ts +0 -0
  336. package/dist/symbolicate-stacktrace.js +0 -0
  337. package/dist/take-frame-and-compose.d.ts +20 -0
  338. package/dist/take-frame-and-compose.js +96 -0
  339. package/dist/tmp-dir.d.ts +0 -0
  340. package/dist/tmp-dir.js +0 -0
  341. package/dist/truthy.d.ts +0 -0
  342. package/dist/truthy.js +0 -0
  343. package/dist/try-to-extract-frame-of-video-fast.d.ts +13 -0
  344. package/dist/try-to-extract-frame-of-video-fast.js +55 -0
  345. package/dist/types.d.ts +0 -0
  346. package/dist/types.js +0 -0
  347. package/dist/validate-concurrency.d.ts +0 -0
  348. package/dist/validate-concurrency.js +14 -9
  349. package/dist/validate-even-dimensions-with-codec.d.ts +0 -0
  350. package/dist/validate-even-dimensions-with-codec.js +0 -0
  351. package/dist/validate-every-nth-frame.d.ts +2 -1
  352. package/dist/validate-every-nth-frame.js +8 -1
  353. package/dist/validate-ffmpeg-override.d.ts +2 -0
  354. package/dist/validate-ffmpeg-override.js +12 -0
  355. package/dist/validate-ffmpeg.d.ts +7 -2
  356. package/dist/validate-ffmpeg.js +48 -43
  357. package/dist/validate-number-of-gif-loops.d.ts +2 -0
  358. package/dist/validate-number-of-gif-loops.js +24 -0
  359. package/dist/validate-opengl-renderer.d.ts +0 -0
  360. package/dist/validate-opengl-renderer.js +0 -0
  361. package/dist/validate-output-filename.d.ts +7 -2
  362. package/dist/validate-output-filename.js +20 -51
  363. package/dist/validate-puppeteer-timeout.d.ts +0 -0
  364. package/dist/validate-puppeteer-timeout.js +1 -1
  365. package/dist/validate-scale.d.ts +0 -0
  366. package/dist/validate-scale.js +0 -0
  367. package/dist/validate-videobitrate.d.ts +1 -0
  368. package/dist/validate-videobitrate.js +20 -0
  369. package/dist/wait-for-symbolication-error-to-be-done.d.ts +0 -0
  370. package/dist/wait-for-symbolication-error-to-be-done.js +5 -31
  371. package/dist/warn-about-ffmpeg-version.d.ts +5 -0
  372. package/dist/warn-about-ffmpeg-version.js +37 -0
  373. package/dist/ws/ws-types.d.ts +0 -0
  374. package/dist/ws/ws-types.js +2 -1
  375. package/package.json +68 -60
  376. package/.prettierrc.js +0 -14
  377. package/dist/add-silent-audio-if-necessary.d.ts +0 -8
  378. package/dist/add-silent-audio-if-necessary.d.ts.map +0 -1
  379. package/dist/add-silent-audio-if-necessary.js +0 -51
  380. package/dist/add-silent-audio-if-necessary.js.map +0 -1
  381. package/dist/assets/asset-is-used-at-time.d.ts +0 -3
  382. package/dist/assets/asset-is-used-at-time.d.ts.map +0 -1
  383. package/dist/assets/asset-is-used-at-time.js +0 -8
  384. package/dist/assets/asset-is-used-at-time.js.map +0 -1
  385. package/dist/assets/calculate-asset-positions.d.ts.map +0 -1
  386. package/dist/assets/calculate-asset-positions.js.map +0 -1
  387. package/dist/assets/calculate-atempo.d.ts.map +0 -1
  388. package/dist/assets/calculate-atempo.js.map +0 -1
  389. package/dist/assets/convert-assets-to-file-urls.d.ts.map +0 -1
  390. package/dist/assets/convert-assets-to-file-urls.js.map +0 -1
  391. package/dist/assets/download-and-map-assets-to-file.d.ts.map +0 -1
  392. package/dist/assets/download-and-map-assets-to-file.js.map +0 -1
  393. package/dist/assets/download-file.d.ts.map +0 -1
  394. package/dist/assets/download-file.js.map +0 -1
  395. package/dist/assets/ffmpeg-volume-expression.d.ts.map +0 -1
  396. package/dist/assets/ffmpeg-volume-expression.js.map +0 -1
  397. package/dist/assets/flatten-volume-array.d.ts.map +0 -1
  398. package/dist/assets/flatten-volume-array.js.map +0 -1
  399. package/dist/assets/get-asset-audio-details.d.ts +0 -5
  400. package/dist/assets/get-asset-audio-details.d.ts.map +0 -1
  401. package/dist/assets/get-asset-audio-details.js +0 -21
  402. package/dist/assets/get-asset-audio-details.js.map +0 -1
  403. package/dist/assets/get-audio-channels.d.ts.map +0 -1
  404. package/dist/assets/get-audio-channels.js.map +0 -1
  405. package/dist/assets/get-simulatenous-assets.d.ts +0 -3
  406. package/dist/assets/get-simulatenous-assets.d.ts.map +0 -1
  407. package/dist/assets/get-simulatenous-assets.js +0 -14
  408. package/dist/assets/get-simulatenous-assets.js.map +0 -1
  409. package/dist/assets/read-file.d.ts.map +0 -1
  410. package/dist/assets/read-file.js.map +0 -1
  411. package/dist/assets/round-volume-to-avoid-stack-overflow.d.ts.map +0 -1
  412. package/dist/assets/round-volume-to-avoid-stack-overflow.js.map +0 -1
  413. package/dist/assets/sanitize-filename.d.ts.map +0 -1
  414. package/dist/assets/sanitize-filename.js.map +0 -1
  415. package/dist/assets/sanitize-filepath.d.ts.map +0 -1
  416. package/dist/assets/sanitize-filepath.js.map +0 -1
  417. package/dist/assets/split-assets-into-segments.d.ts +0 -6
  418. package/dist/assets/split-assets-into-segments.d.ts.map +0 -1
  419. package/dist/assets/split-assets-into-segments.js +0 -89
  420. package/dist/assets/split-assets-into-segments.js.map +0 -1
  421. package/dist/assets/truncate-utf8-bytes.d.ts.map +0 -1
  422. package/dist/assets/truncate-utf8-bytes.js.map +0 -1
  423. package/dist/assets/types.d.ts.map +0 -1
  424. package/dist/assets/types.js.map +0 -1
  425. package/dist/assets-to-ffmpeg-inputs.d.ts +0 -7
  426. package/dist/assets-to-ffmpeg-inputs.d.ts.map +0 -1
  427. package/dist/assets-to-ffmpeg-inputs.js +0 -15
  428. package/dist/assets-to-ffmpeg-inputs.js.map +0 -1
  429. package/dist/browser-log.d.ts.map +0 -1
  430. package/dist/browser-log.js.map +0 -1
  431. package/dist/calculate-ffmpeg-filters.d.ts.map +0 -1
  432. package/dist/calculate-ffmpeg-filters.js.map +0 -1
  433. package/dist/can-use-parallel-encoding.d.ts.map +0 -1
  434. package/dist/can-use-parallel-encoding.js.map +0 -1
  435. package/dist/combine-videos.d.ts.map +0 -1
  436. package/dist/combine-videos.js.map +0 -1
  437. package/dist/convert-to-pcm.d.ts +0 -6
  438. package/dist/convert-to-pcm.js +0 -20
  439. package/dist/create-ffmpeg-complex-filter.d.ts.map +0 -1
  440. package/dist/create-ffmpeg-complex-filter.js.map +0 -1
  441. package/dist/cycle-browser-tabs.d.ts.map +0 -1
  442. package/dist/cycle-browser-tabs.js.map +0 -1
  443. package/dist/delay-render-embedded-stack.d.ts.map +0 -1
  444. package/dist/delay-render-embedded-stack.js.map +0 -1
  445. package/dist/delete-directory.d.ts.map +0 -1
  446. package/dist/delete-directory.js.map +0 -1
  447. package/dist/ensure-frames-in-order.d.ts.map +0 -1
  448. package/dist/ensure-frames-in-order.js.map +0 -1
  449. package/dist/ensure-output-directory.d.ts.map +0 -1
  450. package/dist/ensure-output-directory.js.map +0 -1
  451. package/dist/error-handling/handle-javascript-exception.d.ts.map +0 -1
  452. package/dist/error-handling/handle-javascript-exception.js.map +0 -1
  453. package/dist/error-handling/symbolicate-error.d.ts.map +0 -1
  454. package/dist/error-handling/symbolicate-error.js.map +0 -1
  455. package/dist/error-handling/symbolicateable-error.d.ts.map +0 -1
  456. package/dist/error-handling/symbolicateable-error.js.map +0 -1
  457. package/dist/ffmpeg-flags.d.ts.map +0 -1
  458. package/dist/ffmpeg-flags.js.map +0 -1
  459. package/dist/get-audio-codec-name.d.ts +0 -2
  460. package/dist/get-audio-codec-name.d.ts.map +0 -1
  461. package/dist/get-audio-codec-name.js +0 -28
  462. package/dist/get-audio-codec-name.js.map +0 -1
  463. package/dist/get-browser-instance.d.ts.map +0 -1
  464. package/dist/get-browser-instance.js.map +0 -1
  465. package/dist/get-codec-name.d.ts.map +0 -1
  466. package/dist/get-codec-name.js.map +0 -1
  467. package/dist/get-compositions.d.ts.map +0 -1
  468. package/dist/get-compositions.js.map +0 -1
  469. package/dist/get-concurrency.d.ts.map +0 -1
  470. package/dist/get-concurrency.js.map +0 -1
  471. package/dist/get-extension-from-codec.d.ts.map +0 -1
  472. package/dist/get-extension-from-codec.js.map +0 -1
  473. package/dist/get-frame-to-render.d.ts.map +0 -1
  474. package/dist/get-frame-to-render.js.map +0 -1
  475. package/dist/get-local-browser-executable.d.ts.map +0 -1
  476. package/dist/get-local-browser-executable.js.map +0 -1
  477. package/dist/get-port.d.ts.map +0 -1
  478. package/dist/get-port.js.map +0 -1
  479. package/dist/get-prores-profile-name.d.ts.map +0 -1
  480. package/dist/get-prores-profile-name.js.map +0 -1
  481. package/dist/image-format.d.ts.map +0 -1
  482. package/dist/image-format.js.map +0 -1
  483. package/dist/index.d.ts.map +0 -1
  484. package/dist/index.js.map +0 -1
  485. package/dist/is-serve-url.d.ts.map +0 -1
  486. package/dist/is-serve-url.js.map +0 -1
  487. package/dist/legacy-webpack-config.d.ts.map +0 -1
  488. package/dist/legacy-webpack-config.js.map +0 -1
  489. package/dist/make-assets-download-dir.d.ts +0 -1
  490. package/dist/make-assets-download-dir.d.ts.map +0 -1
  491. package/dist/make-assets-download-dir.js +0 -13
  492. package/dist/make-assets-download-dir.js.map +0 -1
  493. package/dist/normalize-serve-url.d.ts.map +0 -1
  494. package/dist/normalize-serve-url.js.map +0 -1
  495. package/dist/open-browser.d.ts.map +0 -1
  496. package/dist/open-browser.js.map +0 -1
  497. package/dist/parse-browser-error-stack.d.ts.map +0 -1
  498. package/dist/parse-browser-error-stack.js.map +0 -1
  499. package/dist/parse-ffmpeg-progress.d.ts.map +0 -1
  500. package/dist/parse-ffmpeg-progress.js.map +0 -1
  501. package/dist/pool.d.ts.map +0 -1
  502. package/dist/pool.js.map +0 -1
  503. package/dist/prepare-server.d.ts.map +0 -1
  504. package/dist/prepare-server.js.map +0 -1
  505. package/dist/provide-screenshot.d.ts.map +0 -1
  506. package/dist/provide-screenshot.js.map +0 -1
  507. package/dist/puppeteer-evaluate.d.ts.map +0 -1
  508. package/dist/puppeteer-evaluate.js.map +0 -1
  509. package/dist/puppeteer-screenshot.d.ts.map +0 -1
  510. package/dist/puppeteer-screenshot.js.map +0 -1
  511. package/dist/render-media.d.ts.map +0 -1
  512. package/dist/render-media.js.map +0 -1
  513. package/dist/render-still.d.ts.map +0 -1
  514. package/dist/render-still.js.map +0 -1
  515. package/dist/render.d.ts +0 -45
  516. package/dist/render.d.ts.map +0 -1
  517. package/dist/render.js +0 -245
  518. package/dist/render.js.map +0 -1
  519. package/dist/resolve-asset-src.d.ts.map +0 -1
  520. package/dist/resolve-asset-src.js.map +0 -1
  521. package/dist/sample-rate.d.ts.map +0 -1
  522. package/dist/sample-rate.js.map +0 -1
  523. package/dist/screenshot-dom-element.d.ts.map +0 -1
  524. package/dist/screenshot-dom-element.js.map +0 -1
  525. package/dist/screenshot-task.d.ts.map +0 -1
  526. package/dist/screenshot-task.js.map +0 -1
  527. package/dist/seek-to-frame.d.ts.map +0 -1
  528. package/dist/seek-to-frame.js.map +0 -1
  529. package/dist/serve-static.d.ts.map +0 -1
  530. package/dist/serve-static.js.map +0 -1
  531. package/dist/set-props-and-env.d.ts.map +0 -1
  532. package/dist/set-props-and-env.js.map +0 -1
  533. package/dist/stitcher.d.ts +0 -32
  534. package/dist/stitcher.d.ts.map +0 -1
  535. package/dist/stitcher.js +0 -204
  536. package/dist/stitcher.js.map +0 -1
  537. package/dist/stringify-ffmpeg-filter.d.ts.map +0 -1
  538. package/dist/stringify-ffmpeg-filter.js.map +0 -1
  539. package/dist/symbolicate-stacktrace.d.ts.map +0 -1
  540. package/dist/symbolicate-stacktrace.js.map +0 -1
  541. package/dist/tmp-dir.d.ts.map +0 -1
  542. package/dist/tmp-dir.js.map +0 -1
  543. package/dist/types.d.ts.map +0 -1
  544. package/dist/types.js.map +0 -1
  545. package/dist/validate-even-dimensions-with-codec.d.ts.map +0 -1
  546. package/dist/validate-even-dimensions-with-codec.js.map +0 -1
  547. package/dist/validate-ffmpeg.d.ts.map +0 -1
  548. package/dist/validate-ffmpeg.js.map +0 -1
  549. package/dist/validate-frame.d.ts +0 -1
  550. package/dist/validate-frame.js +0 -24
  551. package/dist/validate-puppeteer-timeout.d.ts.map +0 -1
  552. package/dist/validate-puppeteer-timeout.js.map +0 -1
  553. package/dist/validate-scale.d.ts.map +0 -1
  554. package/dist/validate-scale.js.map +0 -1
  555. package/tsconfig.json +0 -10
  556. package/vitest.config.ts +0 -8
@@ -99,18 +99,26 @@ async function puppeteerEvaluateWithCatch({ page, pageFunction, frame, args, })
99
99
  error.message += ' Are you passing a nested JSHandle?';
100
100
  throw error;
101
101
  }
102
- const { exceptionDetails, result: remoteObject } = await callFunctionOnPromise;
103
- if (exceptionDetails) {
104
- const err = new symbolicateable_error_1.SymbolicateableError({
105
- stack: (_c = exceptionDetails.exception) === null || _c === void 0 ? void 0 : _c.description,
106
- name: (_d = exceptionDetails.exception) === null || _d === void 0 ? void 0 : _d.className,
107
- message: (_f = (_e = exceptionDetails.exception) === null || _e === void 0 ? void 0 : _e.description) === null || _f === void 0 ? void 0 : _f.split('\n')[0],
108
- frame,
109
- stackFrame: (0, parse_browser_error_stack_1.parseStack)(((_g = exceptionDetails.exception) === null || _g === void 0 ? void 0 : _g.description).split('\n')),
110
- });
111
- throw err;
102
+ try {
103
+ const { exceptionDetails, result: remoteObject } = await callFunctionOnPromise;
104
+ if (exceptionDetails) {
105
+ const err = new symbolicateable_error_1.SymbolicateableError({
106
+ stack: (_c = exceptionDetails.exception) === null || _c === void 0 ? void 0 : _c.description,
107
+ name: (_d = exceptionDetails.exception) === null || _d === void 0 ? void 0 : _d.className,
108
+ message: (_f = (_e = exceptionDetails.exception) === null || _e === void 0 ? void 0 : _e.description) === null || _f === void 0 ? void 0 : _f.split('\n')[0],
109
+ frame,
110
+ stackFrame: (0, parse_browser_error_stack_1.parseStack)(((_g = exceptionDetails.exception) === null || _g === void 0 ? void 0 : _g.description).split('\n')),
111
+ });
112
+ throw err;
113
+ }
114
+ return valueFromRemoteObject(remoteObject);
115
+ }
116
+ catch (error) {
117
+ if (error === null || error === void 0 ? void 0 : error.originalMessage.startsWith("Object couldn't be returned by value")) {
118
+ throw new Error('Could not serialize the return value of the function. Did you pass non-serializable values to defaultProps?');
119
+ }
120
+ throw error;
112
121
  }
113
- return valueFromRemoteObject(remoteObject);
114
122
  }
115
123
  exports.puppeteerEvaluateWithCatch = puppeteerEvaluateWithCatch;
116
124
  /**
@@ -1,4 +1,13 @@
1
1
  /// <reference types="node" />
2
+ import type { ClipRegion } from 'remotion';
2
3
  import type { Page } from './browser/BrowserPage';
3
- import type { ScreenshotOptions } from './browser/ScreenshotOptions';
4
- export declare const screenshot: (page: Page, options: ScreenshotOptions) => Promise<Buffer | string | void>;
4
+ export declare const screenshot: (options: {
5
+ page: Page;
6
+ type: 'png' | 'jpeg';
7
+ path?: string;
8
+ quality?: number;
9
+ omitBackground: boolean;
10
+ width: number;
11
+ height: number;
12
+ clipRegion: ClipRegion | null;
13
+ }) => Promise<Buffer | string>;
@@ -26,7 +26,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
26
26
  exports.screenshot = void 0;
27
27
  const assert = __importStar(require("assert"));
28
28
  const screenshot_task_1 = require("./screenshot-task");
29
- const screenshot = (page, options) => {
29
+ const screenshot = (options) => {
30
30
  let screenshotType = null;
31
31
  // options.type takes precedence over inferring the type from options.path
32
32
  // because it may be a 0-length file with no extension created beforehand
@@ -58,18 +58,15 @@ const screenshot = (page, options) => {
58
58
  assert.ok(options.quality >= 0 && options.quality <= 100, 'Expected options.quality to be between 0 and 100 (inclusive), got ' +
59
59
  options.quality);
60
60
  }
61
- if (options.clip) {
62
- assert.ok(typeof options.clip.x === 'number', 'Expected options.clip.x to be a number but found ' +
63
- typeof options.clip.x);
64
- assert.ok(typeof options.clip.y === 'number', 'Expected options.clip.y to be a number but found ' +
65
- typeof options.clip.y);
66
- assert.ok(typeof options.clip.width === 'number', 'Expected options.clip.width to be a number but found ' +
67
- typeof options.clip.width);
68
- assert.ok(typeof options.clip.height === 'number', 'Expected options.clip.height to be a number but found ' +
69
- typeof options.clip.height);
70
- assert.ok(options.clip.width !== 0, 'Expected options.clip.width not to be 0.');
71
- assert.ok(options.clip.height !== 0, 'Expected options.clip.height not to be 0.');
72
- }
73
- return page.screenshotTaskQueue.postTask(() => (0, screenshot_task_1._screenshotTask)(page, screenshotType, options));
61
+ return options.page.screenshotTaskQueue.postTask(() => (0, screenshot_task_1.screenshotTask)({
62
+ page: options.page,
63
+ format: screenshotType,
64
+ height: options.height,
65
+ width: options.width,
66
+ omitBackground: options.omitBackground,
67
+ path: options.path,
68
+ quality: options.quality,
69
+ clipRegion: options.clipRegion,
70
+ }));
74
71
  };
75
72
  exports.screenshot = screenshot;
package/dist/quality.d.ts CHANGED
File without changes
package/dist/quality.js CHANGED
File without changes
@@ -0,0 +1 @@
1
+ export declare const redirectStatusCodes: number[];
@@ -0,0 +1,6 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.redirectStatusCodes = void 0;
4
+ // Don't handle 304 status code (Not Modified) as a redirect,
5
+ // since the browser will display the right page.
6
+ exports.redirectStatusCodes = [301, 302, 303, 307, 308];
@@ -20,14 +20,21 @@ declare type ConfigOrComposition = {
20
20
  } | {
21
21
  composition: SmallTCompMetadata;
22
22
  };
23
+ declare type ConcurrencyOrParallelism = {
24
+ concurrency?: number | string | null;
25
+ } | {
26
+ /**
27
+ * @deprecated This field has been renamed to `concurrency`
28
+ */
29
+ parallelism?: number | null;
30
+ };
23
31
  declare type RenderFramesOptions = {
24
32
  onStart: (data: OnStartData) => void;
25
- onFrameUpdate: (framesRendered: number, frameIndex: number) => void;
33
+ onFrameUpdate: (framesRendered: number, frameIndex: number, timeToRenderInMilliseconds: number) => void;
26
34
  outputDir: string | null;
27
35
  inputProps: unknown;
28
36
  envVariables?: Record<string, string>;
29
37
  imageFormat: ImageFormat;
30
- parallelism?: number | null;
31
38
  quality?: number;
32
39
  frameRange?: FrameRange | null;
33
40
  everyNthFrame?: number;
@@ -48,6 +55,11 @@ declare type RenderFramesOptions = {
48
55
  * @deprecated Only for Remotion internal usage
49
56
  */
50
57
  downloadMap?: DownloadMap;
51
- } & ConfigOrComposition & ServeUrlOrWebpackBundle;
58
+ muted?: boolean;
59
+ } & ConfigOrComposition & ConcurrencyOrParallelism & ServeUrlOrWebpackBundle;
60
+ /**
61
+ * @description Renders a series of images using Puppeteer and computes information for mixing audio.
62
+ * @see [Documentation](https://www.remotion.dev/docs/renderer/render-frames)
63
+ */
52
64
  export declare const renderFrames: (options: RenderFramesOptions) => Promise<RenderFramesOutput>;
53
65
  export {};
@@ -6,6 +6,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
6
6
  exports.renderFrames = void 0;
7
7
  const fs_1 = __importDefault(require("fs"));
8
8
  const path_1 = __importDefault(require("path"));
9
+ const perf_hooks_1 = require("perf_hooks");
9
10
  const remotion_1 = require("remotion");
10
11
  const download_and_map_assets_to_file_1 = require("./assets/download-and-map-assets-to-file");
11
12
  const download_map_1 = require("./assets/download-map");
@@ -13,23 +14,27 @@ const browser_1 = require("./browser");
13
14
  const compress_assets_1 = require("./compress-assets");
14
15
  const cycle_browser_tabs_1 = require("./cycle-browser-tabs");
15
16
  const handle_javascript_exception_1 = require("./error-handling/handle-javascript-exception");
17
+ const find_closest_package_json_1 = require("./find-closest-package-json");
16
18
  const get_concurrency_1 = require("./get-concurrency");
17
19
  const get_duration_from_frame_range_1 = require("./get-duration-from-frame-range");
18
20
  const get_frame_padded_index_1 = require("./get-frame-padded-index");
19
21
  const get_frame_to_render_1 = require("./get-frame-to-render");
20
22
  const image_format_1 = require("./image-format");
21
23
  const legacy_webpack_config_1 = require("./legacy-webpack-config");
24
+ const make_cancel_signal_1 = require("./make-cancel-signal");
22
25
  const open_browser_1 = require("./open-browser");
23
26
  const perf_1 = require("./perf");
24
27
  const pool_1 = require("./pool");
25
28
  const prepare_server_1 = require("./prepare-server");
26
- const provide_screenshot_1 = require("./provide-screenshot");
27
29
  const puppeteer_evaluate_1 = require("./puppeteer-evaluate");
28
30
  const quality_1 = require("./quality");
31
+ const replace_browser_1 = require("./replace-browser");
29
32
  const seek_to_frame_1 = require("./seek-to-frame");
30
33
  const set_props_and_env_1 = require("./set-props-and-env");
34
+ const take_frame_and_compose_1 = require("./take-frame-and-compose");
31
35
  const truthy_1 = require("./truthy");
32
36
  const validate_scale_1 = require("./validate-scale");
37
+ const MAX_RETRIES_PER_FRAME = 1;
33
38
  const getComposition = (others) => {
34
39
  if ('composition' in others) {
35
40
  return others.composition;
@@ -39,15 +44,16 @@ const getComposition = (others) => {
39
44
  }
40
45
  return undefined;
41
46
  };
42
- const getPool = async (pages) => {
43
- const puppeteerPages = await Promise.all(pages);
44
- const pool = new pool_1.Pool(puppeteerPages);
45
- return pool;
46
- };
47
- const innerRenderFrames = ({ onFrameUpdate, outputDir, onStart, inputProps, quality, imageFormat = image_format_1.DEFAULT_IMAGE_FORMAT, frameRange, puppeteerInstance, onError, envVariables, onBrowserLog, onFrameBuffer, onDownload, pagesArray, serveUrl, composition, timeoutInMilliseconds, scale, actualParallelism, everyNthFrame = 1, proxyPort, cancelSignal, downloadMap, }) => {
48
- if (!puppeteerInstance) {
49
- throw new Error('no puppeteer instance passed to innerRenderFrames - internal error');
47
+ const getConcurrency = (others) => {
48
+ if ('concurrency' in others) {
49
+ return others.concurrency;
50
+ }
51
+ if ('parallelism' in others) {
52
+ return others.parallelism;
50
53
  }
54
+ return undefined;
55
+ };
56
+ const innerRenderFrames = ({ onFrameUpdate, outputDir, onStart, inputProps, quality, imageFormat = image_format_1.DEFAULT_IMAGE_FORMAT, frameRange, onError, envVariables, onBrowserLog, onFrameBuffer, onDownload, pagesArray, serveUrl, composition, timeoutInMilliseconds, scale = 1, actualConcurrency, everyNthFrame = 1, proxyPort, cancelSignal, downloadMap, muted, makeBrowser, browserReplacer, }) => {
51
57
  if (outputDir) {
52
58
  if (!fs_1.default.existsSync(outputDir)) {
53
59
  fs_1.default.mkdirSync(outputDir, {
@@ -59,8 +65,8 @@ const innerRenderFrames = ({ onFrameUpdate, outputDir, onStart, inputProps, qual
59
65
  const realFrameRange = (0, get_frame_to_render_1.getRealFrameRange)(composition.durationInFrames, frameRange !== null && frameRange !== void 0 ? frameRange : null);
60
66
  const framesToRender = (0, get_duration_from_frame_range_1.getFramesToRender)(realFrameRange, everyNthFrame);
61
67
  const lastFrame = framesToRender[framesToRender.length - 1];
62
- const pages = new Array(actualParallelism).fill(true).map(async () => {
63
- const page = await puppeteerInstance.newPage();
68
+ const makePage = async () => {
69
+ const page = await browserReplacer.getBrowser().newPage();
64
70
  pagesArray.push(page);
65
71
  await page.setViewport({
66
72
  width: composition.width,
@@ -87,21 +93,42 @@ const innerRenderFrames = ({ onFrameUpdate, outputDir, onStart, inputProps, qual
87
93
  timeoutInMilliseconds,
88
94
  proxyPort,
89
95
  retriesRemaining: 2,
96
+ audioEnabled: !muted,
97
+ videoEnabled: imageFormat !== 'none',
90
98
  });
91
99
  await (0, puppeteer_evaluate_1.puppeteerEvaluateWithCatch)({
92
- pageFunction: (id) => {
100
+ // eslint-disable-next-line max-params
101
+ pageFunction: (id, defaultProps, durationInFrames, fps, height, width) => {
93
102
  window.setBundleMode({
94
103
  type: 'composition',
95
104
  compositionName: id,
105
+ compositionDefaultProps: defaultProps,
106
+ compositionDurationInFrames: durationInFrames,
107
+ compositionFps: fps,
108
+ compositionHeight: height,
109
+ compositionWidth: width,
96
110
  });
97
111
  },
98
- args: [composition.id],
112
+ args: [
113
+ composition.id,
114
+ composition.defaultProps,
115
+ composition.durationInFrames,
116
+ composition.fps,
117
+ composition.height,
118
+ composition.width,
119
+ ],
99
120
  frame: null,
100
121
  page,
101
122
  });
102
123
  page.off('console', logCallback);
103
124
  return page;
104
- });
125
+ };
126
+ const getPool = async () => {
127
+ const pages = new Array(actualConcurrency).fill(true).map(() => makePage());
128
+ const puppeteerPages = await Promise.all(pages);
129
+ const pool = new pool_1.Pool(puppeteerPages);
130
+ return pool;
131
+ };
105
132
  // If rendering a GIF and skipping frames, we must ensure it starts from 0
106
133
  // and then is consecutive so FFMPEG recognizes the sequence
107
134
  const countType = everyNthFrame === 1 ? 'actual-frames' : 'from-zero';
@@ -111,7 +138,7 @@ const innerRenderFrames = ({ onFrameUpdate, outputDir, onStart, inputProps, qual
111
138
  countType,
112
139
  });
113
140
  let framesRendered = 0;
114
- const poolPromise = getPool(pages);
141
+ const poolPromise = getPool();
115
142
  onStart({
116
143
  frameCount: framesToRender.length,
117
144
  });
@@ -120,14 +147,15 @@ const innerRenderFrames = ({ onFrameUpdate, outputDir, onStart, inputProps, qual
120
147
  cancelSignal === null || cancelSignal === void 0 ? void 0 : cancelSignal(() => {
121
148
  stopped = true;
122
149
  });
123
- const progress = Promise.all(framesToRender.map(async (frame, index) => {
150
+ const renderFrameWithOptionToReject = async ({ frame, index, reject, width, height, }) => {
124
151
  const pool = await poolPromise;
125
152
  const freePage = await pool.acquire();
126
153
  if (stopped) {
127
- throw new Error('Render was stopped');
154
+ return reject(new Error('Render was stopped'));
128
155
  }
156
+ const startTime = perf_hooks_1.performance.now();
129
157
  const errorCallbackOnFrame = (err) => {
130
- onError(err);
158
+ reject(err);
131
159
  };
132
160
  const cleanupPageError = (0, handle_javascript_exception_1.handleJavascriptException)({
133
161
  page: freePage,
@@ -136,52 +164,40 @@ const innerRenderFrames = ({ onFrameUpdate, outputDir, onStart, inputProps, qual
136
164
  });
137
165
  freePage.on('error', errorCallbackOnFrame);
138
166
  await (0, seek_to_frame_1.seekToFrame)({ frame, page: freePage });
139
- if (imageFormat !== 'none') {
140
- if (onFrameBuffer) {
141
- const id = (0, perf_1.startPerfMeasure)('save');
142
- const buffer = await (0, provide_screenshot_1.provideScreenshot)({
143
- page: freePage,
144
- imageFormat,
145
- quality,
146
- options: {
147
- frame,
148
- output: null,
149
- },
150
- });
151
- (0, perf_1.stopPerfMeasure)(id);
152
- onFrameBuffer(buffer, frame);
153
- }
154
- else {
155
- if (!outputDir) {
156
- throw new Error('Called renderFrames() without specifying either `outputDir` or `onFrameBuffer`');
157
- }
158
- const output = path_1.default.join(outputDir, (0, get_frame_padded_index_1.getFrameOutputFileName)({
159
- frame,
160
- imageFormat,
161
- index,
162
- countType,
163
- lastFrame,
164
- totalFrames: framesToRender.length,
165
- }));
166
- await (0, provide_screenshot_1.provideScreenshot)({
167
- page: freePage,
168
- imageFormat,
169
- quality,
170
- options: {
171
- frame,
172
- output,
173
- },
174
- });
175
- }
167
+ if (!outputDir && !onFrameBuffer && imageFormat !== 'none') {
168
+ throw new Error('Called renderFrames() without specifying either `outputDir` or `onFrameBuffer`');
176
169
  }
177
- const collectedAssets = await (0, puppeteer_evaluate_1.puppeteerEvaluateWithCatch)({
178
- pageFunction: () => {
179
- return window.remotion_collectAssets();
180
- },
181
- args: [],
170
+ if (outputDir && onFrameBuffer && imageFormat !== 'none') {
171
+ throw new Error('Pass either `outputDir` or `onFrameBuffer` to renderFrames(), not both.');
172
+ }
173
+ const id = (0, perf_1.startPerfMeasure)('save');
174
+ const frameDir = outputDir !== null && outputDir !== void 0 ? outputDir : downloadMap.compositingDir;
175
+ const { buffer, collectedAssets } = await (0, take_frame_and_compose_1.takeFrameAndCompose)({
182
176
  frame,
183
- page: freePage,
177
+ freePage,
178
+ height,
179
+ imageFormat,
180
+ output: path_1.default.join(frameDir, (0, get_frame_padded_index_1.getFrameOutputFileName)({
181
+ frame,
182
+ imageFormat,
183
+ index,
184
+ countType,
185
+ lastFrame,
186
+ totalFrames: framesToRender.length,
187
+ })),
188
+ quality,
189
+ width,
190
+ scale,
191
+ downloadMap,
192
+ wantsBuffer: Boolean(onFrameBuffer),
184
193
  });
194
+ if (onFrameBuffer) {
195
+ if (!buffer) {
196
+ throw new Error('unexpected null buffer');
197
+ }
198
+ onFrameBuffer(buffer, frame);
199
+ }
200
+ (0, perf_1.stopPerfMeasure)(id);
185
201
  const compressedAssets = collectedAssets.map((asset) => (0, compress_assets_1.compressAsset)(assets.filter(truthy_1.truthy).flat(1), asset));
186
202
  assets[index] = compressedAssets;
187
203
  compressedAssets.forEach((asset) => {
@@ -193,19 +209,71 @@ const innerRenderFrames = ({ onFrameUpdate, outputDir, onStart, inputProps, qual
193
209
  onError(new Error(`Error while downloading asset: ${err.stack}`));
194
210
  });
195
211
  });
196
- pool.release(freePage);
197
212
  framesRendered++;
198
- onFrameUpdate(framesRendered, frame);
213
+ onFrameUpdate(framesRendered, frame, perf_hooks_1.performance.now() - startTime);
199
214
  cleanupPageError();
200
215
  freePage.off('error', errorCallbackOnFrame);
201
- return compressedAssets;
202
- }));
216
+ pool.release(freePage);
217
+ };
218
+ const renderFrame = (frame, index) => {
219
+ return new Promise((resolve, reject) => {
220
+ renderFrameWithOptionToReject({
221
+ frame,
222
+ index,
223
+ reject,
224
+ width: composition.width,
225
+ height: composition.height,
226
+ })
227
+ .then(() => {
228
+ resolve();
229
+ })
230
+ .catch((err) => {
231
+ reject(err);
232
+ });
233
+ });
234
+ };
235
+ const renderFrameAndRetryTargetClose = async (frame, index, retriesLeft, attempt) => {
236
+ var _a, _b;
237
+ try {
238
+ await renderFrame(frame, index);
239
+ }
240
+ catch (err) {
241
+ if (!((_a = err === null || err === void 0 ? void 0 : err.message) === null || _a === void 0 ? void 0 : _a.includes('Target closed')) &&
242
+ !((_b = err === null || err === void 0 ? void 0 : err.message) === null || _b === void 0 ? void 0 : _b.includes('Session closed'))) {
243
+ throw err;
244
+ }
245
+ if ((0, make_cancel_signal_1.isUserCancelledRender)(err)) {
246
+ throw err;
247
+ }
248
+ if (stopped) {
249
+ return;
250
+ }
251
+ if (retriesLeft === 0) {
252
+ console.warn(`The browser crashed ${attempt} times while rendering frame ${frame}. Not retrying anymore. Learn more about this error under https://www.remotion.dev/docs/target-closed`);
253
+ throw err;
254
+ }
255
+ console.warn(`The browser crashed while rendering frame ${frame}, retrying ${retriesLeft} more times. Learn more about this error under https://www.remotion.dev/docs/target-closed`);
256
+ await browserReplacer.replaceBrowser(makeBrowser, async () => {
257
+ const pages = new Array(actualConcurrency)
258
+ .fill(true)
259
+ .map(() => makePage());
260
+ const puppeteerPages = await Promise.all(pages);
261
+ const pool = await poolPromise;
262
+ for (const newPage of puppeteerPages) {
263
+ pool.release(newPage);
264
+ }
265
+ });
266
+ await renderFrameAndRetryTargetClose(frame, index, retriesLeft - 1, attempt + 1);
267
+ }
268
+ };
269
+ const progress = Promise.all(framesToRender.map((frame, index) => renderFrameAndRetryTargetClose(frame, index, MAX_RETRIES_PER_FRAME, 1)));
203
270
  const happyPath = progress.then(() => {
271
+ const firstFrameIndex = countType === 'from-zero' ? 0 : framesToRender[0];
204
272
  const returnValue = {
205
273
  assetsInfo: {
206
274
  assets,
207
275
  imageSequenceName: `element-%0${filePadLength}d.${imageFormat}`,
208
- firstFrameIndex: framesToRender[0],
276
+ firstFrameIndex,
209
277
  downloadMap,
210
278
  },
211
279
  frameCount: framesToRender.length,
@@ -218,35 +286,51 @@ const innerRenderFrames = ({ onFrameUpdate, outputDir, onStart, inputProps, qual
218
286
  })
219
287
  .then(() => happyPath);
220
288
  };
289
+ /**
290
+ * @description Renders a series of images using Puppeteer and computes information for mixing audio.
291
+ * @see [Documentation](https://www.remotion.dev/docs/renderer/render-frames)
292
+ */
221
293
  const renderFrames = (options) => {
222
- var _a, _b, _c, _d, _e;
294
+ var _a, _b, _c;
223
295
  const composition = getComposition(options);
296
+ const concurrency = getConcurrency(options);
224
297
  if (!composition) {
225
298
  throw new Error('No `composition` option has been specified for renderFrames()');
226
299
  }
227
300
  remotion_1.Internals.validateDimension(composition.height, 'height', 'in the `config` object passed to `renderFrames()`');
228
301
  remotion_1.Internals.validateDimension(composition.width, 'width', 'in the `config` object passed to `renderFrames()`');
229
302
  remotion_1.Internals.validateFps(composition.fps, 'in the `config` object of `renderFrames()`', false);
230
- remotion_1.Internals.validateDurationInFrames(composition.durationInFrames, 'in the `config` object passed to `renderFrames()`');
303
+ remotion_1.Internals.validateDurationInFrames({
304
+ durationInFrames: composition.durationInFrames,
305
+ component: 'in the `config` object passed to `renderFrames()`',
306
+ allowFloats: false,
307
+ });
231
308
  if (options.quality !== undefined && options.imageFormat !== 'jpeg') {
232
309
  throw new Error("You can only pass the `quality` option if `imageFormat` is 'jpeg'.");
233
310
  }
234
311
  const selectedServeUrl = (0, legacy_webpack_config_1.getServeUrlWithFallback)(options);
235
312
  (0, quality_1.validateQuality)(options.quality);
236
313
  (0, validate_scale_1.validateScale)(options.scale);
237
- const browserInstance = (_a = options.puppeteerInstance) !== null && _a !== void 0 ? _a : (0, open_browser_1.openBrowser)(browser_1.DEFAULT_BROWSER, {
238
- shouldDumpIo: options.dumpBrowserLogs,
239
- browserExecutable: options.browserExecutable,
240
- chromiumOptions: options.chromiumOptions,
241
- forceDeviceScaleFactor: (_b = options.scale) !== null && _b !== void 0 ? _b : 1,
242
- });
243
- const downloadMap = (_c = options.downloadMap) !== null && _c !== void 0 ? _c : (0, download_map_1.makeDownloadMap)();
244
- const onDownload = (_d = options.onDownload) !== null && _d !== void 0 ? _d : (() => () => undefined);
245
- const actualParallelism = (0, get_concurrency_1.getActualConcurrency)((_e = options.parallelism) !== null && _e !== void 0 ? _e : null);
314
+ const makeBrowser = () => {
315
+ var _a;
316
+ return (0, open_browser_1.openBrowser)(browser_1.DEFAULT_BROWSER, {
317
+ shouldDumpIo: options.dumpBrowserLogs,
318
+ browserExecutable: options.browserExecutable,
319
+ chromiumOptions: options.chromiumOptions,
320
+ forceDeviceScaleFactor: (_a = options.scale) !== null && _a !== void 0 ? _a : 1,
321
+ });
322
+ };
323
+ const browserInstance = (_a = options.puppeteerInstance) !== null && _a !== void 0 ? _a : makeBrowser();
324
+ const downloadMap = (_b = options.downloadMap) !== null && _b !== void 0 ? _b : (0, download_map_1.makeDownloadMap)();
325
+ const onDownload = (_c = options.onDownload) !== null && _c !== void 0 ? _c : (() => () => undefined);
326
+ const actualConcurrency = (0, get_concurrency_1.getActualConcurrency)(concurrency !== null && concurrency !== void 0 ? concurrency : null);
246
327
  const openedPages = [];
247
328
  return new Promise((resolve, reject) => {
248
329
  var _a, _b, _c;
249
330
  const cleanup = [];
331
+ if (!options.downloadMap) {
332
+ cleanup.push(() => (0, download_map_1.cleanDownloadMap)(downloadMap));
333
+ }
250
334
  const onError = (err) => {
251
335
  reject(err);
252
336
  };
@@ -254,7 +338,7 @@ const renderFrames = (options) => {
254
338
  new Promise((_, rej) => {
255
339
  var _a;
256
340
  (_a = options.cancelSignal) === null || _a === void 0 ? void 0 : _a.call(options, () => {
257
- rej(new Error('renderFrames() got cancelled'));
341
+ rej(new Error(make_cancel_signal_1.cancelErrorMessages.renderFrames));
258
342
  });
259
343
  }),
260
344
  Promise.all([
@@ -266,12 +350,14 @@ const renderFrames = (options) => {
266
350
  ffprobeExecutable: (_b = options.ffprobeExecutable) !== null && _b !== void 0 ? _b : null,
267
351
  port: (_c = options.port) !== null && _c !== void 0 ? _c : null,
268
352
  downloadMap,
353
+ remotionRoot: (0, find_closest_package_json_1.findRemotionRoot)(),
269
354
  }),
270
355
  browserInstance,
271
356
  ]).then(([{ serveUrl, closeServer, offthreadPort }, puppeteerInstance]) => {
272
- const { stopCycling } = (0, cycle_browser_tabs_1.cycleBrowserTabs)(puppeteerInstance, actualParallelism);
357
+ const browserReplacer = (0, replace_browser_1.handleBrowserCrash)(puppeteerInstance);
358
+ const { stopCycling } = (0, cycle_browser_tabs_1.cycleBrowserTabs)(browserReplacer, actualConcurrency);
273
359
  cleanup.push(stopCycling);
274
- cleanup.push(closeServer);
360
+ cleanup.push(() => closeServer(false));
275
361
  return innerRenderFrames({
276
362
  ...options,
277
363
  puppeteerInstance,
@@ -279,10 +365,12 @@ const renderFrames = (options) => {
279
365
  pagesArray: openedPages,
280
366
  serveUrl,
281
367
  composition,
282
- actualParallelism,
368
+ actualConcurrency,
283
369
  onDownload,
284
370
  proxyPort: offthreadPort,
285
371
  downloadMap,
372
+ makeBrowser,
373
+ browserReplacer,
286
374
  });
287
375
  }),
288
376
  ])
@@ -296,16 +384,20 @@ const renderFrames = (options) => {
296
384
  // If new browser was opened, then closing the browser as a cleanup.
297
385
  if (options.puppeteerInstance) {
298
386
  Promise.all(openedPages.map((p) => p.close())).catch((err) => {
299
- console.log('Unable to close browser tab', err);
387
+ if (!(err === null || err === void 0 ? void 0 : err.message.includes('Target closed'))) {
388
+ console.log('Unable to close browser tab', err);
389
+ }
300
390
  });
301
391
  }
302
392
  else {
303
393
  Promise.resolve(browserInstance)
304
394
  .then((puppeteerInstance) => {
305
- return puppeteerInstance.close();
395
+ return puppeteerInstance.close(true);
306
396
  })
307
397
  .catch((err) => {
308
- console.log('Unable to close browser', err);
398
+ if (!(err === null || err === void 0 ? void 0 : err.message.includes('Target closed'))) {
399
+ console.log('Unable to close browser', err);
400
+ }
309
401
  });
310
402
  }
311
403
  cleanup.forEach((c) => {