@remotion/renderer 4.0.0-reorg.8 → 4.0.0-retry.8

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 (345) hide show
  1. package/LICENSE.md +8 -8
  2. package/dist/assets/calculate-asset-positions.d.ts +0 -0
  3. package/dist/assets/calculate-asset-positions.js +0 -0
  4. package/dist/assets/calculate-atempo.d.ts +0 -0
  5. package/dist/assets/calculate-atempo.js +0 -0
  6. package/dist/assets/convert-assets-to-file-urls.d.ts +3 -2
  7. package/dist/assets/convert-assets-to-file-urls.js +2 -2
  8. package/dist/assets/download-and-map-assets-to-file.d.ts +8 -6
  9. package/dist/assets/download-and-map-assets-to-file.js +91 -50
  10. package/dist/assets/download-file.d.ts +1 -1
  11. package/dist/assets/download-file.js +4 -2
  12. package/dist/assets/download-map.d.ts +64 -0
  13. package/dist/assets/download-map.js +73 -0
  14. package/dist/assets/ffmpeg-volume-expression.d.ts +0 -0
  15. package/dist/assets/ffmpeg-volume-expression.js +0 -0
  16. package/dist/assets/flatten-volume-array.d.ts +0 -0
  17. package/dist/assets/flatten-volume-array.js +0 -0
  18. package/dist/assets/get-audio-channels.d.ts +2 -6
  19. package/dist/assets/get-audio-channels.js +6 -7
  20. package/dist/assets/get-video-stream-duration.d.ts +3 -5
  21. package/dist/assets/get-video-stream-duration.js +39 -14
  22. package/dist/assets/read-file.d.ts +0 -0
  23. package/dist/assets/read-file.js +0 -0
  24. package/dist/assets/round-volume-to-avoid-stack-overflow.d.ts +0 -0
  25. package/dist/assets/round-volume-to-avoid-stack-overflow.js +0 -0
  26. package/dist/assets/sanitize-filename.d.ts +0 -0
  27. package/dist/assets/sanitize-filename.js +0 -0
  28. package/dist/assets/sanitize-filepath.d.ts +0 -0
  29. package/dist/assets/sanitize-filepath.js +0 -0
  30. package/dist/assets/truncate-utf8-bytes.d.ts +0 -0
  31. package/dist/assets/truncate-utf8-bytes.js +0 -0
  32. package/dist/assets/types.d.ts +0 -0
  33. package/dist/assets/types.js +0 -0
  34. package/dist/browser/Browser.d.ts +1 -0
  35. package/dist/browser/Browser.js +9 -10
  36. package/dist/browser/BrowserConnector.d.ts +0 -0
  37. package/dist/browser/BrowserConnector.js +0 -0
  38. package/dist/browser/BrowserFetcher.d.ts +0 -0
  39. package/dist/browser/BrowserFetcher.js +12 -10
  40. package/dist/browser/BrowserPage.d.ts +0 -0
  41. package/dist/browser/BrowserPage.js +0 -0
  42. package/dist/browser/BrowserRunner.d.ts +1 -4
  43. package/dist/browser/BrowserRunner.js +28 -71
  44. package/dist/browser/Connection.d.ts +0 -0
  45. package/dist/browser/Connection.js +1 -1
  46. package/dist/browser/ConsoleMessage.d.ts +0 -0
  47. package/dist/browser/ConsoleMessage.js +0 -0
  48. package/dist/browser/DOMWorld.d.ts +0 -0
  49. package/dist/browser/DOMWorld.js +0 -0
  50. package/dist/browser/Errors.d.ts +0 -0
  51. package/dist/browser/Errors.js +0 -0
  52. package/dist/browser/EvalTypes.d.ts +0 -0
  53. package/dist/browser/EvalTypes.js +0 -0
  54. package/dist/browser/EventEmitter.d.ts +0 -0
  55. package/dist/browser/EventEmitter.js +0 -0
  56. package/dist/browser/ExecutionContext.d.ts +0 -0
  57. package/dist/browser/ExecutionContext.js +0 -0
  58. package/dist/browser/FrameManager.d.ts +0 -0
  59. package/dist/browser/FrameManager.js +0 -0
  60. package/dist/browser/HTTPRequest.d.ts +0 -0
  61. package/dist/browser/HTTPRequest.js +0 -0
  62. package/dist/browser/HTTPResponse.d.ts +0 -0
  63. package/dist/browser/HTTPResponse.js +0 -0
  64. package/dist/browser/JSHandle.d.ts +0 -0
  65. package/dist/browser/JSHandle.js +0 -0
  66. package/dist/browser/LaunchOptions.d.ts +0 -4
  67. package/dist/browser/LaunchOptions.js +0 -0
  68. package/dist/browser/Launcher.d.ts +1 -1
  69. package/dist/browser/Launcher.js +5 -363
  70. package/dist/browser/LifecycleWatcher.d.ts +0 -0
  71. package/dist/browser/LifecycleWatcher.js +0 -0
  72. package/dist/browser/NetworkEventManager.d.ts +0 -0
  73. package/dist/browser/NetworkEventManager.js +0 -0
  74. package/dist/browser/NetworkManager.d.ts +0 -0
  75. package/dist/browser/NetworkManager.js +0 -0
  76. package/dist/browser/NodeWebSocketTransport.d.ts +0 -0
  77. package/dist/browser/NodeWebSocketTransport.js +1 -1
  78. package/dist/browser/Product.d.ts +0 -0
  79. package/dist/browser/Product.js +0 -0
  80. package/dist/browser/PuppeteerNode.d.ts +0 -0
  81. package/dist/browser/PuppeteerNode.js +1 -4
  82. package/dist/browser/PuppeteerViewport.d.ts +0 -0
  83. package/dist/browser/PuppeteerViewport.js +0 -0
  84. package/dist/browser/ScreenshotOptions.d.ts +0 -0
  85. package/dist/browser/ScreenshotOptions.js +0 -0
  86. package/dist/browser/Target.d.ts +0 -0
  87. package/dist/browser/Target.js +0 -0
  88. package/dist/browser/TaskQueue.d.ts +0 -0
  89. package/dist/browser/TaskQueue.js +0 -0
  90. package/dist/browser/TimeoutSettings.d.ts +0 -0
  91. package/dist/browser/TimeoutSettings.js +0 -0
  92. package/dist/browser/assert.d.ts +0 -0
  93. package/dist/browser/assert.js +0 -0
  94. package/dist/browser/create-browser-fetcher.d.ts +0 -0
  95. package/dist/browser/create-browser-fetcher.js +2 -44
  96. package/dist/browser/devtools-commands.d.ts +0 -0
  97. package/dist/browser/devtools-commands.js +0 -0
  98. package/dist/browser/devtools-types.d.ts +0 -0
  99. package/dist/browser/devtools-types.js +0 -0
  100. package/dist/browser/get-download-destination.d.ts +0 -0
  101. package/dist/browser/get-download-destination.js +0 -0
  102. package/dist/browser/mitt/index.d.ts +0 -0
  103. package/dist/browser/mitt/index.js +0 -0
  104. package/dist/browser/node.d.ts +0 -0
  105. package/dist/browser/node.js +0 -0
  106. package/dist/browser/revisions.d.ts +0 -1
  107. package/dist/browser/revisions.js +0 -1
  108. package/dist/browser/util.d.ts +0 -0
  109. package/dist/browser/util.js +0 -0
  110. package/dist/browser-executable.d.ts +0 -0
  111. package/dist/browser-executable.js +0 -0
  112. package/dist/browser-log.d.ts +0 -0
  113. package/dist/browser-log.js +0 -0
  114. package/dist/browser.d.ts +0 -0
  115. package/dist/browser.js +0 -0
  116. package/dist/calculate-ffmpeg-filters.d.ts +0 -0
  117. package/dist/calculate-ffmpeg-filters.js +0 -0
  118. package/dist/calculate-sar-dar-pixels.d.ts +0 -0
  119. package/dist/calculate-sar-dar-pixels.js +0 -0
  120. package/dist/can-use-parallel-encoding.d.ts +0 -0
  121. package/dist/can-use-parallel-encoding.js +0 -0
  122. package/dist/check-apple-silicon.d.ts +1 -0
  123. package/dist/check-apple-silicon.js +55 -0
  124. package/dist/chunk.d.ts +0 -0
  125. package/dist/chunk.js +0 -0
  126. package/dist/codec-supports-media.d.ts +1 -0
  127. package/dist/codec-supports-media.js +8 -1
  128. package/dist/codec.d.ts +0 -0
  129. package/dist/codec.js +0 -0
  130. package/dist/combine-videos.d.ts +0 -0
  131. package/dist/combine-videos.js +1 -1
  132. package/dist/compress-assets.d.ts +0 -0
  133. package/dist/compress-assets.js +0 -0
  134. package/dist/convert-number-of-gif-loops-to-ffmpeg.d.ts +0 -0
  135. package/dist/convert-number-of-gif-loops-to-ffmpeg.js +0 -0
  136. package/dist/convert-to-pcm.d.ts +0 -0
  137. package/dist/convert-to-pcm.js +0 -0
  138. package/dist/convert-to-positive-frame-index.d.ts +4 -0
  139. package/dist/convert-to-positive-frame-index.js +8 -0
  140. package/dist/create-ffmpeg-complex-filter.d.ts +2 -1
  141. package/dist/create-ffmpeg-complex-filter.js +2 -11
  142. package/dist/create-ffmpeg-merge-filter.d.ts +0 -0
  143. package/dist/create-ffmpeg-merge-filter.js +0 -0
  144. package/dist/create-silent-audio.d.ts +0 -0
  145. package/dist/create-silent-audio.js +0 -0
  146. package/dist/crf.d.ts +5 -1
  147. package/dist/crf.js +33 -6
  148. package/dist/cycle-browser-tabs.d.ts +0 -0
  149. package/dist/cycle-browser-tabs.js +0 -0
  150. package/dist/delay-render-embedded-stack.d.ts +0 -0
  151. package/dist/delay-render-embedded-stack.js +0 -0
  152. package/dist/delete-directory.d.ts +0 -0
  153. package/dist/delete-directory.js +0 -0
  154. package/dist/ensure-frames-in-order.d.ts +0 -0
  155. package/dist/ensure-frames-in-order.js +0 -0
  156. package/dist/ensure-output-directory.d.ts +0 -0
  157. package/dist/ensure-output-directory.js +0 -0
  158. package/dist/ensure-presentation-timestamp.d.ts +2 -1
  159. package/dist/ensure-presentation-timestamp.js +7 -5
  160. package/dist/error-handling/handle-javascript-exception.d.ts +0 -0
  161. package/dist/error-handling/handle-javascript-exception.js +0 -0
  162. package/dist/error-handling/symbolicate-error.d.ts +0 -0
  163. package/dist/error-handling/symbolicate-error.js +0 -0
  164. package/dist/error-handling/symbolicateable-error.d.ts +0 -0
  165. package/dist/error-handling/symbolicateable-error.js +0 -0
  166. package/dist/extract-frame-from-video.d.ts +2 -0
  167. package/dist/extract-frame-from-video.js +42 -15
  168. package/dist/ffmpeg-executable.d.ts +0 -0
  169. package/dist/ffmpeg-executable.js +0 -0
  170. package/dist/ffmpeg-filter-file.d.ts +2 -1
  171. package/dist/ffmpeg-filter-file.js +4 -6
  172. package/dist/ffmpeg-flags.d.ts +5 -2
  173. package/dist/ffmpeg-flags.js +37 -7
  174. package/dist/ffmpeg-override.d.ts +4 -0
  175. package/dist/ffmpeg-override.js +2 -0
  176. package/dist/frame-range.d.ts +0 -0
  177. package/dist/frame-range.js +0 -0
  178. package/dist/frame-to-ffmpeg-timestamp.d.ts +0 -0
  179. package/dist/frame-to-ffmpeg-timestamp.js +0 -0
  180. package/dist/get-audio-codec-name.d.ts +0 -0
  181. package/dist/get-audio-codec-name.js +0 -0
  182. package/dist/get-browser-instance.d.ts +0 -0
  183. package/dist/get-browser-instance.js +0 -0
  184. package/dist/get-codec-name.d.ts +0 -0
  185. package/dist/get-codec-name.js +0 -0
  186. package/dist/get-compositions.d.ts +5 -0
  187. package/dist/get-compositions.js +14 -6
  188. package/dist/get-concurrency.d.ts +0 -0
  189. package/dist/get-concurrency.js +0 -0
  190. package/dist/get-duration-from-frame-range.d.ts +0 -0
  191. package/dist/get-duration-from-frame-range.js +0 -0
  192. package/dist/get-extension-from-codec.d.ts +1 -1
  193. package/dist/get-extension-from-codec.js +0 -0
  194. package/dist/get-extension-of-filename.d.ts +0 -0
  195. package/dist/get-extension-of-filename.js +0 -0
  196. package/dist/get-frame-padded-index.d.ts +0 -0
  197. package/dist/get-frame-padded-index.js +0 -0
  198. package/dist/get-frame-to-render.d.ts +0 -0
  199. package/dist/get-frame-to-render.js +0 -0
  200. package/dist/get-local-browser-executable.d.ts +0 -0
  201. package/dist/get-local-browser-executable.js +1 -3
  202. package/dist/get-port.d.ts +0 -0
  203. package/dist/get-port.js +0 -0
  204. package/dist/get-prores-profile-name.d.ts +0 -0
  205. package/dist/get-prores-profile-name.js +0 -0
  206. package/dist/get-video-info.d.ts +2 -7
  207. package/dist/get-video-info.js +7 -8
  208. package/dist/get-video-threads-flag.d.ts +1 -0
  209. package/dist/get-video-threads-flag.js +18 -0
  210. package/dist/guess-extension-for-media.d.ts +1 -1
  211. package/dist/guess-extension-for-media.js +1 -1
  212. package/dist/image-format.d.ts +1 -1
  213. package/dist/image-format.js +3 -0
  214. package/dist/index.d.ts +19 -28
  215. package/dist/index.js +16 -24
  216. package/dist/is-audio-codec.d.ts +0 -0
  217. package/dist/is-audio-codec.js +0 -0
  218. package/dist/is-beyond-last-frame.d.ts +3 -2
  219. package/dist/is-beyond-last-frame.js +5 -5
  220. package/dist/is-serve-url.d.ts +0 -0
  221. package/dist/is-serve-url.js +0 -0
  222. package/dist/last-frame-from-video-cache.d.ts +3 -2
  223. package/dist/last-frame-from-video-cache.js +17 -17
  224. package/dist/legacy-webpack-config.d.ts +0 -0
  225. package/dist/legacy-webpack-config.js +0 -0
  226. package/dist/log-level.d.ts +0 -0
  227. package/dist/log-level.js +0 -0
  228. package/dist/make-cancel-signal.d.ts +0 -0
  229. package/dist/make-cancel-signal.js +0 -0
  230. package/dist/merge-audio-track.d.ts +2 -0
  231. package/dist/merge-audio-track.js +6 -3
  232. package/dist/mime-db.d.ts +0 -0
  233. package/dist/mime-db.js +0 -0
  234. package/dist/mime-types.d.ts +1 -0
  235. package/dist/mime-types.js +6 -1
  236. package/dist/normalize-serve-url.d.ts +0 -0
  237. package/dist/normalize-serve-url.js +0 -0
  238. package/dist/offthread-video-server.d.ts +3 -2
  239. package/dist/offthread-video-server.js +14 -2
  240. package/dist/open-browser.d.ts +0 -0
  241. package/dist/open-browser.js +3 -12
  242. package/dist/overwrite.d.ts +0 -0
  243. package/dist/overwrite.js +0 -0
  244. package/dist/p-limit.d.ts +0 -0
  245. package/dist/p-limit.js +0 -0
  246. package/dist/parse-browser-error-stack.d.ts +0 -0
  247. package/dist/parse-browser-error-stack.js +0 -0
  248. package/dist/parse-ffmpeg-progress.d.ts +0 -0
  249. package/dist/parse-ffmpeg-progress.js +0 -0
  250. package/dist/perf.d.ts +0 -0
  251. package/dist/perf.js +0 -0
  252. package/dist/pixel-format.d.ts +1 -1
  253. package/dist/pixel-format.js +3 -0
  254. package/dist/pool.d.ts +0 -0
  255. package/dist/pool.js +0 -0
  256. package/dist/prepare-server.d.ts +3 -2
  257. package/dist/prepare-server.js +3 -3
  258. package/dist/preprocess-audio-track.d.ts +2 -0
  259. package/dist/preprocess-audio-track.js +3 -3
  260. package/dist/prespawn-ffmpeg.d.ts +3 -0
  261. package/dist/prespawn-ffmpeg.js +15 -11
  262. package/dist/prestitcher-memory-usage.d.ts +12 -0
  263. package/dist/prestitcher-memory-usage.js +30 -0
  264. package/dist/prores-profile.d.ts +4 -1
  265. package/dist/prores-profile.js +6 -6
  266. package/dist/provide-screenshot.d.ts +0 -0
  267. package/dist/provide-screenshot.js +0 -0
  268. package/dist/puppeteer-evaluate.d.ts +0 -0
  269. package/dist/puppeteer-evaluate.js +0 -0
  270. package/dist/puppeteer-screenshot.d.ts +0 -0
  271. package/dist/puppeteer-screenshot.js +0 -0
  272. package/dist/quality.d.ts +0 -0
  273. package/dist/quality.js +0 -0
  274. package/dist/render-frames.d.ts +16 -3
  275. package/dist/render-frames.js +98 -30
  276. package/dist/render-media.d.ts +30 -4
  277. package/dist/render-media.js +123 -20
  278. package/dist/render-still.d.ts +6 -1
  279. package/dist/render-still.js +37 -11
  280. package/dist/resolve-asset-src.d.ts +0 -0
  281. package/dist/resolve-asset-src.js +0 -0
  282. package/dist/sample-rate.d.ts +0 -0
  283. package/dist/sample-rate.js +0 -0
  284. package/dist/screenshot-dom-element.d.ts +0 -0
  285. package/dist/screenshot-dom-element.js +0 -0
  286. package/dist/screenshot-task.d.ts +0 -0
  287. package/dist/screenshot-task.js +30 -15
  288. package/dist/seek-to-frame.d.ts +0 -0
  289. package/dist/seek-to-frame.js +0 -0
  290. package/dist/serve-handler/index.d.ts +0 -0
  291. package/dist/serve-handler/index.js +0 -0
  292. package/dist/serve-handler/is-path-inside.d.ts +0 -0
  293. package/dist/serve-handler/is-path-inside.js +0 -0
  294. package/dist/serve-handler/range-parser.d.ts +0 -0
  295. package/dist/serve-handler/range-parser.js +0 -0
  296. package/dist/serve-static.d.ts +2 -1
  297. package/dist/serve-static.js +14 -1
  298. package/dist/set-props-and-env.d.ts +3 -1
  299. package/dist/set-props-and-env.js +34 -8
  300. package/dist/stitch-frames-to-video.d.ts +7 -7
  301. package/dist/stitch-frames-to-video.js +68 -57
  302. package/dist/stringify-ffmpeg-filter.d.ts +0 -0
  303. package/dist/stringify-ffmpeg-filter.js +0 -0
  304. package/dist/symbolicate-stacktrace.d.ts +0 -0
  305. package/dist/symbolicate-stacktrace.js +0 -0
  306. package/dist/tmp-dir.d.ts +0 -0
  307. package/dist/tmp-dir.js +0 -0
  308. package/dist/truthy.d.ts +0 -0
  309. package/dist/truthy.js +0 -0
  310. package/dist/types.d.ts +1 -1
  311. package/dist/types.js +0 -0
  312. package/dist/validate-concurrency.d.ts +0 -0
  313. package/dist/validate-concurrency.js +0 -0
  314. package/dist/validate-even-dimensions-with-codec.d.ts +0 -0
  315. package/dist/validate-even-dimensions-with-codec.js +0 -0
  316. package/dist/validate-every-nth-frame.d.ts +2 -1
  317. package/dist/validate-every-nth-frame.js +8 -1
  318. package/dist/validate-ffmpeg-override.d.ts +2 -0
  319. package/dist/validate-ffmpeg-override.js +12 -0
  320. package/dist/validate-ffmpeg.d.ts +4 -1
  321. package/dist/validate-ffmpeg.js +23 -7
  322. package/dist/validate-frame.d.ts +0 -0
  323. package/dist/validate-frame.js +3 -3
  324. package/dist/validate-number-of-gif-loops.d.ts +2 -0
  325. package/dist/validate-number-of-gif-loops.js +24 -0
  326. package/dist/validate-opengl-renderer.d.ts +0 -0
  327. package/dist/validate-opengl-renderer.js +0 -0
  328. package/dist/validate-output-filename.d.ts +0 -0
  329. package/dist/validate-output-filename.js +0 -0
  330. package/dist/validate-puppeteer-timeout.d.ts +0 -0
  331. package/dist/validate-puppeteer-timeout.js +1 -1
  332. package/dist/validate-scale.d.ts +0 -0
  333. package/dist/validate-scale.js +0 -0
  334. package/dist/validate-videobitrate.d.ts +1 -0
  335. package/dist/validate-videobitrate.js +20 -0
  336. package/dist/wait-for-symbolication-error-to-be-done.d.ts +0 -0
  337. package/dist/wait-for-symbolication-error-to-be-done.js +0 -0
  338. package/dist/warn-about-ffmpeg-version.d.ts +5 -0
  339. package/dist/warn-about-ffmpeg-version.js +37 -0
  340. package/dist/ws/ws-types.d.ts +0 -0
  341. package/dist/ws/ws-types.js +0 -0
  342. package/package.json +7 -7
  343. package/dist/make-assets-download-dir.d.ts +0 -1
  344. package/dist/make-assets-download-dir.js +0 -13
  345. package/vitest.config.ts +0 -8
