@remotion/renderer 4.0.0-fastlambda.8 → 4.0.0-forcepublish.7

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 (435) hide show
  1. package/dist/assets/calculate-asset-positions.d.ts +2 -2
  2. package/dist/assets/convert-assets-to-file-urls.d.ts +5 -4
  3. package/dist/assets/convert-assets-to-file-urls.js +2 -2
  4. package/dist/assets/download-and-map-assets-to-file.d.ts +15 -6
  5. package/dist/assets/download-and-map-assets-to-file.js +108 -44
  6. package/dist/assets/download-file.d.ts +10 -5
  7. package/dist/assets/download-file.js +18 -5
  8. package/dist/assets/download-map.d.ts +64 -0
  9. package/dist/assets/download-map.js +73 -0
  10. package/dist/assets/ffmpeg-volume-expression.d.ts +3 -3
  11. package/dist/assets/ffmpeg-volume-expression.js +16 -14
  12. package/dist/assets/flatten-volume-array.d.ts +1 -1
  13. package/dist/assets/get-audio-channels.d.ts +3 -4
  14. package/dist/assets/get-audio-channels.js +14 -4
  15. package/dist/assets/get-video-stream-duration.d.ts +4 -0
  16. package/dist/assets/get-video-stream-duration.js +59 -0
  17. package/dist/assets/read-file.js +4 -1
  18. package/dist/assets/types.d.ts +1 -1
  19. package/dist/browser/Browser.d.ts +60 -0
  20. package/dist/browser/Browser.js +218 -0
  21. package/dist/browser/BrowserConnector.d.ts +19 -0
  22. package/dist/browser/BrowserConnector.js +17 -0
  23. package/dist/browser/BrowserFetcher.d.ts +89 -0
  24. package/dist/browser/BrowserFetcher.js +510 -0
  25. package/dist/browser/BrowserPage.d.ts +74 -0
  26. package/dist/browser/BrowserPage.js +283 -0
  27. package/dist/browser/BrowserRunner.d.ts +39 -0
  28. package/dist/browser/BrowserRunner.js +308 -0
  29. package/dist/browser/Connection.d.ts +42 -0
  30. package/dist/browser/Connection.js +242 -0
  31. package/dist/browser/ConsoleMessage.d.ts +31 -0
  32. package/dist/browser/ConsoleMessage.js +48 -0
  33. package/dist/browser/DOMWorld.d.ts +52 -0
  34. package/dist/browser/DOMWorld.js +272 -0
  35. package/dist/browser/Errors.d.ts +25 -0
  36. package/dist/browser/Errors.js +35 -0
  37. package/dist/browser/EvalTypes.d.ts +27 -0
  38. package/dist/browser/EvalTypes.js +17 -0
  39. package/dist/browser/EventEmitter.d.ts +23 -0
  40. package/dist/browser/EventEmitter.js +53 -0
  41. package/dist/browser/ExecutionContext.d.ts +34 -0
  42. package/dist/browser/ExecutionContext.js +174 -0
  43. package/dist/browser/FrameManager.d.ts +93 -0
  44. package/dist/browser/FrameManager.js +496 -0
  45. package/dist/browser/HTTPRequest.d.ts +28 -0
  46. package/dist/browser/HTTPRequest.js +37 -0
  47. package/dist/browser/HTTPResponse.d.ts +21 -0
  48. package/dist/browser/HTTPResponse.js +41 -0
  49. package/dist/browser/JSHandle.d.ts +35 -0
  50. package/dist/browser/JSHandle.js +90 -0
  51. package/dist/browser/LaunchOptions.d.ts +37 -0
  52. package/dist/browser/LaunchOptions.js +17 -0
  53. package/dist/browser/Launcher.d.ts +9 -0
  54. package/dist/browser/Launcher.js +504 -0
  55. package/dist/browser/LifecycleWatcher.d.ts +29 -0
  56. package/dist/browser/LifecycleWatcher.js +180 -0
  57. package/dist/browser/NetworkEventManager.d.ts +33 -0
  58. package/dist/browser/NetworkEventManager.js +81 -0
  59. package/dist/browser/NetworkManager.d.ts +34 -0
  60. package/dist/browser/NetworkManager.js +231 -0
  61. package/dist/browser/NodeWebSocketTransport.d.ts +17 -0
  62. package/dist/browser/NodeWebSocketTransport.js +87 -0
  63. package/dist/browser/Product.d.ts +16 -0
  64. package/dist/browser/Product.js +17 -0
  65. package/dist/browser/PuppeteerNode.d.ts +40 -0
  66. package/dist/browser/PuppeteerNode.js +81 -0
  67. package/dist/browser/PuppeteerViewport.d.ts +5 -0
  68. package/dist/browser/PuppeteerViewport.js +2 -0
  69. package/dist/browser/ScreenshotOptions.d.ts +14 -0
  70. package/dist/browser/ScreenshotOptions.js +2 -0
  71. package/dist/browser/Target.d.ts +61 -0
  72. package/dist/browser/Target.js +146 -0
  73. package/dist/browser/TaskQueue.d.ts +20 -0
  74. package/dist/browser/TaskQueue.js +47 -0
  75. package/dist/browser/TimeoutSettings.d.ts +24 -0
  76. package/dist/browser/TimeoutSettings.js +62 -0
  77. package/dist/browser/assert.d.ts +1 -0
  78. package/dist/browser/assert.js +9 -0
  79. package/dist/browser/create-browser-fetcher.d.ts +17 -0
  80. package/dist/browser/create-browser-fetcher.js +119 -0
  81. package/dist/browser/devtools-commands.d.ts +270 -0
  82. package/dist/browser/devtools-commands.js +2 -0
  83. package/dist/browser/devtools-types.d.ts +1122 -0
  84. package/dist/browser/devtools-types.js +2 -0
  85. package/dist/browser/get-download-destination.d.ts +1 -0
  86. package/dist/browser/get-download-destination.js +38 -0
  87. package/dist/browser/mitt/index.d.ts +22 -0
  88. package/dist/browser/mitt/index.js +49 -0
  89. package/dist/browser/node.d.ts +2 -0
  90. package/dist/browser/node.js +9 -0
  91. package/dist/browser/revisions.d.ts +21 -0
  92. package/dist/browser/revisions.js +22 -0
  93. package/dist/browser/util.d.ts +47 -0
  94. package/dist/browser/util.js +169 -0
  95. package/dist/browser-executable.d.ts +1 -0
  96. package/dist/browser-executable.js +2 -0
  97. package/dist/browser-log.d.ts +1 -1
  98. package/dist/browser.d.ts +2 -0
  99. package/dist/browser.js +4 -0
  100. package/dist/calculate-ffmpeg-filters.d.ts +1 -1
  101. package/dist/calculate-ffmpeg-filters.js +2 -2
  102. package/dist/calculate-sar-dar-pixels.d.ts +9 -0
  103. package/dist/calculate-sar-dar-pixels.js +19 -0
  104. package/dist/can-use-parallel-encoding.d.ts +1 -1
  105. package/dist/can-use-parallel-encoding.js +2 -2
  106. package/dist/codec-supports-media.d.ts +7 -0
  107. package/dist/codec-supports-media.js +49 -0
  108. package/dist/codec.d.ts +4 -0
  109. package/dist/codec.js +16 -0
  110. package/dist/combine-videos.d.ts +4 -2
  111. package/dist/combine-videos.js +19 -5
  112. package/dist/compress-assets.d.ts +7 -0
  113. package/dist/compress-assets.js +25 -0
  114. package/dist/convert-number-of-gif-loops-to-ffmpeg.d.ts +1 -0
  115. package/dist/convert-number-of-gif-loops-to-ffmpeg.js +17 -0
  116. package/dist/convert-to-pcm.d.ts +1 -1
  117. package/dist/create-ffmpeg-complex-filter.d.ts +3 -5
  118. package/dist/create-ffmpeg-complex-filter.js +2 -11
  119. package/dist/create-ffmpeg-merge-filter.js +3 -3
  120. package/dist/create-silent-audio.d.ts +1 -1
  121. package/dist/crf.d.ts +5 -0
  122. package/dist/crf.js +64 -0
  123. package/dist/cycle-browser-tabs.d.ts +3 -2
  124. package/dist/cycle-browser-tabs.js +9 -2
  125. package/dist/delay-render-embedded-stack.d.ts +1 -1
  126. package/dist/ensure-frames-in-order.d.ts +1 -1
  127. package/dist/ensure-frames-in-order.js +3 -2
  128. package/dist/ensure-presentation-timestamp.d.ts +2 -0
  129. package/dist/ensure-presentation-timestamp.js +69 -0
  130. package/dist/error-handling/handle-javascript-exception.d.ts +2 -2
  131. package/dist/error-handling/handle-javascript-exception.js +3 -4
  132. package/dist/error-handling/symbolicate-error.d.ts +1 -1
  133. package/dist/error-handling/symbolicateable-error.d.ts +1 -1
  134. package/dist/extract-frame-from-video.d.ts +16 -0
  135. package/dist/extract-frame-from-video.js +254 -0
  136. package/dist/ffmpeg-executable.d.ts +1 -0
  137. package/dist/ffmpeg-executable.js +2 -0
  138. package/dist/ffmpeg-filter-file.d.ts +2 -1
  139. package/dist/ffmpeg-filter-file.js +4 -6
  140. package/dist/frame-range.d.ts +2 -0
  141. package/dist/frame-range.js +49 -0
  142. package/dist/frame-to-ffmpeg-timestamp.d.ts +1 -0
  143. package/dist/frame-to-ffmpeg-timestamp.js +8 -0
  144. package/dist/get-audio-codec-name.d.ts +1 -1
  145. package/dist/get-audio-codec-name.js +2 -2
  146. package/dist/get-browser-instance.d.ts +4 -3
  147. package/dist/get-browser-instance.js +2 -2
  148. package/dist/get-codec-name.d.ts +1 -1
  149. package/dist/get-codec-name.js +5 -2
  150. package/dist/get-compositions.d.ts +15 -5
  151. package/dist/get-compositions.js +35 -11
  152. package/dist/get-duration-from-frame-range.d.ts +1 -2
  153. package/dist/get-duration-from-frame-range.js +13 -9
  154. package/dist/get-extension-from-codec.d.ts +2 -2
  155. package/dist/get-extension-from-codec.js +5 -0
  156. package/dist/get-extension-of-filename.d.ts +1 -1
  157. package/dist/get-extension-of-filename.js +3 -0
  158. package/dist/get-frame-padded-index.d.ts +14 -0
  159. package/dist/get-frame-padded-index.js +33 -0
  160. package/dist/get-frame-to-render.d.ts +1 -1
  161. package/dist/get-local-browser-executable.d.ts +2 -1
  162. package/dist/get-local-browser-executable.js +7 -5
  163. package/dist/get-port.js +30 -37
  164. package/dist/get-prores-profile-name.d.ts +2 -1
  165. package/dist/get-video-info.d.ts +3 -0
  166. package/dist/get-video-info.js +49 -0
  167. package/dist/get-video-threads-flag.d.ts +1 -0
  168. package/dist/get-video-threads-flag.js +18 -0
  169. package/dist/guess-extension-for-media.d.ts +1 -0
  170. package/dist/guess-extension-for-media.js +27 -0
  171. package/dist/image-format.d.ts +6 -1
  172. package/dist/image-format.js +25 -1
  173. package/dist/index.d.ts +95 -20
  174. package/dist/index.js +93 -6
  175. package/dist/is-audio-codec.d.ts +2 -0
  176. package/dist/is-audio-codec.js +7 -0
  177. package/dist/is-beyond-last-frame.d.ts +3 -0
  178. package/dist/is-beyond-last-frame.js +12 -0
  179. package/dist/last-frame-from-video-cache.d.ts +17 -0
  180. package/dist/last-frame-from-video-cache.js +55 -0
  181. package/dist/log-level.d.ts +4 -0
  182. package/dist/log-level.js +15 -0
  183. package/dist/make-cancel-signal.d.ts +7 -0
  184. package/dist/make-cancel-signal.js +25 -0
  185. package/dist/merge-audio-track.d.ts +3 -1
  186. package/dist/merge-audio-track.js +14 -8
  187. package/dist/mime-db.d.ts +6 -0
  188. package/dist/mime-db.js +8636 -0
  189. package/dist/mime-types.d.ts +2 -0
  190. package/dist/mime-types.js +89 -0
  191. package/dist/offthread-video-server.d.ts +17 -0
  192. package/dist/offthread-video-server.js +86 -0
  193. package/dist/open-browser.d.ts +10 -8
  194. package/dist/open-browser.js +37 -32
  195. package/dist/overwrite.d.ts +1 -0
  196. package/dist/overwrite.js +4 -0
  197. package/dist/perf.d.ts +5 -0
  198. package/dist/perf.js +35 -0
  199. package/dist/pixel-format.d.ts +5 -0
  200. package/dist/pixel-format.js +26 -0
  201. package/dist/prepare-server.d.ts +14 -2
  202. package/dist/prepare-server.js +38 -5
  203. package/dist/preprocess-audio-track.d.ts +5 -2
  204. package/dist/preprocess-audio-track.js +3 -3
  205. package/dist/prespawn-ffmpeg.d.ts +7 -1
  206. package/dist/prespawn-ffmpeg.js +20 -16
  207. package/dist/prestitcher-memory-usage.d.ts +12 -0
  208. package/dist/prestitcher-memory-usage.js +30 -0
  209. package/dist/prores-profile.d.ts +5 -0
  210. package/dist/prores-profile.js +23 -0
  211. package/dist/provide-screenshot.d.ts +5 -4
  212. package/dist/provide-screenshot.js +1 -2
  213. package/dist/puppeteer-evaluate.d.ts +1 -1
  214. package/dist/puppeteer-evaluate.js +3 -4
  215. package/dist/puppeteer-screenshot.d.ts +4 -2
  216. package/dist/puppeteer-screenshot.js +7 -5
  217. package/dist/quality.d.ts +1 -0
  218. package/dist/quality.js +21 -0
  219. package/dist/render-frames.d.ts +24 -8
  220. package/dist/render-frames.js +137 -63
  221. package/dist/render-media.d.ts +36 -9
  222. package/dist/render-media.js +191 -70
  223. package/dist/render-still.d.ts +25 -7
  224. package/dist/render-still.js +75 -24
  225. package/dist/screenshot-dom-element.d.ts +7 -7
  226. package/dist/screenshot-dom-element.js +3 -6
  227. package/dist/screenshot-task.d.ts +4 -2
  228. package/dist/screenshot-task.js +36 -23
  229. package/dist/seek-to-frame.d.ts +2 -2
  230. package/dist/seek-to-frame.js +2 -2
  231. package/dist/serve-handler/index.d.ts +4 -0
  232. package/dist/serve-handler/index.js +204 -0
  233. package/dist/serve-handler/is-path-inside.d.ts +1 -0
  234. package/dist/serve-handler/is-path-inside.js +27 -0
  235. package/dist/serve-handler/range-parser.d.ts +13 -0
  236. package/dist/serve-handler/range-parser.js +57 -0
  237. package/dist/serve-static.d.ts +11 -3
  238. package/dist/serve-static.js +37 -7
  239. package/dist/set-props-and-env.d.ts +6 -2
  240. package/dist/set-props-and-env.js +48 -12
  241. package/dist/stitch-frames-to-video.d.ts +17 -5
  242. package/dist/stitch-frames-to-video.js +129 -45
  243. package/dist/stringify-ffmpeg-filter.d.ts +2 -2
  244. package/dist/stringify-ffmpeg-filter.js +12 -7
  245. package/dist/symbolicate-stacktrace.d.ts +1 -1
  246. package/dist/symbolicate-stacktrace.js +3 -3
  247. package/dist/tmp-dir.js +5 -1
  248. package/dist/truthy.d.ts +3 -0
  249. package/dist/truthy.js +7 -0
  250. package/dist/types.d.ts +1 -1
  251. package/dist/validate-concurrency.d.ts +1 -0
  252. package/dist/validate-concurrency.js +24 -0
  253. package/dist/validate-even-dimensions-with-codec.d.ts +1 -1
  254. package/dist/validate-even-dimensions-with-codec.js +2 -2
  255. package/dist/validate-every-nth-frame.d.ts +1 -0
  256. package/dist/validate-every-nth-frame.js +21 -0
  257. package/dist/validate-ffmpeg.js +2 -3
  258. package/dist/validate-frame.d.ts +1 -0
  259. package/dist/validate-frame.js +24 -0
  260. package/dist/validate-opengl-renderer.d.ts +5 -0
  261. package/dist/validate-opengl-renderer.js +15 -0
  262. package/dist/validate-output-filename.d.ts +1 -1
  263. package/dist/validate-output-filename.js +5 -0
  264. package/dist/wait-for-symbolication-error-to-be-done.d.ts +3 -0
  265. package/dist/wait-for-symbolication-error-to-be-done.js +34 -0
  266. package/dist/ws/ws-types.d.ts +14 -0
  267. package/dist/ws/ws-types.js +10 -0
  268. package/package.json +13 -16
  269. package/tsconfig.json +2 -2
  270. package/types/ws/index.d.ts +509 -0
  271. package/vitest.config.ts +8 -0
  272. package/dist/assets/calculate-asset-positions.d.ts.map +0 -1
  273. package/dist/assets/calculate-asset-positions.js.map +0 -1
  274. package/dist/assets/calculate-atempo.d.ts.map +0 -1
  275. package/dist/assets/calculate-atempo.js.map +0 -1
  276. package/dist/assets/convert-assets-to-file-urls.d.ts.map +0 -1
  277. package/dist/assets/convert-assets-to-file-urls.js.map +0 -1
  278. package/dist/assets/download-and-map-assets-to-file.d.ts.map +0 -1
  279. package/dist/assets/download-and-map-assets-to-file.js.map +0 -1
  280. package/dist/assets/download-file.d.ts.map +0 -1
  281. package/dist/assets/download-file.js.map +0 -1
  282. package/dist/assets/ffmpeg-volume-expression.d.ts.map +0 -1
  283. package/dist/assets/ffmpeg-volume-expression.js.map +0 -1
  284. package/dist/assets/flatten-volume-array.d.ts.map +0 -1
  285. package/dist/assets/flatten-volume-array.js.map +0 -1
  286. package/dist/assets/get-audio-channels.d.ts.map +0 -1
  287. package/dist/assets/get-audio-channels.js.map +0 -1
  288. package/dist/assets/read-file.d.ts.map +0 -1
  289. package/dist/assets/read-file.js.map +0 -1
  290. package/dist/assets/round-volume-to-avoid-stack-overflow.d.ts.map +0 -1
  291. package/dist/assets/round-volume-to-avoid-stack-overflow.js.map +0 -1
  292. package/dist/assets/sanitize-filename.d.ts.map +0 -1
  293. package/dist/assets/sanitize-filename.js.map +0 -1
  294. package/dist/assets/sanitize-filepath.d.ts.map +0 -1
  295. package/dist/assets/sanitize-filepath.js.map +0 -1
  296. package/dist/assets/truncate-utf8-bytes.d.ts.map +0 -1
  297. package/dist/assets/truncate-utf8-bytes.js.map +0 -1
  298. package/dist/assets/types.d.ts.map +0 -1
  299. package/dist/assets/types.js.map +0 -1
  300. package/dist/browser-log.d.ts.map +0 -1
  301. package/dist/browser-log.js.map +0 -1
  302. package/dist/calculate-ffmpeg-filters.d.ts.map +0 -1
  303. package/dist/calculate-ffmpeg-filters.js.map +0 -1
  304. package/dist/can-use-parallel-encoding.d.ts.map +0 -1
  305. package/dist/can-use-parallel-encoding.js.map +0 -1
  306. package/dist/chunk.d.ts.map +0 -1
  307. package/dist/chunk.js.map +0 -1
  308. package/dist/combine-videos.d.ts.map +0 -1
  309. package/dist/combine-videos.js.map +0 -1
  310. package/dist/convert-to-pcm.d.ts.map +0 -1
  311. package/dist/convert-to-pcm.js.map +0 -1
  312. package/dist/create-ffmpeg-complex-filter.d.ts.map +0 -1
  313. package/dist/create-ffmpeg-complex-filter.js.map +0 -1
  314. package/dist/create-ffmpeg-merge-filter.d.ts.map +0 -1
  315. package/dist/create-ffmpeg-merge-filter.js.map +0 -1
  316. package/dist/create-silent-audio.d.ts.map +0 -1
  317. package/dist/create-silent-audio.js.map +0 -1
  318. package/dist/cycle-browser-tabs.d.ts.map +0 -1
  319. package/dist/cycle-browser-tabs.js.map +0 -1
  320. package/dist/delay-render-embedded-stack.d.ts.map +0 -1
  321. package/dist/delay-render-embedded-stack.js.map +0 -1
  322. package/dist/delete-directory.d.ts.map +0 -1
  323. package/dist/delete-directory.js.map +0 -1
  324. package/dist/ensure-frames-in-order.d.ts.map +0 -1
  325. package/dist/ensure-frames-in-order.js.map +0 -1
  326. package/dist/ensure-output-directory.d.ts.map +0 -1
  327. package/dist/ensure-output-directory.js.map +0 -1
  328. package/dist/error-handling/handle-javascript-exception.d.ts.map +0 -1
  329. package/dist/error-handling/handle-javascript-exception.js.map +0 -1
  330. package/dist/error-handling/symbolicate-error.d.ts.map +0 -1
  331. package/dist/error-handling/symbolicate-error.js.map +0 -1
  332. package/dist/error-handling/symbolicateable-error.d.ts.map +0 -1
  333. package/dist/error-handling/symbolicateable-error.js.map +0 -1
  334. package/dist/ffmpeg-filter-file.d.ts.map +0 -1
  335. package/dist/ffmpeg-filter-file.js.map +0 -1
  336. package/dist/ffmpeg-flags.d.ts.map +0 -1
  337. package/dist/ffmpeg-flags.js.map +0 -1
  338. package/dist/get-audio-codec-name.d.ts.map +0 -1
  339. package/dist/get-audio-codec-name.js.map +0 -1
  340. package/dist/get-browser-instance.d.ts.map +0 -1
  341. package/dist/get-browser-instance.js.map +0 -1
  342. package/dist/get-codec-name.d.ts.map +0 -1
  343. package/dist/get-codec-name.js.map +0 -1
  344. package/dist/get-compositions.d.ts.map +0 -1
  345. package/dist/get-compositions.js.map +0 -1
  346. package/dist/get-concurrency.d.ts.map +0 -1
  347. package/dist/get-concurrency.js.map +0 -1
  348. package/dist/get-duration-from-frame-range.d.ts.map +0 -1
  349. package/dist/get-duration-from-frame-range.js.map +0 -1
  350. package/dist/get-extension-from-codec.d.ts.map +0 -1
  351. package/dist/get-extension-from-codec.js.map +0 -1
  352. package/dist/get-frame-to-render.d.ts.map +0 -1
  353. package/dist/get-frame-to-render.js.map +0 -1
  354. package/dist/get-local-browser-executable.d.ts.map +0 -1
  355. package/dist/get-local-browser-executable.js.map +0 -1
  356. package/dist/get-port.d.ts.map +0 -1
  357. package/dist/get-port.js.map +0 -1
  358. package/dist/get-prores-profile-name.d.ts.map +0 -1
  359. package/dist/get-prores-profile-name.js.map +0 -1
  360. package/dist/image-format.d.ts.map +0 -1
  361. package/dist/image-format.js.map +0 -1
  362. package/dist/index.d.ts.map +0 -1
  363. package/dist/index.js.map +0 -1
  364. package/dist/is-serve-url.d.ts.map +0 -1
  365. package/dist/is-serve-url.js.map +0 -1
  366. package/dist/legacy-webpack-config.d.ts.map +0 -1
  367. package/dist/legacy-webpack-config.js.map +0 -1
  368. package/dist/make-assets-download-dir.d.ts +0 -1
  369. package/dist/make-assets-download-dir.d.ts.map +0 -1
  370. package/dist/make-assets-download-dir.js +0 -8
  371. package/dist/make-assets-download-dir.js.map +0 -1
  372. package/dist/merge-audio-track.d.ts.map +0 -1
  373. package/dist/merge-audio-track.js.map +0 -1
  374. package/dist/normalize-serve-url.d.ts.map +0 -1
  375. package/dist/normalize-serve-url.js.map +0 -1
  376. package/dist/open-browser.d.ts.map +0 -1
  377. package/dist/open-browser.js.map +0 -1
  378. package/dist/p-limit.d.ts.map +0 -1
  379. package/dist/p-limit.js.map +0 -1
  380. package/dist/parse-browser-error-stack.d.ts.map +0 -1
  381. package/dist/parse-browser-error-stack.js.map +0 -1
  382. package/dist/parse-ffmpeg-progress.d.ts.map +0 -1
  383. package/dist/parse-ffmpeg-progress.js.map +0 -1
  384. package/dist/pool.d.ts.map +0 -1
  385. package/dist/pool.js.map +0 -1
  386. package/dist/prepare-server.d.ts.map +0 -1
  387. package/dist/prepare-server.js.map +0 -1
  388. package/dist/preprocess-audio-track.d.ts.map +0 -1
  389. package/dist/preprocess-audio-track.js.map +0 -1
  390. package/dist/prespawn-ffmpeg.d.ts.map +0 -1
  391. package/dist/prespawn-ffmpeg.js.map +0 -1
  392. package/dist/provide-screenshot.d.ts.map +0 -1
  393. package/dist/provide-screenshot.js.map +0 -1
  394. package/dist/puppeteer-evaluate.d.ts.map +0 -1
  395. package/dist/puppeteer-evaluate.js.map +0 -1
  396. package/dist/puppeteer-screenshot.d.ts.map +0 -1
  397. package/dist/puppeteer-screenshot.js.map +0 -1
  398. package/dist/render-frames.d.ts.map +0 -1
  399. package/dist/render-frames.js.map +0 -1
  400. package/dist/render-media.d.ts.map +0 -1
  401. package/dist/render-media.js.map +0 -1
  402. package/dist/render-still.d.ts.map +0 -1
  403. package/dist/render-still.js.map +0 -1
  404. package/dist/resolve-asset-src.d.ts.map +0 -1
  405. package/dist/resolve-asset-src.js.map +0 -1
  406. package/dist/sample-rate.d.ts.map +0 -1
  407. package/dist/sample-rate.js.map +0 -1
  408. package/dist/screenshot-dom-element.d.ts.map +0 -1
  409. package/dist/screenshot-dom-element.js.map +0 -1
  410. package/dist/screenshot-task.d.ts.map +0 -1
  411. package/dist/screenshot-task.js.map +0 -1
  412. package/dist/seek-to-frame.d.ts.map +0 -1
  413. package/dist/seek-to-frame.js.map +0 -1
  414. package/dist/serve-static.d.ts.map +0 -1
  415. package/dist/serve-static.js.map +0 -1
  416. package/dist/set-props-and-env.d.ts.map +0 -1
  417. package/dist/set-props-and-env.js.map +0 -1
  418. package/dist/stitch-frames-to-video.d.ts.map +0 -1
  419. package/dist/stitch-frames-to-video.js.map +0 -1
  420. package/dist/stringify-ffmpeg-filter.d.ts.map +0 -1
  421. package/dist/stringify-ffmpeg-filter.js.map +0 -1
  422. package/dist/symbolicate-stacktrace.d.ts.map +0 -1
  423. package/dist/symbolicate-stacktrace.js.map +0 -1
  424. package/dist/tmp-dir.d.ts.map +0 -1
  425. package/dist/tmp-dir.js.map +0 -1
  426. package/dist/types.d.ts.map +0 -1
  427. package/dist/types.js.map +0 -1
  428. package/dist/validate-even-dimensions-with-codec.d.ts.map +0 -1
  429. package/dist/validate-even-dimensions-with-codec.js.map +0 -1
  430. package/dist/validate-ffmpeg.d.ts.map +0 -1
  431. package/dist/validate-ffmpeg.js.map +0 -1
  432. package/dist/validate-puppeteer-timeout.d.ts.map +0 -1
  433. package/dist/validate-puppeteer-timeout.js.map +0 -1
  434. package/dist/validate-scale.d.ts.map +0 -1
  435. package/dist/validate-scale.js.map +0 -1
