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

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