@remotion/renderer 3.1.6 → 3.1.10

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 (295) hide show
  1. package/dist/add-silent-audio-if-necessary.d.ts +8 -0
  2. package/dist/add-silent-audio-if-necessary.d.ts.map +1 -0
  3. package/dist/add-silent-audio-if-necessary.js +51 -0
  4. package/dist/add-silent-audio-if-necessary.js.map +1 -0
  5. package/dist/assets/asset-is-used-at-time.d.ts +3 -0
  6. package/dist/assets/asset-is-used-at-time.d.ts.map +1 -0
  7. package/dist/assets/asset-is-used-at-time.js +8 -0
  8. package/dist/assets/asset-is-used-at-time.js.map +1 -0
  9. package/dist/assets/calculate-asset-positions.d.ts.map +1 -0
  10. package/dist/assets/calculate-asset-positions.js.map +1 -0
  11. package/dist/assets/calculate-atempo.d.ts.map +1 -0
  12. package/dist/assets/calculate-atempo.js.map +1 -0
  13. package/dist/assets/convert-assets-to-file-urls.d.ts +3 -2
  14. package/dist/assets/convert-assets-to-file-urls.d.ts.map +1 -0
  15. package/dist/assets/convert-assets-to-file-urls.js +2 -2
  16. package/dist/assets/convert-assets-to-file-urls.js.map +1 -0
  17. package/dist/assets/download-and-map-assets-to-file.d.ts +6 -5
  18. package/dist/assets/download-and-map-assets-to-file.d.ts.map +1 -0
  19. package/dist/assets/download-and-map-assets-to-file.js +46 -47
  20. package/dist/assets/download-and-map-assets-to-file.js.map +1 -0
  21. package/dist/assets/download-file.d.ts.map +1 -0
  22. package/dist/assets/download-file.js.map +1 -0
  23. package/dist/assets/download-map.d.ts +64 -0
  24. package/dist/assets/download-map.js +73 -0
  25. package/dist/assets/ffmpeg-volume-expression.d.ts.map +1 -0
  26. package/dist/assets/ffmpeg-volume-expression.js.map +1 -0
  27. package/dist/assets/flatten-volume-array.d.ts.map +1 -0
  28. package/dist/assets/flatten-volume-array.js.map +1 -0
  29. package/dist/assets/get-asset-audio-details.d.ts +5 -0
  30. package/dist/assets/get-asset-audio-details.d.ts.map +1 -0
  31. package/dist/assets/get-asset-audio-details.js +21 -0
  32. package/dist/assets/get-asset-audio-details.js.map +1 -0
  33. package/dist/assets/get-audio-channels.d.ts +3 -7
  34. package/dist/assets/get-audio-channels.d.ts.map +1 -0
  35. package/dist/assets/get-audio-channels.js +6 -7
  36. package/dist/assets/get-audio-channels.js.map +1 -0
  37. package/dist/assets/get-simulatenous-assets.d.ts +3 -0
  38. package/dist/assets/get-simulatenous-assets.d.ts.map +1 -0
  39. package/dist/assets/get-simulatenous-assets.js +14 -0
  40. package/dist/assets/get-simulatenous-assets.js.map +1 -0
  41. package/dist/assets/get-video-stream-duration.d.ts +3 -6
  42. package/dist/assets/get-video-stream-duration.js +9 -8
  43. package/dist/assets/read-file.d.ts.map +1 -0
  44. package/dist/assets/read-file.js.map +1 -0
  45. package/dist/assets/round-volume-to-avoid-stack-overflow.d.ts.map +1 -0
  46. package/dist/assets/round-volume-to-avoid-stack-overflow.js.map +1 -0
  47. package/dist/assets/sanitize-filename.d.ts.map +1 -0
  48. package/dist/assets/sanitize-filename.js.map +1 -0
  49. package/dist/assets/sanitize-filepath.d.ts.map +1 -0
  50. package/dist/assets/sanitize-filepath.js.map +1 -0
  51. package/dist/assets/split-assets-into-segments.d.ts +6 -0
  52. package/dist/assets/split-assets-into-segments.d.ts.map +1 -0
  53. package/dist/assets/split-assets-into-segments.js +89 -0
  54. package/dist/assets/split-assets-into-segments.js.map +1 -0
  55. package/dist/assets/truncate-utf8-bytes.d.ts.map +1 -0
  56. package/dist/assets/truncate-utf8-bytes.js.map +1 -0
  57. package/dist/assets/types.d.ts.map +1 -0
  58. package/dist/assets/types.js.map +1 -0
  59. package/dist/assets-to-ffmpeg-inputs.d.ts +7 -0
  60. package/dist/assets-to-ffmpeg-inputs.d.ts.map +1 -0
  61. package/dist/assets-to-ffmpeg-inputs.js +15 -0
  62. package/dist/assets-to-ffmpeg-inputs.js.map +1 -0
  63. package/dist/browser/TimeoutSettings.d.ts +1 -0
  64. package/dist/browser/TimeoutSettings.js +4 -4
  65. package/dist/browser-executable.d.ts +1 -0
  66. package/dist/browser-executable.js +2 -0
  67. package/dist/browser-log.d.ts.map +1 -0
  68. package/dist/browser-log.js.map +1 -0
  69. package/dist/browser.d.ts +2 -0
  70. package/dist/browser.js +4 -0
  71. package/dist/calculate-ffmpeg-filters.d.ts.map +1 -0
  72. package/dist/calculate-ffmpeg-filters.js.map +1 -0
  73. package/dist/can-use-parallel-encoding.d.ts +1 -1
  74. package/dist/can-use-parallel-encoding.d.ts.map +1 -0
  75. package/dist/can-use-parallel-encoding.js +2 -2
  76. package/dist/can-use-parallel-encoding.js.map +1 -0
  77. package/dist/codec-supports-media.d.ts +1 -1
  78. package/dist/codec.d.ts +4 -0
  79. package/dist/codec.js +16 -0
  80. package/dist/combine-videos.d.ts +1 -1
  81. package/dist/combine-videos.d.ts.map +1 -0
  82. package/dist/combine-videos.js +7 -6
  83. package/dist/combine-videos.js.map +1 -0
  84. package/dist/compress-assets.d.ts +7 -0
  85. package/dist/compress-assets.js +25 -0
  86. package/dist/convert-to-pcm.d.ts +1 -1
  87. package/dist/create-ffmpeg-complex-filter.d.ts +6 -2
  88. package/dist/create-ffmpeg-complex-filter.d.ts.map +1 -0
  89. package/dist/create-ffmpeg-complex-filter.js +2 -11
  90. package/dist/create-ffmpeg-complex-filter.js.map +1 -0
  91. package/dist/create-ffmpeg-merge-filter.js +3 -3
  92. package/dist/create-silent-audio.d.ts +1 -1
  93. package/dist/crf.d.ts +5 -0
  94. package/dist/crf.js +64 -0
  95. package/dist/cycle-browser-tabs.d.ts.map +1 -0
  96. package/dist/cycle-browser-tabs.js.map +1 -0
  97. package/dist/delay-render-embedded-stack.d.ts.map +1 -0
  98. package/dist/delay-render-embedded-stack.js.map +1 -0
  99. package/dist/delete-directory.d.ts.map +1 -0
  100. package/dist/delete-directory.js.map +1 -0
  101. package/dist/ensure-frames-in-order.d.ts.map +1 -0
  102. package/dist/ensure-frames-in-order.js.map +1 -0
  103. package/dist/ensure-output-directory.d.ts.map +1 -0
  104. package/dist/ensure-output-directory.js.map +1 -0
  105. package/dist/ensure-presentation-timestamp.d.ts +2 -1
  106. package/dist/ensure-presentation-timestamp.js +9 -7
  107. package/dist/error-handling/handle-javascript-exception.d.ts.map +1 -0
  108. package/dist/error-handling/handle-javascript-exception.js.map +1 -0
  109. package/dist/error-handling/symbolicate-error.d.ts.map +1 -0
  110. package/dist/error-handling/symbolicate-error.js.map +1 -0
  111. package/dist/error-handling/symbolicateable-error.d.ts.map +1 -0
  112. package/dist/error-handling/symbolicateable-error.js.map +1 -0
  113. package/dist/extract-frame-from-video.d.ts +4 -1
  114. package/dist/extract-frame-from-video.js +21 -16
  115. package/dist/ffmpeg-executable.d.ts +1 -0
  116. package/dist/ffmpeg-executable.js +2 -0
  117. package/dist/ffmpeg-filter-file.d.ts +2 -1
  118. package/dist/ffmpeg-filter-file.js +4 -6
  119. package/dist/ffmpeg-flags.d.ts.map +1 -0
  120. package/dist/ffmpeg-flags.js.map +1 -0
  121. package/dist/frame-range.d.ts +2 -0
  122. package/dist/frame-range.js +49 -0
  123. package/dist/get-audio-codec-name.d.ts +1 -1
  124. package/dist/get-audio-codec-name.d.ts.map +1 -0
  125. package/dist/get-audio-codec-name.js +2 -2
  126. package/dist/get-audio-codec-name.js.map +1 -0
  127. package/dist/get-browser-instance.d.ts +1 -1
  128. package/dist/get-browser-instance.d.ts.map +1 -0
  129. package/dist/get-browser-instance.js +2 -2
  130. package/dist/get-browser-instance.js.map +1 -0
  131. package/dist/get-codec-name.d.ts +1 -1
  132. package/dist/get-codec-name.d.ts.map +1 -0
  133. package/dist/get-codec-name.js +2 -2
  134. package/dist/get-codec-name.js.map +1 -0
  135. package/dist/get-compositions.d.ts +8 -1
  136. package/dist/get-compositions.d.ts.map +1 -0
  137. package/dist/get-compositions.js +10 -6
  138. package/dist/get-compositions.js.map +1 -0
  139. package/dist/get-concurrency.d.ts.map +1 -0
  140. package/dist/get-concurrency.js.map +1 -0
  141. package/dist/get-extension-from-codec.d.ts +1 -1
  142. package/dist/get-extension-from-codec.d.ts.map +1 -0
  143. package/dist/get-extension-from-codec.js.map +1 -0
  144. package/dist/get-frame-to-render.d.ts +1 -1
  145. package/dist/get-frame-to-render.d.ts.map +1 -0
  146. package/dist/get-frame-to-render.js.map +1 -0
  147. package/dist/get-local-browser-executable.d.ts +2 -1
  148. package/dist/get-local-browser-executable.d.ts.map +1 -0
  149. package/dist/get-local-browser-executable.js.map +1 -0
  150. package/dist/get-port.d.ts.map +1 -0
  151. package/dist/get-port.js.map +1 -0
  152. package/dist/get-prores-profile-name.d.ts +2 -1
  153. package/dist/get-prores-profile-name.d.ts.map +1 -0
  154. package/dist/get-prores-profile-name.js.map +1 -0
  155. package/dist/get-video-info.d.ts +3 -8
  156. package/dist/get-video-info.js +7 -8
  157. package/dist/get-video-threads-flag.d.ts +1 -0
  158. package/dist/get-video-threads-flag.js +18 -0
  159. package/dist/image-format.d.ts +6 -1
  160. package/dist/image-format.d.ts.map +1 -0
  161. package/dist/image-format.js +25 -1
  162. package/dist/image-format.js.map +1 -0
  163. package/dist/index.d.ts +48 -9
  164. package/dist/index.d.ts.map +1 -0
  165. package/dist/index.js +71 -1
  166. package/dist/index.js.map +1 -0
  167. package/dist/is-audio-codec.d.ts +2 -0
  168. package/dist/is-audio-codec.js +7 -0
  169. package/dist/is-beyond-last-frame.d.ts +3 -2
  170. package/dist/is-beyond-last-frame.js +5 -5
  171. package/dist/is-serve-url.d.ts.map +1 -0
  172. package/dist/is-serve-url.js.map +1 -0
  173. package/dist/last-frame-from-video-cache.d.ts +5 -4
  174. package/dist/last-frame-from-video-cache.js +17 -17
  175. package/dist/legacy-webpack-config.d.ts.map +1 -0
  176. package/dist/legacy-webpack-config.js.map +1 -0
  177. package/dist/log-level.d.ts +4 -0
  178. package/dist/log-level.js +15 -0
  179. package/dist/make-assets-download-dir.d.ts.map +1 -0
  180. package/dist/make-assets-download-dir.js.map +1 -0
  181. package/dist/merge-audio-track.d.ts +3 -1
  182. package/dist/merge-audio-track.js +6 -4
  183. package/dist/normalize-serve-url.d.ts.map +1 -0
  184. package/dist/normalize-serve-url.js.map +1 -0
  185. package/dist/offthread-video-server.d.ts +5 -3
  186. package/dist/offthread-video-server.js +3 -2
  187. package/dist/open-browser.d.ts +1 -1
  188. package/dist/open-browser.d.ts.map +1 -0
  189. package/dist/open-browser.js +6 -5
  190. package/dist/open-browser.js.map +1 -0
  191. package/dist/overwrite.d.ts +1 -0
  192. package/dist/overwrite.js +4 -0
  193. package/dist/parse-browser-error-stack.d.ts.map +1 -0
  194. package/dist/parse-browser-error-stack.js.map +1 -0
  195. package/dist/parse-ffmpeg-progress.d.ts.map +1 -0
  196. package/dist/parse-ffmpeg-progress.js.map +1 -0
  197. package/dist/perf.d.ts +5 -0
  198. package/dist/perf.js +35 -0
  199. package/dist/pixel-format.d.ts +5 -0
  200. package/dist/pixel-format.js +26 -0
  201. package/dist/pool.d.ts.map +1 -0
  202. package/dist/pool.js.map +1 -0
  203. package/dist/prepare-server.d.ts +4 -3
  204. package/dist/prepare-server.d.ts.map +1 -0
  205. package/dist/prepare-server.js +3 -3
  206. package/dist/prepare-server.js.map +1 -0
  207. package/dist/preprocess-audio-track.d.ts +3 -1
  208. package/dist/preprocess-audio-track.js +3 -3
  209. package/dist/prespawn-ffmpeg.d.ts +5 -1
  210. package/dist/prespawn-ffmpeg.js +9 -6
  211. package/dist/prestitcher-memory-usage.d.ts +12 -0
  212. package/dist/prestitcher-memory-usage.js +30 -0
  213. package/dist/prores-profile.d.ts +5 -0
  214. package/dist/prores-profile.js +23 -0
  215. package/dist/provide-screenshot.d.ts +1 -1
  216. package/dist/provide-screenshot.d.ts.map +1 -0
  217. package/dist/provide-screenshot.js.map +1 -0
  218. package/dist/puppeteer-evaluate.d.ts.map +1 -0
  219. package/dist/puppeteer-evaluate.js.map +1 -0
  220. package/dist/puppeteer-screenshot.d.ts.map +1 -0
  221. package/dist/puppeteer-screenshot.js.map +1 -0
  222. package/dist/quality.d.ts +1 -0
  223. package/dist/quality.js +21 -0
  224. package/dist/render-frames.d.ts +10 -1
  225. package/dist/render-frames.js +22 -16
  226. package/dist/render-media.d.ts +13 -2
  227. package/dist/render-media.d.ts.map +1 -0
  228. package/dist/render-media.js +40 -14
  229. package/dist/render-media.js.map +1 -0
  230. package/dist/render-still.d.ts +9 -1
  231. package/dist/render-still.d.ts.map +1 -0
  232. package/dist/render-still.js +21 -11
  233. package/dist/render-still.js.map +1 -0
  234. package/dist/render.d.ts +45 -0
  235. package/dist/render.d.ts.map +1 -0
  236. package/dist/render.js +245 -0
  237. package/dist/render.js.map +1 -0
  238. package/dist/resolve-asset-src.d.ts.map +1 -0
  239. package/dist/resolve-asset-src.js.map +1 -0
  240. package/dist/sample-rate.d.ts.map +1 -0
  241. package/dist/sample-rate.js.map +1 -0
  242. package/dist/screenshot-dom-element.d.ts +1 -1
  243. package/dist/screenshot-dom-element.d.ts.map +1 -0
  244. package/dist/screenshot-dom-element.js.map +1 -0
  245. package/dist/screenshot-task.d.ts +1 -2
  246. package/dist/screenshot-task.d.ts.map +1 -0
  247. package/dist/screenshot-task.js +34 -19
  248. package/dist/screenshot-task.js.map +1 -0
  249. package/dist/seek-to-frame.d.ts.map +1 -0
  250. package/dist/seek-to-frame.js.map +1 -0
  251. package/dist/serve-static.d.ts +3 -2
  252. package/dist/serve-static.d.ts.map +1 -0
  253. package/dist/serve-static.js +3 -4
  254. package/dist/serve-static.js.map +1 -0
  255. package/dist/set-props-and-env.d.ts.map +1 -0
  256. package/dist/set-props-and-env.js +2 -2
  257. package/dist/set-props-and-env.js.map +1 -0
  258. package/dist/stitch-frames-to-video.d.ts +6 -1
  259. package/dist/stitch-frames-to-video.js +30 -43
  260. package/dist/stitcher.d.ts +32 -0
  261. package/dist/stitcher.d.ts.map +1 -0
  262. package/dist/stitcher.js +204 -0
  263. package/dist/stitcher.js.map +1 -0
  264. package/dist/stringify-ffmpeg-filter.d.ts.map +1 -0
  265. package/dist/stringify-ffmpeg-filter.js +2 -2
  266. package/dist/stringify-ffmpeg-filter.js.map +1 -0
  267. package/dist/symbolicate-stacktrace.d.ts.map +1 -0
  268. package/dist/symbolicate-stacktrace.js +3 -3
  269. package/dist/symbolicate-stacktrace.js.map +1 -0
  270. package/dist/tmp-dir.d.ts.map +1 -0
  271. package/dist/tmp-dir.js.map +1 -0
  272. package/dist/truthy.d.ts +3 -0
  273. package/dist/truthy.js +7 -0
  274. package/dist/types.d.ts +1 -1
  275. package/dist/types.d.ts.map +1 -0
  276. package/dist/types.js.map +1 -0
  277. package/dist/validate-even-dimensions-with-codec.d.ts +1 -1
  278. package/dist/validate-even-dimensions-with-codec.d.ts.map +1 -0
  279. package/dist/validate-even-dimensions-with-codec.js +2 -2
  280. package/dist/validate-even-dimensions-with-codec.js.map +1 -0
  281. package/dist/validate-every-nth-frame.d.ts +1 -0
  282. package/dist/validate-every-nth-frame.js +21 -0
  283. package/dist/validate-ffmpeg.d.ts.map +1 -0
  284. package/dist/validate-ffmpeg.js +2 -3
  285. package/dist/validate-ffmpeg.js.map +1 -0
  286. package/dist/validate-frame.d.ts +1 -0
  287. package/dist/validate-frame.js +24 -0
  288. package/dist/validate-opengl-renderer.d.ts +5 -0
  289. package/dist/validate-opengl-renderer.js +15 -0
  290. package/dist/validate-output-filename.d.ts +1 -1
  291. package/dist/validate-puppeteer-timeout.d.ts.map +1 -0
  292. package/dist/validate-puppeteer-timeout.js.map +1 -0
  293. package/dist/validate-scale.d.ts.map +1 -0
  294. package/dist/validate-scale.js.map +1 -0
  295. package/package.json +3 -3