@@ -8,29 +8,47 @@ const fs_1 = __importDefault(require("fs"));
8
8
  const os_1 = __importDefault(require("os"));
9
9
  const path_1 = __importDefault(require("path"));
10
10
  const remotion_1 = require("remotion");
11
+ const download_map_1 = require("./assets/download-map");
11
12
  const can_use_parallel_encoding_1 = require("./can-use-parallel-encoding");
13
+ const codec_supports_media_1 = require("./codec-supports-media");
14
+ const crf_1 = require("./crf");
15
+ const delete_directory_1 = require("./delete-directory");
12
16
  const ensure_frames_in_order_1 = require("./ensure-frames-in-order");
13
17
  const ensure_output_directory_1 = require("./ensure-output-directory");
14
18
  const get_duration_from_frame_range_1 = require("./get-duration-from-frame-range");
15
19
  const get_extension_from_codec_1 = require("./get-extension-from-codec");
16
20
  const get_extension_of_filename_1 = require("./get-extension-of-filename");
17
21
  const get_frame_to_render_1 = require("./get-frame-to-render");
22
+ const is_audio_codec_1 = require("./is-audio-codec");
18
23
  const legacy_webpack_config_1 = require("./legacy-webpack-config");
24
+ const make_cancel_signal_1 = require("./make-cancel-signal");
25
+ const overwrite_1 = require("./overwrite");
26
+ const perf_1 = require("./perf");
19
27
  const prespawn_ffmpeg_1 = require("./prespawn-ffmpeg");
