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

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