@@ -0,0 +1,23 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.validateSelectedCodecAndProResCombination = void 0;
4
+ const proResProfileOptions = [
5
+ '4444-xq',
6
+ '4444',
7
+ 'hq',
8
+ 'standard',
9
+ 'light',
10
+ 'proxy',
11
+ ];
12
+ const validateSelectedCodecAndProResCombination = (actualCodec, actualProResProfile) => {
13
+ if (typeof actualProResProfile !== 'undefined' && actualCodec !== 'prores') {
14
+ throw new TypeError('You have set a ProRes profile but the codec is not "prores". Set the codec to "prores" or remove the ProRes profile.');
15
+ }
16
+ if (actualProResProfile !== undefined &&
17
+ !proResProfileOptions.includes(actualProResProfile)) {
18
+ throw new TypeError(`The ProRes profile "${actualProResProfile}" is not valid. Valid options are ${proResProfileOptions
19
+ .map((p) => `"${p}"`)
20
+ .join(', ')}`);
21
+ }
22
+ };
23
+ exports.validateSelectedCodecAndProResCombination = validateSelectedCodecAndProResCombination;
@@ -1,6 +1,6 @@
1
1
  /// <reference types="node" />
2
- import type { ImageFormat } from 'remotion';
3
2
  import type { Page } from './browser/BrowserPage';
