@remotion/renderer 4.0.0-webhook.27 → 4.1.0-alpha2

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 (411) hide show
  1. package/LICENSE.md +8 -8
  2. package/README.md +9 -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 +6 -4
  12. package/dist/assets/download-and-map-assets-to-file.js +49 -19
  13. package/dist/assets/download-file.d.ts +8 -5
  14. package/dist/assets/download-file.js +71 -8
  15. package/dist/assets/download-map.d.ts +8 -29
  16. package/dist/assets/download-map.js +15 -16
  17. package/dist/assets/ffmpeg-volume-expression.d.ts +4 -3
  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 +2 -2
  22. package/dist/assets/get-audio-channels.js +14 -12
  23. package/dist/assets/read-file.d.ts +1 -1
  24. package/dist/assets/read-file.js +5 -7
  25. package/dist/assets/round-volume-to-avoid-stack-overflow.d.ts +0 -0
  26. package/dist/assets/round-volume-to-avoid-stack-overflow.js +0 -0
  27. package/dist/assets/sanitize-filename.d.ts +0 -0
  28. package/dist/assets/sanitize-filename.js +0 -0
  29. package/dist/assets/sanitize-filepath.d.ts +0 -0
  30. package/dist/assets/sanitize-filepath.js +2 -2
  31. package/dist/assets/truncate-utf8-bytes.d.ts +0 -0
  32. package/dist/assets/truncate-utf8-bytes.js +0 -0
  33. package/dist/assets/types.d.ts +5 -4
  34. package/dist/assets/types.js +0 -0
  35. package/dist/audio-codec.d.ts +28 -0
  36. package/dist/audio-codec.js +83 -0
  37. package/dist/browser/Browser.d.ts +16 -14
  38. package/dist/browser/Browser.js +69 -72
  39. package/dist/browser/BrowserConnector.d.ts +0 -0
  40. package/dist/browser/BrowserConnector.js +0 -0
  41. package/dist/browser/BrowserFetcher.d.ts +16 -64
  42. package/dist/browser/BrowserFetcher.js +147 -235
  43. package/dist/browser/BrowserPage.d.ts +21 -6
  44. package/dist/browser/BrowserPage.js +54 -22
  45. package/dist/browser/BrowserRunner.d.ts +1 -1
  46. package/dist/browser/BrowserRunner.js +32 -22
  47. package/dist/browser/Connection.d.ts +0 -0
  48. package/dist/browser/Connection.js +1 -1
  49. package/dist/browser/ConsoleMessage.d.ts +1 -1
  50. package/dist/browser/ConsoleMessage.js +0 -0
  51. package/dist/browser/DOMWorld.d.ts +5 -4
  52. package/dist/browser/DOMWorld.js +16 -9
  53. package/dist/browser/Errors.d.ts +0 -0
  54. package/dist/browser/Errors.js +0 -0
  55. package/dist/browser/EvalTypes.d.ts +7 -7
  56. package/dist/browser/EvalTypes.js +0 -0
  57. package/dist/browser/EventEmitter.d.ts +0 -0
  58. package/dist/browser/EventEmitter.js +0 -0
  59. package/dist/browser/ExecutionContext.d.ts +0 -0
  60. package/dist/browser/ExecutionContext.js +0 -0
  61. package/dist/browser/FrameManager.d.ts +0 -2
  62. package/dist/browser/FrameManager.js +13 -17
  63. package/dist/browser/HTTPRequest.d.ts +0 -0
  64. package/dist/browser/HTTPRequest.js +0 -0
  65. package/dist/browser/HTTPResponse.d.ts +0 -0
  66. package/dist/browser/HTTPResponse.js +0 -0
  67. package/dist/browser/JSHandle.d.ts +0 -0
  68. package/dist/browser/JSHandle.js +14 -14
  69. package/dist/browser/LaunchOptions.d.ts +2 -2
  70. package/dist/browser/LaunchOptions.js +0 -0
  71. package/dist/browser/Launcher.d.ts +9 -3
  72. package/dist/browser/Launcher.js +16 -29
  73. package/dist/browser/LifecycleWatcher.d.ts +1 -1
  74. package/dist/browser/LifecycleWatcher.js +0 -0
  75. package/dist/browser/NetworkEventManager.d.ts +4 -4
  76. package/dist/browser/NetworkEventManager.js +0 -0
  77. package/dist/browser/NetworkManager.d.ts +0 -0
  78. package/dist/browser/NetworkManager.js +0 -0
  79. package/dist/browser/NodeWebSocketTransport.d.ts +0 -0
  80. package/dist/browser/NodeWebSocketTransport.js +21 -21
  81. package/dist/browser/Product.d.ts +1 -1
  82. package/dist/browser/Product.js +0 -0
  83. package/dist/browser/PuppeteerNode.d.ts +2 -5
  84. package/dist/browser/PuppeteerNode.js +2 -11
  85. package/dist/browser/PuppeteerViewport.d.ts +0 -0
  86. package/dist/browser/PuppeteerViewport.js +0 -0
  87. package/dist/browser/ScreenshotOptions.d.ts +0 -14
  88. package/dist/browser/ScreenshotOptions.js +0 -1
  89. package/dist/browser/Target.d.ts +4 -3
  90. package/dist/browser/Target.js +8 -2
  91. package/dist/browser/TaskQueue.d.ts +0 -0
  92. package/dist/browser/TaskQueue.js +0 -0
  93. package/dist/browser/TimeoutSettings.d.ts +0 -0
  94. package/dist/browser/TimeoutSettings.js +0 -0
  95. package/dist/browser/assert.d.ts +0 -0
  96. package/dist/browser/assert.js +0 -0
  97. package/dist/browser/create-browser-fetcher.d.ts +0 -0
  98. package/dist/browser/create-browser-fetcher.js +34 -48
  99. package/dist/browser/devtools-commands.d.ts +5 -1
  100. package/dist/browser/devtools-commands.js +0 -0
  101. package/dist/browser/devtools-types.d.ts +92 -10
  102. package/dist/browser/devtools-types.js +0 -0
  103. package/dist/browser/get-download-destination.d.ts +0 -0
  104. package/dist/browser/get-download-destination.js +8 -8
  105. package/dist/browser/is-target-closed-err.d.ts +1 -0
  106. package/dist/browser/is-target-closed-err.js +9 -0
  107. package/dist/browser/mitt/index.d.ts +6 -6
  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 +1 -1
  112. package/dist/browser/revisions.js +0 -0
  113. package/dist/browser/should-log-message.d.ts +24 -0
  114. package/dist/browser/should-log-message.js +72 -0
  115. package/dist/browser/util.d.ts +2 -2
  116. package/dist/browser/util.js +0 -0
  117. package/dist/browser-executable.d.ts +1 -1
  118. package/dist/browser-executable.js +0 -0
  119. package/dist/browser-log.d.ts +1 -1
  120. package/dist/browser-log.js +0 -0
  121. package/dist/browser.d.ts +1 -1
  122. package/dist/browser.js +0 -0
  123. package/dist/calculate-ffmpeg-filters.d.ts +2 -1
  124. package/dist/calculate-ffmpeg-filters.js +1 -0
  125. package/dist/call-ffmpeg.d.ts +14 -0
  126. package/dist/call-ffmpeg.js +42 -0
  127. package/dist/can-use-parallel-encoding.d.ts +0 -0
  128. package/dist/can-use-parallel-encoding.js +0 -0
  129. package/dist/chalk/index.d.ts +54 -0
  130. package/dist/chalk/index.js +135 -0
  131. package/dist/chalk/is-color-supported.d.ts +1 -0
  132. package/dist/chalk/is-color-supported.js +37 -0
  133. package/dist/check-apple-silicon.d.ts +1 -1
  134. package/dist/check-apple-silicon.js +8 -47
  135. package/dist/chunk.d.ts +0 -0
  136. package/dist/chunk.js +0 -0
  137. package/dist/client.d.ts +204 -0
  138. package/dist/client.js +49 -0
  139. package/dist/codec-supports-media.d.ts +3 -2
  140. package/dist/codec-supports-media.js +20 -5
  141. package/dist/codec.d.ts +2 -2
  142. package/dist/codec.js +0 -0
  143. package/dist/combine-videos.d.ts +6 -2
  144. package/dist/combine-videos.js +17 -17
  145. package/dist/compositor/compose.d.ts +26 -0
  146. package/dist/compositor/compose.js +82 -0
  147. package/dist/compositor/compositor.d.ts +11 -0
  148. package/dist/compositor/compositor.js +219 -0
  149. package/dist/compositor/get-executable-path.d.ts +1 -0
  150. package/dist/compositor/get-executable-path.js +57 -0
  151. package/dist/compositor/make-nonce.d.ts +1 -0
  152. package/dist/compositor/make-nonce.js +8 -0
  153. package/dist/compositor/payloads.d.ts +68 -0
  154. package/dist/{ffmpeg-executable.js → compositor/payloads.js} +0 -0
  155. package/dist/compress-assets.d.ts +0 -0
  156. package/dist/compress-assets.js +0 -0
  157. package/dist/convert-number-of-gif-loops-to-ffmpeg.d.ts +0 -0
  158. package/dist/convert-number-of-gif-loops-to-ffmpeg.js +0 -0
  159. package/dist/convert-to-positive-frame-index.d.ts +0 -0
  160. package/dist/convert-to-positive-frame-index.js +0 -0
  161. package/dist/create-ffmpeg-complex-filter.d.ts +5 -1
  162. package/dist/create-ffmpeg-complex-filter.js +6 -4
  163. package/dist/create-ffmpeg-merge-filter.d.ts +5 -1
  164. package/dist/create-ffmpeg-merge-filter.js +21 -13
  165. package/dist/create-silent-audio.d.ts +1 -3
  166. package/dist/create-silent-audio.js +3 -6
  167. package/dist/crf.d.ts +6 -2
  168. package/dist/crf.js +41 -8
  169. package/dist/cycle-browser-tabs.d.ts +2 -5
  170. package/dist/cycle-browser-tabs.js +5 -5
  171. package/dist/delay-render-embedded-stack.d.ts +0 -0
  172. package/dist/delay-render-embedded-stack.js +0 -0
  173. package/dist/delete-directory.d.ts +1 -1
  174. package/dist/delete-directory.js +43 -17
  175. package/dist/does-have-m2-bug.d.ts +3 -0
  176. package/dist/does-have-m2-bug.js +12 -0
  177. package/dist/ensure-frames-in-order.d.ts +0 -0
  178. package/dist/ensure-frames-in-order.js +0 -0
  179. package/dist/ensure-output-directory.d.ts +0 -0
  180. package/dist/ensure-output-directory.js +5 -5
  181. package/dist/error-handling/handle-javascript-exception.d.ts +0 -0
  182. package/dist/error-handling/handle-javascript-exception.js +10 -0
  183. package/dist/error-handling/symbolicate-error.d.ts +0 -0
  184. package/dist/error-handling/symbolicate-error.js +6 -3
  185. package/dist/error-handling/symbolicateable-error.d.ts +0 -0
  186. package/dist/error-handling/symbolicateable-error.js +0 -0
  187. package/dist/ffmpeg-filter-file.d.ts +6 -1
  188. package/dist/ffmpeg-filter-file.js +40 -8
  189. package/dist/ffmpeg-override.d.ts +1 -1
  190. package/dist/ffmpeg-override.js +0 -0
  191. package/dist/file-extensions.d.ts +14 -0
  192. package/dist/file-extensions.js +76 -0
  193. package/dist/find-closest-package-json.d.ts +2 -0
  194. package/dist/find-closest-package-json.js +31 -0
  195. package/dist/frame-range.d.ts +1 -1
  196. package/dist/frame-range.js +0 -0
  197. package/dist/get-browser-instance.d.ts +8 -3
  198. package/dist/get-browser-instance.js +10 -5
  199. package/dist/get-codec-name.d.ts +0 -0
  200. package/dist/get-codec-name.js +0 -0
  201. package/dist/get-compositions.d.ts +27 -14
  202. package/dist/get-compositions.js +72 -39
  203. package/dist/get-concurrency.d.ts +1 -1
  204. package/dist/get-concurrency.js +11 -4
  205. package/dist/get-duration-from-frame-range.d.ts +0 -0
  206. package/dist/get-duration-from-frame-range.js +0 -0
  207. package/dist/get-extension-from-codec.d.ts +5 -1
  208. package/dist/get-extension-from-codec.js +56 -32
  209. package/dist/get-extension-of-filename.d.ts +0 -0
  210. package/dist/get-extension-of-filename.js +5 -1
  211. package/dist/get-frame-padded-index.d.ts +3 -2
  212. package/dist/get-frame-padded-index.js +3 -2
  213. package/dist/get-frame-to-render.d.ts +0 -0
  214. package/dist/get-frame-to-render.js +1 -1
  215. package/dist/get-local-browser-executable.d.ts +0 -0
  216. package/dist/get-local-browser-executable.js +7 -15
  217. package/dist/get-port.d.ts +4 -1
  218. package/dist/get-port.js +8 -8
  219. package/dist/get-prores-profile-name.d.ts +0 -0
  220. package/dist/get-prores-profile-name.js +0 -0
  221. package/dist/get-video-threads-flag.d.ts +0 -0
  222. package/dist/get-video-threads-flag.js +3 -3
  223. package/dist/guess-extension-for-media.d.ts +3 -1
  224. package/dist/guess-extension-for-media.js +4 -7
  225. package/dist/image-format.d.ts +12 -6
  226. package/dist/image-format.js +19 -13
  227. package/dist/index.d.ts +368 -49
  228. package/dist/index.js +68 -46
  229. package/dist/is-audio-codec.d.ts +0 -0
  230. package/dist/is-audio-codec.js +0 -0
  231. package/dist/is-serve-url.d.ts +0 -0
  232. package/dist/is-serve-url.js +0 -0
  233. package/dist/jpeg-quality.d.ts +2 -0
  234. package/dist/jpeg-quality.js +22 -0
  235. package/dist/locks.d.ts +7 -0
  236. package/dist/locks.js +44 -0
  237. package/dist/log-level.d.ts +1 -1
  238. package/dist/log-level.js +0 -0
  239. package/dist/logger.d.ts +24 -0
  240. package/dist/logger.js +68 -0
  241. package/dist/make-cancel-signal.d.ts +13 -2
  242. package/dist/make-cancel-signal.js +24 -1
  243. package/dist/merge-audio-track.d.ts +4 -4
  244. package/dist/merge-audio-track.js +38 -33
  245. package/dist/mime-db.d.ts +0 -0
  246. package/dist/mime-db.js +0 -0
  247. package/dist/mime-types.d.ts +0 -0
  248. package/dist/mime-types.js +3 -3
  249. package/dist/normalize-serve-url.d.ts +0 -0
  250. package/dist/normalize-serve-url.js +0 -0
  251. package/dist/offthread-video-server.d.ts +47 -11
  252. package/dist/offthread-video-server.js +111 -58
  253. package/dist/open-browser.d.ts +21 -6
  254. package/dist/open-browser.js +37 -16
  255. package/dist/options/audio-bitrate.d.ts +2 -0
  256. package/dist/options/audio-bitrate.js +11 -0
  257. package/dist/options/crf.d.ts +2 -0
  258. package/dist/options/crf.js +11 -0
  259. package/dist/options/enforce-audio.d.ts +2 -0
  260. package/dist/options/enforce-audio.js +11 -0
  261. package/dist/options/jpeg-quality.d.ts +2 -0
  262. package/dist/options/jpeg-quality.js +11 -0
  263. package/dist/options/mute.d.ts +2 -0
  264. package/dist/options/mute.js +11 -0
  265. package/dist/options/option.d.ts +8 -0
  266. package/dist/options/option.js +2 -0
  267. package/dist/options/scale.d.ts +2 -0
  268. package/dist/options/scale.js +11 -0
  269. package/dist/options/video-bitrate.d.ts +2 -0
  270. package/dist/options/video-bitrate.js +11 -0
  271. package/dist/options/video-codec.d.ts +2 -0
  272. package/dist/options/video-codec.js +11 -0
  273. package/dist/overwrite.d.ts +0 -0
  274. package/dist/overwrite.js +0 -0
  275. package/dist/p-limit.d.ts +0 -0
  276. package/dist/p-limit.js +0 -0
  277. package/dist/parse-browser-error-stack.d.ts +1 -1
  278. package/dist/parse-browser-error-stack.js +0 -0
  279. package/dist/parse-ffmpeg-progress.d.ts +0 -0
  280. package/dist/parse-ffmpeg-progress.js +0 -0
  281. package/dist/perf.d.ts +2 -2
  282. package/dist/perf.js +9 -7
  283. package/dist/pixel-format.d.ts +2 -2
  284. package/dist/pixel-format.js +3 -0
  285. package/dist/pool.d.ts +0 -0
  286. package/dist/pool.js +0 -0
  287. package/dist/prepare-server.d.ts +25 -10
  288. package/dist/prepare-server.js +71 -18
  289. package/dist/preprocess-audio-track.d.ts +7 -5
  290. package/dist/preprocess-audio-track.js +7 -8
  291. package/dist/prespawn-ffmpeg.d.ts +20 -10
  292. package/dist/prespawn-ffmpeg.js +67 -29
  293. package/dist/prestitcher-memory-usage.d.ts +0 -4
  294. package/dist/prestitcher-memory-usage.js +4 -5
  295. package/dist/prores-profile.d.ts +6 -4
  296. package/dist/prores-profile.js +8 -8
  297. package/dist/provide-screenshot.d.ts +8 -4
  298. package/dist/provide-screenshot.js +5 -2
  299. package/dist/puppeteer-evaluate.d.ts +0 -0
  300. package/dist/puppeteer-evaluate.js +20 -12
  301. package/dist/puppeteer-screenshot.d.ts +12 -2
  302. package/dist/puppeteer-screenshot.js +18 -45
  303. package/dist/redirect-status-codes.d.ts +1 -0
  304. package/dist/redirect-status-codes.js +6 -0
  305. package/dist/render-frames.d.ts +52 -35
  306. package/dist/render-frames.js +248 -143
  307. package/dist/render-media.d.ts +76 -29
  308. package/dist/render-media.js +324 -195
  309. package/dist/render-still.d.ts +46 -19
  310. package/dist/render-still.js +128 -69
  311. package/dist/replace-browser.d.ts +6 -0
  312. package/dist/replace-browser.js +47 -0
  313. package/dist/resolve-asset-src.d.ts +0 -0
  314. package/dist/resolve-asset-src.js +2 -2
  315. package/dist/sample-rate.d.ts +0 -0
  316. package/dist/sample-rate.js +0 -0
  317. package/dist/screenshot-dom-element.d.ts +8 -4
  318. package/dist/screenshot-dom-element.js +15 -4
  319. package/dist/screenshot-task.d.ts +11 -2
  320. package/dist/screenshot-task.js +43 -13
  321. package/dist/seek-to-frame.d.ts +1 -0
  322. package/dist/seek-to-frame.js +49 -3
  323. package/dist/select-composition.d.ts +41 -0
  324. package/dist/select-composition.js +156 -0
  325. package/dist/serve-handler/index.d.ts +1 -1
  326. package/dist/serve-handler/index.js +21 -19
  327. package/dist/serve-handler/is-path-inside.d.ts +0 -0
  328. package/dist/serve-handler/is-path-inside.js +3 -3
  329. package/dist/serve-handler/range-parser.d.ts +0 -0
  330. package/dist/serve-handler/range-parser.js +0 -0
  331. package/dist/serve-static.d.ts +8 -6
  332. package/dist/serve-static.js +85 -59
  333. package/dist/set-props-and-env.d.ts +5 -3
  334. package/dist/set-props-and-env.js +18 -10
  335. package/dist/stitch-frames-to-video.d.ts +39 -16
  336. package/dist/stitch-frames-to-video.js +210 -121
  337. package/dist/stringify-ffmpeg-filter.d.ts +10 -2
  338. package/dist/stringify-ffmpeg-filter.js +37 -34
  339. package/dist/symbolicate-stacktrace.d.ts +16 -3
  340. package/dist/symbolicate-stacktrace.js +49 -24
  341. package/dist/take-frame-and-compose.d.ts +22 -0
  342. package/dist/take-frame-and-compose.js +103 -0
  343. package/dist/tmp-dir.d.ts +0 -0
  344. package/dist/tmp-dir.js +7 -8
  345. package/dist/truthy.d.ts +1 -1
  346. package/dist/truthy.js +0 -0
  347. package/dist/types.d.ts +2 -2
  348. package/dist/types.js +0 -0
  349. package/dist/validate-concurrency.d.ts +2 -0
  350. package/dist/validate-concurrency.js +21 -10
  351. package/dist/validate-even-dimensions-with-codec.d.ts +0 -0
  352. package/dist/validate-even-dimensions-with-codec.js +0 -0
  353. package/dist/validate-every-nth-frame.d.ts +2 -1
  354. package/dist/validate-every-nth-frame.js +8 -1
  355. package/dist/validate-ffmpeg-override.d.ts +0 -0
  356. package/dist/validate-ffmpeg-override.js +0 -0
  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 +2 -3
  360. package/dist/validate-opengl-renderer.js +9 -4
  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 -0
  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/ws/ws-types.d.ts +0 -0
  372. package/dist/ws/ws-types.js +2 -1
  373. package/install-toolchain.mjs +36 -0
  374. package/package.json +70 -60
  375. package/types/ws/index.d.ts +5 -5
  376. package/.prettierrc.js +0 -14
  377. package/dist/assets/dl-browser.d.ts +0 -1
  378. package/dist/assets/dl-browser.js +0 -38
  379. package/dist/assets/get-video-stream-duration.d.ts +0 -4
  380. package/dist/assets/get-video-stream-duration.js +0 -59
  381. package/dist/calculate-sar-dar-pixels.d.ts +0 -9
  382. package/dist/calculate-sar-dar-pixels.js +0 -19
  383. package/dist/convert-to-pcm.d.ts +0 -6
  384. package/dist/convert-to-pcm.js +0 -20
  385. package/dist/ensure-presentation-timestamp.d.ts +0 -2
  386. package/dist/ensure-presentation-timestamp.js +0 -69
  387. package/dist/extract-frame-from-video.d.ts +0 -16
  388. package/dist/extract-frame-from-video.js +0 -277
  389. package/dist/ffmpeg-executable.d.ts +0 -1
  390. package/dist/ffmpeg-flags.d.ts +0 -12
  391. package/dist/ffmpeg-flags.js +0 -45
  392. package/dist/frame-to-ffmpeg-timestamp.d.ts +0 -1
  393. package/dist/frame-to-ffmpeg-timestamp.js +0 -8
  394. package/dist/get-audio-codec-name.d.ts +0 -2
  395. package/dist/get-audio-codec-name.js +0 -28
  396. package/dist/get-video-info.d.ts +0 -3
  397. package/dist/get-video-info.js +0 -49
  398. package/dist/is-beyond-last-frame.d.ts +0 -3
  399. package/dist/is-beyond-last-frame.js +0 -12
  400. package/dist/last-frame-from-video-cache.d.ts +0 -17
  401. package/dist/last-frame-from-video-cache.js +0 -55
  402. package/dist/legacy-webpack-config.d.ts +0 -9
  403. package/dist/legacy-webpack-config.js +0 -13
  404. package/dist/quality.d.ts +0 -1
  405. package/dist/quality.js +0 -21
  406. package/dist/validate-ffmpeg.d.ts +0 -2
  407. package/dist/validate-ffmpeg.js +0 -72
  408. package/dist/validate-frame.d.ts +0 -1
  409. package/dist/validate-frame.js +0 -24
  410. package/tsconfig.json +0 -10
  411. package/vitest.config.ts +0 -8
