@remotion/renderer 4.0.0-webhook.27 → 4.0.1

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 (413) hide show
  1. package/LICENSE.md +8 -8
  2. package/README.md +9 -0
  3. package/client.d.ts +1 -0
  4. package/client.js +1 -0
  5. package/dist/assets/calculate-asset-positions.d.ts +0 -0
  6. package/dist/assets/calculate-asset-positions.js +1 -0
  7. package/dist/assets/calculate-atempo.d.ts +0 -0
  8. package/dist/assets/calculate-atempo.js +0 -0
  9. package/dist/assets/convert-assets-to-file-urls.d.ts +0 -0
  10. package/dist/assets/convert-assets-to-file-urls.js +0 -0
  11. package/dist/assets/download-and-map-assets-to-file.d.ts +6 -4
  12. package/dist/assets/download-and-map-assets-to-file.js +49 -19
  13. package/dist/assets/download-file.d.ts +8 -5
  14. package/dist/assets/download-file.js +71 -8
  15. package/dist/assets/download-map.d.ts +8 -29
  16. package/dist/assets/download-map.js +15 -16
  17. package/dist/assets/ffmpeg-volume-expression.d.ts +4 -3
  18. package/dist/assets/ffmpeg-volume-expression.js +5 -3
  19. package/dist/assets/flatten-volume-array.d.ts +0 -0
  20. package/dist/assets/flatten-volume-array.js +0 -0
  21. package/dist/assets/get-audio-channels.d.ts +2 -2
  22. package/dist/assets/get-audio-channels.js +14 -12
  23. package/dist/assets/read-file.d.ts +1 -1
  24. package/dist/assets/read-file.js +5 -7
  25. package/dist/assets/round-volume-to-avoid-stack-overflow.d.ts +0 -0
  26. package/dist/assets/round-volume-to-avoid-stack-overflow.js +0 -0
  27. package/dist/assets/sanitize-filename.d.ts +0 -0
  28. package/dist/assets/sanitize-filename.js +0 -0
  29. package/dist/assets/sanitize-filepath.d.ts +0 -0
  30. package/dist/assets/sanitize-filepath.js +2 -2
  31. package/dist/assets/truncate-utf8-bytes.d.ts +0 -0
  32. package/dist/assets/truncate-utf8-bytes.js +0 -0
  33. package/dist/assets/types.d.ts +5 -4
  34. package/dist/assets/types.js +0 -0
  35. package/dist/audio-codec.d.ts +28 -0
  36. package/dist/audio-codec.js +83 -0
  37. package/dist/browser/Browser.d.ts +19 -16
  38. package/dist/browser/Browser.js +72 -75
  39. package/dist/browser/BrowserConnector.d.ts +0 -0
  40. package/dist/browser/BrowserConnector.js +0 -0
  41. package/dist/browser/BrowserFetcher.d.ts +16 -64
  42. package/dist/browser/BrowserFetcher.js +147 -235
  43. package/dist/browser/BrowserPage.d.ts +32 -6
  44. package/dist/browser/BrowserPage.js +90 -26
  45. package/dist/browser/BrowserRunner.d.ts +1 -1
  46. package/dist/browser/BrowserRunner.js +32 -22
  47. package/dist/browser/Connection.d.ts +9 -3
  48. package/dist/browser/Connection.js +12 -4
  49. package/dist/browser/ConsoleMessage.d.ts +9 -2
  50. package/dist/browser/ConsoleMessage.js +2 -1
  51. package/dist/browser/DOMWorld.d.ts +5 -4
  52. package/dist/browser/DOMWorld.js +16 -9
  53. package/dist/browser/Errors.d.ts +0 -0
  54. package/dist/browser/Errors.js +0 -0
  55. package/dist/browser/EvalTypes.d.ts +7 -7
  56. package/dist/browser/EvalTypes.js +0 -0
  57. package/dist/browser/EventEmitter.d.ts +0 -0
  58. package/dist/browser/EventEmitter.js +0 -0
  59. package/dist/browser/ExecutionContext.d.ts +0 -0
  60. package/dist/browser/ExecutionContext.js +4 -4
  61. package/dist/browser/FrameManager.d.ts +0 -2
  62. package/dist/browser/FrameManager.js +15 -19
  63. package/dist/browser/HTTPRequest.d.ts +0 -0
  64. package/dist/browser/HTTPRequest.js +0 -0
  65. package/dist/browser/HTTPResponse.d.ts +0 -0
  66. package/dist/browser/HTTPResponse.js +0 -0
  67. package/dist/browser/JSHandle.d.ts +0 -0
  68. package/dist/browser/JSHandle.js +14 -14
  69. package/dist/browser/LaunchOptions.d.ts +4 -2
  70. package/dist/browser/LaunchOptions.js +0 -0
  71. package/dist/browser/Launcher.d.ts +9 -3
  72. package/dist/browser/Launcher.js +17 -29
  73. package/dist/browser/LifecycleWatcher.d.ts +1 -1
  74. package/dist/browser/LifecycleWatcher.js +0 -0
  75. package/dist/browser/NetworkEventManager.d.ts +4 -4
  76. package/dist/browser/NetworkEventManager.js +0 -0
  77. package/dist/browser/NetworkManager.d.ts +4 -1
  78. package/dist/browser/NetworkManager.js +0 -0
  79. package/dist/browser/NodeWebSocketTransport.d.ts +0 -0
  80. package/dist/browser/NodeWebSocketTransport.js +21 -21
  81. package/dist/browser/Product.d.ts +1 -1
  82. package/dist/browser/Product.js +0 -0
  83. package/dist/browser/PuppeteerNode.d.ts +2 -5
  84. package/dist/browser/PuppeteerNode.js +2 -11
  85. package/dist/browser/PuppeteerViewport.d.ts +0 -0
  86. package/dist/browser/PuppeteerViewport.js +0 -0
  87. package/dist/browser/ScreenshotOptions.d.ts +0 -14
  88. package/dist/browser/ScreenshotOptions.js +0 -1
  89. package/dist/browser/Target.d.ts +5 -3
  90. package/dist/browser/Target.js +10 -2
  91. package/dist/browser/TaskQueue.d.ts +0 -0
  92. package/dist/browser/TaskQueue.js +0 -0
  93. package/dist/browser/TimeoutSettings.d.ts +0 -0
  94. package/dist/browser/TimeoutSettings.js +0 -0
  95. package/dist/browser/assert.d.ts +0 -0
  96. package/dist/browser/assert.js +0 -0
  97. package/dist/browser/create-browser-fetcher.d.ts +0 -0
  98. package/dist/browser/create-browser-fetcher.js +34 -48
  99. package/dist/browser/devtools-commands.d.ts +5 -1
  100. package/dist/browser/devtools-commands.js +0 -0
  101. package/dist/browser/devtools-types.d.ts +151 -10
  102. package/dist/browser/devtools-types.js +0 -0
  103. package/dist/browser/get-download-destination.d.ts +0 -0
  104. package/dist/browser/get-download-destination.js +8 -8
  105. package/dist/browser/is-target-closed-err.d.ts +1 -0
  106. package/dist/browser/is-target-closed-err.js +9 -0
  107. package/dist/browser/mitt/index.d.ts +6 -6
  108. package/dist/browser/mitt/index.js +0 -0
  109. package/dist/browser/node.d.ts +0 -0
  110. package/dist/browser/node.js +0 -0
  111. package/dist/browser/revisions.d.ts +1 -1
  112. package/dist/browser/revisions.js +0 -0
  113. package/dist/browser/should-log-message.d.ts +24 -0
  114. package/dist/browser/should-log-message.js +80 -0
  115. package/dist/browser/util.d.ts +2 -2
  116. package/dist/browser/util.js +0 -0
  117. package/dist/browser-executable.d.ts +1 -1
  118. package/dist/browser-executable.js +0 -0
  119. package/dist/browser-log.d.ts +1 -1
  120. package/dist/browser-log.js +0 -0
  121. package/dist/browser.d.ts +1 -1
  122. package/dist/browser.js +0 -0
  123. package/dist/calculate-ffmpeg-filters.d.ts +2 -1
  124. package/dist/calculate-ffmpeg-filters.js +1 -0
  125. package/dist/call-ffmpeg.d.ts +14 -0
  126. package/dist/call-ffmpeg.js +42 -0
  127. package/dist/can-use-parallel-encoding.d.ts +0 -0
  128. package/dist/can-use-parallel-encoding.js +0 -0
  129. package/dist/chalk/index.d.ts +55 -0
  130. package/dist/chalk/index.js +130 -0
  131. package/dist/chalk/is-color-supported.d.ts +1 -0
  132. package/dist/chalk/is-color-supported.js +45 -0
  133. package/dist/check-apple-silicon.d.ts +1 -1
  134. package/dist/check-apple-silicon.js +8 -47
  135. package/dist/chunk.d.ts +0 -0
  136. package/dist/chunk.js +0 -0
  137. package/dist/client.d.ts +204 -0
  138. package/dist/client.js +49 -0
  139. package/dist/codec-supports-media.d.ts +3 -2
  140. package/dist/codec-supports-media.js +20 -5
  141. package/dist/codec.d.ts +2 -2
  142. package/dist/codec.js +0 -0
  143. package/dist/combine-videos.d.ts +6 -2
  144. package/dist/combine-videos.js +17 -17
  145. package/dist/compositor/compose.d.ts +26 -0
  146. package/dist/compositor/compose.js +87 -0
  147. package/dist/compositor/compositor.d.ts +12 -0
  148. package/dist/compositor/compositor.js +219 -0
  149. package/dist/compositor/get-executable-path.d.ts +1 -0
  150. package/dist/compositor/get-executable-path.js +57 -0
  151. package/dist/compositor/make-nonce.d.ts +1 -0
  152. package/dist/compositor/make-nonce.js +8 -0
  153. package/dist/compositor/payloads.d.ts +68 -0
  154. package/dist/{ffmpeg-executable.js → compositor/payloads.js} +0 -0
  155. package/dist/compress-assets.d.ts +0 -0
  156. package/dist/compress-assets.js +0 -0
  157. package/dist/convert-number-of-gif-loops-to-ffmpeg.d.ts +0 -0
  158. package/dist/convert-number-of-gif-loops-to-ffmpeg.js +0 -0
  159. package/dist/convert-to-positive-frame-index.d.ts +0 -0
  160. package/dist/convert-to-positive-frame-index.js +0 -0
  161. package/dist/create-ffmpeg-complex-filter.d.ts +5 -1
  162. package/dist/create-ffmpeg-complex-filter.js +6 -4
  163. package/dist/create-ffmpeg-merge-filter.d.ts +5 -1
  164. package/dist/create-ffmpeg-merge-filter.js +20 -13
  165. package/dist/create-silent-audio.d.ts +1 -3
  166. package/dist/create-silent-audio.js +3 -6
  167. package/dist/crf.d.ts +6 -2
  168. package/dist/crf.js +41 -8
  169. package/dist/cycle-browser-tabs.d.ts +3 -5
  170. package/dist/cycle-browser-tabs.js +7 -7
  171. package/dist/delay-render-embedded-stack.d.ts +0 -0
  172. package/dist/delay-render-embedded-stack.js +0 -0
  173. package/dist/delete-directory.d.ts +1 -1
  174. package/dist/delete-directory.js +43 -17
  175. package/dist/does-have-m2-bug.d.ts +3 -0
  176. package/dist/does-have-m2-bug.js +12 -0
  177. package/dist/ensure-frames-in-order.d.ts +0 -0
  178. package/dist/ensure-frames-in-order.js +0 -0
  179. package/dist/ensure-output-directory.d.ts +0 -0
  180. package/dist/ensure-output-directory.js +5 -5
  181. package/dist/error-handling/handle-javascript-exception.d.ts +0 -0
  182. package/dist/error-handling/handle-javascript-exception.js +10 -0
  183. package/dist/error-handling/symbolicate-error.d.ts +0 -0
  184. package/dist/error-handling/symbolicate-error.js +6 -3
  185. package/dist/error-handling/symbolicateable-error.d.ts +0 -0
  186. package/dist/error-handling/symbolicateable-error.js +0 -0
  187. package/dist/ffmpeg-filter-file.d.ts +6 -1
  188. package/dist/ffmpeg-filter-file.js +40 -8
  189. package/dist/ffmpeg-override.d.ts +1 -1
  190. package/dist/ffmpeg-override.js +0 -0
  191. package/dist/file-extensions.d.ts +14 -0
  192. package/dist/file-extensions.js +76 -0
  193. package/dist/find-closest-package-json.d.ts +2 -0
  194. package/dist/find-closest-package-json.js +31 -0
  195. package/dist/format-logs.d.ts +3 -0
  196. package/dist/format-logs.js +201 -0
  197. package/dist/frame-range.d.ts +1 -1
  198. package/dist/frame-range.js +0 -0
  199. package/dist/get-browser-instance.d.ts +9 -3
  200. package/dist/get-browser-instance.js +10 -5
  201. package/dist/get-codec-name.d.ts +0 -0
  202. package/dist/get-codec-name.js +0 -0
  203. package/dist/get-compositions.d.ts +28 -14
  204. package/dist/get-compositions.js +74 -40
  205. package/dist/get-concurrency.d.ts +1 -1
  206. package/dist/get-concurrency.js +11 -4
  207. package/dist/get-duration-from-frame-range.d.ts +0 -0
  208. package/dist/get-duration-from-frame-range.js +0 -0
  209. package/dist/get-extension-from-codec.d.ts +5 -1
  210. package/dist/get-extension-from-codec.js +56 -32
  211. package/dist/get-extension-of-filename.d.ts +0 -0
  212. package/dist/get-extension-of-filename.js +5 -1
  213. package/dist/get-frame-padded-index.d.ts +3 -2
  214. package/dist/get-frame-padded-index.js +3 -2
  215. package/dist/get-frame-to-render.d.ts +0 -0
  216. package/dist/get-frame-to-render.js +1 -1
  217. package/dist/get-local-browser-executable.d.ts +0 -0
  218. package/dist/get-local-browser-executable.js +7 -15
  219. package/dist/get-port.d.ts +4 -1
  220. package/dist/get-port.js +8 -8
  221. package/dist/get-prores-profile-name.d.ts +0 -0
  222. package/dist/get-prores-profile-name.js +0 -0
  223. package/dist/get-video-threads-flag.d.ts +0 -0
  224. package/dist/get-video-threads-flag.js +3 -3
  225. package/dist/guess-extension-for-media.d.ts +3 -1
  226. package/dist/guess-extension-for-media.js +4 -7
  227. package/dist/image-format.d.ts +12 -6
  228. package/dist/image-format.js +19 -13
  229. package/dist/index.d.ts +369 -49
  230. package/dist/index.js +67 -46
  231. package/dist/is-audio-codec.d.ts +0 -0
  232. package/dist/is-audio-codec.js +0 -0
  233. package/dist/is-serve-url.d.ts +0 -0
  234. package/dist/is-serve-url.js +0 -0
  235. package/dist/jpeg-quality.d.ts +2 -0
  236. package/dist/jpeg-quality.js +22 -0
  237. package/dist/locks.d.ts +7 -0
  238. package/dist/locks.js +44 -0
  239. package/dist/log-level.d.ts +1 -1
  240. package/dist/log-level.js +0 -0
  241. package/dist/logger.d.ts +23 -0
  242. package/dist/logger.js +63 -0
  243. package/dist/make-cancel-signal.d.ts +13 -2
  244. package/dist/make-cancel-signal.js +24 -1
  245. package/dist/merge-audio-track.d.ts +4 -4
  246. package/dist/merge-audio-track.js +38 -33
  247. package/dist/mime-db.d.ts +0 -0
  248. package/dist/mime-db.js +0 -0
  249. package/dist/mime-types.d.ts +0 -0
  250. package/dist/mime-types.js +3 -3
  251. package/dist/normalize-serve-url.d.ts +0 -0
  252. package/dist/normalize-serve-url.js +0 -0
  253. package/dist/offthread-video-server.d.ts +48 -11
  254. package/dist/offthread-video-server.js +112 -58
  255. package/dist/open-browser.d.ts +22 -6
  256. package/dist/open-browser.js +40 -17
  257. package/dist/options/audio-bitrate.d.ts +2 -0
  258. package/dist/options/audio-bitrate.js +11 -0
  259. package/dist/options/crf.d.ts +2 -0
  260. package/dist/options/crf.js +11 -0
  261. package/dist/options/enforce-audio.d.ts +2 -0
  262. package/dist/options/enforce-audio.js +11 -0
  263. package/dist/options/jpeg-quality.d.ts +2 -0
  264. package/dist/options/jpeg-quality.js +11 -0
  265. package/dist/options/mute.d.ts +2 -0
  266. package/dist/options/mute.js +11 -0
  267. package/dist/options/option.d.ts +8 -0
  268. package/dist/options/option.js +2 -0
  269. package/dist/options/scale.d.ts +2 -0
  270. package/dist/options/scale.js +11 -0
  271. package/dist/options/video-bitrate.d.ts +2 -0
  272. package/dist/options/video-bitrate.js +11 -0
  273. package/dist/options/video-codec.d.ts +2 -0
  274. package/dist/options/video-codec.js +11 -0
  275. package/dist/overwrite.d.ts +0 -0
  276. package/dist/overwrite.js +0 -0
  277. package/dist/p-limit.d.ts +0 -0
  278. package/dist/p-limit.js +0 -0
  279. package/dist/parse-browser-error-stack.d.ts +1 -1
  280. package/dist/parse-browser-error-stack.js +0 -0
  281. package/dist/parse-ffmpeg-progress.d.ts +0 -0
  282. package/dist/parse-ffmpeg-progress.js +0 -0
  283. package/dist/perf.d.ts +2 -2
  284. package/dist/perf.js +11 -7
  285. package/dist/pixel-format.d.ts +2 -2
  286. package/dist/pixel-format.js +3 -0
  287. package/dist/pool.d.ts +0 -0
  288. package/dist/pool.js +0 -0
  289. package/dist/prepare-server.d.ts +26 -10
  290. package/dist/prepare-server.js +71 -18
  291. package/dist/preprocess-audio-track.d.ts +7 -5
  292. package/dist/preprocess-audio-track.js +7 -8
  293. package/dist/prespawn-ffmpeg.d.ts +22 -11
  294. package/dist/prespawn-ffmpeg.js +41 -31
  295. package/dist/prestitcher-memory-usage.d.ts +0 -4
  296. package/dist/prestitcher-memory-usage.js +4 -5
  297. package/dist/prores-profile.d.ts +6 -4
  298. package/dist/prores-profile.js +8 -8
  299. package/dist/provide-screenshot.d.ts +8 -4
  300. package/dist/provide-screenshot.js +5 -2
  301. package/dist/puppeteer-evaluate.d.ts +4 -1
  302. package/dist/puppeteer-evaluate.js +23 -15
  303. package/dist/puppeteer-screenshot.d.ts +12 -2
  304. package/dist/puppeteer-screenshot.js +18 -45
  305. package/dist/redirect-status-codes.d.ts +1 -0
  306. package/dist/redirect-status-codes.js +6 -0
  307. package/dist/render-frames.d.ts +59 -35
  308. package/dist/render-frames.js +256 -147
  309. package/dist/render-media.d.ts +82 -28
  310. package/dist/render-media.js +322 -195
  311. package/dist/render-still.d.ts +52 -19
  312. package/dist/render-still.js +132 -74
  313. package/dist/replace-browser.d.ts +7 -0
  314. package/dist/replace-browser.js +47 -0
  315. package/dist/resolve-asset-src.d.ts +0 -0
  316. package/dist/resolve-asset-src.js +2 -2
  317. package/dist/sample-rate.d.ts +0 -0
  318. package/dist/sample-rate.js +0 -0
  319. package/dist/screenshot-dom-element.d.ts +8 -4
  320. package/dist/screenshot-dom-element.js +15 -4
  321. package/dist/screenshot-task.d.ts +11 -2
  322. package/dist/screenshot-task.js +45 -13
  323. package/dist/seek-to-frame.d.ts +3 -1
  324. package/dist/seek-to-frame.js +53 -7
  325. package/dist/select-composition.d.ts +46 -0
  326. package/dist/select-composition.js +157 -0
  327. package/dist/serve-handler/index.d.ts +1 -1
  328. package/dist/serve-handler/index.js +21 -19
  329. package/dist/serve-handler/is-path-inside.d.ts +0 -0
  330. package/dist/serve-handler/is-path-inside.js +3 -3
  331. package/dist/serve-handler/range-parser.d.ts +0 -0
  332. package/dist/serve-handler/range-parser.js +0 -0
  333. package/dist/serve-static.d.ts +9 -6
  334. package/dist/serve-static.js +85 -59
  335. package/dist/set-props-and-env.d.ts +5 -3
  336. package/dist/set-props-and-env.js +20 -12
  337. package/dist/stitch-frames-to-video.d.ts +40 -16
  338. package/dist/stitch-frames-to-video.js +200 -121
  339. package/dist/stringify-ffmpeg-filter.d.ts +10 -2
  340. package/dist/stringify-ffmpeg-filter.js +37 -34
  341. package/dist/symbolicate-stacktrace.d.ts +16 -3
  342. package/dist/symbolicate-stacktrace.js +49 -24
  343. package/dist/take-frame-and-compose.d.ts +22 -0
  344. package/dist/take-frame-and-compose.js +103 -0
  345. package/dist/tmp-dir.d.ts +0 -0
  346. package/dist/tmp-dir.js +7 -8
  347. package/dist/truthy.d.ts +1 -1
  348. package/dist/truthy.js +0 -0
  349. package/dist/types.d.ts +2 -2
  350. package/dist/types.js +0 -0
  351. package/dist/validate-concurrency.d.ts +2 -0
  352. package/dist/validate-concurrency.js +21 -10
  353. package/dist/validate-even-dimensions-with-codec.d.ts +0 -0
  354. package/dist/validate-even-dimensions-with-codec.js +0 -0
  355. package/dist/validate-every-nth-frame.d.ts +2 -1
  356. package/dist/validate-every-nth-frame.js +8 -1
  357. package/dist/validate-ffmpeg-override.d.ts +0 -0
  358. package/dist/validate-ffmpeg-override.js +0 -0
  359. package/dist/validate-number-of-gif-loops.d.ts +2 -0
  360. package/dist/validate-number-of-gif-loops.js +24 -0
  361. package/dist/validate-opengl-renderer.d.ts +1 -1
  362. package/dist/validate-opengl-renderer.js +0 -0
  363. package/dist/validate-output-filename.d.ts +7 -2
  364. package/dist/validate-output-filename.js +20 -51
  365. package/dist/validate-puppeteer-timeout.d.ts +0 -0
  366. package/dist/validate-puppeteer-timeout.js +1 -0
  367. package/dist/validate-scale.d.ts +0 -0
  368. package/dist/validate-scale.js +0 -0
  369. package/dist/validate-videobitrate.d.ts +1 -0
  370. package/dist/validate-videobitrate.js +20 -0
  371. package/dist/wait-for-symbolication-error-to-be-done.d.ts +0 -0
  372. package/dist/wait-for-symbolication-error-to-be-done.js +5 -31
  373. package/dist/ws/ws-types.d.ts +0 -0
  374. package/dist/ws/ws-types.js +2 -1
  375. package/install-toolchain.mjs +36 -0
  376. package/package.json +70 -60
  377. package/types/ws/index.d.ts +5 -5
  378. package/.prettierrc.js +0 -14
  379. package/dist/assets/dl-browser.d.ts +0 -1
  380. package/dist/assets/dl-browser.js +0 -38
  381. package/dist/assets/get-video-stream-duration.d.ts +0 -4
  382. package/dist/assets/get-video-stream-duration.js +0 -59
  383. package/dist/calculate-sar-dar-pixels.d.ts +0 -9
  384. package/dist/calculate-sar-dar-pixels.js +0 -19
  385. package/dist/convert-to-pcm.d.ts +0 -6
  386. package/dist/convert-to-pcm.js +0 -20
  387. package/dist/ensure-presentation-timestamp.d.ts +0 -2
  388. package/dist/ensure-presentation-timestamp.js +0 -69
  389. package/dist/extract-frame-from-video.d.ts +0 -16
  390. package/dist/extract-frame-from-video.js +0 -277
  391. package/dist/ffmpeg-executable.d.ts +0 -1
  392. package/dist/ffmpeg-flags.d.ts +0 -12
  393. package/dist/ffmpeg-flags.js +0 -45
  394. package/dist/frame-to-ffmpeg-timestamp.d.ts +0 -1
  395. package/dist/frame-to-ffmpeg-timestamp.js +0 -8
  396. package/dist/get-audio-codec-name.d.ts +0 -2
  397. package/dist/get-audio-codec-name.js +0 -28
  398. package/dist/get-video-info.d.ts +0 -3
  399. package/dist/get-video-info.js +0 -49
  400. package/dist/is-beyond-last-frame.d.ts +0 -3
  401. package/dist/is-beyond-last-frame.js +0 -12
  402. package/dist/last-frame-from-video-cache.d.ts +0 -17
  403. package/dist/last-frame-from-video-cache.js +0 -55
  404. package/dist/legacy-webpack-config.d.ts +0 -9
  405. package/dist/legacy-webpack-config.js +0 -13
  406. package/dist/quality.d.ts +0 -1
  407. package/dist/quality.js +0 -21
  408. package/dist/validate-ffmpeg.d.ts +0 -2
  409. package/dist/validate-ffmpeg.js +0 -72
  410. package/dist/validate-frame.d.ts +0 -1
  411. package/dist/validate-frame.js +0 -24
  412. package/tsconfig.json +0 -10
  413. package/vitest.config.ts +0 -8