3
+ import type { ImageFormat } from './image-format';
4
4
  export declare const provideScreenshot: ({ page, imageFormat, options, quality, }: {
5
5
  page: Page;
6
6
  imageFormat: ImageFormat;
@@ -0,0 +1 @@
1
+ {"version":3,"file":"provide-screenshot.d.ts","sourceRoot":"","sources":["../src/provide-screenshot.ts"],"names":[],"mappings":";AAAA,OAAO,SAAS,MAAM,gBAAgB,CAAC;AACvC,OAAO,EAAC,WAAW,EAAC,MAAM,UAAU,CAAC;AAGrC,eAAO,MAAM,iBAAiB;UAMvB,UAAU,IAAI;iBACP,WAAW;aACf,MAAM,GAAG,SAAS;aAClB;QACR,KAAK,EAAE,MAAM,CAAC;QACd,MAAM,CAAC,EAAE,MAAM,CAAC;KAChB;MACE,QAAQ,MAAM,CAUjB,CAAC"}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"provide-screenshot.js","sourceRoot":"","sources":["../src/provide-screenshot.ts"],"names":[],"mappings":";;;AAEA,qEAA8D;AAEvD,MAAM,iBAAiB,GAAG,KAAK,EAAE,EACvC,IAAI,EACJ,WAAW,EACX,OAAO,EACP,OAAO,GASP,EAAmB,EAAE;IACrB,OAAO,IAAA,6CAAoB,EAAC;QAC3B,IAAI;QACJ,IAAI,EAAE;YACL,IAAI,EAAE,OAAO,CAAC,MAAM;YACpB,QAAQ,EAAE,kBAAkB;SAC5B;QACD,WAAW;QACX,OAAO;KACP,CAAC,CAAC;AACJ,CAAC,CAAC;AAvBW,QAAA,iBAAiB,qBAuB5B"}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"puppeteer-evaluate.d.ts","sourceRoot":"","sources":["../src/puppeteer-evaluate.ts"],"names":[],"mappings":"AACA,OAAO,EAAuB,IAAI,EAAW,MAAM,gBAAgB,CAAC;AAIpE,eAAO,MAAM,qBAAqB,oCAAoC,CAAC;AA+BvE,wBAAsB,0BAA0B,CAAC,UAAU,EAAE,EAC5D,IAAI,EACJ,YAAY,EACZ,KAAK,EACL,IAAI,GACJ,EAAE;IACF,IAAI,EAAE,IAAI,CAAC;IACX,YAAY,EAAE,QAAQ,GAAG,MAAM,CAAC;IAChC,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,IAAI,EAAE,OAAO,EAAE,CAAC;CAChB,GAAG,OAAO,CAAC,UAAU,CAAC,CAsGtB"}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"puppeteer-evaluate.js","sourceRoot":"","sources":["../src/puppeteer-evaluate.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"puppeteer-screenshot.d.ts","sourceRoot":"","sources":["../src/puppeteer-screenshot.ts"],"names":[],"mappings":";AACA,OAAO,EAAC,IAAI,EAAE,iBAAiB,EAAC,MAAM,gBAAgB,CAAC;AAIvD,eAAO,MAAM,UAAU,SAChB,IAAI,YACD,iBAAiB,KACxB,QAAQ,MAAM,GAAG,MAAM,GAAG,IAAI,CAyFhC,CAAC"}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"puppeteer-screenshot.js","sourceRoot":"","sources":["../src/puppeteer-screenshot.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1 @@
1
+ export declare const validateQuality: (q: number | undefined) => void;
@@ -0,0 +1,21 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.validateQuality = void 0;
4
+ const validateQuality = (q) => {
5
+ if (typeof q !== 'undefined' && typeof q !== 'number') {
6
+ throw new Error(`Quality option must be a number or undefined. Got ${typeof q} (${JSON.stringify(q)})`);
7
+ }
8
+ if (typeof q === 'undefined') {
9
+ return;
10
+ }
11
+ if (!Number.isFinite(q)) {
12
+ throw new RangeError(`Quality must be a finite number, but is ${q}`);
13
+ }
14
+ if (Number.isNaN(q)) {
15
+ throw new RangeError(`Quality is NaN, but must be a real number`);
16
+ }
17
+ if (q > 100 || q < 0) {
18
+ throw new RangeError('Quality option must be between 0 and 100.');
19
+ }
20
+ };
21
+ exports.validateQuality = validateQuality;
@@ -1,8 +1,13 @@
1
1
  /// <reference types="node" />
2
- import type { BrowserExecutable, FfmpegExecutable, FrameRange, ImageFormat, SmallTCompMetadata } from 'remotion';
2
+ import type { SmallTCompMetadata } from 'remotion';
3
3
  import type { RenderMediaOnDownload } from './assets/download-and-map-assets-to-file';
4
+ import type { DownloadMap } from './assets/download-map';
5
+ import type { BrowserExecutable } from './browser-executable';
4
6
  import type { BrowserLog } from './browser-log';
5
7
  import type { Browser } from './browser/Browser';
8
+ import type { FfmpegExecutable } from './ffmpeg-executable';
9
+ import type { FrameRange } from './frame-range';
10
+ import type { ImageFormat } from './image-format';
6
11
  import type { ServeUrlOrWebpackBundle } from './legacy-webpack-config';
7
12
  import type { CancelSignal } from './make-cancel-signal';
8
13
  import type { ChromiumOptions } from './open-browser';
@@ -39,6 +44,10 @@ declare type RenderFramesOptions = {
39
44
  ffprobeExecutable?: FfmpegExecutable;
40
45
  port?: number | null;
41
46
  cancelSignal?: CancelSignal;
47
+ /**
48
+ * @deprecated Only for Remotion internal usage
49
+ */
50
+ downloadMap?: DownloadMap;
42
51
  } & ConfigOrComposition & ServeUrlOrWebpackBundle;
43
52
  export declare const renderFrames: (options: RenderFramesOptions) => Promise<RenderFramesOutput>;
44
53
  export {};
@@ -8,6 +8,9 @@ const fs_1 = __importDefault(require("fs"));
8
8
  const path_1 = __importDefault(require("path"));
9
9
  const remotion_1 = require("remotion");
10
10
  const download_and_map_assets_to_file_1 = require("./assets/download-and-map-assets-to-file");
11
+ const download_map_1 = require("./assets/download-map");
12
+ const browser_1 = require("./browser");
13
+ const compress_assets_1 = require("./compress-assets");
11
14
  const cycle_browser_tabs_1 = require("./cycle-browser-tabs");
12
15
  const handle_javascript_exception_1 = require("./error-handling/handle-javascript-exception");
13
16
  const get_concurrency_1 = require("./get-concurrency");
@@ -16,14 +19,16 @@ const get_frame_padded_index_1 = require("./get-frame-padded-index");
16
19
  const get_frame_to_render_1 = require("./get-frame-to-render");
17
20
  const image_format_1 = require("./image-format");
18
21
  const legacy_webpack_config_1 = require("./legacy-webpack-config");
19
- const make_assets_download_dir_1 = require("./make-assets-download-dir");
20
22
  const open_browser_1 = require("./open-browser");
23
+ const perf_1 = require("./perf");
21
24
  const pool_1 = require("./pool");
22
25
  const prepare_server_1 = require("./prepare-server");
23
26
  const provide_screenshot_1 = require("./provide-screenshot");
24
27
  const puppeteer_evaluate_1 = require("./puppeteer-evaluate");
28
+ const quality_1 = require("./quality");
25
29
  const seek_to_frame_1 = require("./seek-to-frame");
26
30
  const set_props_and_env_1 = require("./set-props-and-env");
31
+ const truthy_1 = require("./truthy");
27
32
  const validate_scale_1 = require("./validate-scale");
28
33
  const getComposition = (others) => {
29
34
  if ('composition' in others) {
@@ -39,7 +44,7 @@ const getPool = async (pages) => {
39
44
  const pool = new pool_1.Pool(puppeteerPages);
40
45
  return pool;
41
46
  };
42
- const innerRenderFrames = ({ onFrameUpdate, outputDir, onStart, inputProps, quality, imageFormat = image_format_1.DEFAULT_IMAGE_FORMAT, frameRange, puppeteerInstance, onError, envVariables, onBrowserLog, onFrameBuffer, onDownload, pagesArray, serveUrl, composition, timeoutInMilliseconds, scale, actualParallelism, downloadDir, everyNthFrame = 1, proxyPort, cancelSignal, }) => {
47
+ const innerRenderFrames = ({ onFrameUpdate, outputDir, onStart, inputProps, quality, imageFormat = image_format_1.DEFAULT_IMAGE_FORMAT, frameRange, puppeteerInstance, onError, envVariables, onBrowserLog, onFrameBuffer, onDownload, pagesArray, serveUrl, composition, timeoutInMilliseconds, scale, actualParallelism, everyNthFrame = 1, proxyPort, cancelSignal, downloadMap, }) => {
43
48
  if (!puppeteerInstance) {
44
49
  throw new Error('no puppeteer instance passed to innerRenderFrames - internal error');
45
50
  }
@@ -133,7 +138,7 @@ const innerRenderFrames = ({ onFrameUpdate, outputDir, onStart, inputProps, qual
133
138
  await (0, seek_to_frame_1.seekToFrame)({ frame, page: freePage });
134
139
  if (imageFormat !== 'none') {
135
140
  if (onFrameBuffer) {
136
- const id = remotion_1.Internals.perf.startPerfMeasure('save');
141
+ const id = (0, perf_1.startPerfMeasure)('save');
137
142
  const buffer = await (0, provide_screenshot_1.provideScreenshot)({
138
143
  page: freePage,
139
144
  imageFormat,
@@ -143,7 +148,7 @@ const innerRenderFrames = ({ onFrameUpdate, outputDir, onStart, inputProps, qual
143
148
  output: null,
144
149
  },
145
150
  });
146
- remotion_1.Internals.perf.stopPerfMeasure(id);
151
+ (0, perf_1.stopPerfMeasure)(id);
147
152
  onFrameBuffer(buffer, frame);
148
153
  }
149
154
  else {
@@ -177,13 +182,13 @@ const innerRenderFrames = ({ onFrameUpdate, outputDir, onStart, inputProps, qual
177
182
  frame,
178
183
  page: freePage,
179
184
  });
180
- const compressedAssets = collectedAssets.map((asset) => remotion_1.Internals.AssetCompression.compressAsset(assets.filter(remotion_1.Internals.truthy).flat(1), asset));
185
+ const compressedAssets = collectedAssets.map((asset) => (0, compress_assets_1.compressAsset)(assets.filter(truthy_1.truthy).flat(1), asset));
181
186
  assets[index] = compressedAssets;
182
187
  compressedAssets.forEach((asset) => {
183
188
  (0, download_and_map_assets_to_file_1.downloadAndMapAssetsToFileUrl)({
184
189
  asset,
185
- downloadDir,
186
190
  onDownload,
191
+ downloadMap,
187
192
  }).catch((err) => {
188
193
  onError(new Error(`Error while downloading asset: ${err.stack}`));
189
194
  });
@@ -199,9 +204,9 @@ const innerRenderFrames = ({ onFrameUpdate, outputDir, onStart, inputProps, qual
199
204
  const returnValue = {
200
205
  assetsInfo: {
201
206
  assets,
202
- downloadDir,
203
207
  imageSequenceName: `element-%0${filePadLength}d.${imageFormat}`,
204
208
  firstFrameIndex: framesToRender[0],
209
+ downloadMap,
205
210
  },
206
211
  frameCount: framesToRender.length,
207
212
  };
@@ -214,30 +219,30 @@ const innerRenderFrames = ({ onFrameUpdate, outputDir, onStart, inputProps, qual
214
219
  .then(() => happyPath);
215
220
  };
216
221
  const renderFrames = (options) => {
217
- var _a, _b, _c, _d;
222
+ var _a, _b, _c, _d, _e;
218
223
  const composition = getComposition(options);
219
224
  if (!composition) {
220
225
  throw new Error('No `composition` option has been specified for renderFrames()');
221
226
  }
222
227
  remotion_1.Internals.validateDimension(composition.height, 'height', 'in the `config` object passed to `renderFrames()`');
223
228
  remotion_1.Internals.validateDimension(composition.width, 'width', 'in the `config` object passed to `renderFrames()`');
224
- remotion_1.Internals.validateFps(composition.fps, 'in the `config` object of `renderFrames()`', null);
229
+ remotion_1.Internals.validateFps(composition.fps, 'in the `config` object of `renderFrames()`', false);
225
230
  remotion_1.Internals.validateDurationInFrames(composition.durationInFrames, 'in the `config` object passed to `renderFrames()`');
226
231
  if (options.quality !== undefined && options.imageFormat !== 'jpeg') {
227
232
  throw new Error("You can only pass the `quality` option if `imageFormat` is 'jpeg'.");
228
233
  }
229
234
  const selectedServeUrl = (0, legacy_webpack_config_1.getServeUrlWithFallback)(options);
230
- remotion_1.Internals.validateQuality(options.quality);
235
+ (0, quality_1.validateQuality)(options.quality);
231
236
  (0, validate_scale_1.validateScale)(options.scale);
232
- const browserInstance = (_a = options.puppeteerInstance) !== null && _a !== void 0 ? _a : (0, open_browser_1.openBrowser)(remotion_1.Internals.DEFAULT_BROWSER, {
237
+ const browserInstance = (_a = options.puppeteerInstance) !== null && _a !== void 0 ? _a : (0, open_browser_1.openBrowser)(browser_1.DEFAULT_BROWSER, {
233
238
  shouldDumpIo: options.dumpBrowserLogs,
234
239
  browserExecutable: options.browserExecutable,
235
240
  chromiumOptions: options.chromiumOptions,
236
241
  forceDeviceScaleFactor: (_b = options.scale) !== null && _b !== void 0 ? _b : 1,
237
242
  });
238
- const downloadDir = (0, make_assets_download_dir_1.makeAssetsDownloadTmpDir)();
239
- const onDownload = (_c = options.onDownload) !== null && _c !== void 0 ? _c : (() => () => undefined);
240
- const actualParallelism = (0, get_concurrency_1.getActualConcurrency)((_d = options.parallelism) !== null && _d !== void 0 ? _d : null);
243
+ const downloadMap = (_c = options.downloadMap) !== null && _c !== void 0 ? _c : (0, download_map_1.makeDownloadMap)();
244
+ const onDownload = (_d = options.onDownload) !== null && _d !== void 0 ? _d : (() => () => undefined);
245
+ const actualParallelism = (0, get_concurrency_1.getActualConcurrency)((_e = options.parallelism) !== null && _e !== void 0 ? _e : null);
241
246
  const openedPages = [];
242
247
  return new Promise((resolve, reject) => {
243
248
  var _a, _b, _c;
@@ -255,12 +260,12 @@ const renderFrames = (options) => {
255
260
  Promise.all([
256
261
  (0, prepare_server_1.prepareServer)({
257
262
  webpackConfigOrServeUrl: selectedServeUrl,
258
- downloadDir,
259
263
  onDownload,
260
264
  onError,
261
265
  ffmpegExecutable: (_a = options.ffmpegExecutable) !== null && _a !== void 0 ? _a : null,
262
266
  ffprobeExecutable: (_b = options.ffprobeExecutable) !== null && _b !== void 0 ? _b : null,
263
267
  port: (_c = options.port) !== null && _c !== void 0 ? _c : null,
268
+ downloadMap,
264
269
  }),
265
270
  browserInstance,
266
271
  ]).then(([{ serveUrl, closeServer, offthreadPort }, puppeteerInstance]) => {
@@ -276,8 +281,8 @@ const renderFrames = (options) => {
276
281
  composition,
277
282
  actualParallelism,
278
283
  onDownload,
279
- downloadDir,
280
284
  proxyPort: offthreadPort,
285
+ downloadMap,
281
286
  });
282
287
  }),
283
288
  ])
@@ -306,6 +311,7 @@ const renderFrames = (options) => {
306
311
  cleanup.forEach((c) => {
307
312
  c();
308
313
  });
314
+ // Don't clear download dir because it might be used by stitchFramesToVideo
309
315
  });
310
316
  });
311
317
  };
@@ -1,11 +1,17 @@
1
- /// <reference types="node" />
2
- import type { BrowserExecutable, Codec, FfmpegExecutable, FrameRange, PixelFormat, ProResProfile, SmallTCompMetadata } from 'remotion';
1
+ import type { SmallTCompMetadata } from 'remotion';
3
2
  import type { RenderMediaOnDownload } from './assets/download-and-map-assets-to-file';
3
+ import type { DownloadMap } from './assets/download-map';
4
+ import type { BrowserExecutable } from './browser-executable';
4
5
  import type { BrowserLog } from './browser-log';
5
6
  import type { Browser as PuppeteerBrowser } from './browser/Browser';
7
+ import type { Codec } from './codec';
8
+ import type { FfmpegExecutable } from './ffmpeg-executable';
9
+ import type { FrameRange } from './frame-range';
6
10
  import type { ServeUrlOrWebpackBundle } from './legacy-webpack-config';
7
11
  import type { CancelSignal } from './make-cancel-signal';
8
12
  import type { ChromiumOptions } from './open-browser';
13
+ import type { PixelFormat } from './pixel-format';
14
+ import type { ProResProfile } from './prores-profile';
9
15
  import type { OnStartData } from './types';
10
16
  export declare type StitchingState = 'encoding' | 'muxing';
11
17
  export declare type RenderMediaOnProgress = (progress: {
@@ -45,6 +51,11 @@ export declare type RenderMediaOptions = {
45
51
  port?: number | null;
46
52
  cancelSignal?: CancelSignal;
47
53
  browserExecutable?: BrowserExecutable;
54
+ verbose?: boolean;
55
+ /**
56
+ * @deprecated Only for Remotion internal usage
57
+ */
58
+ downloadMap?: DownloadMap;
48
59
  } & ServeUrlOrWebpackBundle;
49
60
  /**
50
61
  *
@@ -0,0 +1 @@
1
+ {"version":3,"file":"render-media.d.ts","sourceRoot":"","sources":["../src/render-media.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAC,OAAO,IAAI,gBAAgB,EAAC,MAAM,gBAAgB,CAAC;AAChE,OAAO,EACN,KAAK,EACL,gBAAgB,EAChB,UAAU,EAEV,WAAW,EACX,aAAa,EACb,kBAAkB,EAClB,MAAM,UAAU,CAAC;AAGlB,OAAO,EAAC,UAAU,EAAC,MAAM,eAAe,CAAC;AACzC,OAAO,EAAC,WAAW,EAAC,MAAM,SAAS,CAAC;AACpC,OAAO,EAAC,qBAAqB,EAAC,MAAM,0CAA0C,CAAC;AAG/E,OAAO,EAEN,uBAAuB,EACvB,MAAM,yBAAyB,CAAC;AAIjC,OAAO,EAAC,eAAe,EAAC,MAAM,gBAAgB,CAAC;AAK/C,oBAAY,cAAc,GAAG,UAAU,GAAG,QAAQ,CAAC;AAEnD,oBAAY,qBAAqB,GAAG,CAAC,QAAQ,EAAE;IAC9C,cAAc,EAAE,MAAM,CAAC;IACvB,aAAa,EAAE,MAAM,CAAC;IACtB,aAAa,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,cAAc,EAAE,MAAM,GAAG,IAAI,CAAC;IAC9B,WAAW,EAAE,cAAc,CAAC;CAC5B,KAAK,IAAI,CAAC;AAEX,oBAAY,kBAAkB,GAAG;IAChC,cAAc,EAAE,MAAM,CAAC;IACvB,KAAK,EAAE,KAAK,CAAC;IACb,WAAW,EAAE,kBAAkB,CAAC;IAChC,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,WAAW,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,GAAG,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACpB,WAAW,CAAC,EAAE,KAAK,GAAG,MAAM,GAAG,MAAM,CAAC;IACtC,gBAAgB,CAAC,EAAE,gBAAgB,CAAC;IACpC,WAAW,CAAC,EAAE,WAAW,CAAC;IAC1B,YAAY,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACtC,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,UAAU,CAAC,EAAE,UAAU,GAAG,IAAI,CAAC;IAC/B,iBAAiB,CAAC,EAAE,gBAAgB,CAAC;IACrC,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,UAAU,CAAC,EAAE,qBAAqB,CAAC;IACnC,UAAU,CAAC,EAAE,qBAAqB,CAAC;IACnC,aAAa,CAAC,EAAE,aAAa,CAAC;IAC9B,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,YAAY,CAAC,EAAE,CAAC,CAAC,GAAG,EAAE,UAAU,KAAK,IAAI,CAAC,GAAG,SAAS,CAAC;IACvD,OAAO,CAAC,EAAE,CAAC,IAAI,EAAE,WAAW,KAAK,IAAI,CAAC;IACtC,qBAAqB,CAAC,EAAE,MAAM,CAAC;IAC/B,eAAe,CAAC,EAAE,eAAe,CAAC;IAClC,KAAK,CAAC,EAAE,MAAM,CAAC;CACf,GAAG,uBAAuB,CAAC;AAI5B,eAAO,MAAM,WAAW,gUAyBrB,kBAAkB,kBAuLpB,CAAC"}
@@ -8,7 +8,10 @@ const fs_1 = __importDefault(require("fs"));
8
8
  const os_1 = __importDefault(require("os"));
9
9
  const path_1 = __importDefault(require("path"));
10
10
  const remotion_1 = require("remotion");
11
+ const download_map_1 = require("./assets/download-map");
11
12
  const can_use_parallel_encoding_1 = require("./can-use-parallel-encoding");
13
+ const crf_1 = require("./crf");
14
+ const delete_directory_1 = require("./delete-directory");
12
15
  const ensure_frames_in_order_1 = require("./ensure-frames-in-order");
13
16
  const ensure_output_directory_1 = require("./ensure-output-directory");
14
17
  const get_duration_from_frame_range_1 = require("./get-duration-from-frame-range");
@@ -17,10 +20,13 @@ const get_extension_of_filename_1 = require("./get-extension-of-filename");
17
20
  const get_frame_to_render_1 = require("./get-frame-to-render");
18
21
  const legacy_webpack_config_1 = require("./legacy-webpack-config");
19
22
  const make_cancel_signal_1 = require("./make-cancel-signal");
23
+ const overwrite_1 = require("./overwrite");
24
+ const perf_1 = require("./perf");
20
25
  const prespawn_ffmpeg_1 = require("./prespawn-ffmpeg");
26
+ const prestitcher_memory_usage_1 = require("./prestitcher-memory-usage");
27
+ const quality_1 = require("./quality");
21
28
  const render_frames_1 = require("./render-frames");
22
29
  const stitch_frames_to_video_1 = require("./stitch-frames-to-video");
23
- const tmp_dir_1 = require("./tmp-dir");
24
30
  const validate_even_dimensions_with_codec_1 = require("./validate-even-dimensions-with-codec");
25
31
  const validate_output_filename_1 = require("./validate-output-filename");
26
32
  const validate_scale_1 = require("./validate-scale");
@@ -30,10 +36,10 @@ const validate_scale_1 = require("./validate-scale");
30
36
  * @link https://www.remotion.dev/docs/renderer/render-media
31
37
  */
32
38
  const renderMedia = ({ parallelism, proResProfile, crf, composition, imageFormat, ffmpegExecutable, ffprobeExecutable, inputProps, pixelFormat, codec, envVariables, quality, frameRange, puppeteerInstance, outputLocation, onProgress, overwrite, onDownload, dumpBrowserLogs, onBrowserLog, onStart, timeoutInMilliseconds, chromiumOptions, scale, browserExecutable, port, cancelSignal, ...options }) => {
33
- var _a, _b;
34
- remotion_1.Internals.validateQuality(quality);
39
+ var _a, _b, _c;
40
+ (0, quality_1.validateQuality)(quality);
35
41
  if (typeof crf !== 'undefined' && crf !== null) {
36
- remotion_1.Internals.validateSelectedCrfAndCodecCombination(crf, codec);
42
+ (0, crf_1.validateSelectedCrfAndCodecCombination)(crf, codec);
37
43
  }
38
44
  if (outputLocation) {
39
45
  (0, validate_output_filename_1.validateOutputFilename)(codec, (0, get_extension_of_filename_1.getExtensionOfFilename)(outputLocation));
@@ -51,11 +57,25 @@ const renderMedia = ({ parallelism, proResProfile, crf, composition, imageFormat
51
57
  let encodedDoneIn = null;
52
58
  let cancelled = false;
53
59
  const renderStart = Date.now();
54
- const tmpdir = (0, tmp_dir_1.tmpDir)('pre-encode');
55
- const parallelEncoding = (0, can_use_parallel_encoding_1.canUseParallelEncoding)(codec);
60
+ const downloadMap = (_c = options.downloadMap) !== null && _c !== void 0 ? _c : (0, download_map_1.makeDownloadMap)();
61
+ const { estimatedUsage, freeMemory, hasEnoughMemory } = (0, prestitcher_memory_usage_1.shouldUseParallelEncoding)({
62
+ height: composition.height,
63
+ width: composition.width,
64
+ });
65
+ const parallelEncoding = hasEnoughMemory && (0, can_use_parallel_encoding_1.canUseParallelEncoding)(codec);
66
+ if (options.verbose) {
67
+ console.log('[PRESTITCHER] Free memory:', freeMemory, 'Estimated usage parallel encoding', estimatedUsage);
68
+ console.log('[PRESTICHER]: Codec supports parallel rendering:', (0, can_use_parallel_encoding_1.canUseParallelEncoding)(codec));
69
+ if (parallelEncoding) {
70
+ console.log('[PRESTICHER] Parallel encoding is enabled.');
71
+ }
72
+ else {
73
+ console.log('[PRESTITCHER] Parallel encoding is disabled.');
74
+ }
75
+ }
56
76
  const actualImageFormat = imageFormat !== null && imageFormat !== void 0 ? imageFormat : 'jpeg';
57
77
  const preEncodedFileLocation = parallelEncoding
58
- ? path_1.default.join(tmpdir, 'pre-encode.' + (0, get_extension_from_codec_1.getFileExtensionFromCodec)(codec, 'chunk'))
78
+ ? path_1.default.join(downloadMap.preEncode, 'pre-encode.' + (0, get_extension_from_codec_1.getFileExtensionFromCodec)(codec, 'chunk'))
59
79
  : null;
60
80
  const outputDir = parallelEncoding
61
81
  ? null
@@ -84,8 +104,9 @@ const renderMedia = ({ parallelism, proResProfile, crf, composition, imageFormat
84
104
  });
85
105
  const { waitForRightTimeOfFrameToBeInserted, setFrameToStitch, waitForFinish } = (0, ensure_frames_in_order_1.ensureFramesInOrder)(realFrameRange);
86
106
  const fps = composition.fps / (everyNthFrame !== null && everyNthFrame !== void 0 ? everyNthFrame : 1);
87
- remotion_1.Internals.validateFps(fps, 'in "renderMedia()"', codec);
107
+ remotion_1.Internals.validateFps(fps, 'in "renderMedia()"', codec === 'gif');
88
108
  const createPrestitcherIfNecessary = async () => {
109
+ var _a;
89
110
  if (preEncodedFileLocation) {
90
111
  preStitcher = await (0, prespawn_ffmpeg_1.prespawnFfmpeg)({
91
112
  width: composition.width * (scale !== null && scale !== void 0 ? scale : 1),
@@ -100,7 +121,7 @@ const renderMedia = ({ parallelism, proResProfile, crf, composition, imageFormat
100
121
  encodedFrames = frame;
101
122
  callUpdate();
102
123
  },
103
- verbose: remotion_1.Internals.Logging.isEqualOrBelowLogLevel(remotion_1.Internals.Logging.getLogLevel(), 'verbose'),
124
+ verbose: (_a = options.verbose) !== null && _a !== void 0 ? _a : false,
104
125
  ffmpegExecutable,
105
126
  imageFormat: actualImageFormat,
106
127
  signal: cancelPrestitcher.cancelSignal,
@@ -150,9 +171,9 @@ const renderMedia = ({ parallelism, proResProfile, crf, composition, imageFormat
150
171
  if (cancelled) {
151
172
  return;
152
173
  }
153
- const id = remotion_1.Internals.perf.startPerfMeasure('piping');
174
+ const id = (0, perf_1.startPerfMeasure)('piping');
154
175
  (_a = stitcherFfmpeg === null || stitcherFfmpeg === void 0 ? void 0 : stitcherFfmpeg.stdin) === null || _a === void 0 ? void 0 : _a.write(buffer);
155
- remotion_1.Internals.perf.stopPerfMeasure(id);
176
+ (0, perf_1.stopPerfMeasure)(id);
156
177
  setFrameToStitch(Math.min(realFrameRange[1] + 1, frame + everyNthFrame));
157
178
  }
158
179
  : undefined,
@@ -168,6 +189,7 @@ const renderMedia = ({ parallelism, proResProfile, crf, composition, imageFormat
168
189
  browserExecutable,
169
190
  port,
170
191
  cancelSignal: cancelRenderFrames.cancelSignal,
192
+ downloadMap,
171
193
  });
172
194
  return renderFramesProc;
173
195
  })
@@ -191,7 +213,7 @@ const renderMedia = ({ parallelism, proResProfile, crf, composition, imageFormat
191
213
  preEncodedFileLocation,
192
214
  imageFormat: actualImageFormat,
193
215
  },
194
- force: overwrite !== null && overwrite !== void 0 ? overwrite : remotion_1.Internals.DEFAULT_OVERWRITE,
216
+ force: overwrite !== null && overwrite !== void 0 ? overwrite : overwrite_1.DEFAULT_OVERWRITE,
195
217
  pixelFormat,
196
218
  codec,
197
219
  proResProfile,
@@ -206,7 +228,7 @@ const renderMedia = ({ parallelism, proResProfile, crf, composition, imageFormat
206
228
  },
207
229
  onDownload,
208
230
  numberOfGifLoops,
209
- verbose: remotion_1.Internals.Logging.isEqualOrBelowLogLevel(remotion_1.Internals.Logging.getLogLevel(), 'verbose'),
231
+ verbose: options.verbose,
210
232
  dir: outputDir !== null && outputDir !== void 0 ? outputDir : undefined,
211
233
  cancelSignal: cancelStitcher.cancelSignal,
212
234
  }),
@@ -245,7 +267,11 @@ const renderMedia = ({ parallelism, proResProfile, crf, composition, imageFormat
245
267
  .finally(() => {
246
268
  if (preEncodedFileLocation !== null &&
247
269
  fs_1.default.existsSync(preEncodedFileLocation)) {
248
- fs_1.default.unlinkSync(preEncodedFileLocation);
270
+ (0, delete_directory_1.deleteDirectory)(path_1.default.dirname(preEncodedFileLocation));
271
+ }
272
+ // Clean download map if it was not passed in
273
+ if (!(options === null || options === void 0 ? void 0 : options.downloadMap)) {
274
+ (0, download_map_1.cleanDownloadMap)(downloadMap);
249
275
  }
250
276
  });
251
277
  return Promise.race([
@@ -0,0 +1 @@
1
+ {"version":3,"file":"render-media.js","sourceRoot":"","sources":["../src/render-media.ts"],"names":[],"mappings":"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"}
@@ -1,6 +1,10 @@
1
- import type { BrowserExecutable, FfmpegExecutable, SmallTCompMetadata, StillImageFormat } from 'remotion';
1
+ import type { SmallTCompMetadata } from 'remotion';
2
2
  import type { RenderMediaOnDownload } from './assets/download-and-map-assets-to-file';
3
+ import type { DownloadMap } from './assets/download-map';
4
+ import type { BrowserExecutable } from './browser-executable';
3
5
  import type { Browser as PuppeteerBrowser } from './browser/Browser';
6
+ import type { FfmpegExecutable } from './ffmpeg-executable';
7
+ import type { StillImageFormat } from './image-format';
4
8
  import type { ServeUrlOrWebpackBundle } from './legacy-webpack-config';
5
9
  import type { CancelSignal } from './make-cancel-signal';
6
10
  import type { ChromiumOptions } from './open-browser';
@@ -23,6 +27,10 @@ declare type InnerStillOptions = {
23
27
  cancelSignal?: CancelSignal;
24
28
  ffmpegExecutable?: FfmpegExecutable;
25
29
  ffprobeExecutable?: FfmpegExecutable;
30
+ /**
31
+ * @deprecated Only for Remotion internal usage
32
+ */
33
+ downloadMap?: DownloadMap;
26
34
  };
27
35
  declare type RenderStillOptions = InnerStillOptions & ServeUrlOrWebpackBundle & {
28
36
  port?: number | null;
@@ -0,0 +1 @@
1
+ {"version":3,"file":"render-still.d.ts","sourceRoot":"","sources":["../src/render-still.ts"],"names":[],"mappings":"AAEA,OAAO,EAAC,OAAO,IAAI,gBAAgB,EAAC,MAAM,gBAAgB,CAAC;AAC3D,OAAO,EACN,iBAAiB,EAEjB,gBAAgB,EAChB,aAAa,EACb,MAAM,UAAU,CAAC;AAGlB,OAAO,EAEN,uBAAuB,EACvB,MAAM,yBAAyB,CAAC;AACjC,OAAO,EAAC,eAAe,EAAc,MAAM,gBAAgB,CAAC;AAS5D,aAAK,iBAAiB,GAAG;IACxB,WAAW,EAAE,aAAa,CAAC;IAC3B,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,WAAW,CAAC,EAAE,gBAAgB,CAAC;IAC/B,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,iBAAiB,CAAC,EAAE,gBAAgB,CAAC;IACrC,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,YAAY,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACtC,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,iBAAiB,CAAC,EAAE,iBAAiB,CAAC;IACtC,qBAAqB,CAAC,EAAE,MAAM,CAAC;IAC/B,eAAe,CAAC,EAAE,eAAe,CAAC;IAClC,KAAK,CAAC,EAAE,MAAM,CAAC;CACf,CAAC;AAEF,oBAAY,kBAAkB,GAAG,iBAAiB,GAAG,uBAAuB,CAAC;AAqJ7E;;GAEG;AAEH,eAAO,MAAM,WAAW,YACd,kBAAkB,KACzB,QAAQ,IAAI,CAed,CAAC"}
@@ -30,25 +30,29 @@ exports.renderStill = void 0;
30
30
  const fs_1 = __importStar(require("fs"));
31
31
  const path_1 = __importDefault(require("path"));
32
32
  const remotion_1 = require("remotion");
33
+ const download_map_1 = require("./assets/download-map");
34
+ const browser_1 = require("./browser");
33
35
  const ensure_output_directory_1 = require("./ensure-output-directory");
34
36
  const handle_javascript_exception_1 = require("./error-handling/handle-javascript-exception");
37
+ const image_format_1 = require("./image-format");
35
38
  const legacy_webpack_config_1 = require("./legacy-webpack-config");
36
- const make_assets_download_dir_1 = require("./make-assets-download-dir");
37
39
  const open_browser_1 = require("./open-browser");
38
40
  const prepare_server_1 = require("./prepare-server");
39
41
  const provide_screenshot_1 = require("./provide-screenshot");
40
42
  const puppeteer_evaluate_1 = require("./puppeteer-evaluate");
43
+ const quality_1 = require("./quality");
41
44
  const seek_to_frame_1 = require("./seek-to-frame");
42
45
  const set_props_and_env_1 = require("./set-props-and-env");
46
+ const validate_frame_1 = require("./validate-frame");
43
47
  const validate_puppeteer_timeout_1 = require("./validate-puppeteer-timeout");
44
48
  const validate_scale_1 = require("./validate-scale");
45
49
  const innerRenderStill = async ({ composition, quality, imageFormat = 'png', serveUrl, puppeteerInstance, dumpBrowserLogs = false, onError, inputProps, envVariables, output, frame = 0, overwrite = true, browserExecutable, timeoutInMilliseconds, chromiumOptions, scale, proxyPort, cancelSignal, }) => {
46
50
  remotion_1.Internals.validateDimension(composition.height, 'height', 'in the `config` object passed to `renderStill()`');
47
51
  remotion_1.Internals.validateDimension(composition.width, 'width', 'in the `config` object passed to `renderStill()`');
48
- remotion_1.Internals.validateFps(composition.fps, 'in the `config` object of `renderStill()`', null);
52
+ remotion_1.Internals.validateFps(composition.fps, 'in the `config` object of `renderStill()`', false);
49
53
  remotion_1.Internals.validateDurationInFrames(composition.durationInFrames, 'in the `config` object passed to `renderStill()`');
50
- remotion_1.Internals.validateNonNullImageFormat(imageFormat);
51
- remotion_1.Internals.validateFrame(frame, composition.durationInFrames);
54
+ (0, image_format_1.validateNonNullImageFormat)(imageFormat);
55
+ (0, validate_frame_1.validateFrame)(frame, composition.durationInFrames);
52
56
  (0, validate_puppeteer_timeout_1.validatePuppeteerTimeout)(timeoutInMilliseconds);
53
57
  (0, validate_scale_1.validateScale)(scale);
54
58
  if (typeof output !== 'string') {
@@ -58,7 +62,7 @@ const innerRenderStill = async ({ composition, quality, imageFormat = 'png', ser
58
62
  if (quality !== undefined && imageFormat !== 'jpeg') {
59
63
  throw new Error("You can only pass the `quality` option if `imageFormat` is 'jpeg'.");
60
64
  }
61
- remotion_1.Internals.validateQuality(quality);
65
+ (0, quality_1.validateQuality)(quality);
62
66
  if (fs_1.default.existsSync(output)) {
63
67
  if (!overwrite) {
64
68
  throw new Error(`Cannot render still - "overwrite" option was set to false, but the output destination ${output} already exists.`);
@@ -69,7 +73,7 @@ const innerRenderStill = async ({ composition, quality, imageFormat = 'png', ser
69
73
  }
70
74
  }
71
75
  (0, ensure_output_directory_1.ensureOutputDirectory)(output);
72
- const browserInstance = puppeteerInstance !== null && puppeteerInstance !== void 0 ? puppeteerInstance : (await (0, open_browser_1.openBrowser)(remotion_1.Internals.DEFAULT_BROWSER, {
76
+ const browserInstance = puppeteerInstance !== null && puppeteerInstance !== void 0 ? puppeteerInstance : (await (0, open_browser_1.openBrowser)(browser_1.DEFAULT_BROWSER, {
73
77
  browserExecutable,
74
78
  shouldDumpIo: dumpBrowserLogs,
75
79
  chromiumOptions,
@@ -143,22 +147,22 @@ const innerRenderStill = async ({ composition, quality, imageFormat = 'png', ser
143
147
  * @link https://www.remotion.dev/docs/renderer/render-still
144
148
  */
145
149
  const renderStill = (options) => {
146
- var _a;
150
+ var _a, _b;
147
151
  const selectedServeUrl = (0, legacy_webpack_config_1.getServeUrlWithFallback)(options);
148
- const downloadDir = (0, make_assets_download_dir_1.makeAssetsDownloadTmpDir)();
149
- const onDownload = (_a = options.onDownload) !== null && _a !== void 0 ? _a : (() => () => undefined);
152
+ const downloadMap = (_a = options.downloadMap) !== null && _a !== void 0 ? _a : (0, download_map_1.makeDownloadMap)();
153
+ const onDownload = (_b = options.onDownload) !== null && _b !== void 0 ? _b : (() => () => undefined);
150
154
  const happyPath = new Promise((resolve, reject) => {
151
155
  var _a, _b, _c;
152
156
  const onError = (err) => reject(err);
153
157
  let close = null;
154
158
  (0, prepare_server_1.prepareServer)({
155
159
  webpackConfigOrServeUrl: selectedServeUrl,
156
- downloadDir,
157
160
  onDownload,
158
161
  onError,
159
162
  ffmpegExecutable: (_a = options.ffmpegExecutable) !== null && _a !== void 0 ? _a : null,
160
163
  ffprobeExecutable: (_b = options.ffprobeExecutable) !== null && _b !== void 0 ? _b : null,
161
164
  port: (_c = options.port) !== null && _c !== void 0 ? _c : null,
165
+ downloadMap,
162
166
  })
163
167
  .then(({ serveUrl, closeServer, offthreadPort }) => {
164
168
  close = closeServer;
@@ -171,7 +175,13 @@ const renderStill = (options) => {
171
175
  })
172
176
  .then((res) => resolve(res))
173
177
  .catch((err) => reject(err))
174
- .finally(() => close === null || close === void 0 ? void 0 : close());
178
+ .finally(() => {
179
+ // Clean download map if it was not passed in
180
+ if (!(options === null || options === void 0 ? void 0 : options.downloadMap)) {
181
+ (0, download_map_1.cleanDownloadMap)(downloadMap);
182
+ }
183
+ return close === null || close === void 0 ? void 0 : close();
184
+ });
175
185
  });
176
186
  return Promise.race([
177
187
  happyPath,
@@ -0,0 +1 @@
1
+ {"version":3,"file":"render-still.js","sourceRoot":"","sources":["../src/render-still.ts"],"names":[],"mappings":"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"}