File without changes
File without changes
File without changes
File without changes
File without changes
@@ -1,4 +1,5 @@
1
1
  import type { TCompMetadata } from 'remotion';
2
+ import type { DownloadMap } from './assets/download-map';
2
3
  import type { BrowserExecutable } from './browser-executable';
3
4
  import type { BrowserLog } from './browser-log';
4
5
  import type { Browser } from './browser/Browser';
@@ -15,6 +16,10 @@ declare type GetCompositionsConfig = {
15
16
  ffmpegExecutable?: FfmpegExecutable;
16
17
  ffprobeExecutable?: FfmpegExecutable;
17
18
  port?: number | null;
19
+ /**
20
+ * @deprecated Only for Remotion internal usage
21
+ */
22
+ downloadMap?: DownloadMap;
18
23
  };
19
24
  export declare const getCompositions: (serveUrlOrWebpackUrl: string, config?: GetCompositionsConfig) => Promise<TCompMetadata[]>;
20
25
  export {};
@@ -1,12 +1,13 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.getCompositions = void 0;
4
+ const download_map_1 = require("./assets/download-map");
4
5
  const handle_javascript_exception_1 = require("./error-handling/handle-javascript-exception");
5
6
  const get_browser_instance_1 = require("./get-browser-instance");
6
- const make_assets_download_dir_1 = require("./make-assets-download-dir");
7
7
  const prepare_server_1 = require("./prepare-server");