@@ -1,44 +1,77 @@
1
- import type { SmallTCompMetadata } from 'remotion';
1
+ /// <reference types="node" />
2
+ import type { VideoConfig } from 'remotion';
2
3
  import type { RenderMediaOnDownload } from './assets/download-and-map-assets-to-file';
3
- import type { DownloadMap } from './assets/download-map';
4
4
  import type { BrowserExecutable } from './browser-executable';
5
- import type { Browser as PuppeteerBrowser } from './browser/Browser';
6
- import type { FfmpegExecutable } from './ffmpeg-executable';
5
+ import type { BrowserLog } from './browser-log';
6
+ import type { HeadlessBrowser } from './browser/Browser';
7
7
  import type { StillImageFormat } from './image-format';
8
- import type { ServeUrlOrWebpackBundle } from './legacy-webpack-config';
9
8
  import type { CancelSignal } from './make-cancel-signal';
10
9
  import type { ChromiumOptions } from './open-browser';
11
- declare type InnerStillOptions = {
12
- composition: SmallTCompMetadata;
13
- output: string;
10
+ import type { RemotionServer } from './prepare-server';
11
+ import type { LogLevel } from './log-level';
12
+ type InternalRenderStillOptions = {
13
+ composition: VideoConfig;
14
+ output: string | null;
15
+ frame: number;
16
+ inputProps: Record<string, unknown>;
17
+ imageFormat: StillImageFormat;
18
+ jpegQuality: number;
19
+ puppeteerInstance: HeadlessBrowser | null;
20
+ envVariables: Record<string, string>;
21
+ overwrite: boolean;
22
+ browserExecutable: BrowserExecutable;
23
+ onBrowserLog: null | ((log: BrowserLog) => void);
24
+ timeoutInMilliseconds: number;
25
+ chromiumOptions: ChromiumOptions;
26
+ scale: number;
27
+ onDownload: RenderMediaOnDownload | null;
28
+ cancelSignal: CancelSignal | null;
29
+ indent: boolean;
30
+ server: RemotionServer | undefined;
31
+ logLevel: LogLevel;
32
+ serveUrl: string;
33
+ port: number | null;
34
+ };
35
+ export type RenderStillOptions = {
36
+ port?: number | null;
37
+ composition: VideoConfig;
38
+ output?: string | null;
14
39
  frame?: number;
15
- inputProps?: unknown;
40
+ inputProps?: Record<string, unknown>;
16
41
  imageFormat?: StillImageFormat;
17
- quality?: number;
18
- puppeteerInstance?: PuppeteerBrowser;
42
+ jpegQuality?: number;
43
+ puppeteerInstance?: HeadlessBrowser;
44
+ /**
45
+ * @deprecated Use "logLevel": "verbose" instead
46
+ */
19
47
  dumpBrowserLogs?: boolean;
20
48
  envVariables?: Record<string, string>;
21
49
  overwrite?: boolean;
22
50
  browserExecutable?: BrowserExecutable;
51
+ onBrowserLog?: (log: BrowserLog) => void;
23
52
  timeoutInMilliseconds?: number;
24
53
  chromiumOptions?: ChromiumOptions;
25
54
  scale?: number;
26
55
  onDownload?: RenderMediaOnDownload;
27
56
  cancelSignal?: CancelSignal;
28
- ffmpegExecutable?: FfmpegExecutable;
29
- ffprobeExecutable?: FfmpegExecutable;
30
57
  /**
31
- * @deprecated Only for Remotion internal usage
58
+ * @deprecated Use "logLevel" instead
32
59
  */
33
- downloadMap?: DownloadMap;
60
+ verbose?: boolean;
61
+ serveUrl: string;
62
+ /**
63
+ * @deprecated Renamed to `jpegQuality`
64
+ */
65
+ quality?: never;
34
66
  };
35
- export declare type RenderStillOptions = InnerStillOptions & ServeUrlOrWebpackBundle & {
36
- port?: number | null;
67
+ type RenderStillReturnValue = {
68
+ buffer: Buffer | null;
37
69
  };
70
+ export declare const internalRenderStill: (options: InternalRenderStillOptions) => Promise<RenderStillReturnValue>;
38
71
  /**
39
72
  *
40
73
  * @description Render a still frame from a composition
41
- * @link https://www.remotion.dev/docs/renderer/render-still
74
+ * @see [Documentation](https://www.remotion.dev/docs/renderer/render-still)
42
75
  */
43
- export declare const renderStill: (options: RenderStillOptions) => Promise<void>;
76
+ export declare const renderStill: (options: RenderStillOptions) => Promise<RenderStillReturnValue>;
44
77
  export {};
@@ -26,69 +26,78 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
26
26
  return (mod && mod.__esModule) ? mod : { "default": mod };
27
27
  };
28
28
  Object.defineProperty(exports, "__esModule", { value: true });
29
- exports.renderStill = void 0;
30
- const fs_1 = __importStar(require("fs"));
31
- const path_1 = __importDefault(require("path"));
29
+ exports.renderStill = exports.internalRenderStill = void 0;
30
+ const node_fs_1 = __importStar(require("node:fs"));
31
+ const node_path_1 = __importDefault(require("node:path"));
32
32
  const remotion_1 = require("remotion");
33
- const download_map_1 = require("./assets/download-map");
34
33
  const browser_1 = require("./browser");
34
+ const TimeoutSettings_1 = require("./browser/TimeoutSettings");
35
35
  const convert_to_positive_frame_index_1 = require("./convert-to-positive-frame-index");
36
36
  const ensure_output_directory_1 = require("./ensure-output-directory");
37
37
  const handle_javascript_exception_1 = require("./error-handling/handle-javascript-exception");
38
+ const find_closest_package_json_1 = require("./find-closest-package-json");
38
39
  const image_format_1 = require("./image-format");
39
- const legacy_webpack_config_1 = require("./legacy-webpack-config");
40
+ const jpeg_quality_1 = require("./jpeg-quality");
41
+ const make_cancel_signal_1 = require("./make-cancel-signal");
40
42
  const open_browser_1 = require("./open-browser");
43
+ const overwrite_1 = require("./overwrite");
41
44
  const prepare_server_1 = require("./prepare-server");
42
- const provide_screenshot_1 = require("./provide-screenshot");
43
45
  const puppeteer_evaluate_1 = require("./puppeteer-evaluate");
44
- const quality_1 = require("./quality");
45
46
  const seek_to_frame_1 = require("./seek-to-frame");
46
47
  const set_props_and_env_1 = require("./set-props-and-env");
47
- const validate_frame_1 = require("./validate-frame");
48
+ const take_frame_and_compose_1 = require("./take-frame-and-compose");
48
49
  const validate_puppeteer_timeout_1 = require("./validate-puppeteer-timeout");
49
50
  const validate_scale_1 = require("./validate-scale");
50
- 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, }) => {
51
+ const logger_1 = require("./logger");
52
+ const innerRenderStill = async ({ composition, imageFormat = image_format_1.DEFAULT_STILL_IMAGE_FORMAT, serveUrl, puppeteerInstance, onError, inputProps, envVariables, output, frame = 0, overwrite, browserExecutable, timeoutInMilliseconds, chromiumOptions, scale, proxyPort, cancelSignal, jpegQuality, onBrowserLog, compositor, sourceMapContext, downloadMap, logLevel, indent, }) => {
51
53
  remotion_1.Internals.validateDimension(composition.height, 'height', 'in the `config` object passed to `renderStill()`');
52
54
  remotion_1.Internals.validateDimension(composition.width, 'width', 'in the `config` object passed to `renderStill()`');
53
55
  remotion_1.Internals.validateFps(composition.fps, 'in the `config` object of `renderStill()`', false);
54
- remotion_1.Internals.validateDurationInFrames(composition.durationInFrames, 'in the `config` object passed to `renderStill()`');
55
- (0, image_format_1.validateNonNullImageFormat)(imageFormat);
56
- (0, validate_frame_1.validateFrame)(frame, composition.durationInFrames);
56
+ remotion_1.Internals.validateDurationInFrames(composition.durationInFrames, {
57
+ component: 'in the `config` object passed to `renderStill()`',
58
+ allowFloats: false,
59
+ });
60
+ (0, image_format_1.validateStillImageFormat)(imageFormat);
61
+ remotion_1.Internals.validateFrame({
62
+ frame,
63
+ durationInFrames: composition.durationInFrames,
64
+ allowFloats: false,
65
+ });
57
66
  const stillFrame = (0, convert_to_positive_frame_index_1.convertToPositiveFrameIndex)({
58
67
  durationInFrames: composition.durationInFrames,
59
68
  frame,
60
69
  });
61
70
  (0, validate_puppeteer_timeout_1.validatePuppeteerTimeout)(timeoutInMilliseconds);
62
71
  (0, validate_scale_1.validateScale)(scale);
63
- if (typeof output !== 'string') {
64
- throw new TypeError('`output` parameter was not passed or is not a string');
65
- }
66
- output = path_1.default.resolve(process.cwd(), output);
67
- if (quality !== undefined && imageFormat !== 'jpeg') {
68
- throw new Error("You can only pass the `quality` option if `imageFormat` is 'jpeg'.");
69
- }
70
- (0, quality_1.validateQuality)(quality);
71
- if (fs_1.default.existsSync(output)) {
72
- if (!overwrite) {
73
- throw new Error(`Cannot render still - "overwrite" option was set to false, but the output destination ${output} already exists.`);
74
- }
75
- const stat = (0, fs_1.statSync)(output);
76
- if (!stat.isFile()) {
77
- throw new Error(`The output location ${output} already exists, but is not a file, but something else (e.g. folder). Cannot save to it.`);
72
+ output =
73
+ typeof output === 'string' ? node_path_1.default.resolve(process.cwd(), output) : null;
74
+ (0, jpeg_quality_1.validateJpegQuality)(jpegQuality);
75
+ if (output) {
76
+ if (node_fs_1.default.existsSync(output)) {
77
+ if (!overwrite) {
78
+ throw new Error(`Cannot render still - "overwrite" option was set to false, but the output destination ${output} already exists.`);
79
+ }
80
+ const stat = (0, node_fs_1.statSync)(output);
81
+ if (!stat.isFile()) {
82
+ throw new Error(`The output location ${output} already exists, but is not a file, but something else (e.g. folder). Cannot save to it.`);
83
+ }
78
84
  }
85
+ (0, ensure_output_directory_1.ensureOutputDirectory)(output);
79
86
  }
80
- (0, ensure_output_directory_1.ensureOutputDirectory)(output);
81
- const browserInstance = puppeteerInstance !== null && puppeteerInstance !== void 0 ? puppeteerInstance : (await (0, open_browser_1.openBrowser)(browser_1.DEFAULT_BROWSER, {
87
+ const browserInstance = puppeteerInstance !== null && puppeteerInstance !== void 0 ? puppeteerInstance : (await (0, open_browser_1.internalOpenBrowser)({
88
+ browser: browser_1.DEFAULT_BROWSER,
82
89
  browserExecutable,
83
- shouldDumpIo: dumpBrowserLogs,
84
90
  chromiumOptions,
85
- forceDeviceScaleFactor: scale !== null && scale !== void 0 ? scale : 1,
91
+ forceDeviceScaleFactor: scale,
92
+ indent,
93
+ viewport: null,
94
+ logLevel,
86
95
  }));
87
- const page = await browserInstance.newPage();
96
+ const page = await browserInstance.newPage(sourceMapContext, logLevel, indent);
88
97
  await page.setViewport({
89
98
  width: composition.width,
90
99
  height: composition.height,
91
- deviceScaleFactor: scale !== null && scale !== void 0 ? scale : 1,
100
+ deviceScaleFactor: scale,
92
101
  });
93
102
  const errorCallback = (err) => {
94
103
  onError(err);
@@ -99,13 +108,21 @@ const innerRenderStill = async ({ composition, quality, imageFormat = 'png', ser
99
108
  onError: errorCallback,
100
109
  frame: null,
101
110
  });
111
+ const logCallback = (log) => {
112
+ onBrowserLog === null || onBrowserLog === void 0 ? void 0 : onBrowserLog({
113
+ stackTrace: log.stackTrace(),
114
+ text: log.text,
115
+ type: log.type,
116
+ });
117
+ };
102
118
  const cleanup = async () => {
103
119
  cleanUpJSException();
120
+ page.off('console', logCallback);
104
121
  if (puppeteerInstance) {
105
122
  await page.close();
106
123
  }
107
124
  else {
108
- browserInstance.close().catch((err) => {
125
+ browserInstance.close(true, logLevel, indent).catch((err) => {
109
126
  console.log('Unable to close browser', err);
110
127
  });
111
128
  }
@@ -113,6 +130,9 @@ const innerRenderStill = async ({ composition, quality, imageFormat = 'png', ser
113
130
  cancelSignal === null || cancelSignal === void 0 ? void 0 : cancelSignal(() => {
114
131
  cleanup();
115
132
  });
133
+ if (onBrowserLog) {
134
+ page.on('console', logCallback);
135
+ }
116
136
  await (0, set_props_and_env_1.setPropsAndEnv)({
117
137
  inputProps,
118
138
  envVariables,
@@ -127,11 +147,11 @@ const innerRenderStill = async ({ composition, quality, imageFormat = 'png', ser
127
147
  });
128
148
  await (0, puppeteer_evaluate_1.puppeteerEvaluateWithCatch)({
129
149
  // eslint-disable-next-line max-params
130
- pageFunction: (id, defaultProps, durationInFrames, fps, height, width) => {
131
- window.setBundleMode({
150
+ pageFunction: (id, props, durationInFrames, fps, height, width) => {
151
+ window.remotion_setBundleMode({
132
152
  type: 'composition',
133
153
  compositionName: id,
134
- compositionDefaultProps: defaultProps,
154
+ props,
135
155
  compositionDurationInFrames: durationInFrames,
136
156
  compositionFps: fps,
137
157
  compositionHeight: height,
@@ -140,7 +160,7 @@ const innerRenderStill = async ({ composition, quality, imageFormat = 'png', ser
140
160
  },
141
161
  args: [
142
162
  composition.id,
143
- composition.defaultProps,
163
+ composition.props,
144
164
  composition.durationInFrames,
145
165
  composition.fps,
146
166
  composition.height,
@@ -149,58 +169,57 @@ const innerRenderStill = async ({ composition, quality, imageFormat = 'png', ser
149
169
  frame: null,
150
170
  page,
151
171
  });
152
- await (0, seek_to_frame_1.seekToFrame)({ frame: stillFrame, page });
153
- await (0, provide_screenshot_1.provideScreenshot)({
154
- page,
172
+ await (0, seek_to_frame_1.seekToFrame)({ frame: stillFrame, page, composition: composition.id });
173
+ const { buffer } = await (0, take_frame_and_compose_1.takeFrameAndCompose)({
174
+ frame: stillFrame,
175
+ freePage: page,
176
+ height: composition.height,
177
+ width: composition.width,
155
178
  imageFormat,
156
- quality,
157
- options: {
158
- frame: stillFrame,
159
- output,
160
- },
179
+ scale,
180
+ output,
181
+ jpegQuality,
182
+ wantsBuffer: !output,
183
+ compositor,
184
+ downloadMap,
161
185
  });
162
186
  await cleanup();
187
+ return { buffer: output ? null : buffer };
163
188
  };
164
- /**
165
- *
166
- * @description Render a still frame from a composition
167
- * @link https://www.remotion.dev/docs/renderer/render-still
168
- */
169
- const renderStill = (options) => {
170
- var _a, _b;
171
- const selectedServeUrl = (0, legacy_webpack_config_1.getServeUrlWithFallback)(options);
172
- const downloadMap = (_a = options.downloadMap) !== null && _a !== void 0 ? _a : (0, download_map_1.makeDownloadMap)();
173
- const onDownload = (_b = options.onDownload) !== null && _b !== void 0 ? _b : (() => () => undefined);
189
+ const internalRenderStill = (options) => {
190
+ const cleanup = [];
174
191
  const happyPath = new Promise((resolve, reject) => {
175
- var _a, _b, _c;
176
192
  const onError = (err) => reject(err);
177
- let close = null;
178
- (0, prepare_server_1.prepareServer)({
179
- webpackConfigOrServeUrl: selectedServeUrl,
180
- onDownload,
193
+ (0, prepare_server_1.makeOrReuseServer)(options.server, {
194
+ webpackConfigOrServeUrl: options.serveUrl,
195
+ port: options.port,
196
+ remotionRoot: (0, find_closest_package_json_1.findRemotionRoot)(),
197
+ concurrency: 1,
198
+ logLevel: options.logLevel,
199
+ indent: options.indent,
200
+ }, {
201
+ onDownload: options.onDownload,
181
202
  onError,
182
- ffmpegExecutable: (_a = options.ffmpegExecutable) !== null && _a !== void 0 ? _a : null,
183
- ffprobeExecutable: (_b = options.ffprobeExecutable) !== null && _b !== void 0 ? _b : null,
184
- port: (_c = options.port) !== null && _c !== void 0 ? _c : null,
185
- downloadMap,
186
203
  })
187
- .then(({ serveUrl, closeServer, offthreadPort }) => {
188
- close = closeServer;
204
+ .then(({ server, cleanupServer }) => {
205
+ cleanup.push(() => cleanupServer(false));
206
+ const { serveUrl, offthreadPort, compositor, sourceMap, downloadMap } = server;
189
207
  return innerRenderStill({
190
208
  ...options,
191
209
  serveUrl,
192
- onError: (err) => reject(err),
210
+ onError,
193
211
  proxyPort: offthreadPort,
212
+ compositor,
213
+ sourceMapContext: sourceMap,
214
+ downloadMap,
194
215
  });
195
216
  })
196
217
  .then((res) => resolve(res))
197
218
  .catch((err) => reject(err))
198
219
  .finally(() => {
199
- // Clean download map if it was not passed in
200
- if (!(options === null || options === void 0 ? void 0 : options.downloadMap)) {
201
- (0, download_map_1.cleanDownloadMap)(downloadMap);
202
- }
203
- return close === null || close === void 0 ? void 0 : close();
220
+ cleanup.forEach((c) => {
221
+ c();
222
+ });
204
223
  });
205
224
  });
206
225
  return Promise.race([
@@ -208,9 +227,48 @@ const renderStill = (options) => {
208
227
  new Promise((_resolve, reject) => {
209
228
  var _a;
210
229
  (_a = options.cancelSignal) === null || _a === void 0 ? void 0 : _a.call(options, () => {
211
- reject(new Error('renderStill() got cancelled'));
230
+ reject(new Error(make_cancel_signal_1.cancelErrorMessages.renderStill));
212
231
  });
213
232
  }),
214
233
  ]);
215
234
  };
235
+ exports.internalRenderStill = internalRenderStill;
236
+ /**
237
+ *
238
+ * @description Render a still frame from a composition
239
+ * @see [Documentation](https://www.remotion.dev/docs/renderer/render-still)
240
+ */
241
+ const renderStill = (options) => {
242
+ var _a;
243
+ const { composition, serveUrl, browserExecutable, cancelSignal, chromiumOptions, dumpBrowserLogs, envVariables, frame, imageFormat, inputProps, jpegQuality, onBrowserLog, onDownload, output, overwrite, port, puppeteerInstance, scale, timeoutInMilliseconds, verbose, quality, } = options;
244
+ if (typeof jpegQuality !== 'undefined' && imageFormat !== 'jpeg') {
245
+ throw new Error("You can only pass the `quality` option if `imageFormat` is 'jpeg'.");
246
+ }
247
+ if (quality) {
248
+ console.warn('Passing `quality()` to `renderStill` is deprecated. Use `jpegQuality` instead.');
249
+ }
250
+ return (0, exports.internalRenderStill)({
251
+ composition,
252
+ browserExecutable: browserExecutable !== null && browserExecutable !== void 0 ? browserExecutable : null,
253
+ cancelSignal: cancelSignal !== null && cancelSignal !== void 0 ? cancelSignal : null,
254
+ chromiumOptions: chromiumOptions !== null && chromiumOptions !== void 0 ? chromiumOptions : {},
255
+ envVariables: envVariables !== null && envVariables !== void 0 ? envVariables : {},
256
+ frame: frame !== null && frame !== void 0 ? frame : 0,
257
+ imageFormat: imageFormat !== null && imageFormat !== void 0 ? imageFormat : image_format_1.DEFAULT_STILL_IMAGE_FORMAT,
258
+ indent: false,
259
+ inputProps: inputProps !== null && inputProps !== void 0 ? inputProps : {},
260
+ jpegQuality: (_a = jpegQuality !== null && jpegQuality !== void 0 ? jpegQuality : quality) !== null && _a !== void 0 ? _a : jpeg_quality_1.DEFAULT_JPEG_QUALITY,
261
+ onBrowserLog: onBrowserLog !== null && onBrowserLog !== void 0 ? onBrowserLog : null,
262
+ onDownload: onDownload !== null && onDownload !== void 0 ? onDownload : null,
263
+ output: output !== null && output !== void 0 ? output : null,
264
+ overwrite: overwrite !== null && overwrite !== void 0 ? overwrite : overwrite_1.DEFAULT_OVERWRITE,
265
+ port: port !== null && port !== void 0 ? port : null,
266
+ puppeteerInstance: puppeteerInstance !== null && puppeteerInstance !== void 0 ? puppeteerInstance : null,
267
+ scale: scale !== null && scale !== void 0 ? scale : 1,
268
+ server: undefined,
269
+ serveUrl,
270
+ timeoutInMilliseconds: timeoutInMilliseconds !== null && timeoutInMilliseconds !== void 0 ? timeoutInMilliseconds : TimeoutSettings_1.DEFAULT_TIMEOUT,
271
+ logLevel: verbose || dumpBrowserLogs ? 'verbose' : (0, logger_1.getLogLevel)(),
272
+ });
273
+ };
216
274
  exports.renderStill = renderStill;
@@ -0,0 +1,7 @@
1
+ import type { HeadlessBrowser } from './browser/Browser';
2
+ import type { LogLevel } from './log-level';
3
+ export type BrowserReplacer = {
4
+ getBrowser: () => HeadlessBrowser;
5
+ replaceBrowser: (make: () => Promise<HeadlessBrowser>, makeNewPages: () => Promise<void>) => Promise<HeadlessBrowser>;
6
+ };
7
+ export declare const handleBrowserCrash: (instance: HeadlessBrowser, logLevel: LogLevel, indent: boolean) => BrowserReplacer;
@@ -0,0 +1,47 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.handleBrowserCrash = void 0;
4
+ const handleBrowserCrash = (instance, logLevel, indent) => {
5
+ let _instance = instance;
6
+ const waiters = [];
7
+ let replacing = false;
8
+ return {
9
+ getBrowser: () => _instance,
10
+ replaceBrowser: async (make, makeNewPages) => {
11
+ if (replacing) {
12
+ const waiter = new Promise((resolve, reject) => {
13
+ waiters.push({
14
+ resolve,
15
+ reject,
16
+ });
17
+ });
18
+ return waiter;
19
+ }
20
+ try {
21
+ replacing = true;
22
+ await _instance
23
+ .close(true, logLevel, indent)
24
+ .then(() => {
25
+ console.log('Killed previous browser and making new one');
26
+ })
27
+ .catch(() => {
28
+ // Ignore as browser crashed
29
+ });
30
+ const browser = await make();
31
+ _instance = browser;
32
+ await makeNewPages();
33
+ waiters.forEach((w) => w.resolve(browser));
34
+ console.log('Made new browser');
35
+ return browser;
36
+ }
37
+ catch (err) {
38
+ waiters.forEach((w) => w.reject(err));
39
+ throw err;
40
+ }
41
+ finally {
42
+ replacing = false;
43
+ }
44
+ },
45
+ };
46
+ };
47
+ exports.handleBrowserCrash = handleBrowserCrash;
File without changes
@@ -4,14 +4,14 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
4
4
  };
5
5
  Object.defineProperty(exports, "__esModule", { value: true });
6
6
  exports.resolveAssetSrc = void 0;
7
- const url_1 = __importDefault(require("url"));
7
+ const node_url_1 = __importDefault(require("node:url"));
8
8
  const resolveAssetSrc = (src) => {
9
9
  if (!src.startsWith('file:')) {
10
10
  return src;
11
11
  }
12
12
  const { protocol } = new URL(src);
13
13
  if (protocol === 'file:')
14
- return url_1.default.fileURLToPath(src);
14
+ return node_url_1.default.fileURLToPath(src);
15
15
  throw new TypeError(`Unexpected src ${src}`);
16
16
  };
17
17
  exports.resolveAssetSrc = resolveAssetSrc;
File without changes
File without changes
@@ -1,11 +1,15 @@
1
1
  /// <reference types="node" />
2
+ import type { ClipRegion } from 'remotion';
2
3
  import type { Page } from './browser/BrowserPage';
3
- import type { ImageFormat } from './image-format';
4
- export declare const screenshotDOMElement: ({ page, imageFormat, quality, opts, }: {
4
+ import type { StillImageFormat } from './image-format';
5
+ export declare const screenshotDOMElement: ({ page, imageFormat, jpegQuality, opts, height, width, clipRegion, }: {
5
6
  page: Page;
6
- imageFormat: ImageFormat;
7
- quality: number | undefined;
7
+ imageFormat: StillImageFormat;
8
+ jpegQuality: number | undefined;
8
9
  opts: {
9
10
  path: string | null;
10
11
  };
12
+ height: number;
13
+ width: number;
14
+ clipRegion: ClipRegion | null;
11
15
  }) => Promise<Buffer>;
@@ -3,9 +3,11 @@ 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, }) => {
6
+ const screenshotDOMElement = async ({ page, imageFormat, jpegQuality, opts, height, width, clipRegion, }) => {
7
7
  const { path } = opts;
8
- if (imageFormat === 'png') {
8
+ if (imageFormat === 'png' ||
9
+ imageFormat === 'pdf' ||
10
+ imageFormat === 'webp') {
9
11
  await (0, puppeteer_evaluate_1.puppeteerEvaluateWithCatch)({
10
12
  pageFunction: () => {
11
13
  document.body.style.background = 'transparent';
@@ -25,14 +27,23 @@ const screenshotDOMElement = async ({ page, imageFormat, quality, opts, }) => {
25
27
  page,
26
28
  });
27
29
  }
30
+ // @ts-expect-error
28
31
  if (imageFormat === 'none') {
29
32
  throw new TypeError('Tried to make a screenshot with format "none"');
30
33
  }
31
- return (0, puppeteer_screenshot_1.screenshot)(page, {
34
+ const buf = await (0, puppeteer_screenshot_1.screenshot)({
35
+ page,
32
36
  omitBackground: imageFormat === 'png',
33
37
  path: path !== null && path !== void 0 ? path : undefined,
34
38
  type: imageFormat,
35
- quality,
39
+ jpegQuality,
40
+ width,
41
+ height,
42
+ clipRegion,
36
43
  });
44
+ if (typeof buf === 'string') {
45
+ throw new TypeError('Expected a buffer');
46
+ }
47
+ return buf;
37
48
  };
38
49
  exports.screenshotDOMElement = screenshotDOMElement;
@@ -1,5 +1,14 @@
1
1
  /// <reference types="node" />
2
+ import type { ClipRegion } from 'remotion';
2
3
  import type { Page } from './browser/BrowserPage';
3
- import type { ScreenshotOptions } from './browser/ScreenshotOptions';
4
4
  import type { StillImageFormat } from './image-format';
5
- export declare const _screenshotTask: (page: Page, format: StillImageFormat, options: ScreenshotOptions) => Promise<Buffer | string>;
5
+ export declare const screenshotTask: ({ format, height, omitBackground, page, width, path, jpegQuality, clipRegion, }: {
6
+ page: Page;
7
+ format: StillImageFormat;
8
+ path?: string | undefined;
9
+ jpegQuality?: number | undefined;
10
+ omitBackground: boolean;
11
+ width: number;
12
+ height: number;
13
+ clipRegion: ClipRegion | null;
14
+ }) => Promise<Buffer | string>;
@@ -3,10 +3,10 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
3
3
  return (mod && mod.__esModule) ? mod : { "default": mod };
4
4
  };
5
5
  Object.defineProperty(exports, "__esModule", { value: true });
6
- exports._screenshotTask = void 0;
7
- const fs_1 = __importDefault(require("fs"));
6
+ exports.screenshotTask = void 0;
7
+ const node_fs_1 = __importDefault(require("node:fs"));
8
8
  const perf_1 = require("./perf");
9
- const _screenshotTask = async (page, format, options) => {
9
+ const screenshotTask = async ({ format, height, omitBackground, page, width, path, jpegQuality, clipRegion, }) => {
10
10
  var _a;
11
11
  const client = page._client();
12
12
  const target = page.target();
@@ -15,26 +15,58 @@ const _screenshotTask = async (page, format, options) => {
15
15
  targetId: target._targetId,
16
16
  });
17
17
  (0, perf_1.stopPerfMeasure)(perfTarget);
18
- const shouldSetDefaultBackground = options.omitBackground && format === 'png';
18
+ const shouldSetDefaultBackground = omitBackground;
19
19
  if (shouldSetDefaultBackground)
20
20
  await client.send('Emulation.setDefaultBackgroundColorOverride', {
21
21
  color: { r: 0, g: 0, b: 0, a: 0 },
22
22
  });
23
23
  const cap = (0, perf_1.startPerfMeasure)('capture');
24
24
  try {
25
- const result = await client.send('Page.captureScreenshot', {
26
- format,
27
- quality: options.quality,
28
- clip: undefined,
29
- captureBeyondViewport: true,
30
- });
25
+ let result;
26
+ if (format === 'pdf') {
27
+ const res = await client.send('Page.printToPDF', {
28
+ paperWidth: width / 96,
29
+ paperHeight: height / 96,
30
+ marginTop: 0,
31
+ marginBottom: 0,
32
+ marginLeft: 0,
33
+ marginRight: 0,
34
+ scale: 1,
35
+ printBackground: true,
36
+ });
37
+ result = res.value;
38
+ }
39
+ else {
40
+ const { value } = await client.send('Page.captureScreenshot', {
41
+ format,
42
+ quality: jpegQuality,
43
+ clip: clipRegion !== null && clipRegion !== 'hide'
44
+ ? {
45
+ x: clipRegion.x,
46
+ y: clipRegion.y,
47
+ height: clipRegion.height,
48
+ scale: 1,
49
+ width: clipRegion.width,
50
+ }
51
+ : {
52
+ x: 0,
53
+ y: 0,
54
+ height,
55
+ scale: 1,
56
+ width,
57
+ },
58
+ captureBeyondViewport: true,
59
+ optimizeForSpeed: true,
60
+ });
61
+ result = value;
62
+ }
31
63
  (0, perf_1.stopPerfMeasure)(cap);
32
64
  if (shouldSetDefaultBackground)
33
65
  await client.send('Emulation.setDefaultBackgroundColorOverride');
34
66
  const saveMarker = (0, perf_1.startPerfMeasure)('save');
35
67
  const buffer = Buffer.from(result.data, 'base64');
36
- if (options.path)
37
- await fs_1.default.promises.writeFile(options.path, buffer);
68
+ if (path)
69
+ await node_fs_1.default.promises.writeFile(path, buffer);
38
70
  (0, perf_1.stopPerfMeasure)(saveMarker);
39
71
  return buffer;
40
72
  }
@@ -51,4 +83,4 @@ const _screenshotTask = async (page, format, options) => {
51
83
  throw err;
52
84
  }
53
85
  };
54
- exports._screenshotTask = _screenshotTask;
86
+ exports.screenshotTask = screenshotTask;