@remotion/renderer 4.0.0-lambda.3 → 4.0.0-newpathfunctions.13

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