8
8
  const puppeteer_evaluate_1 = require("./puppeteer-evaluate");
9
9
  const set_props_and_env_1 = require("./set-props-and-env");
10
+ const validate_ffmpeg_1 = require("./validate-ffmpeg");
10
11
  const validate_puppeteer_timeout_1 = require("./validate-puppeteer-timeout");
11
12
  const innerGetCompositions = async (serveUrl, page, config, proxyPort) => {
12
13
  if (config === null || config === void 0 ? void 0 : config.onBrowserLog) {
@@ -29,6 +30,8 @@ const innerGetCompositions = async (serveUrl, page, config, proxyPort) => {
29
30
  timeoutInMilliseconds: config === null || config === void 0 ? void 0 : config.timeoutInMilliseconds,
30
31
  proxyPort,
31
32
  retriesRemaining: 2,
33
+ audioEnabled: false,
34
+ videoEnabled: false,
32
35
  });
33
36
  await (0, puppeteer_evaluate_1.puppeteerEvaluateWithCatch)({
34
37
  page,
@@ -52,12 +55,13 @@ const innerGetCompositions = async (serveUrl, page, config, proxyPort) => {
52
55
  return result;
53
56
  };
54
57
  const getCompositions = async (serveUrlOrWebpackUrl, config) => {
55
- var _a, _b;
56
- const downloadDir = (0, make_assets_download_dir_1.makeAssetsDownloadTmpDir)();
58
+ var _a, _b, _c, _d;
59
+ await (0, validate_ffmpeg_1.validateFfmpeg)((_a = config === null || config === void 0 ? void 0 : config.ffmpegExecutable) !== null && _a !== void 0 ? _a : null);
60
+ const downloadMap = (_b = config === null || config === void 0 ? void 0 : config.downloadMap) !== null && _b !== void 0 ? _b : (0, download_map_1.makeDownloadMap)();
57
61
  const { page, cleanup } = await (0, get_browser_instance_1.getPageAndCleanupFn)({
58
62
  passedInInstance: config === null || config === void 0 ? void 0 : config.puppeteerInstance,
59
- browserExecutable: (_a = config === null || config === void 0 ? void 0 : config.browserExecutable) !== null && _a !== void 0 ? _a : null,
60
- chromiumOptions: (_b = config === null || config === void 0 ? void 0 : config.chromiumOptions) !== null && _b !== void 0 ? _b : {},
63
+ browserExecutable: (_c = config === null || config === void 0 ? void 0 : config.browserExecutable) !== null && _c !== void 0 ? _c : null,
64
+ chromiumOptions: (_d = config === null || config === void 0 ? void 0 : config.chromiumOptions) !== null && _d !== void 0 ? _d : {},
61
65
  });
62
66
  return new Promise((resolve, reject) => {
63
67
  var _a, _b, _c;
@@ -70,12 +74,12 @@ const getCompositions = async (serveUrlOrWebpackUrl, config) => {
70
74
  let close = null;
71
75
  (0, prepare_server_1.prepareServer)({
72
76
  webpackConfigOrServeUrl: serveUrlOrWebpackUrl,
73
- downloadDir,
74
77
  onDownload: () => undefined,
75
78
  onError,
76
79
  ffmpegExecutable: (_a = config === null || config === void 0 ? void 0 : config.ffmpegExecutable) !== null && _a !== void 0 ? _a : null,
77
80
  ffprobeExecutable: (_b = config === null || config === void 0 ? void 0 : config.ffprobeExecutable) !== null && _b !== void 0 ? _b : null,
78
81
  port: (_c = config === null || config === void 0 ? void 0 : config.port) !== null && _c !== void 0 ? _c : null,
82
+ downloadMap,
79
83
  })
80
84
  .then(({ serveUrl, closeServer, offthreadPort }) => {
81
85
  close = closeServer;
@@ -89,6 +93,10 @@ const getCompositions = async (serveUrlOrWebpackUrl, config) => {
89
93
  cleanup();
90
94
  close === null || close === void 0 ? void 0 : close();
91
95
  cleanupPageError();
96
+ // Clean download map if it was not passed in
97
+ if (!(config === null || config === void 0 ? void 0 : config.downloadMap)) {
98
+ (0, download_map_1.cleanDownloadMap)(downloadMap);
99
+ }
92
100
  });
93
101
  });
94
102
  };
File without changes
File without changes
File without changes
File without changes
@@ -1,2 +1,2 @@
1
1
  import type { Codec } from './codec';
2
- export declare const getFileExtensionFromCodec: (codec: Codec, type: 'chunk' | 'final') => "mp3" | "aac" | "wav" | "gif" | "mp4" | "mkv" | "mov" | "webm";
2
+ export declare const getFileExtensionFromCodec: (codec: Codec, type: 'chunk' | 'final') => "mp3" | "aac" | "wav" | "gif" | "webm" | "mp4" | "mov" | "mkv";
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
@@ -49,9 +49,7 @@ const getBrowserRevision = (product) => {
49
49
  path: null,
50
50
  platform: null,
51
51
  });
52
- const revisionInfo = browserFetcher.revisionInfo(product === 'firefox'
53
- ? revisions_1.PUPPETEER_REVISIONS.firefox
54
- : revisions_1.PUPPETEER_REVISIONS.chromium);
52
+ const revisionInfo = browserFetcher.revisionInfo(revisions_1.PUPPETEER_REVISIONS.chromium);
55
53
  return revisionInfo;
56
54
  };
57
55
  const getBrowserStatus = (product, browserExecutablePath) => {
File without changes
package/dist/get-port.js CHANGED
File without changes
File without changes
File without changes
@@ -1,8 +1,3 @@
1
+ import type { DownloadMap, Vp9Result } from './assets/download-map';
1
2
  import type { FfmpegExecutable } from './ffmpeg-executable';
2
- declare type Result = {
3
- specialVcodec: SpecialVCodecForTransparency;
4
- needsResize: [number, number] | null;
5
- };
6
- export declare type SpecialVCodecForTransparency = 'vp9' | 'vp8' | 'none';
7
- export declare const getVideoInfo: (src: string, ffprobeExecutable: FfmpegExecutable) => Promise<Result>;
8
- export {};
3
+ export declare const getVideoInfo: (downloadMap: DownloadMap, src: string, ffprobeExecutable: FfmpegExecutable) => Promise<Vp9Result>;
@@ -7,12 +7,11 @@ exports.getVideoInfo = void 0;
7
7
  const execa_1 = __importDefault(require("execa"));
8
8
  const calculate_sar_dar_pixels_1 = require("./calculate-sar-dar-pixels");
9
9
  const p_limit_1 = require("./p-limit");
10
- const isVp9VideoCache = {};
11
10
  const limit = (0, p_limit_1.pLimit)(1);
12
- async function getVideoInfoUnlimited(src, ffprobeExecutable) {
11
+ async function getVideoInfoUnlimited(downloadMap, src, ffprobeExecutable) {
13
12
  var _a;
14
- if (typeof isVp9VideoCache[src] !== 'undefined') {
15
- return isVp9VideoCache[src];
13
+ if (typeof downloadMap.isVp9VideoCache[src] !== 'undefined') {
14
+ return downloadMap.isVp9VideoCache[src];
16
15
  }
17
16
  const task = await (0, execa_1.default)(ffprobeExecutable !== null && ffprobeExecutable !== void 0 ? ffprobeExecutable : 'ffprobe', [src]);
18
17
  const isVp9 = task.stderr.includes('Video: vp9');
@@ -41,10 +40,10 @@ async function getVideoInfoUnlimited(src, ffprobeExecutable) {
41
40
  specialVcodec: isVp9 ? 'vp9' : isVp8 ? 'vp8' : 'none',
42
41
  needsResize,
43
42
  };
44
- isVp9VideoCache[src] = result;
45
- return isVp9VideoCache[src];
43
+ downloadMap.isVp9VideoCache[src] = result;
44
+ return downloadMap.isVp9VideoCache[src];
46
45
  }
47
- const getVideoInfo = (src, ffprobeExecutable) => {
48
- return limit(() => getVideoInfoUnlimited(src, ffprobeExecutable));
46
+ const getVideoInfo = (downloadMap, src, ffprobeExecutable) => {
47
+ return limit(() => getVideoInfoUnlimited(downloadMap, src, ffprobeExecutable));
49
48
  };
50
49
  exports.getVideoInfo = getVideoInfo;
@@ -0,0 +1 @@
1
+ export declare const getIdealVideoThreadsFlag: () => number;
@@ -0,0 +1,18 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.getIdealVideoThreadsFlag = void 0;
7
+ const os_1 = __importDefault(require("os"));
8
+ const MEMORY_USAGE_PER_THREAD = 400000000; // 400MB
9
+ const RESERVED_MEMORY = 2000000000;
10
+ const getIdealVideoThreadsFlag = () => {
11
+ const freeMemory = os_1.default.freemem();
12
+ const cpus = os_1.default.cpus().length;
13
+ const maxRecommendedBasedOnCpus = (cpus * 2) / 3;
14
+ const maxRecommendedBasedOnMemory = (freeMemory - RESERVED_MEMORY) / MEMORY_USAGE_PER_THREAD;
15
+ const maxRecommended = Math.min(maxRecommendedBasedOnCpus, maxRecommendedBasedOnMemory);
16
+ return Math.max(1, Math.round(maxRecommended));
17
+ };
18
+ exports.getIdealVideoThreadsFlag = getIdealVideoThreadsFlag;
@@ -1 +1 @@
1
- export declare const guessExtensionForVideo: (src: string) => Promise<"mp3" | "wav" | "mp4" | "webm">;
1
+ export declare const guessExtensionForVideo: (src: string) => Promise<"mp3" | "wav" | "webm" | "mp4">;
@@ -22,6 +22,6 @@ const guessExtensionForVideo = async (src) => {
22
22
  if (stderr.includes('Video: h264')) {
23
23
  return 'mp4';
24
24
  }
25
- throw new Error(`A media file ${src} which has no file extension and whose format could not be guessed. Is this a valid media file?`);
25
+ throw new Error(`The media file "${src}" has no file extension and the format could not be guessed. Tips: a) Ensure this is a valid video or audio file b) Add a file extension to the URL like ".mp4" c) Set a "Content-Type" or "Content-Disposition" header if possible.`);
26
26
  };
27
27
  exports.guessExtensionForVideo = guessExtensionForVideo;
@@ -3,5 +3,5 @@ export declare const validImageFormats: readonly ["png", "jpeg", "none"];
3
3
  export declare type ImageFormat = typeof validImageFormats[number];
4
4
  export declare type StillImageFormat = 'png' | 'jpeg';
5
5
  export declare const DEFAULT_IMAGE_FORMAT: ImageFormat;
6
- export declare const validateSelectedPixelFormatAndImageFormatCombination: (pixelFormat: PixelFormat, imageFormat: ImageFormat) => 'none' | 'valid';
6
+ export declare const validateSelectedPixelFormatAndImageFormatCombination: (pixelFormat: PixelFormat | undefined, imageFormat: ImageFormat) => 'none' | 'valid';
7
7
  export declare const validateNonNullImageFormat: (imageFormat: ImageFormat) => void;
@@ -11,6 +11,9 @@ const validateSelectedPixelFormatAndImageFormatCombination = (pixelFormat, image
11
11
  if (imageFormat === 'none') {
12
12
  return 'none';
13
13
  }
14
+ if (typeof pixelFormat === 'undefined') {
15
+ return 'valid';
16
+ }
14
17
  if (!exports.validImageFormats.includes(imageFormat)) {
15
18
  throw new TypeError(`Value ${imageFormat} is not valid as an image format.`);
16
19
  }
package/dist/index.d.ts CHANGED
@@ -4,6 +4,7 @@ import { SymbolicateableError } from './error-handling/symbolicateable-error';
4
4
  import { mimeContentType, mimeLookup } from './mime-types';
5
5
  import * as perf from './perf';
6
6
  export type { RenderMediaOnDownload } from './assets/download-and-map-assets-to-file';
7
+ export type { DownloadMap } from './assets/download-map';
7
8
  export { Browser } from './browser';
8
9
  export { BrowserExecutable } from './browser-executable';
9
10
  export { BrowserLog } from './browser-log';
@@ -13,6 +14,7 @@ export { Crf } from './crf';
13
14
  export { ErrorWithStackFrame } from './error-handling/handle-javascript-exception';
14
15
  export { FfmpegExecutable } from './ffmpeg-executable';
15
16
  export { FfmpegVersion } from './ffmpeg-flags';
17
+ export type { FfmpegOverrideFn } from './ffmpeg-override';
16
18
  export { FrameRange } from './frame-range';
17
19
  export { getCompositions } from './get-compositions';
18
20
  export { ImageFormat, StillImageFormat, validateSelectedPixelFormatAndImageFormatCombination, validImageFormats, } from './image-format';
@@ -23,35 +25,28 @@ export type { ChromiumOptions } from './open-browser';
23
25
  export { PixelFormat } from './pixel-format';
24
26
  export { ProResProfile } from './prores-profile';
25
27
  export { renderFrames } from './render-frames';
26
- export { renderMedia, RenderMediaOnProgress, RenderMediaOptions, StitchingState, } from './render-media';
27
- export { renderStill } from './render-still';
28
+ export { OnSlowestFrames, renderMedia, RenderMediaOnProgress, RenderMediaOptions, SlowFrame, StitchingState, } from './render-media';
29
+ export { renderStill, RenderStillOptions } from './render-still';
28
30
  export { StitcherOptions, stitchFramesToVideo } from './stitch-frames-to-video';
29
31
  export { SymbolicatedStackFrame } from './symbolicate-stacktrace';
30
32
  export { OnStartData, RenderFramesOutput } from './types';
31
33
  export { OpenGlRenderer } from './validate-opengl-renderer';
34
+ export { validateOutputFilename } from './validate-output-filename';
32
35
  export declare const RenderInternals: {
33
36
  ensureLocalBrowser: (browser: import("./browser").Browser, preferredBrowserExecutable: import("./browser-executable").BrowserExecutable) => Promise<void>;
34
- ffmpegHasFeature: ({ ffmpegExecutable, feature, isLambda, }: {
37
+ ffmpegHasFeature: ({ ffmpegExecutable, feature, }: {
35
38
  ffmpegExecutable: string | null;
36
39
  feature: "enable-gpl" | "enable-libx265" | "enable-libvpx";
37
- isLambda: boolean;
38
40
  }) => Promise<boolean>;
39
41
  getActualConcurrency: (userPreference: number | null) => number;
40
- getFfmpegVersion: (options: {
41
- ffmpegExecutable: string | null;
42
- }) => Promise<import("./ffmpeg-flags").FfmpegVersion>;
43
42
  validateFfmpeg: (customFfmpegBinary: string | null) => Promise<void>;
44
- binaryExists: (name: "ffmpeg" | "brew", localFFmpeg: string | null) => Promise<boolean>;
45
- getFfmpegBuildInfo: (options: {
46
- ffmpegExecutable: string | null;
47
- }) => Promise<string>;
48
43
  serveStatic: (path: string | null, options: {
49
44
  port: number | null;
50
45
  ffmpegExecutable: import("./ffmpeg-executable").FfmpegExecutable;
51
46
  ffprobeExecutable: import("./ffmpeg-executable").FfmpegExecutable;
52
- downloadDir: string;
53
47
  onDownload: import("./assets/download-and-map-assets-to-file").RenderMediaOnDownload;
54
48
  onError: (err: Error) => void;
49
+ downloadMap: import("./assets/download-map").DownloadMap;
55
50
  }) => Promise<{
56
51
  port: number;
57
52
  close: () => Promise<void>;
@@ -62,11 +57,6 @@ export declare const RenderInternals: {
62
57
  scale: number;
63
58
  codec: "h264" | "h265" | "vp8" | "vp9" | "mp3" | "aac" | "wav" | "prores" | "h264-mkv" | "gif";
64
59
  }) => void;
65
- normalizeServeUrl: (unnormalized: string) => string;
66
- spawnFfmpeg: (options: import("./stitch-frames-to-video").StitcherOptions) => Promise<{
67
- task: Promise<Buffer | null>;
68
- getLogs: () => string;
69
- }>;
70
60
  getFileExtensionFromCodec: (codec: "h264" | "h265" | "vp8" | "vp9" | "mp3" | "aac" | "wav" | "prores" | "h264-mkv" | "gif", type: "chunk" | "final") => "mp3" | "aac" | "wav" | "gif" | "mp4" | "mkv" | "mov" | "webm";
71
61
  tmpDir: (str: string) => string;
72
62
  deleteDirectory: (directory: string) => Promise<void>;
@@ -76,7 +66,7 @@ export declare const RenderInternals: {
76
66
  validatePuppeteerTimeout: (timeoutInMilliseconds: unknown) => void;
77
67
  downloadFile: ({ onProgress, url, to: toFn, }: {
78
68
  url: string;
79
- to: (contentDisposition: string | null) => string;
69
+ to: (contentDisposition: string | null, contentType: string | null) => string;
80
70
  onProgress: ((progress: {
81
71
  percent: number | null;
82
72
  downloaded: number;
@@ -86,7 +76,6 @@ export declare const RenderInternals: {
86
76
  sizeInBytes: number;
87
77
  to: string;
88
78
  }>;
89
- validateScale: (scale: unknown) => void;
90
79
  killAllBrowsers: () => Promise<void>;
91
80
  parseStack: (stack: string[]) => import("./parse-browser-error-stack").UnsymbolicatedStackFrame[];
92
81
  symbolicateError: (symbolicateableError: SymbolicateableError) => Promise<import("./error-handling/handle-javascript-exception").ErrorWithStackFrame>;
@@ -124,24 +113,26 @@ export declare const RenderInternals: {
124
113
  validateFrameRange: (frameRange: import("./frame-range").FrameRange | null) => void;
125
114
  DEFAULT_OPENGL_RENDERER: "swangle" | "angle" | "egl" | "swiftshader" | null;
126
115
  validateOpenGlRenderer: (option: "swangle" | "angle" | "egl" | "swiftshader" | null) => "swangle" | "angle" | "egl" | "swiftshader" | null;
127
- getDefaultCrfForCodec: (codec: "h264" | "h265" | "vp8" | "vp9" | "mp3" | "aac" | "wav" | "prores" | "h264-mkv" | "gif") => number;
128
- validateSelectedCrfAndCodecCombination: (crf: unknown, codec: "h264" | "h265" | "vp8" | "vp9" | "mp3" | "aac" | "wav" | "prores" | "h264-mkv" | "gif") => void;
129
116
  validImageFormats: readonly ["png", "jpeg", "none"];
130
117
  validCodecs: readonly ["h264", "h265", "vp8", "vp9", "mp3", "aac", "wav", "prores", "h264-mkv", "gif"];
131
- DEFAULT_OVERWRITE: boolean;
132
118
  DEFAULT_PIXEL_FORMAT: "yuv420p" | "yuva420p" | "yuv422p" | "yuv444p" | "yuv420p10le" | "yuv422p10le" | "yuv444p10le" | "yuva444p10le";
133
119
  validateQuality: (q: number | undefined) => void;
134
120
  validateFrame: (frame: number, durationInFrames: number) => void;
135
121
  DEFAULT_TIMEOUT: number;
136
- getValidCrfRanges: (codec: "h264" | "h265" | "vp8" | "vp9" | "mp3" | "aac" | "wav" | "prores" | "h264-mkv" | "gif") => [number, number];
137
- validateSelectedPixelFormatAndCodecCombination: (pixelFormat: "yuv420p" | "yuva420p" | "yuv422p" | "yuv444p" | "yuv420p10le" | "yuv422p10le" | "yuv444p10le" | "yuva444p10le", codec: "h264" | "h265" | "vp8" | "vp9" | "mp3" | "aac" | "wav" | "prores" | "h264-mkv" | "gif") => void;
138
- validateSelectedCodecAndProResCombination: (actualCodec: "h264" | "h265" | "vp8" | "vp9" | "mp3" | "aac" | "wav" | "prores" | "h264-mkv" | "gif", actualProResProfile: "4444-xq" | "4444" | "hq" | "standard" | "light" | "proxy" | undefined) => void;
139
- validateSelectedPixelFormatAndImageFormatCombination: (pixelFormat: "yuv420p" | "yuva420p" | "yuv422p" | "yuv444p" | "yuv420p10le" | "yuv422p10le" | "yuv444p10le" | "yuva444p10le", imageFormat: "none" | "png" | "jpeg") => "none" | "valid";
140
122
  DEFAULT_CODEC: "h264" | "h265" | "vp8" | "vp9" | "mp3" | "aac" | "wav" | "prores" | "h264-mkv" | "gif";
141
123
  isAudioCodec: (codec: "h264" | "h265" | "vp8" | "vp9" | "mp3" | "aac" | "wav" | "prores" | "h264-mkv" | "gif" | undefined) => boolean;
142
124
  logLevels: readonly ["verbose", "info", "warn", "error"];
143
- isEqualOrBelowLogLevel: (currentLevel: "verbose" | "error" | "info" | "warn", level: "verbose" | "error" | "info" | "warn") => boolean;
125
+ isEqualOrBelowLogLevel: (currentLevel: "error" | "verbose" | "info" | "warn", level: "error" | "verbose" | "info" | "warn") => boolean;
144
126
  isValidLogLevel: (level: string) => boolean;
145
- validateEveryNthFrame: (everyNthFrame: unknown) => void;
146
127
  perf: typeof perf;
128
+ makeDownloadMap: () => import("./assets/download-map").DownloadMap;
129
+ cleanDownloadMap: (downloadMap: import("./assets/download-map").DownloadMap) => Promise<void>;
130
+ convertToPositiveFrameIndex: ({ frame, durationInFrames, }: {
131
+ frame: number;
132
+ durationInFrames: number;
133
+ }) => number;
134
+ validateBitrate: (bitrate: unknown, name: string) => void;
135
+ getFfmpegVersion: (options: {
136
+ ffmpegExecutable: string | null;
137
+ }) => Promise<import("./ffmpeg-flags").FfmpegVersion>;
147
138
  };
package/dist/index.js CHANGED
@@ -26,14 +26,16 @@ 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.RenderInternals = exports.stitchFramesToVideo = exports.renderStill = exports.renderMedia = exports.renderFrames = exports.openBrowser = exports.makeCancelSignal = exports.validImageFormats = exports.validateSelectedPixelFormatAndImageFormatCombination = exports.getCompositions = exports.ErrorWithStackFrame = exports.combineVideos = void 0;
29
+ exports.RenderInternals = exports.validateOutputFilename = exports.stitchFramesToVideo = exports.renderStill = exports.renderMedia = exports.renderFrames = exports.openBrowser = exports.makeCancelSignal = exports.validImageFormats = exports.validateSelectedPixelFormatAndImageFormatCombination = exports.getCompositions = exports.ErrorWithStackFrame = exports.combineVideos = void 0;
30
30
  const execa_1 = __importDefault(require("execa"));
31
31
  const download_file_1 = require("./assets/download-file");
32
+ const download_map_1 = require("./assets/download-map");
32
33
  const browser_1 = require("./browser");
33
34
  const TimeoutSettings_1 = require("./browser/TimeoutSettings");
34
35
  const can_use_parallel_encoding_1 = require("./can-use-parallel-encoding");
36
+ const check_apple_silicon_1 = require("./check-apple-silicon");
35
37
  const codec_1 = require("./codec");
36
- const crf_1 = require("./crf");
38
+ const convert_to_positive_frame_index_1 = require("./convert-to-positive-frame-index");
37
39
  const delete_directory_1 = require("./delete-directory");
38
40
  const ensure_output_directory_1 = require("./ensure-output-directory");
39
41
  const symbolicate_error_1 = require("./error-handling/symbolicate-error");
@@ -52,26 +54,21 @@ const is_audio_codec_1 = require("./is-audio-codec");
52
54
  const is_serve_url_1 = require("./is-serve-url");
53
55
  const log_level_1 = require("./log-level");
54
56
  const mime_types_1 = require("./mime-types");
55
- const normalize_serve_url_1 = require("./normalize-serve-url");
56
57
  const open_browser_1 = require("./open-browser");
57
- const overwrite_1 = require("./overwrite");
58
58
  const parse_browser_error_stack_1 = require("./parse-browser-error-stack");
59
59
  const perf = __importStar(require("./perf"));
60
60
  const pixel_format_1 = require("./pixel-format");
61
- const prores_profile_1 = require("./prores-profile");
62
61
  const quality_1 = require("./quality");
63
62
  const is_path_inside_1 = require("./serve-handler/is-path-inside");
64
63
  const serve_static_1 = require("./serve-static");
65
- const stitch_frames_to_video_1 = require("./stitch-frames-to-video");
66
64
  const tmp_dir_1 = require("./tmp-dir");
67
65
  const validate_concurrency_1 = require("./validate-concurrency");
68
66
  const validate_even_dimensions_with_codec_1 = require("./validate-even-dimensions-with-codec");
69
- const validate_every_nth_frame_1 = require("./validate-every-nth-frame");
70
67
  const validate_ffmpeg_1 = require("./validate-ffmpeg");
71
68
  const validate_frame_1 = require("./validate-frame");
72
69
  const validate_opengl_renderer_1 = require("./validate-opengl-renderer");
73
70
  const validate_puppeteer_timeout_1 = require("./validate-puppeteer-timeout");
74
- const validate_scale_1 = require("./validate-scale");
71
+ const validate_videobitrate_1 = require("./validate-videobitrate");
75
72
  const wait_for_symbolication_error_to_be_done_1 = require("./wait-for-symbolication-error-to-be-done");
76
73
  var combine_videos_1 = require("./combine-videos");
77
74
  Object.defineProperty(exports, "combineVideos", { enumerable: true, get: function () { return combine_videos_1.combineVideos; } });
@@ -92,20 +89,17 @@ var render_media_1 = require("./render-media");
92
89
  Object.defineProperty(exports, "renderMedia", { enumerable: true, get: function () { return render_media_1.renderMedia; } });
93
90
  var render_still_1 = require("./render-still");
94
91
  Object.defineProperty(exports, "renderStill", { enumerable: true, get: function () { return render_still_1.renderStill; } });
95
- var stitch_frames_to_video_2 = require("./stitch-frames-to-video");
96
- Object.defineProperty(exports, "stitchFramesToVideo", { enumerable: true, get: function () { return stitch_frames_to_video_2.stitchFramesToVideo; } });
92
+ var stitch_frames_to_video_1 = require("./stitch-frames-to-video");
93
+ Object.defineProperty(exports, "stitchFramesToVideo", { enumerable: true, get: function () { return stitch_frames_to_video_1.stitchFramesToVideo; } });
94
+ var validate_output_filename_1 = require("./validate-output-filename");
95
+ Object.defineProperty(exports, "validateOutputFilename", { enumerable: true, get: function () { return validate_output_filename_1.validateOutputFilename; } });
97
96
  exports.RenderInternals = {
98
97
  ensureLocalBrowser: get_local_browser_executable_1.ensureLocalBrowser,
99
98
  ffmpegHasFeature: ffmpeg_flags_1.ffmpegHasFeature,
100
99
  getActualConcurrency: get_concurrency_1.getActualConcurrency,
101
- getFfmpegVersion: ffmpeg_flags_1.getFfmpegVersion,
102
100
  validateFfmpeg: validate_ffmpeg_1.validateFfmpeg,
103
- binaryExists: validate_ffmpeg_1.binaryExists,
104
- getFfmpegBuildInfo: ffmpeg_flags_1.getFfmpegBuildInfo,
105
101
  serveStatic: serve_static_1.serveStatic,
106
102
  validateEvenDimensionsWithCodec: validate_even_dimensions_with_codec_1.validateEvenDimensionsWithCodec,
107
- normalizeServeUrl: normalize_serve_url_1.normalizeServeUrl,
108
- spawnFfmpeg: stitch_frames_to_video_1.spawnFfmpeg,
109
103
  getFileExtensionFromCodec: get_extension_from_codec_1.getFileExtensionFromCodec,
110
104
  tmpDir: tmp_dir_1.tmpDir,
111
105
  deleteDirectory: delete_directory_1.deleteDirectory,
@@ -114,7 +108,6 @@ exports.RenderInternals = {
114
108
  getRealFrameRange: get_frame_to_render_1.getRealFrameRange,
115
109
  validatePuppeteerTimeout: validate_puppeteer_timeout_1.validatePuppeteerTimeout,
116
110
  downloadFile: download_file_1.downloadFile,
117
- validateScale: validate_scale_1.validateScale,
118
111
  killAllBrowsers: open_browser_1.killAllBrowsers,
119
112
  parseStack: parse_browser_error_stack_1.parseStack,
120
113
  symbolicateError: symbolicate_error_1.symbolicateError,
@@ -135,24 +128,23 @@ exports.RenderInternals = {
135
128
  validateFrameRange: frame_range_1.validateFrameRange,
136
129
  DEFAULT_OPENGL_RENDERER: validate_opengl_renderer_1.DEFAULT_OPENGL_RENDERER,
137
130
  validateOpenGlRenderer: validate_opengl_renderer_1.validateOpenGlRenderer,
138
- getDefaultCrfForCodec: crf_1.getDefaultCrfForCodec,
139
- validateSelectedCrfAndCodecCombination: crf_1.validateSelectedCrfAndCodecCombination,
140
131
  validImageFormats: image_format_1.validImageFormats,
141
132
  validCodecs: codec_1.validCodecs,
142
- DEFAULT_OVERWRITE: overwrite_1.DEFAULT_OVERWRITE,
143
133
  DEFAULT_PIXEL_FORMAT: pixel_format_1.DEFAULT_PIXEL_FORMAT,
144
134
  validateQuality: quality_1.validateQuality,
145
135
  validateFrame: validate_frame_1.validateFrame,
146
136
  DEFAULT_TIMEOUT: TimeoutSettings_1.DEFAULT_TIMEOUT,
147
- getValidCrfRanges: crf_1.getValidCrfRanges,
148
- validateSelectedPixelFormatAndCodecCombination: pixel_format_1.validateSelectedPixelFormatAndCodecCombination,
149
- validateSelectedCodecAndProResCombination: prores_profile_1.validateSelectedCodecAndProResCombination,
150
- validateSelectedPixelFormatAndImageFormatCombination: image_format_1.validateSelectedPixelFormatAndImageFormatCombination,
151
137
  DEFAULT_CODEC: codec_1.DEFAULT_CODEC,
152
138
  isAudioCodec: is_audio_codec_1.isAudioCodec,
153
139
  logLevels: log_level_1.logLevels,
154
140
  isEqualOrBelowLogLevel: log_level_1.isEqualOrBelowLogLevel,
155
141
  isValidLogLevel: log_level_1.isValidLogLevel,
156
- validateEveryNthFrame: validate_every_nth_frame_1.validateEveryNthFrame,
157
142
  perf,
143
+ makeDownloadMap: download_map_1.makeDownloadMap,
144
+ cleanDownloadMap: download_map_1.cleanDownloadMap,
145
+ convertToPositiveFrameIndex: convert_to_positive_frame_index_1.convertToPositiveFrameIndex,
146
+ validateBitrate: validate_videobitrate_1.validateBitrate,
147
+ getFfmpegVersion: ffmpeg_flags_1.getFfmpegVersion,
158
148
  };
149
+ // Warn of potential performance issues with Apple Silicon (M1 chip under Rosetta)
150
+ (0, check_apple_silicon_1.checkNodeVersionAndWarnAboutRosetta)();
File without changes
File without changes
@@ -1,2 +1,3 @@
1
- export declare const isBeyondLastFrame: (src: string, time: number) => boolean | 0;
2
- export declare const markAsBeyondLastFrame: (src: string, time: number) => void;
1
+ import type { DownloadMap } from './assets/download-map';
2
+ export declare const isBeyondLastFrame: (downloadMap: DownloadMap, src: string, time: number) => boolean | 0;
3
+ export declare const markAsBeyondLastFrame: (downloadMap: DownloadMap, src: string, time: number) => void;
@@ -1,12 +1,12 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.markAsBeyondLastFrame = exports.isBeyondLastFrame = void 0;
4
- const map = {};
5
- const isBeyondLastFrame = (src, time) => {
6
- return map[src] && time >= map[src];
4
+ const isBeyondLastFrame = (downloadMap, src, time) => {
5
+ return (downloadMap.isBeyondLastFrameMap[src] &&
6
+ time >= downloadMap.isBeyondLastFrameMap[src]);
7
7
  };
8
8
  exports.isBeyondLastFrame = isBeyondLastFrame;
9
- const markAsBeyondLastFrame = (src, time) => {
10
- map[src] = time;
9
+ const markAsBeyondLastFrame = (downloadMap, src, time) => {
10
+ downloadMap.isBeyondLastFrameMap[src] = time;
11
11
  };
12
12
  exports.markAsBeyondLastFrame = markAsBeyondLastFrame;
File without changes
File without changes
@@ -1,7 +1,7 @@
1
1
  /// <reference types="node" />
2
2
  import type { OffthreadVideoImageFormat } from 'remotion';
3
+ import type { DownloadMap, SpecialVCodecForTransparency } from './assets/download-map';
3
4
  import type { FfmpegExecutable } from './ffmpeg-executable';
4
- import type { SpecialVCodecForTransparency } from './get-video-info';
5
5
  export declare type LastFrameOptions = {
6
6
  ffmpegExecutable: FfmpegExecutable;
7
7
  ffprobeExecutable: FfmpegExecutable;
@@ -10,7 +10,8 @@ export declare type LastFrameOptions = {
10
10
  specialVCodecForTransparency: SpecialVCodecForTransparency;
11
11
  imageFormat: OffthreadVideoImageFormat;
12
12
  needsResize: [number, number] | null;
13
+ downloadMap: DownloadMap;
13
14
  };
14
15
  export declare const setLastFrameInCache: (options: LastFrameOptions, data: Buffer) => void;
15
16
  export declare const getLastFrameFromCache: (options: LastFrameOptions) => Buffer | null;
16
- export declare const clearLastFileCache: () => void;
17
+ export declare const clearLastFileCache: (downloadMap: DownloadMap) => void;
@@ -2,7 +2,6 @@
2
2
  // OffthreadVideo requires sometimes that the last frame of a video gets extracted, however, this can be slow. We allocate a cache for it but that can be garbage collected
3
3
  Object.defineProperty(exports, "__esModule", { value: true });
4
4
  exports.clearLastFileCache = exports.getLastFrameFromCache = exports.setLastFrameInCache = void 0;
5
- let map = {};
6
5
  const MAX_CACHE_SIZE = 50 * 1024 * 1024; // 50MB
7
6
  let bufferSize = 0;
8
7
  const makeLastFrameCacheKey = (options) => {
@@ -11,45 +10,46 @@ const makeLastFrameCacheKey = (options) => {
11
10
  options.offset,
12
11
  options.src,
13
12
  options.imageFormat,
13
+ options.downloadMap.id,
14
14
  ].join('-');
15
15
  };
16
16
  const setLastFrameInCache = (options, data) => {
17
17
  const key = makeLastFrameCacheKey(options);
18
- if (map[key]) {
19
- bufferSize -= map[key].data.byteLength;
18
+ if (options.downloadMap.lastFrameMap[key]) {
19
+ bufferSize -= options.downloadMap.lastFrameMap[key].data.byteLength;
20
20
  }
21
- map[key] = { data, lastAccessed: Date.now() };
21
+ options.downloadMap.lastFrameMap[key] = { data, lastAccessed: Date.now() };
22
22
  bufferSize += data.byteLength;
23
- ensureMaxSize();
23
+ ensureMaxSize(options.downloadMap);
24
24
  };
25
25
  exports.setLastFrameInCache = setLastFrameInCache;
26
26
  const getLastFrameFromCache = (options) => {
27
27
  var _a;
28
28
  const key = makeLastFrameCacheKey(options);
29
- if (!map[key]) {
29
+ if (!options.downloadMap.lastFrameMap[key]) {
30
30
  return null;
31
31
  }
32
- map[key].lastAccessed = Date.now();
33
- return (_a = map[key].data) !== null && _a !== void 0 ? _a : null;
32
+ options.downloadMap.lastFrameMap[key].lastAccessed = Date.now();
33
+ return (_a = options.downloadMap.lastFrameMap[key].data) !== null && _a !== void 0 ? _a : null;
34
34
  };
35
35
  exports.getLastFrameFromCache = getLastFrameFromCache;
36
- const removedLastFrameFromCache = (key) => {
37
- if (!map[key]) {
36
+ const removedLastFrameFromCache = (key, downloadMap) => {
37
+ if (!downloadMap.lastFrameMap[key]) {
38
38
  return;
39
39
  }
40
- bufferSize -= map[key].data.byteLength;
41
- delete map[key];
40
+ bufferSize -= downloadMap.lastFrameMap[key].data.byteLength;
41
+ delete downloadMap.lastFrameMap[key];
42
42
  };
43
- const ensureMaxSize = () => {
43
+ const ensureMaxSize = (downloadMap) => {
44
44
  // eslint-disable-next-line no-unmodified-loop-condition
45
45
  while (bufferSize > MAX_CACHE_SIZE) {
46
- const earliest = Object.entries(map).sort((a, b) => {
46
+ const earliest = Object.entries(downloadMap.lastFrameMap).sort((a, b) => {
47
47
  return a[1].lastAccessed - b[1].lastAccessed;
48
48
  })[0];
49
- removedLastFrameFromCache(earliest[0]);
49
+ removedLastFrameFromCache(earliest[0], downloadMap);
50
50
  }
51
51
  };
52
- const clearLastFileCache = () => {
53
- map = {};
52
+ const clearLastFileCache = (downloadMap) => {
53
+ downloadMap.lastFrameMap = {};
54
54
  };
55
55
  exports.clearLastFileCache = clearLastFileCache;
File without changes
File without changes
File without changes