@@ -3,78 +3,56 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
3
3
  return (mod && mod.__esModule) ? mod : { "default": mod };
4
4
  };
5
5
  Object.defineProperty(exports, "__esModule", { value: true });
6
- exports.renderFrames = void 0;
7
- const fs_1 = __importDefault(require("fs"));
8
- const path_1 = __importDefault(require("path"));
6
+ exports.renderFrames = exports.internalRenderFrames = void 0;
7
+ const node_fs_1 = __importDefault(require("node:fs"));
8
+ const node_path_1 = __importDefault(require("node: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
- const download_map_1 = require("./assets/download-map");
12
12
  const browser_1 = require("./browser");
13
+ const is_target_closed_err_1 = require("./browser/is-target-closed-err");
14
+ const TimeoutSettings_1 = require("./browser/TimeoutSettings");
13
15
  const compress_assets_1 = require("./compress-assets");
14
16
  const cycle_browser_tabs_1 = require("./cycle-browser-tabs");
15
17
  const handle_javascript_exception_1 = require("./error-handling/handle-javascript-exception");
18
+ const find_closest_package_json_1 = require("./find-closest-package-json");
16
19
  const get_concurrency_1 = require("./get-concurrency");
17
20
  const get_duration_from_frame_range_1 = require("./get-duration-from-frame-range");
18
21
  const get_frame_padded_index_1 = require("./get-frame-padded-index");
19
22
  const get_frame_to_render_1 = require("./get-frame-to-render");
20
- const image_format_1 = require("./image-format");
21
- const legacy_webpack_config_1 = require("./legacy-webpack-config");
23
+ const jpeg_quality_1 = require("./jpeg-quality");
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
- const quality_1 = require("./quality");
30
+ const replace_browser_1 = require("./replace-browser");
29
31
  const seek_to_frame_1 = require("./seek-to-frame");
30
32
  const set_props_and_env_1 = require("./set-props-and-env");
33
+ const take_frame_and_compose_1 = require("./take-frame-and-compose");
31
34
  const truthy_1 = require("./truthy");
32
35
  const validate_scale_1 = require("./validate-scale");
33
- const getComposition = (others) => {
34
- if ('composition' in others) {
35
- return others.composition;
36
- }
37
- if ('config' in others) {
38
- return others.config;
39
- }
40
- return undefined;
41
- };
42
- const getConcurrency = (others) => {
43
- if ('concurrency' in others) {
44
- return others.concurrency;
45
- }
46
- if ('parallelism' in others) {
47
- return others.parallelism;
48
- }
49
- return undefined;
50
- };
51
- const getPool = async (pages) => {
52
- const puppeteerPages = await Promise.all(pages);
53
- const pool = new pool_1.Pool(puppeteerPages);
54
- return pool;
55
- };
56
- 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, actualConcurrency, everyNthFrame = 1, proxyPort, cancelSignal, downloadMap, muted, }) => {
57
- if (!puppeteerInstance) {
58
- throw new Error('no puppeteer instance passed to innerRenderFrames - internal error');
59
- }
36
+ const MAX_RETRIES_PER_FRAME = 1;
37
+ const innerRenderFrames = async ({ onFrameUpdate, outputDir, onStart, inputProps, jpegQuality, imageFormat, frameRange, onError, envVariables, onBrowserLog, onFrameBuffer, onDownload, pagesArray, serveUrl, composition, timeoutInMilliseconds, scale, actualConcurrency, everyNthFrame, proxyPort, cancelSignal, downloadMap, muted, makeBrowser, browserReplacer, compositor, sourcemapContext, }) => {
60
38
  if (outputDir) {
61
- if (!fs_1.default.existsSync(outputDir)) {
62
- fs_1.default.mkdirSync(outputDir, {
39
+ if (!node_fs_1.default.existsSync(outputDir)) {
40
+ node_fs_1.default.mkdirSync(outputDir, {
63
41
  recursive: true,
64
42
  });
65
43
  }
66
44
  }
67
45
  const downloadPromises = [];
68
- const realFrameRange = (0, get_frame_to_render_1.getRealFrameRange)(composition.durationInFrames, frameRange !== null && frameRange !== void 0 ? frameRange : null);
46
+ const realFrameRange = (0, get_frame_to_render_1.getRealFrameRange)(composition.durationInFrames, frameRange);
69
47
  const framesToRender = (0, get_duration_from_frame_range_1.getFramesToRender)(realFrameRange, everyNthFrame);
70
48
  const lastFrame = framesToRender[framesToRender.length - 1];
71
- const pages = new Array(actualConcurrency).fill(true).map(async () => {
72
- const page = await puppeteerInstance.newPage();
49
+ const makePage = async (context) => {
50
+ const page = await browserReplacer.getBrowser().newPage(context);
73
51
  pagesArray.push(page);
74
52
  await page.setViewport({
75
53
  width: composition.width,
76
54
  height: composition.height,
77
- deviceScaleFactor: scale !== null && scale !== void 0 ? scale : 1,
55
+ deviceScaleFactor: scale,
78
56
  });
79
57
  const logCallback = (log) => {
80
58
  onBrowserLog === null || onBrowserLog === void 0 ? void 0 : onBrowserLog({
@@ -102,7 +80,7 @@ const innerRenderFrames = ({ onFrameUpdate, outputDir, onStart, inputProps, qual
102
80
  await (0, puppeteer_evaluate_1.puppeteerEvaluateWithCatch)({
103
81
  // eslint-disable-next-line max-params
104
82
  pageFunction: (id, defaultProps, durationInFrames, fps, height, width) => {
105
- window.setBundleMode({
83
+ window.remotion_setBundleMode({
106
84
  type: 'composition',
107
85
  compositionName: id,
108
86
  compositionDefaultProps: defaultProps,
@@ -125,7 +103,15 @@ const innerRenderFrames = ({ onFrameUpdate, outputDir, onStart, inputProps, qual
125
103
  });
126
104
  page.off('console', logCallback);
127
105
  return page;
128
- });
106
+ };
107
+ const getPool = async (context) => {
108
+ const pages = new Array(actualConcurrency)
109
+ .fill(true)
110
+ .map(() => makePage(context));
111
+ const puppeteerPages = await Promise.all(pages);
112
+ const pool = new pool_1.Pool(puppeteerPages);
113
+ return pool;
114
+ };
129
115
  // If rendering a GIF and skipping frames, we must ensure it starts from 0
130
116
  // and then is consecutive so FFMPEG recognizes the sequence
131
117
  const countType = everyNthFrame === 1 ? 'actual-frames' : 'from-zero';
@@ -135,8 +121,8 @@ const innerRenderFrames = ({ onFrameUpdate, outputDir, onStart, inputProps, qual
135
121
  countType,
136
122
  });
137
123
  let framesRendered = 0;
138
- const poolPromise = getPool(pages);
139
- onStart({
124
+ const poolPromise = getPool(sourcemapContext);
125
+ onStart === null || onStart === void 0 ? void 0 : onStart({
140
126
  frameCount: framesToRender.length,
141
127
  });
142
128
  const assets = new Array(framesToRender.length).fill(undefined);
@@ -144,14 +130,15 @@ const innerRenderFrames = ({ onFrameUpdate, outputDir, onStart, inputProps, qual
144
130
  cancelSignal === null || cancelSignal === void 0 ? void 0 : cancelSignal(() => {
145
131
  stopped = true;
146
132
  });
147
- const progress = Promise.all(framesToRender.map(async (frame, index) => {
133
+ const renderFrameWithOptionToReject = async ({ frame, index, reject, width, height, }) => {
148
134
  const pool = await poolPromise;
149
135
  const freePage = await pool.acquire();
150
136
  if (stopped) {
151
- throw new Error('Render was stopped');
137
+ return reject(new Error('Render was stopped'));
152
138
  }
139
+ const startTime = perf_hooks_1.performance.now();
153
140
  const errorCallbackOnFrame = (err) => {
154
- onError(err);
141
+ reject(err);
155
142
  };
156
143
  const cleanupPageError = (0, handle_javascript_exception_1.handleJavascriptException)({
157
144
  page: freePage,
@@ -160,52 +147,41 @@ const innerRenderFrames = ({ onFrameUpdate, outputDir, onStart, inputProps, qual
160
147
  });
161
148
  freePage.on('error', errorCallbackOnFrame);
162
149
  await (0, seek_to_frame_1.seekToFrame)({ frame, page: freePage });
163
- if (imageFormat !== 'none') {
164
- if (onFrameBuffer) {
165
- const id = (0, perf_1.startPerfMeasure)('save');
166
- const buffer = await (0, provide_screenshot_1.provideScreenshot)({
167
- page: freePage,
168
- imageFormat,
169
- quality,
170
- options: {
171
- frame,
172
- output: null,
173
- },
174
- });
175
- (0, perf_1.stopPerfMeasure)(id);
176
- onFrameBuffer(buffer, frame);
177
- }
178
- else {
179
- if (!outputDir) {
180
- throw new Error('Called renderFrames() without specifying either `outputDir` or `onFrameBuffer`');
181
- }
182
- const output = path_1.default.join(outputDir, (0, get_frame_padded_index_1.getFrameOutputFileName)({
183
- frame,
184
- imageFormat,
185
- index,
186
- countType,
187
- lastFrame,
188
- totalFrames: framesToRender.length,
189
- }));
190
- await (0, provide_screenshot_1.provideScreenshot)({
191
- page: freePage,
192
- imageFormat,
193
- quality,
194
- options: {
195
- frame,
196
- output,
197
- },
198
- });
199
- }
150
+ if (!outputDir && !onFrameBuffer && imageFormat !== 'none') {
151
+ throw new Error('Called renderFrames() without specifying either `outputDir` or `onFrameBuffer`');
200
152
  }
201
- const collectedAssets = await (0, puppeteer_evaluate_1.puppeteerEvaluateWithCatch)({
202
- pageFunction: () => {
203
- return window.remotion_collectAssets();
204
- },
205
- args: [],
153
+ if (outputDir && onFrameBuffer && imageFormat !== 'none') {
154
+ throw new Error('Pass either `outputDir` or `onFrameBuffer` to renderFrames(), not both.');
155
+ }
156
+ const id = (0, perf_1.startPerfMeasure)('save');
157
+ const frameDir = outputDir !== null && outputDir !== void 0 ? outputDir : downloadMap.compositingDir;
158
+ const { buffer, collectedAssets } = await (0, take_frame_and_compose_1.takeFrameAndCompose)({
206
159
  frame,
207
- page: freePage,
160
+ freePage,
161
+ height,
162
+ imageFormat,
163
+ output: node_path_1.default.join(frameDir, (0, get_frame_padded_index_1.getFrameOutputFileName)({
164
+ frame,
165
+ imageFormat,
166
+ index,
167
+ countType,
168
+ lastFrame,
169
+ totalFrames: framesToRender.length,
170
+ })),
171
+ jpegQuality,
172
+ width,
173
+ scale,
174
+ downloadMap,
175
+ wantsBuffer: Boolean(onFrameBuffer),
176
+ compositor,
208
177
  });
178
+ if (onFrameBuffer) {
179
+ if (!buffer) {
180
+ throw new Error('unexpected null buffer');
181
+ }
182
+ onFrameBuffer(buffer, frame);
183
+ }
184
+ (0, perf_1.stopPerfMeasure)(id);
209
185
  const compressedAssets = collectedAssets.map((asset) => (0, compress_assets_1.compressAsset)(assets.filter(truthy_1.truthy).flat(1), asset));
210
186
  assets[index] = compressedAssets;
211
187
  compressedAssets.forEach((asset) => {
@@ -217,89 +193,148 @@ const innerRenderFrames = ({ onFrameUpdate, outputDir, onStart, inputProps, qual
217
193
  onError(new Error(`Error while downloading asset: ${err.stack}`));
218
194
  });
219
195
  });
220
- pool.release(freePage);
221
196
  framesRendered++;
222
- onFrameUpdate(framesRendered, frame);
197
+ onFrameUpdate === null || onFrameUpdate === void 0 ? void 0 : onFrameUpdate(framesRendered, frame, perf_hooks_1.performance.now() - startTime);
223
198
  cleanupPageError();
224
199
  freePage.off('error', errorCallbackOnFrame);
225
- return compressedAssets;
226
- }));
200
+ pool.release(freePage);
201
+ };
202
+ const renderFrame = (frame, index) => {
203
+ return new Promise((resolve, reject) => {
204
+ renderFrameWithOptionToReject({
205
+ frame,
206
+ index,
207
+ reject,
208
+ width: composition.width,
209
+ height: composition.height,
210
+ })
211
+ .then(() => {
212
+ resolve();
213
+ })
214
+ .catch((err) => {
215
+ reject(err);
216
+ });
217
+ });
218
+ };
219
+ const renderFrameAndRetryTargetClose = async ({ frame, index, retriesLeft, attempt, }) => {
220
+ try {
221
+ await Promise.race([
222
+ renderFrame(frame, index),
223
+ new Promise((_, reject) => {
224
+ cancelSignal === null || cancelSignal === void 0 ? void 0 : cancelSignal(() => {
225
+ reject(new Error(make_cancel_signal_1.cancelErrorMessages.renderFrames));
226
+ });
227
+ }),
228
+ ]);
229
+ }
230
+ catch (err) {
231
+ if ((0, make_cancel_signal_1.isUserCancelledRender)(err)) {
232
+ throw err;
233
+ }
234
+ if (!(0, is_target_closed_err_1.isTargetClosedErr)(err)) {
235
+ throw err;
236
+ }
237
+ if (stopped) {
238
+ return;
239
+ }
240
+ if (retriesLeft === 0) {
241
+ 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`);
242
+ throw err;
243
+ }
244
+ 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`);
245
+ await browserReplacer.replaceBrowser(makeBrowser, async () => {
246
+ const pages = new Array(actualConcurrency)
247
+ .fill(true)
248
+ .map(() => makePage(sourcemapContext));
249
+ const puppeteerPages = await Promise.all(pages);
250
+ const pool = await poolPromise;
251
+ for (const newPage of puppeteerPages) {
252
+ pool.release(newPage);
253
+ }
254
+ });
255
+ await renderFrameAndRetryTargetClose({
256
+ frame,
257
+ index,
258
+ retriesLeft: retriesLeft - 1,
259
+ attempt: attempt + 1,
260
+ });
261
+ }
262
+ };
263
+ const progress = Promise.all(framesToRender.map((frame, index) => renderFrameAndRetryTargetClose({
264
+ frame,
265
+ index,
266
+ retriesLeft: MAX_RETRIES_PER_FRAME,
267
+ attempt: 1,
268
+ })));
227
269
  const happyPath = progress.then(() => {
270
+ const firstFrameIndex = countType === 'from-zero' ? 0 : framesToRender[0];
228
271
  const returnValue = {
229
272
  assetsInfo: {
230
273
  assets,
231
274
  imageSequenceName: `element-%0${filePadLength}d.${imageFormat}`,
232
- firstFrameIndex: framesToRender[0],
275
+ firstFrameIndex,
233
276
  downloadMap,
234
277
  },
235
278
  frameCount: framesToRender.length,
236
279
  };
237
280
  return returnValue;
238
281
  });
239
- return happyPath
240
- .then(() => {
241
- return Promise.all(downloadPromises);
242
- })
243
- .then(() => happyPath);
282
+ const result = await happyPath;
283
+ await Promise.all(downloadPromises);
284
+ return result;
244
285
  };
245
- const renderFrames = (options) => {
246
- var _a, _b, _c, _d;
247
- const composition = getComposition(options);
248
- const concurrency = getConcurrency(options);
249
- if (!composition) {
250
- throw new Error('No `composition` option has been specified for renderFrames()');
251
- }
286
+ const internalRenderFrames = ({ browserExecutable, cancelSignal, chromiumOptions, composition, concurrency, dumpBrowserLogs, envVariables, everyNthFrame, frameRange, imageFormat, indent, inputProps, jpegQuality, muted, onBrowserLog, onDownload, onFrameBuffer, onFrameUpdate, onStart, outputDir, port, puppeteerInstance, scale, server, timeoutInMilliseconds, verbose, webpackBundleOrServeUrl, }) => {
252
287
  remotion_1.Internals.validateDimension(composition.height, 'height', 'in the `config` object passed to `renderFrames()`');
253
288
  remotion_1.Internals.validateDimension(composition.width, 'width', 'in the `config` object passed to `renderFrames()`');
254
289
  remotion_1.Internals.validateFps(composition.fps, 'in the `config` object of `renderFrames()`', false);
255
- remotion_1.Internals.validateDurationInFrames(composition.durationInFrames, 'in the `config` object passed to `renderFrames()`');
256
- if (options.quality !== undefined && options.imageFormat !== 'jpeg') {
257
- throw new Error("You can only pass the `quality` option if `imageFormat` is 'jpeg'.");
258
- }
259
- const selectedServeUrl = (0, legacy_webpack_config_1.getServeUrlWithFallback)(options);
260
- (0, quality_1.validateQuality)(options.quality);
261
- (0, validate_scale_1.validateScale)(options.scale);
262
- const browserInstance = (_a = options.puppeteerInstance) !== null && _a !== void 0 ? _a : (0, open_browser_1.openBrowser)(browser_1.DEFAULT_BROWSER, {
263
- shouldDumpIo: options.dumpBrowserLogs,
264
- browserExecutable: options.browserExecutable,
265
- chromiumOptions: options.chromiumOptions,
266
- forceDeviceScaleFactor: (_b = options.scale) !== null && _b !== void 0 ? _b : 1,
290
+ remotion_1.Internals.validateDurationInFrames({
291
+ durationInFrames: composition.durationInFrames,
292
+ component: 'in the `config` object passed to `renderFrames()`',
293
+ allowFloats: false,
267
294
  });
268
- const downloadMap = (_c = options.downloadMap) !== null && _c !== void 0 ? _c : (0, download_map_1.makeDownloadMap)();
269
- const onDownload = (_d = options.onDownload) !== null && _d !== void 0 ? _d : (() => () => undefined);
270
- const actualConcurrency = (0, get_concurrency_1.getActualConcurrency)(concurrency !== null && concurrency !== void 0 ? concurrency : null);
295
+ (0, jpeg_quality_1.validateJpegQuality)(jpegQuality);
296
+ (0, validate_scale_1.validateScale)(scale);
297
+ const makeBrowser = () => (0, open_browser_1.internalOpenBrowser)({
298
+ browser: browser_1.DEFAULT_BROWSER,
299
+ shouldDumpIo: dumpBrowserLogs,
300
+ browserExecutable,
301
+ chromiumOptions,
302
+ forceDeviceScaleFactor: scale,
303
+ indent,
304
+ viewport: null,
305
+ });
306
+ const browserInstance = puppeteerInstance !== null && puppeteerInstance !== void 0 ? puppeteerInstance : makeBrowser();
307
+ const actualConcurrency = (0, get_concurrency_1.getActualConcurrency)(concurrency);
271
308
  const openedPages = [];
272
309
  return new Promise((resolve, reject) => {
273
- var _a, _b, _c;
274
310
  const cleanup = [];
275
311
  const onError = (err) => {
276
312
  reject(err);
277
313
  };
278
314
  Promise.race([
279
315
  new Promise((_, rej) => {
280
- var _a;
281
- (_a = options.cancelSignal) === null || _a === void 0 ? void 0 : _a.call(options, () => {
282
- rej(new Error('renderFrames() got cancelled'));
316
+ cancelSignal === null || cancelSignal === void 0 ? void 0 : cancelSignal(() => {
317
+ rej(new Error(make_cancel_signal_1.cancelErrorMessages.renderFrames));
283
318
  });
284
319
  }),
285
320
  Promise.all([
286
- (0, prepare_server_1.prepareServer)({
287
- webpackConfigOrServeUrl: selectedServeUrl,
321
+ (0, prepare_server_1.makeOrReuseServer)(server, {
322
+ webpackConfigOrServeUrl: webpackBundleOrServeUrl,
323
+ port,
324
+ remotionRoot: (0, find_closest_package_json_1.findRemotionRoot)(),
325
+ concurrency: actualConcurrency,
326
+ verbose,
327
+ indent,
328
+ }, {
288
329
  onDownload,
289
330
  onError,
290
- ffmpegExecutable: (_a = options.ffmpegExecutable) !== null && _a !== void 0 ? _a : null,
291
- ffprobeExecutable: (_b = options.ffprobeExecutable) !== null && _b !== void 0 ? _b : null,
292
- port: (_c = options.port) !== null && _c !== void 0 ? _c : null,
293
- downloadMap,
294
331
  }),
295
332
  browserInstance,
296
- ]).then(([{ serveUrl, closeServer, offthreadPort }, puppeteerInstance]) => {
297
- const { stopCycling } = (0, cycle_browser_tabs_1.cycleBrowserTabs)(puppeteerInstance, actualConcurrency);
298
- cleanup.push(stopCycling);
299
- cleanup.push(closeServer);
333
+ ]).then(([{ server: { serveUrl, offthreadPort, compositor, sourceMap, downloadMap, }, cleanupServer, }, pInstance,]) => {
334
+ const browserReplacer = (0, replace_browser_1.handleBrowserCrash)(pInstance);
335
+ cleanup.push((0, cycle_browser_tabs_1.cycleBrowserTabs)(browserReplacer, actualConcurrency).stopCycling);
336
+ cleanup.push(() => cleanupServer(false));
300
337
  return innerRenderFrames({
301
- ...options,
302
- puppeteerInstance,
303
338
  onError,
304
339
  pagesArray: openedPages,
305
340
  serveUrl,
@@ -307,7 +342,26 @@ const renderFrames = (options) => {
307
342
  actualConcurrency,
308
343
  onDownload,
309
344
  proxyPort: offthreadPort,
345
+ makeBrowser,
346
+ browserReplacer,
347
+ compositor,
348
+ sourcemapContext: sourceMap,
310
349
  downloadMap,
350
+ cancelSignal,
351
+ envVariables,
352
+ everyNthFrame,
353
+ frameRange,
354
+ imageFormat,
355
+ inputProps,
356
+ jpegQuality,
357
+ muted,
358
+ onBrowserLog,
359
+ onFrameBuffer,
360
+ onFrameUpdate,
361
+ onStart,
362
+ outputDir,
363
+ scale,
364
+ timeoutInMilliseconds,
311
365
  });
312
366
  }),
313
367
  ])
@@ -319,18 +373,23 @@ const renderFrames = (options) => {
319
373
  // If browser instance was passed in, we close all the pages
320
374
  // we opened.
321
375
  // If new browser was opened, then closing the browser as a cleanup.
322
- if (options.puppeteerInstance) {
376
+ if (puppeteerInstance) {
323
377
  Promise.all(openedPages.map((p) => p.close())).catch((err) => {
378
+ if ((0, is_target_closed_err_1.isTargetClosedErr)(err)) {
379
+ return;
380
+ }
324
381
  console.log('Unable to close browser tab', err);
325
382
  });
326
383
  }
327
384
  else {
328
385
  Promise.resolve(browserInstance)
329
- .then((puppeteerInstance) => {
330
- return puppeteerInstance.close();
386
+ .then((instance) => {
387
+ return instance.close(true);
331
388
  })
332
389
  .catch((err) => {
333
- console.log('Unable to close browser', err);
390
+ if (!(err === null || err === void 0 ? void 0 : err.message.includes('Target closed'))) {
391
+ console.log('Unable to close browser', err);
392
+ }
334
393
  });
335
394
  }
336
395
  cleanup.forEach((c) => {
@@ -340,4 +399,50 @@ const renderFrames = (options) => {
340
399
  });
341
400
  });
342
401
  };
402
+ exports.internalRenderFrames = internalRenderFrames;
403
+ /**
404
+ * @description Renders a series of images using Puppeteer and computes information for mixing audio.
405
+ * @see [Documentation](https://www.remotion.dev/docs/renderer/render-frames)
406
+ */
407
+ const renderFrames = (options) => {
408
+ const { composition, inputProps, onFrameUpdate, onStart, outputDir, serveUrl, browserExecutable, cancelSignal, chromiumOptions, concurrency, dumpBrowserLogs, envVariables, everyNthFrame, frameRange, imageFormat, jpegQuality, muted, onBrowserLog, onDownload, onFrameBuffer, port, puppeteerInstance, scale, timeoutInMilliseconds, verbose, quality, } = options;
409
+ if (!composition) {
410
+ throw new Error('No `composition` option has been specified for renderFrames()');
411
+ }
412
+ if (typeof jpegQuality !== 'undefined' && imageFormat !== 'jpeg') {
413
+ throw new Error("You can only pass the `quality` option if `imageFormat` is 'jpeg'.");
414
+ }
415
+ if (quality) {
416
+ console.warn('Passing `quality()` to `renderStill` is deprecated. Use `jpegQuality` instead.');
417
+ }
418
+ return (0, exports.internalRenderFrames)({
419
+ browserExecutable: browserExecutable !== null && browserExecutable !== void 0 ? browserExecutable : null,
420
+ cancelSignal,
421
+ chromiumOptions: chromiumOptions !== null && chromiumOptions !== void 0 ? chromiumOptions : {},
422
+ composition,
423
+ concurrency: concurrency !== null && concurrency !== void 0 ? concurrency : null,
424
+ dumpBrowserLogs: dumpBrowserLogs !== null && dumpBrowserLogs !== void 0 ? dumpBrowserLogs : false,
425
+ envVariables: envVariables !== null && envVariables !== void 0 ? envVariables : {},
426
+ everyNthFrame: everyNthFrame !== null && everyNthFrame !== void 0 ? everyNthFrame : 1,
427
+ frameRange: frameRange !== null && frameRange !== void 0 ? frameRange : null,
428
+ imageFormat: imageFormat !== null && imageFormat !== void 0 ? imageFormat : 'jpeg',
429
+ indent: false,
430
+ jpegQuality: jpegQuality !== null && jpegQuality !== void 0 ? jpegQuality : jpeg_quality_1.DEFAULT_JPEG_QUALITY,
431
+ onDownload: onDownload !== null && onDownload !== void 0 ? onDownload : null,
432
+ inputProps,
433
+ puppeteerInstance,
434
+ muted: muted !== null && muted !== void 0 ? muted : false,
435
+ onBrowserLog: onBrowserLog !== null && onBrowserLog !== void 0 ? onBrowserLog : null,
436
+ onFrameBuffer: onFrameBuffer !== null && onFrameBuffer !== void 0 ? onFrameBuffer : null,
437
+ onFrameUpdate,
438
+ onStart,
439
+ outputDir,
440
+ port: port !== null && port !== void 0 ? port : null,
441
+ scale: scale !== null && scale !== void 0 ? scale : 1,
442
+ verbose: verbose !== null && verbose !== void 0 ? verbose : false,
443
+ timeoutInMilliseconds: timeoutInMilliseconds !== null && timeoutInMilliseconds !== void 0 ? timeoutInMilliseconds : TimeoutSettings_1.DEFAULT_TIMEOUT,
444
+ webpackBundleOrServeUrl: serveUrl,
445
+ server: undefined,
446
+ });
447
+ };
343
448
  exports.renderFrames = renderFrames;