28
+ const prestitcher_memory_usage_1 = require("./prestitcher-memory-usage");
29
+ const quality_1 = require("./quality");
20
30
  const render_frames_1 = require("./render-frames");
21
31
  const stitch_frames_to_video_1 = require("./stitch-frames-to-video");
22
- const tmp_dir_1 = require("./tmp-dir");
23
32
  const validate_even_dimensions_with_codec_1 = require("./validate-even-dimensions-with-codec");
24
33
  const validate_output_filename_1 = require("./validate-output-filename");
25
34
  const validate_scale_1 = require("./validate-scale");
26
- const renderMedia = async ({ parallelism, proResProfile, crf, composition, imageFormat, ffmpegExecutable, inputProps, pixelFormat, codec, envVariables, quality, frameRange, puppeteerInstance, outputLocation, onProgress, overwrite, onDownload, dumpBrowserLogs, onBrowserLog, onStart, timeoutInMilliseconds, chromiumOptions, scale, ...options }) => {
27
- var _a;
28
- remotion_1.Internals.validateQuality(quality);
35
+ /**
36
+ *
37
+ * @description Render a video from a composition
38
+ * @link https://www.remotion.dev/docs/renderer/render-media
39
+ */
40
+ const renderMedia = ({ parallelism, 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, ...options }) => {
41
+ var _a, _b, _c, _d;
42
+ (0, quality_1.validateQuality)(options.quality);
29
43
  if (typeof crf !== 'undefined' && crf !== null) {
30
- remotion_1.Internals.validateSelectedCrfAndCodecCombination(crf, codec);
44
+ (0, crf_1.validateSelectedCrfAndCodecCombination)(crf, codec);
45
+ }
46
+ if (outputLocation) {
47
+ (0, validate_output_filename_1.validateOutputFilename)(codec, (0, get_extension_of_filename_1.getExtensionOfFilename)(outputLocation));
31
48
  }
32
- (0, validate_output_filename_1.validateOutputFilename)(codec, (0, get_extension_of_filename_1.getExtensionOfFilename)(outputLocation));
33
49
  (0, validate_scale_1.validateScale)(scale);
50
+ const everyNthFrame = (_a = options.everyNthFrame) !== null && _a !== void 0 ? _a : 1;
51
+ const numberOfGifLoops = (_b = options.numberOfGifLoops) !== null && _b !== void 0 ? _b : null;
34
52
  const serveUrl = (0, legacy_webpack_config_1.getServeUrlWithFallback)(options);
35
53
  let stitchStage = 'encoding';
36
54
  let stitcherFfmpeg;
@@ -39,37 +57,66 @@ const renderMedia = async ({ parallelism, proResProfile, crf, composition, image
39
57
  let renderedFrames = 0;
40
58
  let renderedDoneIn = null;
41
59
  let encodedDoneIn = null;
60
+ let cancelled = false;
42
61
  const renderStart = Date.now();
43
- const tmpdir = (0, tmp_dir_1.tmpDir)('pre-encode');
44
- const parallelEncoding = (0, can_use_parallel_encoding_1.canUseParallelEncoding)(codec);
45
- const actualImageFormat = imageFormat !== null && imageFormat !== void 0 ? imageFormat : 'jpeg';
62
+ const downloadMap = (_c = options.downloadMap) !== null && _c !== void 0 ? _c : (0, download_map_1.makeDownloadMap)();
63
+ const { estimatedUsage, freeMemory, hasEnoughMemory } = (0, prestitcher_memory_usage_1.shouldUseParallelEncoding)({
64
+ height: composition.height,
65
+ width: composition.width,
66
+ });
67
+ const parallelEncoding = hasEnoughMemory && (0, can_use_parallel_encoding_1.canUseParallelEncoding)(codec);
68
+ if (options.verbose) {
69
+ console.log('[PRESTITCHER] Free memory:', freeMemory, 'Estimated usage parallel encoding', estimatedUsage);
70
+ console.log('[PRESTICHER]: Codec supports parallel rendering:', (0, can_use_parallel_encoding_1.canUseParallelEncoding)(codec));
71
+ if (parallelEncoding) {
72
+ console.log('[PRESTICHER] Parallel encoding is enabled.');
73
+ }
74
+ else {
75
+ console.log('[PRESTITCHER] Parallel encoding is disabled.');
76
+ }
77
+ }
78
+ const imageFormat = (0, is_audio_codec_1.isAudioCodec)(codec)
79
+ ? 'none'
80
+ : (_d = options.imageFormat) !== null && _d !== void 0 ? _d : 'jpeg';
81
+ const quality = imageFormat === 'jpeg' ? options.quality : undefined;
46
82
  const preEncodedFileLocation = parallelEncoding
47
- ? path_1.default.join(tmpdir, 'pre-encode.' + (0, get_extension_from_codec_1.getFileExtensionFromCodec)(codec, 'chunk'))
83
+ ? path_1.default.join(downloadMap.preEncode, 'pre-encode.' + (0, get_extension_from_codec_1.getFileExtensionFromCodec)(codec, 'chunk'))
48
84
  : null;
49
85
  const outputDir = parallelEncoding
50
86
  ? null
51
- : await fs_1.default.promises.mkdtemp(path_1.default.join(os_1.default.tmpdir(), 'react-motion-render'));
87
+ : fs_1.default.mkdtempSync(path_1.default.join(os_1.default.tmpdir(), 'react-motion-render'));
52
88
  (0, validate_even_dimensions_with_codec_1.validateEvenDimensionsWithCodec)({
53
89
  codec,
54
90
  height: composition.height,
55
91
  scale: scale !== null && scale !== void 0 ? scale : 1,
56
92
  width: composition.width,
57
93
  });
58
- try {
59
- const callUpdate = () => {
60
- onProgress === null || onProgress === void 0 ? void 0 : onProgress({
61
- encodedDoneIn,
62
- encodedFrames,
63
- renderedDoneIn,
64
- renderedFrames,
65
- stitchStage,
66
- });
67
- };
94
+ const callUpdate = () => {
95
+ onProgress === null || onProgress === void 0 ? void 0 : onProgress({
96
+ encodedDoneIn,
97
+ encodedFrames,
98
+ renderedDoneIn,
99
+ renderedFrames,
100
+ stitchStage,
101
+ });
102
+ };
103
+ const realFrameRange = (0, get_frame_to_render_1.getRealFrameRange)(composition.durationInFrames, frameRange !== null && frameRange !== void 0 ? frameRange : null);
104
+ const cancelRenderFrames = (0, make_cancel_signal_1.makeCancelSignal)();
105
+ const cancelPrestitcher = (0, make_cancel_signal_1.makeCancelSignal)();
106
+ const cancelStitcher = (0, make_cancel_signal_1.makeCancelSignal)();
107
+ cancelSignal === null || cancelSignal === void 0 ? void 0 : cancelSignal(() => {
108
+ cancelRenderFrames.cancel();
109
+ });
110
+ const { waitForRightTimeOfFrameToBeInserted, setFrameToStitch, waitForFinish } = (0, ensure_frames_in_order_1.ensureFramesInOrder)(realFrameRange);
111
+ const fps = composition.fps / (everyNthFrame !== null && everyNthFrame !== void 0 ? everyNthFrame : 1);
112
+ remotion_1.Internals.validateFps(fps, 'in "renderMedia()"', codec === 'gif');
113
+ const createPrestitcherIfNecessary = async () => {
114
+ var _a;
68
115
  if (preEncodedFileLocation) {
69
116
  preStitcher = await (0, prespawn_ffmpeg_1.prespawnFfmpeg)({
70
117
  width: composition.width * (scale !== null && scale !== void 0 ? scale : 1),
71
118
  height: composition.height * (scale !== null && scale !== void 0 ? scale : 1),
72
- fps: composition.fps,
119
+ fps,
73
120
  outputLocation: preEncodedFileLocation,
74
121
  pixelFormat,
75
122
  codec,
@@ -79,15 +126,32 @@ const renderMedia = async ({ parallelism, proResProfile, crf, composition, image
79
126
  encodedFrames = frame;
80
127
  callUpdate();
81
128
  },
82
- verbose: remotion_1.Internals.Logging.isEqualOrBelowLogLevel(remotion_1.Internals.Logging.getLogLevel(), 'verbose'),
129
+ verbose: (_a = options.verbose) !== null && _a !== void 0 ? _a : false,
83
130
  ffmpegExecutable,
84
- imageFormat: actualImageFormat,
131
+ imageFormat,
132
+ signal: cancelPrestitcher.cancelSignal,
85
133
  });
86
134
  stitcherFfmpeg = preStitcher.task;
87
135
  }
88
- const realFrameRange = (0, get_frame_to_render_1.getRealFrameRange)(composition.durationInFrames, frameRange !== null && frameRange !== void 0 ? frameRange : null);
89
- const { waitForRightTimeOfFrameToBeInserted, setFrameToStitch, waitForFinish, } = (0, ensure_frames_in_order_1.ensureFramesInOrder)(realFrameRange);
90
- const { assetsInfo } = await (0, render_frames_1.renderFrames)({
136
+ };
137
+ const waitForPrestitcherIfNecessary = async () => {
138
+ var _a;
139
+ if (stitcherFfmpeg) {
140
+ await waitForFinish();
141
+ (_a = stitcherFfmpeg === null || stitcherFfmpeg === void 0 ? void 0 : stitcherFfmpeg.stdin) === null || _a === void 0 ? void 0 : _a.end();
142
+ try {
143
+ await stitcherFfmpeg;
144
+ }
145
+ catch (err) {
146
+ throw new Error(preStitcher === null || preStitcher === void 0 ? void 0 : preStitcher.getLogs());
147
+ }
148
+ }
149
+ };
150
+ const mediaSupport = (0, codec_supports_media_1.codecSupportsMedia)(codec);
151
+ const disableAudio = !mediaSupport.audio || muted;
152
+ const happyPath = createPrestitcherIfNecessary()
153
+ .then(() => {
154
+ const renderFramesProc = (0, render_frames_1.renderFrames)({
91
155
  config: composition,
92
156
  onFrameUpdate: (frame) => {
93
157
  renderedFrames = frame;
@@ -102,16 +166,22 @@ const renderMedia = async ({ parallelism, proResProfile, crf, composition, image
102
166
  },
103
167
  inputProps,
104
168
  envVariables,
105
- imageFormat: actualImageFormat,
169
+ imageFormat,
106
170
  quality,
107
171
  frameRange: frameRange !== null && frameRange !== void 0 ? frameRange : null,
108
172
  puppeteerInstance,
173
+ everyNthFrame,
109
174
  onFrameBuffer: parallelEncoding
110
175
  ? async (buffer, frame) => {
111
176
  var _a;
112
177
  await waitForRightTimeOfFrameToBeInserted(frame);
178
+ if (cancelled) {
179
+ return;
180
+ }
181
+ const id = (0, perf_1.startPerfMeasure)('piping');
113
182
  (_a = stitcherFfmpeg === null || stitcherFfmpeg === void 0 ? void 0 : stitcherFfmpeg.stdin) === null || _a === void 0 ? void 0 : _a.write(buffer);
114
- setFrameToStitch(frame + 1);
183
+ (0, perf_1.stopPerfMeasure)(id);
184
+ setFrameToStitch(Math.min(realFrameRange[1] + 1, frame + everyNthFrame));
115
185
  }
116
186
  : undefined,
117
187
  serveUrl,
@@ -121,55 +191,106 @@ const renderMedia = async ({ parallelism, proResProfile, crf, composition, image
121
191
  timeoutInMilliseconds,
122
192
  chromiumOptions,
123
193
  scale,
194
+ ffmpegExecutable,
195
+ ffprobeExecutable,
196
+ browserExecutable,
197
+ port,
198
+ cancelSignal: cancelRenderFrames.cancelSignal,
199
+ downloadMap,
200
+ muted: disableAudio,
124
201
  });
125
- if (stitcherFfmpeg) {
126
- await waitForFinish();
127
- (_a = stitcherFfmpeg === null || stitcherFfmpeg === void 0 ? void 0 : stitcherFfmpeg.stdin) === null || _a === void 0 ? void 0 : _a.end();
128
- try {
129
- await stitcherFfmpeg;
130
- }
131
- catch (err) {
132
- throw new Error(preStitcher === null || preStitcher === void 0 ? void 0 : preStitcher.getLogs());
133
- }
134
- }
202
+ return renderFramesProc;
203
+ })
204
+ .then((renderFramesReturn) => {
205
+ return Promise.all([renderFramesReturn, waitForPrestitcherIfNecessary()]);
206
+ })
207
+ .then(([{ assetsInfo }]) => {
135
208
  renderedDoneIn = Date.now() - renderStart;
136
209
  callUpdate();
137
- (0, ensure_output_directory_1.ensureOutputDirectory)(outputLocation);
210
+ if (outputLocation) {
211
+ (0, ensure_output_directory_1.ensureOutputDirectory)(outputLocation);
212
+ }
138
213
  const stitchStart = Date.now();
139
- await (0, stitch_frames_to_video_1.stitchFramesToVideo)({
140
- width: composition.width * (scale !== null && scale !== void 0 ? scale : 1),
141
- height: composition.height * (scale !== null && scale !== void 0 ? scale : 1),
142
- fps: composition.fps,
143
- outputLocation,
144
- internalOptions: {
145
- preEncodedFileLocation,
146
- imageFormat: actualImageFormat,
147
- },
148
- force: overwrite !== null && overwrite !== void 0 ? overwrite : remotion_1.Internals.DEFAULT_OVERWRITE,
149
- pixelFormat,
150
- codec,
151
- proResProfile,
152
- crf,
153
- assetsInfo,
154
- ffmpegExecutable,
155
- onProgress: (frame) => {
156
- stitchStage = 'muxing';
157
- encodedFrames = frame;
158
- callUpdate();
159
- },
160
- onDownload,
161
- verbose: remotion_1.Internals.Logging.isEqualOrBelowLogLevel(remotion_1.Internals.Logging.getLogLevel(), 'verbose'),
162
- dir: outputDir !== null && outputDir !== void 0 ? outputDir : undefined,
163
- });
164
- encodedFrames = (0, get_duration_from_frame_range_1.getDurationFromFrameRange)(frameRange !== null && frameRange !== void 0 ? frameRange : null, composition.durationInFrames);
214
+ return Promise.all([
215
+ (0, stitch_frames_to_video_1.stitchFramesToVideo)({
216
+ width: composition.width * (scale !== null && scale !== void 0 ? scale : 1),
217
+ height: composition.height * (scale !== null && scale !== void 0 ? scale : 1),
218
+ fps,
219
+ outputLocation,
220
+ internalOptions: {
221
+ preEncodedFileLocation,
222
+ imageFormat,
223
+ },
224
+ force: overwrite !== null && overwrite !== void 0 ? overwrite : overwrite_1.DEFAULT_OVERWRITE,
225
+ pixelFormat,
226
+ codec,
227
+ proResProfile,
228
+ crf,
229
+ assetsInfo,
230
+ ffmpegExecutable,
231
+ ffprobeExecutable,
232
+ onProgress: (frame) => {
233
+ stitchStage = 'muxing';
234
+ encodedFrames = frame;
235
+ callUpdate();
236
+ },
237
+ onDownload,
238
+ numberOfGifLoops,
239
+ verbose: options.verbose,
240
+ dir: outputDir !== null && outputDir !== void 0 ? outputDir : undefined,
241
+ cancelSignal: cancelStitcher.cancelSignal,
242
+ muted: disableAudio,
243
+ enforceAudioTrack,
244
+ }),
245
+ stitchStart,
246
+ ]);
247
+ })
248
+ .then(([buffer, stitchStart]) => {
249
+ encodedFrames = (0, get_duration_from_frame_range_1.getFramesToRender)(realFrameRange, everyNthFrame).length;
165
250
  encodedDoneIn = Date.now() - stitchStart;
166
251
  callUpdate();
167
- }
168
- finally {
252
+ return buffer;
253
+ })
254
+ .catch((err) => {
255
+ /**
256
+ * When an error is thrown in renderFrames(...) (e.g., when delayRender() is used incorrectly), fs.unlinkSync(...) throws an error that the file is locked because ffmpeg is still running, and renderMedia returns it.
257
+ * Therefore we first kill the FFMPEG process before deleting the file
258
+ */
259
+ cancelled = true;
260
+ cancelRenderFrames.cancel();
261
+ cancelStitcher.cancel();
262
+ cancelPrestitcher.cancel();
263
+ if (stitcherFfmpeg !== undefined && stitcherFfmpeg.exitCode === null) {
264
+ const promise = new Promise((resolve) => {
265
+ setTimeout(() => {
266
+ resolve();
267
+ }, 2000);
268
+ stitcherFfmpeg.on('close', resolve);
269
+ });
270
+ stitcherFfmpeg.kill();
271
+ return promise.then(() => {
272
+ throw err;
273
+ });
274
+ }
275
+ throw err;
276
+ })
277
+ .finally(() => {
169
278
  if (preEncodedFileLocation !== null &&
170
279
  fs_1.default.existsSync(preEncodedFileLocation)) {
171
- fs_1.default.unlinkSync(preEncodedFileLocation);
280
+ (0, delete_directory_1.deleteDirectory)(path_1.default.dirname(preEncodedFileLocation));
172
281
  }
173
- }
282
+ // Clean download map if it was not passed in
283
+ if (!(options === null || options === void 0 ? void 0 : options.downloadMap)) {
284
+ (0, download_map_1.cleanDownloadMap)(downloadMap);
285
+ }
286
+ });
287
+ return Promise.race([
288
+ happyPath,
289
+ new Promise((_resolve, reject) => {
290
+ cancelSignal === null || cancelSignal === void 0 ? void 0 : cancelSignal(() => {
291
+ reject(new Error('renderMedia() got cancelled'));
292
+ });
293
+ }),
294
+ ]);
174
295
  };
175
296
  exports.renderMedia = renderMedia;
@@ -1,9 +1,15 @@
1
- import { Browser as PuppeteerBrowser } from 'puppeteer-core';
2
- import { BrowserExecutable, StillImageFormat, TCompMetadata } from 'remotion';
3
- import { ServeUrlOrWebpackBundle } from './legacy-webpack-config';
4
- import { ChromiumOptions } from './open-browser';
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 { Browser as PuppeteerBrowser } from './browser/Browser';
6
+ import type { FfmpegExecutable } from './ffmpeg-executable';
7
+ import type { StillImageFormat } from './image-format';
8
+ import type { ServeUrlOrWebpackBundle } from './legacy-webpack-config';
9
+ import type { CancelSignal } from './make-cancel-signal';
10
+ import type { ChromiumOptions } from './open-browser';
5
11
  declare type InnerStillOptions = {
6
- composition: TCompMetadata;
12
+ composition: SmallTCompMetadata;
7
13
  output: string;
8
14
  frame?: number;
9
15
  inputProps?: unknown;
@@ -17,10 +23,22 @@ declare type InnerStillOptions = {
17
23
  timeoutInMilliseconds?: number;
18
24
  chromiumOptions?: ChromiumOptions;
19
25
  scale?: number;
26
+ onDownload?: RenderMediaOnDownload;
27
+ cancelSignal?: CancelSignal;
28
+ ffmpegExecutable?: FfmpegExecutable;
29
+ ffprobeExecutable?: FfmpegExecutable;
30
+ /**
31
+ * @deprecated Only for Remotion internal usage
32
+ */
33
+ downloadMap?: DownloadMap;
34
+ };
35
+ declare type RenderStillOptions = InnerStillOptions & ServeUrlOrWebpackBundle & {
36
+ port?: number | null;
20
37
  };
21
- declare type RenderStillOptions = InnerStillOptions & ServeUrlOrWebpackBundle;
22
38
  /**
23
- * @description Render a still frame from a composition and returns an image path
39
+ *
40
+ * @description Render a still frame from a composition
41
+ * @link https://www.remotion.dev/docs/renderer/render-still
24
42
  */
25
43
  export declare const renderStill: (options: RenderStillOptions) => Promise<void>;
26
44
  export {};
@@ -1,7 +1,11 @@
1
1
  "use strict";
2
2
  var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
3
  if (k2 === undefined) k2 = k;
4
- Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
5
9
  }) : (function(o, m, k, k2) {
6
10
  if (k2 === undefined) k2 = k;
7
11
  o[k2] = m[k];
@@ -26,24 +30,29 @@ exports.renderStill = void 0;
26
30
  const fs_1 = __importStar(require("fs"));
27
31
  const path_1 = __importDefault(require("path"));
28
32
  const remotion_1 = require("remotion");
33
+ const download_map_1 = require("./assets/download-map");
34
+ const browser_1 = require("./browser");
29
35
  const ensure_output_directory_1 = require("./ensure-output-directory");
30
36
  const handle_javascript_exception_1 = require("./error-handling/handle-javascript-exception");
37
+ const image_format_1 = require("./image-format");
31
38
  const legacy_webpack_config_1 = require("./legacy-webpack-config");
32
39
  const open_browser_1 = require("./open-browser");
33
40
  const prepare_server_1 = require("./prepare-server");
34
41
  const provide_screenshot_1 = require("./provide-screenshot");
35
42
  const puppeteer_evaluate_1 = require("./puppeteer-evaluate");
43
+ const quality_1 = require("./quality");
36
44
  const seek_to_frame_1 = require("./seek-to-frame");
37
45
  const set_props_and_env_1 = require("./set-props-and-env");
46
+ const validate_frame_1 = require("./validate-frame");
38
47
  const validate_puppeteer_timeout_1 = require("./validate-puppeteer-timeout");
39
48
  const validate_scale_1 = require("./validate-scale");
40
- const innerRenderStill = async ({ composition, quality, imageFormat = 'png', serveUrl, puppeteerInstance, dumpBrowserLogs = false, onError, inputProps, envVariables, output, frame = 0, overwrite = true, browserExecutable, timeoutInMilliseconds, chromiumOptions, scale, }) => {
49
+ const innerRenderStill = async ({ composition, quality, imageFormat = 'png', serveUrl, puppeteerInstance, dumpBrowserLogs = false, onError, inputProps, envVariables, output, frame = 0, overwrite = true, browserExecutable, timeoutInMilliseconds, chromiumOptions, scale, proxyPort, cancelSignal, }) => {
41
50
  remotion_1.Internals.validateDimension(composition.height, 'height', 'in the `config` object passed to `renderStill()`');
42
51
  remotion_1.Internals.validateDimension(composition.width, 'width', 'in the `config` object passed to `renderStill()`');
43
- remotion_1.Internals.validateFps(composition.fps, 'in the `config` object of `renderStill()`');
52
+ remotion_1.Internals.validateFps(composition.fps, 'in the `config` object of `renderStill()`', false);
44
53
  remotion_1.Internals.validateDurationInFrames(composition.durationInFrames, 'in the `config` object passed to `renderStill()`');
45
- remotion_1.Internals.validateNonNullImageFormat(imageFormat);
46
- remotion_1.Internals.validateFrame(frame, composition.durationInFrames);
54
+ (0, image_format_1.validateNonNullImageFormat)(imageFormat);
55
+ (0, validate_frame_1.validateFrame)(frame, composition.durationInFrames);
47
56
  (0, validate_puppeteer_timeout_1.validatePuppeteerTimeout)(timeoutInMilliseconds);
48
57
  (0, validate_scale_1.validateScale)(scale);
49
58
  if (typeof output !== 'string') {
@@ -53,7 +62,7 @@ const innerRenderStill = async ({ composition, quality, imageFormat = 'png', ser
53
62
  if (quality !== undefined && imageFormat !== 'jpeg') {
54
63
  throw new Error("You can only pass the `quality` option if `imageFormat` is 'jpeg'.");
55
64
  }
56
- remotion_1.Internals.validateQuality(quality);
65
+ (0, quality_1.validateQuality)(quality);
57
66
  if (fs_1.default.existsSync(output)) {
58
67
  if (!overwrite) {
59
68
  throw new Error(`Cannot render still - "overwrite" option was set to false, but the output destination ${output} already exists.`);
@@ -64,18 +73,27 @@ const innerRenderStill = async ({ composition, quality, imageFormat = 'png', ser
64
73
  }
65
74
  }
66
75
  (0, ensure_output_directory_1.ensureOutputDirectory)(output);
67
- const browserInstance = puppeteerInstance !== null && puppeteerInstance !== void 0 ? puppeteerInstance : (await (0, open_browser_1.openBrowser)(remotion_1.Internals.DEFAULT_BROWSER, {
76
+ const browserInstance = puppeteerInstance !== null && puppeteerInstance !== void 0 ? puppeteerInstance : (await (0, open_browser_1.openBrowser)(browser_1.DEFAULT_BROWSER, {
68
77
  browserExecutable,
69
78
  shouldDumpIo: dumpBrowserLogs,
70
79
  chromiumOptions,
71
80
  forceDeviceScaleFactor: scale !== null && scale !== void 0 ? scale : 1,
72
81
  }));
73
82
  const page = await browserInstance.newPage();
74
- page.setViewport({
83
+ await page.setViewport({
75
84
  width: composition.width,
76
85
  height: composition.height,
77
86
  deviceScaleFactor: scale !== null && scale !== void 0 ? scale : 1,
78
87
  });
88
+ const errorCallback = (err) => {
89
+ onError(err);
90
+ cleanup();
91
+ };
92
+ const cleanUpJSException = (0, handle_javascript_exception_1.handleJavascriptException)({
93
+ page,
94
+ onError: errorCallback,
95
+ frame: null,
96
+ });
79
97
  const cleanup = async () => {
80
98
  cleanUpJSException();
81
99
  if (puppeteerInstance) {
@@ -87,14 +105,8 @@ const innerRenderStill = async ({ composition, quality, imageFormat = 'png', ser
87
105
  });
88
106
  }
89
107
  };
90
- const errorCallback = (err) => {
91
- onError(err);
108
+ cancelSignal === null || cancelSignal === void 0 ? void 0 : cancelSignal(() => {
92
109
  cleanup();
93
- };
94
- const cleanUpJSException = (0, handle_javascript_exception_1.handleJavascriptException)({
95
- page,
96
- onError: errorCallback,
97
- frame: null,
98
110
  });
99
111
  await (0, set_props_and_env_1.setPropsAndEnv)({
100
112
  inputProps,
@@ -103,6 +115,10 @@ const innerRenderStill = async ({ composition, quality, imageFormat = 'png', ser
103
115
  serveUrl,
104
116
  initialFrame: frame,
105
117
  timeoutInMilliseconds,
118
+ proxyPort,
119
+ retriesRemaining: 2,
120
+ audioEnabled: false,
121
+ videoEnabled: true,
106
122
  });
107
123
  await (0, puppeteer_evaluate_1.puppeteerEvaluateWithCatch)({
108
124
  pageFunction: (id) => {
@@ -128,20 +144,55 @@ const innerRenderStill = async ({ composition, quality, imageFormat = 'png', ser
128
144
  await cleanup();
129
145
  };
130
146
  /**
131
- * @description Render a still frame from a composition and returns an image path
147
+ *
148
+ * @description Render a still frame from a composition
149
+ * @link https://www.remotion.dev/docs/renderer/render-still
132
150
  */
133
- const renderStill = async (options) => {
151
+ const renderStill = (options) => {
152
+ var _a, _b;
134
153
  const selectedServeUrl = (0, legacy_webpack_config_1.getServeUrlWithFallback)(options);
135
- const { closeServer, serveUrl } = await (0, prepare_server_1.prepareServer)(selectedServeUrl);
136
- return new Promise((resolve, reject) => {
137
- innerRenderStill({
138
- ...options,
139
- serveUrl,
140
- onError: (err) => reject(err),
154
+ const downloadMap = (_a = options.downloadMap) !== null && _a !== void 0 ? _a : (0, download_map_1.makeDownloadMap)();
155
+ const onDownload = (_b = options.onDownload) !== null && _b !== void 0 ? _b : (() => () => undefined);
156
+ const happyPath = new Promise((resolve, reject) => {
157
+ var _a, _b, _c;
158
+ const onError = (err) => reject(err);
159
+ let close = null;
160
+ (0, prepare_server_1.prepareServer)({
161
+ webpackConfigOrServeUrl: selectedServeUrl,
162
+ onDownload,
163
+ onError,
164
+ ffmpegExecutable: (_a = options.ffmpegExecutable) !== null && _a !== void 0 ? _a : null,
165
+ ffprobeExecutable: (_b = options.ffprobeExecutable) !== null && _b !== void 0 ? _b : null,
166
+ port: (_c = options.port) !== null && _c !== void 0 ? _c : null,
167
+ downloadMap,
168
+ })
169
+ .then(({ serveUrl, closeServer, offthreadPort }) => {
170
+ close = closeServer;
171
+ return innerRenderStill({
172
+ ...options,
173
+ serveUrl,
174
+ onError: (err) => reject(err),
175
+ proxyPort: offthreadPort,
176
+ });
141
177
  })
142
178
  .then((res) => resolve(res))
143
179
  .catch((err) => reject(err))
144
- .finally(() => closeServer());
180
+ .finally(() => {
181
+ // Clean download map if it was not passed in
182
+ if (!(options === null || options === void 0 ? void 0 : options.downloadMap)) {
183
+ (0, download_map_1.cleanDownloadMap)(downloadMap);
184
+ }
185
+ return close === null || close === void 0 ? void 0 : close();
186
+ });
145
187
  });
188
+ return Promise.race([
189
+ happyPath,
190
+ new Promise((_resolve, reject) => {
191
+ var _a;
192
+ (_a = options.cancelSignal) === null || _a === void 0 ? void 0 : _a.call(options, () => {
193
+ reject(new Error('renderStill() got cancelled'));
194
+ });
195
+ }),
196
+ ]);
146
197
  };
147
198
  exports.renderStill = renderStill;
@@ -1,11 +1,11 @@
1
- import puppeteer from 'puppeteer-core';
2
- import { ImageFormat } from 'remotion';
1
+ /// <reference types="node" />
2
+ import type { Page } from './browser/BrowserPage';
3
+ import type { ImageFormat } from './image-format';
3
4
  export declare const screenshotDOMElement: ({ page, imageFormat, quality, opts, }: {
4
- page: puppeteer.Page;
5
+ page: Page;
5
6
  imageFormat: ImageFormat;
6
7
  quality: number | undefined;
7
- opts?: {
8
- path?: string | undefined;
9
- selector?: string | undefined;
10
- } | undefined;
8
+ opts: {
9
+ path: string | null;
10
+ };
11
11
  }) => Promise<Buffer>;
@@ -3,11 +3,8 @@ Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.screenshotDOMElement = void 0;
4
4
  const puppeteer_evaluate_1 = require("./puppeteer-evaluate");
5
5
  const puppeteer_screenshot_1 = require("./puppeteer-screenshot");
6
- const screenshotDOMElement = async ({ page, imageFormat, quality, opts = {}, }) => {
7
- const path = 'path' in opts ? opts.path : undefined;
8
- const { selector } = opts;
9
- if (!selector)
10
- throw Error('Please provide a selector.');
6
+ const screenshotDOMElement = async ({ page, imageFormat, quality, opts, }) => {
7
+ const { path } = opts;
11
8
  if (imageFormat === 'png') {
12
9
  await (0, puppeteer_evaluate_1.puppeteerEvaluateWithCatch)({
13
10
  pageFunction: () => {
@@ -33,7 +30,7 @@ const screenshotDOMElement = async ({ page, imageFormat, quality, opts = {}, })
33
30
  }
34
31
  return (0, puppeteer_screenshot_1.screenshot)(page, {
35
32
  omitBackground: imageFormat === 'png',
36
- path,
33
+ path: path !== null && path !== void 0 ? path : undefined,
37
34
  type: imageFormat,
38
35
  quality,
39
36
  });
@@ -1,3 +1,5 @@
1
- import { Page, ScreenshotOptions } from 'puppeteer-core';
2
- import { StillImageFormat } from 'remotion';
1
+ /// <reference types="node" />
2
+ import type { Page } from './browser/BrowserPage';
3
+ import type { ScreenshotOptions } from './browser/ScreenshotOptions';
4
+ import type { StillImageFormat } from './image-format';
3
5
  export declare const _screenshotTask: (page: Page, format: StillImageFormat, options: ScreenshotOptions) => Promise<Buffer | string>;