@remotion/renderer 3.0.23 → 3.0.26

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 (333) hide show
  1. package/dist/abort.d.ts +7 -0
  2. package/dist/abort.js +20 -0
  3. package/dist/assets/download-and-map-assets-to-file.d.ts +21 -8
  4. package/dist/assets/download-and-map-assets-to-file.js +68 -42
  5. package/dist/assets/download-file.d.ts +10 -5
  6. package/dist/assets/download-file.js +18 -5
  7. package/dist/assets/ffmpeg-volume-expression.d.ts +1 -2
  8. package/dist/assets/ffmpeg-volume-expression.js +2 -3
  9. package/dist/browser/Browser.d.ts +10 -159
  10. package/dist/browser/Browser.js +7 -191
  11. package/dist/browser/BrowserConnector.d.ts +1 -8
  12. package/dist/browser/BrowserConnector.js +0 -32
  13. package/dist/browser/BrowserFetcher.d.ts +1 -1
  14. package/dist/browser/BrowserFetcher.js +8 -10
  15. package/dist/browser/BrowserRunner.d.ts +2 -2
  16. package/dist/browser/BrowserRunner.js +1 -1
  17. package/dist/browser/Connection.d.ts +4 -11
  18. package/dist/browser/Connection.js +5 -25
  19. package/dist/browser/ConsoleMessage.d.ts +4 -28
  20. package/dist/browser/ConsoleMessage.js +5 -32
  21. package/dist/browser/DOMWorld.d.ts +9 -7
  22. package/dist/browser/DOMWorld.js +12 -20
  23. package/dist/browser/EvalTypes.d.ts +1 -1
  24. package/dist/browser/EventEmitter.d.ts +1 -48
  25. package/dist/browser/EventEmitter.js +0 -49
  26. package/dist/browser/ExecutionContext.d.ts +7 -8
  27. package/dist/browser/ExecutionContext.js +0 -16
  28. package/dist/browser/FrameManager.d.ts +12 -15
  29. package/dist/browser/FrameManager.js +5 -21
  30. package/dist/browser/HTTPRequest.d.ts +4 -18
  31. package/dist/browser/HTTPRequest.js +3 -48
  32. package/dist/browser/HTTPResponse.d.ts +2 -81
  33. package/dist/browser/HTTPResponse.js +3 -173
  34. package/dist/browser/JSHandle.d.ts +4 -5
  35. package/dist/browser/JSHandle.js +0 -3
  36. package/dist/browser/LaunchOptions.d.ts +2 -81
  37. package/dist/browser/Launcher.d.ts +2 -2
  38. package/dist/browser/Launcher.js +21 -119
  39. package/dist/browser/LifecycleWatcher.d.ts +4 -4
  40. package/dist/browser/LifecycleWatcher.js +4 -17
  41. package/dist/browser/NetworkEventManager.d.ts +2 -4
  42. package/dist/browser/NetworkEventManager.js +0 -47
  43. package/dist/browser/NetworkManager.d.ts +1 -3
  44. package/dist/browser/NetworkManager.js +6 -42
  45. package/dist/browser/NodeWebSocketTransport.d.ts +8 -2
  46. package/dist/browser/NodeWebSocketTransport.js +1 -1
  47. package/dist/browser/{page.d.ts → Page.d.ts} +12 -16
  48. package/dist/browser/{page.js → Page.js} +20 -14
  49. package/dist/browser/PuppeteerNode.d.ts +7 -59
  50. package/dist/browser/PuppeteerNode.js +4 -66
  51. package/dist/browser/Target.d.ts +4 -4
  52. package/dist/browser/Target.js +1 -1
  53. package/dist/browser/assert.d.ts +0 -20
  54. package/dist/browser/assert.js +0 -20
  55. package/dist/browser/create-browser-fetcher.d.ts +1 -1
  56. package/dist/browser/create-browser-fetcher.js +4 -25
  57. package/dist/browser/util.d.ts +5 -4
  58. package/dist/browser/util.js +11 -3
  59. package/dist/browser-log.d.ts +1 -1
  60. package/dist/calculate-sar-dar-pixels.d.ts +9 -0
  61. package/dist/calculate-sar-dar-pixels.js +19 -0
  62. package/dist/cancel.d.ts +7 -0
  63. package/dist/cancel.js +25 -0
  64. package/dist/ensure-faststart.d.ts +1 -0
  65. package/dist/ensure-faststart.js +14 -0
  66. package/dist/error-handling/handle-javascript-exception.d.ts +1 -1
  67. package/dist/error-handling/handle-javascript-exception.js +2 -2
  68. package/dist/extract-frame-from-video.d.ts +2 -2
  69. package/dist/extract-frame-from-video.js +26 -14
  70. package/dist/faststart/atom.d.ts +35 -0
  71. package/dist/faststart/atom.js +138 -0
  72. package/dist/faststart/index.d.ts +0 -0
  73. package/dist/faststart/index.js +1 -0
  74. package/dist/faststart/options.d.ts +6 -0
  75. package/dist/faststart/options.js +2 -0
  76. package/dist/faststart/qt-faststart.d.ts +18 -0
  77. package/dist/faststart/qt-faststart.js +66 -0
  78. package/dist/faststart/update-chunk-offsets.d.ts +10 -0
  79. package/dist/faststart/update-chunk-offsets.js +114 -0
  80. package/dist/faststart/util.d.ts +9 -0
  81. package/dist/faststart/util.js +34 -0
  82. package/dist/get-browser-instance.d.ts +2 -1
  83. package/dist/get-compositions.d.ts +1 -1
  84. package/dist/get-compositions.js +3 -3
  85. package/dist/get-local-browser-executable.js +7 -5
  86. package/dist/get-port.js +5 -14
  87. package/dist/get-video-info.d.ts +8 -0
  88. package/dist/get-video-info.js +50 -0
  89. package/dist/index.d.ts +14 -6
  90. package/dist/index.js +3 -0
  91. package/dist/last-frame-from-video-cache.d.ts +3 -1
  92. package/dist/offthread/index.d.ts +0 -0
  93. package/dist/offthread/index.js +1 -0
  94. package/dist/offthread-video-server.js +2 -6
  95. package/dist/open-browser.d.ts +4 -2
  96. package/dist/open-browser.js +8 -8
  97. package/dist/prepare-server.js +5 -2
  98. package/dist/provide-screenshot.d.ts +4 -3
  99. package/dist/provide-screenshot.js +0 -1
  100. package/dist/puppeteer-evaluate.d.ts +1 -1
  101. package/dist/puppeteer-evaluate.js +3 -3
  102. package/dist/puppeteer-screenshot.d.ts +4 -2
  103. package/dist/puppeteer-screenshot.js +2 -4
  104. package/dist/render-frames.d.ts +2 -2
  105. package/dist/render-frames.js +50 -47
  106. package/dist/render-gif.d.ts +2 -0
  107. package/dist/render-gif.js +242 -0
  108. package/dist/render-media.d.ts +4 -3
  109. package/dist/render-media.js +8 -3
  110. package/dist/render-still.d.ts +1 -1
  111. package/dist/screenshot-dom-element.d.ts +6 -6
  112. package/dist/screenshot-dom-element.js +3 -6
  113. package/dist/screenshot-task.d.ts +3 -1
  114. package/dist/screenshot-task.js +3 -5
  115. package/dist/seek-to-frame.d.ts +2 -2
  116. package/dist/seek-to-frame.js +2 -2
  117. package/dist/set-props-and-env.d.ts +1 -1
  118. package/dist/set-props-and-env.js +3 -0
  119. package/dist/should-use-vp9-decoder.d.ts +0 -0
  120. package/dist/should-use-vp9-decoder.js +1 -0
  121. package/dist/stitch-frames-to-gif.d.ts +8 -0
  122. package/dist/stitch-frames-to-gif.js +128 -0
  123. package/dist/stitch-frames-to-video.d.ts +4 -3
  124. package/dist/stitch-frames-to-video.js +31 -13
  125. package/dist/stringify-ffmpeg-filter.d.ts +1 -1
  126. package/dist/stringify-ffmpeg-filter.js +9 -7
  127. package/dist/validate-offthreadvideo-image-format.d.ts +1 -0
  128. package/dist/validate-offthreadvideo-image-format.js +15 -0
  129. package/dist/wait-for-symbolication-error-to-be-done.d.ts +3 -0
  130. package/dist/wait-for-symbolication-error-to-be-done.js +34 -0
  131. package/package.json +9 -5
  132. package/dist/assets/calculate-asset-positions.d.ts.map +0 -1
  133. package/dist/assets/calculate-asset-positions.js.map +0 -1
  134. package/dist/assets/calculate-atempo.d.ts.map +0 -1
  135. package/dist/assets/calculate-atempo.js.map +0 -1
  136. package/dist/assets/convert-assets-to-file-urls.d.ts.map +0 -1
  137. package/dist/assets/convert-assets-to-file-urls.js.map +0 -1
  138. package/dist/assets/download-and-map-assets-to-file.d.ts.map +0 -1
  139. package/dist/assets/download-and-map-assets-to-file.js.map +0 -1
  140. package/dist/assets/download-file.d.ts.map +0 -1
  141. package/dist/assets/download-file.js.map +0 -1
  142. package/dist/assets/ffmpeg-volume-expression.d.ts.map +0 -1
  143. package/dist/assets/ffmpeg-volume-expression.js.map +0 -1
  144. package/dist/assets/flatten-volume-array.d.ts.map +0 -1
  145. package/dist/assets/flatten-volume-array.js.map +0 -1
  146. package/dist/assets/get-audio-channels.d.ts.map +0 -1
  147. package/dist/assets/get-audio-channels.js.map +0 -1
  148. package/dist/assets/read-file.d.ts.map +0 -1
  149. package/dist/assets/read-file.js.map +0 -1
  150. package/dist/assets/round-volume-to-avoid-stack-overflow.d.ts.map +0 -1
  151. package/dist/assets/round-volume-to-avoid-stack-overflow.js.map +0 -1
  152. package/dist/assets/sanitize-filename.d.ts.map +0 -1
  153. package/dist/assets/sanitize-filename.js.map +0 -1
  154. package/dist/assets/sanitize-filepath.d.ts.map +0 -1
  155. package/dist/assets/sanitize-filepath.js.map +0 -1
  156. package/dist/assets/truncate-utf8-bytes.d.ts.map +0 -1
  157. package/dist/assets/truncate-utf8-bytes.js.map +0 -1
  158. package/dist/assets/types.d.ts.map +0 -1
  159. package/dist/assets/types.js.map +0 -1
  160. package/dist/browser/Accessibility.d.ts +0 -175
  161. package/dist/browser/Accessibility.js +0 -423
  162. package/dist/browser/AriaQueryHandler.d.ts +0 -20
  163. package/dist/browser/AriaQueryHandler.js +0 -108
  164. package/dist/browser/Coverage.d.ts +0 -180
  165. package/dist/browser/Coverage.js +0 -371
  166. package/dist/browser/Debug.d.ts +0 -19
  167. package/dist/browser/Debug.js +0 -42
  168. package/dist/browser/DeviceDescriptors.d.ts +0 -40
  169. package/dist/browser/DeviceDescriptors.js +0 -1407
  170. package/dist/browser/FileChooser.d.ts +0 -56
  171. package/dist/browser/FileChooser.js +0 -86
  172. package/dist/browser/Input.d.ts +0 -355
  173. package/dist/browser/Input.js +0 -592
  174. package/dist/browser/NetworkConditions.d.ts +0 -26
  175. package/dist/browser/NetworkConditions.js +0 -33
  176. package/dist/browser/PDFOptions.d.ts +0 -165
  177. package/dist/browser/PDFOptions.js +0 -34
  178. package/dist/browser/PipeTransport.d.ts +0 -10
  179. package/dist/browser/PipeTransport.js +0 -86
  180. package/dist/browser/Puppeteer.d.ts +0 -35
  181. package/dist/browser/Puppeteer.js +0 -17
  182. package/dist/browser/QueryHandler.d.ts +0 -64
  183. package/dist/browser/QueryHandler.js +0 -183
  184. package/dist/browser/SecurityDetails.d.ts +0 -55
  185. package/dist/browser/SecurityDetails.js +0 -95
  186. package/dist/browser/Tracing.d.ts +0 -45
  187. package/dist/browser/Tracing.js +0 -136
  188. package/dist/browser/USKeyboardLayout.d.ts +0 -39
  189. package/dist/browser/USKeyboardLayout.js +0 -406
  190. package/dist/browser/WebWorker.d.ts +0 -96
  191. package/dist/browser/WebWorker.js +0 -122
  192. package/dist/browser/dialog.d.ts +0 -70
  193. package/dist/browser/dialog.js +0 -114
  194. package/dist/browser/fetch.d.ts +0 -16
  195. package/dist/browser/fetch.js +0 -46
  196. package/dist/browser/find-up.d.ts +0 -4
  197. package/dist/browser/find-up.js +0 -85
  198. package/dist/browser/pkg-dir.d.ts +0 -3
  199. package/dist/browser/pkg-dir.js +0 -13
  200. package/dist/browser-log.d.ts.map +0 -1
  201. package/dist/browser-log.js.map +0 -1
  202. package/dist/calculate-ffmpeg-filters.d.ts.map +0 -1
  203. package/dist/calculate-ffmpeg-filters.js.map +0 -1
  204. package/dist/can-use-parallel-encoding.d.ts.map +0 -1
  205. package/dist/can-use-parallel-encoding.js.map +0 -1
  206. package/dist/chunk.d.ts.map +0 -1
  207. package/dist/chunk.js.map +0 -1
  208. package/dist/combine-videos.d.ts.map +0 -1
  209. package/dist/combine-videos.js.map +0 -1
  210. package/dist/convert-to-pcm.d.ts.map +0 -1
  211. package/dist/convert-to-pcm.js.map +0 -1
  212. package/dist/create-ffmpeg-complex-filter.d.ts.map +0 -1
  213. package/dist/create-ffmpeg-complex-filter.js.map +0 -1
  214. package/dist/create-ffmpeg-merge-filter.d.ts.map +0 -1
  215. package/dist/create-ffmpeg-merge-filter.js.map +0 -1
  216. package/dist/create-silent-audio.d.ts.map +0 -1
  217. package/dist/create-silent-audio.js.map +0 -1
  218. package/dist/cycle-browser-tabs.d.ts.map +0 -1
  219. package/dist/cycle-browser-tabs.js.map +0 -1
  220. package/dist/delay-render-embedded-stack.d.ts.map +0 -1
  221. package/dist/delay-render-embedded-stack.js.map +0 -1
  222. package/dist/delete-directory.d.ts.map +0 -1
  223. package/dist/delete-directory.js.map +0 -1
  224. package/dist/ensure-frames-in-order.d.ts.map +0 -1
  225. package/dist/ensure-frames-in-order.js.map +0 -1
  226. package/dist/ensure-output-directory.d.ts.map +0 -1
  227. package/dist/ensure-output-directory.js.map +0 -1
  228. package/dist/error-handling/handle-javascript-exception.d.ts.map +0 -1
  229. package/dist/error-handling/handle-javascript-exception.js.map +0 -1
  230. package/dist/error-handling/symbolicate-error.d.ts.map +0 -1
  231. package/dist/error-handling/symbolicate-error.js.map +0 -1
  232. package/dist/error-handling/symbolicateable-error.d.ts.map +0 -1
  233. package/dist/error-handling/symbolicateable-error.js.map +0 -1
  234. package/dist/ffmpeg-filter-file.d.ts.map +0 -1
  235. package/dist/ffmpeg-filter-file.js.map +0 -1
  236. package/dist/ffmpeg-flags.d.ts.map +0 -1
  237. package/dist/ffmpeg-flags.js.map +0 -1
  238. package/dist/get-audio-codec-name.d.ts.map +0 -1
  239. package/dist/get-audio-codec-name.js.map +0 -1
  240. package/dist/get-browser-instance.d.ts.map +0 -1
  241. package/dist/get-browser-instance.js.map +0 -1
  242. package/dist/get-codec-name.d.ts.map +0 -1
  243. package/dist/get-codec-name.js.map +0 -1
  244. package/dist/get-compositions.d.ts.map +0 -1
  245. package/dist/get-compositions.js.map +0 -1
  246. package/dist/get-concurrency.d.ts.map +0 -1
  247. package/dist/get-concurrency.js.map +0 -1
  248. package/dist/get-duration-from-frame-range.d.ts.map +0 -1
  249. package/dist/get-duration-from-frame-range.js.map +0 -1
  250. package/dist/get-extension-from-codec.d.ts.map +0 -1
  251. package/dist/get-extension-from-codec.js.map +0 -1
  252. package/dist/get-frame-to-render.d.ts.map +0 -1
  253. package/dist/get-frame-to-render.js.map +0 -1
  254. package/dist/get-local-browser-executable.d.ts.map +0 -1
  255. package/dist/get-local-browser-executable.js.map +0 -1
  256. package/dist/get-port.d.ts.map +0 -1
  257. package/dist/get-port.js.map +0 -1
  258. package/dist/get-prores-profile-name.d.ts.map +0 -1
  259. package/dist/get-prores-profile-name.js.map +0 -1
  260. package/dist/image-format.d.ts.map +0 -1
  261. package/dist/image-format.js.map +0 -1
  262. package/dist/index.d.ts.map +0 -1
  263. package/dist/index.js.map +0 -1
  264. package/dist/is-serve-url.d.ts.map +0 -1
  265. package/dist/is-serve-url.js.map +0 -1
  266. package/dist/legacy-webpack-config.d.ts.map +0 -1
  267. package/dist/legacy-webpack-config.js.map +0 -1
  268. package/dist/make-assets-download-dir.d.ts.map +0 -1
  269. package/dist/make-assets-download-dir.js.map +0 -1
  270. package/dist/merge-audio-track.d.ts.map +0 -1
  271. package/dist/merge-audio-track.js.map +0 -1
  272. package/dist/normalize-serve-url.d.ts.map +0 -1
  273. package/dist/normalize-serve-url.js.map +0 -1
  274. package/dist/open-browser.d.ts.map +0 -1
  275. package/dist/open-browser.js.map +0 -1
  276. package/dist/p-limit.d.ts.map +0 -1
  277. package/dist/p-limit.js.map +0 -1
  278. package/dist/parse-browser-error-stack.d.ts.map +0 -1
  279. package/dist/parse-browser-error-stack.js.map +0 -1
  280. package/dist/parse-ffmpeg-progress.d.ts.map +0 -1
  281. package/dist/parse-ffmpeg-progress.js.map +0 -1
  282. package/dist/pool.d.ts.map +0 -1
  283. package/dist/pool.js.map +0 -1
  284. package/dist/prepare-server.d.ts.map +0 -1
  285. package/dist/prepare-server.js.map +0 -1
  286. package/dist/preprocess-audio-track.d.ts.map +0 -1
  287. package/dist/preprocess-audio-track.js.map +0 -1
  288. package/dist/prespawn-ffmpeg.d.ts.map +0 -1
  289. package/dist/prespawn-ffmpeg.js.map +0 -1
  290. package/dist/provide-screenshot.d.ts.map +0 -1
  291. package/dist/provide-screenshot.js.map +0 -1
  292. package/dist/puppeteer-evaluate.d.ts.map +0 -1
  293. package/dist/puppeteer-evaluate.js.map +0 -1
  294. package/dist/puppeteer-screenshot.d.ts.map +0 -1
  295. package/dist/puppeteer-screenshot.js.map +0 -1
  296. package/dist/render-frames.d.ts.map +0 -1
  297. package/dist/render-frames.js.map +0 -1
  298. package/dist/render-media.d.ts.map +0 -1
  299. package/dist/render-media.js.map +0 -1
  300. package/dist/render-still.d.ts.map +0 -1
  301. package/dist/render-still.js.map +0 -1
  302. package/dist/resolve-asset-src.d.ts.map +0 -1
  303. package/dist/resolve-asset-src.js.map +0 -1
  304. package/dist/sample-rate.d.ts.map +0 -1
  305. package/dist/sample-rate.js.map +0 -1
  306. package/dist/screenshot-dom-element.d.ts.map +0 -1
  307. package/dist/screenshot-dom-element.js.map +0 -1
  308. package/dist/screenshot-task.d.ts.map +0 -1
  309. package/dist/screenshot-task.js.map +0 -1
  310. package/dist/seek-to-frame.d.ts.map +0 -1
  311. package/dist/seek-to-frame.js.map +0 -1
  312. package/dist/serve-static.d.ts.map +0 -1
  313. package/dist/serve-static.js.map +0 -1
  314. package/dist/set-props-and-env.d.ts.map +0 -1
  315. package/dist/set-props-and-env.js.map +0 -1
  316. package/dist/stitch-frames-to-video.d.ts.map +0 -1
  317. package/dist/stitch-frames-to-video.js.map +0 -1
  318. package/dist/stringify-ffmpeg-filter.d.ts.map +0 -1
  319. package/dist/stringify-ffmpeg-filter.js.map +0 -1
  320. package/dist/symbolicate-stacktrace.d.ts.map +0 -1
  321. package/dist/symbolicate-stacktrace.js.map +0 -1
  322. package/dist/tmp-dir.d.ts.map +0 -1
  323. package/dist/tmp-dir.js.map +0 -1
  324. package/dist/types.d.ts.map +0 -1
  325. package/dist/types.js.map +0 -1
  326. package/dist/validate-even-dimensions-with-codec.d.ts.map +0 -1
  327. package/dist/validate-even-dimensions-with-codec.js.map +0 -1
  328. package/dist/validate-ffmpeg.d.ts.map +0 -1
  329. package/dist/validate-ffmpeg.js.map +0 -1
  330. package/dist/validate-puppeteer-timeout.d.ts.map +0 -1
  331. package/dist/validate-puppeteer-timeout.js.map +0 -1
  332. package/dist/validate-scale.d.ts.map +0 -1
  333. package/dist/validate-scale.js.map +0 -1
@@ -0,0 +1,2 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
@@ -0,0 +1,18 @@
1
+ /// <reference types="node" />
2
+ import { QtAtom } from './atom';
3
+ import { FaststartOptions } from './options';
4
+ export declare function supportStreaming(infile: Buffer): boolean;
5
+ /**
6
+ * Enables "faststart" for QuickTime files so that they can be streamed.
7
+ *
8
+ * @param infile QT/mp4 to faststart
9
+ * @returns Faststarted QT/mp4
10
+ */
11
+ export default function faststart(infile: Buffer, options?: FaststartOptions): Buffer;
12
+ /**
13
+ * Sorts an array of QT atoms so that the first two atoms are `ftyp`, then `moov`.
14
+ * Additionally updates all chunk offsets (`stco`/`co64` atoms) in `moov`.
15
+ *
16
+ * @param atoms QT atoms to sort
17
+ */
18
+ export declare function sortFaststartAtoms(atoms: QtAtom[], options: FaststartOptions): QtAtom[];
@@ -0,0 +1,66 @@
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.sortFaststartAtoms = exports.supportStreaming = void 0;
7
+ const atom_1 = require("./atom");
8
+ const update_chunk_offsets_1 = __importDefault(require("./update-chunk-offsets"));
9
+ function supportStreaming(infile) {
10
+ const file = Buffer.from(infile);
11
+ const atoms = (0, atom_1.parseAtoms)(file, 0, true);
12
+ const mdatIndex = atoms.findIndex((atom) => atom.kind === 'mdat');
13
+ const moovIndex = atoms.findIndex((atom) => atom.kind === 'moov');
14
+ if (moovIndex === -1 || mdatIndex === -1) {
15
+ return false;
16
+ }
17
+ return moovIndex < mdatIndex;
18
+ }
19
+ exports.supportStreaming = supportStreaming;
20
+ /**
21
+ * Enables "faststart" for QuickTime files so that they can be streamed.
22
+ *
23
+ * @param infile QT/mp4 to faststart
24
+ * @returns Faststarted QT/mp4
25
+ */
26
+ function faststart(infile, options = {}) {
27
+ const file = Buffer.from(infile);
28
+ const atoms = (0, atom_1.parseAtoms)(file);
29
+ console.log({ atoms });
30
+ const mdatIndex = atoms.findIndex((atom) => atom.kind === 'mdat');
31
+ if (mdatIndex === -1) {
32
+ throw new Error(`No mdat atom found!`);
33
+ }
34
+ const moovIndex = atoms.findIndex((atom) => atom.kind === 'moov');
35
+ if (moovIndex === -1) {
36
+ throw new Error(`No moov atom found!`);
37
+ }
38
+ const faststarted = sortFaststartAtoms(atoms, options);
39
+ return (0, atom_1.recurseFlattenAtoms)(faststarted);
40
+ }
41
+ exports.default = faststart;
42
+ /**
43
+ * Sorts an array of QT atoms so that the first two atoms are `ftyp`, then `moov`.
44
+ * Additionally updates all chunk offsets (`stco`/`co64` atoms) in `moov`.
45
+ *
46
+ * @param atoms QT atoms to sort
47
+ */
48
+ function sortFaststartAtoms(atoms, options) {
49
+ const faststarted = [];
50
+ const ftyp = atoms.find((atom) => atom.kind === 'ftyp');
51
+ if (!ftyp) {
52
+ throw new Error('Missing ftyp atom!');
53
+ }
54
+ if (ftyp.size > atom_1.MAX_FTYP_ATOM_SIZE) {
55
+ throw new Error(`ftyp atom is greater than ${atom_1.MAX_FTYP_ATOM_SIZE}`);
56
+ }
57
+ console.log('before', { atoms });
58
+ const moov = atoms.find((atom) => atom.kind === 'moov');
59
+ (0, update_chunk_offsets_1.default)(moov, options);
60
+ faststarted.push(ftyp, moov);
61
+ const rest = atoms.filter((atom) => !['ftyp', 'moov'].includes(atom.kind));
62
+ faststarted.push(...rest);
63
+ console.log('after', { faststarted });
64
+ return faststarted;
65
+ }
66
+ exports.sortFaststartAtoms = sortFaststartAtoms;
@@ -0,0 +1,10 @@
1
+ import { QtAtom } from './atom';
2
+ import { FaststartOptions } from './options';
3
+ /**
4
+ * Adds the specified offset to each entry in stco/co64 atoms
5
+ *
6
+ * @param atoms QT atoms to traverse
7
+ * @param offset offset to add
8
+ * @param forceUpgrade always upgrade stco atoms to co64
9
+ */
10
+ export default function updateChunkOffsets(moov: QtAtom, options: FaststartOptions): void;
@@ -0,0 +1,114 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ /* eslint-disable no-bitwise */
4
+ const atom_1 = require("./atom");
5
+ /**
6
+ * Adds the specified offset to each entry in stco/co64 atoms
7
+ *
8
+ * @param atoms QT atoms to traverse
9
+ * @param offset offset to add
10
+ * @param forceUpgrade always upgrade stco atoms to co64
11
+ */
12
+ function updateChunkOffsets(moov, options) {
13
+ const atoms = moov.data;
14
+ const originalMoovSize = Number(moov.size);
15
+ let newChunksSize = 0;
16
+ let originalChunksSize = 0;
17
+ // First pass to count total entries, which is needed for co64 upgrades.
18
+ (0, atom_1.traverseAtoms)(atoms, (atom) => {
19
+ if (!['stco', 'co64'].includes(atom.kind) || !Buffer.isBuffer(atom.data)) {
20
+ return;
21
+ }
22
+ const entries = atom.data.readUInt32BE(4);
23
+ const originalEntrySize = isCo64(atom.kind) ? 8 : 4;
24
+ originalChunksSize += entries * originalEntrySize;
25
+ const newEntrySize = isCo64(atom.kind) || options.forceUpgradeToCo64 ? 8 : 4;
26
+ newChunksSize += entries * newEntrySize;
27
+ });
28
+ // Calculate new mdat offsets to add to stco/co64 chunk offset values
29
+ const totalOffset = originalMoovSize - originalChunksSize + newChunksSize;
30
+ // Second pass to actually update offsets.
31
+ (0, atom_1.traverseAtoms)(atoms, (atom) => {
32
+ if (!['stco', 'co64'].includes(atom.kind) || !Buffer.isBuffer(atom.data)) {
33
+ return;
34
+ }
35
+ const overflow = updateChunkAtom(atom, totalOffset, options);
36
+ if (!overflow) {
37
+ return;
38
+ }
39
+ upgradeStcoToCo64(atom, totalOffset);
40
+ });
41
+ }
42
+ exports.default = updateChunkOffsets;
43
+ /**
44
+ * Updates `stco` or `co64` atoms' chunk offsets.
45
+ *
46
+ * @param atom `stco` or `co64` to update chunk offsets of
47
+ * @param totalOffset the total offset value to add to the existing chunk offsets
48
+ * @param options
49
+ * @returns {boolean} `true` if overflowed (did not finish updating chunks), `false` if succeeded
50
+ */
51
+ function updateChunkAtom(atom, totalOffset, options) {
52
+ if (!Buffer.isBuffer(atom.data)) {
53
+ throw new Error(`${atom.kind} data is not a Buffer!`);
54
+ }
55
+ let overflow = false;
56
+ const entrySize = isCo64(atom.kind) ? 8 : 4;
57
+ const entries = atom.data.readUInt32BE(4);
58
+ const newData = Buffer.alloc(8 + entries * entrySize); // 8 byte header
59
+ atom.data.copy(newData, 0, 0, 8); // copy header
60
+ for (let i = 0; i < entries; i++) {
61
+ const cur = 8 + i * entrySize; // 8 byte header
62
+ if (isCo64(atom.kind)) {
63
+ const newVal64 = Number((BigInt(atom.data.readUInt32BE(cur)) << BigInt(32)) |
64
+ BigInt(atom.data.readUInt32BE(cur + 4))) + totalOffset;
65
+ newData.writeUInt32BE(Number((BigInt(newVal64) >> BigInt(32)) & BigInt(0xffffffff)), cur);
66
+ newData.writeUInt32BE(Number(BigInt(newVal64) & BigInt(0xffffffff)), cur + 4);
67
+ continue;
68
+ }
69
+ if (options.forceUpgradeToCo64) {
70
+ overflow = true;
71
+ break;
72
+ }
73
+ const newVal32 = atom.data.readUInt32BE(cur) + totalOffset;
74
+ if (newVal32 > 2 ** 32 - 1) {
75
+ overflow = true;
76
+ break;
77
+ }
78
+ newData.writeUInt32BE(newVal32, cur);
79
+ }
80
+ if (!overflow) {
81
+ atom.data = newData;
82
+ }
83
+ return overflow;
84
+ }
85
+ /**
86
+ * **Upgrades** `stco` atom to a `co64` atom and also updates the chunk offsets.
87
+ *
88
+ * @param atom `stco` or `co64` to update chunk offsets of
89
+ * @param totalOffset the total offset value to add to the existing chunk offsets
90
+ */
91
+ function upgradeStcoToCo64(atom, totalOffset) {
92
+ if (!Buffer.isBuffer(atom.data)) {
93
+ throw new Error(`${atom.kind} data is not a Buffer!`);
94
+ }
95
+ // Upgrade to stco atoms to co64 atoms
96
+ const entries = atom.data.readUInt32BE(4);
97
+ const upgradedData = Buffer.alloc(8 + entries * 8); // 8-byte header, 8-byte entry size
98
+ atom.data.copy(upgradedData, 0, 0, 8);
99
+ upgradedData.writeUInt32BE((entries >> 32) & 0xffffffff, 8); // MSB 64-bit size
100
+ upgradedData.writeUInt32BE(entries & 0xffffffff, 12); // LSB 64-bit size
101
+ for (let i = 0; i < entries; i++) {
102
+ const cur32 = 8 + i * 4; // 8-byte header, 4-byte entry size for READS (stco)
103
+ const newVal = atom.data.readUInt32BE(cur32) + totalOffset;
104
+ const cur64 = 8 + i * 8; // 8-byte header, 8-byte entry size for WRITES (co64)
105
+ upgradedData.writeUInt32BE(Number((BigInt(newVal) >> BigInt(32)) & BigInt(0xffffffff)), cur64);
106
+ upgradedData.writeUInt32BE(Number(BigInt(newVal) & BigInt(0xffffffff)), cur64 + 4);
107
+ }
108
+ atom.kind = 'co64';
109
+ atom.data = upgradedData;
110
+ atom.size = atom_1.ATOM_PREAMBLE_SIZE * BigInt(2) + BigInt(upgradedData.byteLength);
111
+ }
112
+ function isCo64(atomKind) {
113
+ return atomKind === 'co64';
114
+ }
@@ -0,0 +1,9 @@
1
+ /// <reference types="node" />
2
+ export interface Cursor {
3
+ pos: bigint;
4
+ }
5
+ export declare function numToHex(val: number): string;
6
+ export declare function asciiToU32Be(chars: string): number;
7
+ export declare function u32BeToAscii(u32: number): string;
8
+ export declare function readU32(cur: Cursor, buf: Buffer): number;
9
+ export declare function readU64(cur: Cursor, buf: Buffer): bigint;
@@ -0,0 +1,34 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.readU64 = exports.readU32 = exports.u32BeToAscii = exports.asciiToU32Be = exports.numToHex = void 0;
4
+ function numToHex(val) {
5
+ return val.toString(16);
6
+ }
7
+ exports.numToHex = numToHex;
8
+ function asciiToU32Be(chars) {
9
+ return Buffer.from(chars.split('').map((char) => char.charCodeAt(0))).readUInt32BE(0);
10
+ }
11
+ exports.asciiToU32Be = asciiToU32Be;
12
+ function u32BeToAscii(u32) {
13
+ const buf = Buffer.alloc(4);
14
+ buf.writeUInt32BE(u32, 0);
15
+ return buf.toString('ascii');
16
+ }
17
+ exports.u32BeToAscii = u32BeToAscii;
18
+ function readU32(cur, buf) {
19
+ const u32 = buf.readUInt32BE(Number(cur.pos));
20
+ cur.pos += BigInt(4);
21
+ return u32;
22
+ }
23
+ exports.readU32 = readU32;
24
+ function readU64(cur, buf) {
25
+ const long = buf.slice(Number(cur.pos), Number(cur.pos + BigInt(8)));
26
+ const u64 =
27
+ // eslint-disable-next-line no-bitwise
28
+ (BigInt(long.readUInt32BE(0)) << BigInt(32)) |
29
+ // eslint-disable-next-line no-bitwise
30
+ (BigInt(long.readUInt32BE(4)) & BigInt(0xffffffff));
31
+ cur.pos += BigInt(8);
32
+ return u64;
33
+ }
34
+ exports.readU64 = readU64;
@@ -1,5 +1,6 @@
1
- import type { Browser, Page } from 'puppeteer-core';
2
1
  import type { BrowserExecutable } from 'remotion';
2
+ import type { Browser } from './browser/Browser';
3
+ import type { Page } from './browser/Page';
3
4
  import type { ChromiumOptions } from './open-browser';
4
5
  export declare const getPageAndCleanupFn: ({ passedInInstance, browserExecutable, chromiumOptions, }: {
5
6
  passedInInstance: Browser | undefined;
@@ -1,6 +1,6 @@
1
- import type { Browser } from 'puppeteer-core';
2
1
  import type { BrowserExecutable, FfmpegExecutable, TCompMetadata } from 'remotion';
3
2
  import type { BrowserLog } from './browser-log';
3
+ import type { Browser } from './browser/Browser';
4
4
  import type { ChromiumOptions } from './open-browser';
5
5
  declare type GetCompositionsConfig = {
6
6
  inputProps?: object | null;
@@ -14,8 +14,8 @@ const innerGetCompositions = async (serveUrl, page, config, proxyPort) => {
14
14
  var _a;
15
15
  (_a = config.onBrowserLog) === null || _a === void 0 ? void 0 : _a.call(config, {
16
16
  stackTrace: log.stackTrace(),
17
- text: log.text(),
18
- type: log.type(),
17
+ text: log.text,
18
+ type: log.type,
19
19
  });
20
20
  });
21
21
  }
@@ -40,7 +40,7 @@ const innerGetCompositions = async (serveUrl, page, config, proxyPort) => {
40
40
  frame: null,
41
41
  args: [],
42
42
  });
43
- await page.waitForFunction('window.ready === true');
43
+ await page.waitForFunction(page.browser, 'window.ready === true');
44
44
  const result = await (0, puppeteer_evaluate_1.puppeteerEvaluateWithCatch)({
45
45
  pageFunction: () => {
46
46
  return window.getStaticCompositions();
@@ -5,9 +5,9 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
5
5
  Object.defineProperty(exports, "__esModule", { value: true });
6
6
  exports.getLocalBrowserExecutable = exports.ensureLocalBrowser = void 0;
7
7
  const fs_1 = __importDefault(require("fs"));
8
- const puppeteer_core_1 = __importDefault(require("puppeteer-core"));
9
- const install_1 = require("puppeteer-core/lib/cjs/puppeteer/node/install");
10
- const revisions_1 = require("puppeteer-core/lib/cjs/puppeteer/revisions");
8
+ const create_browser_fetcher_1 = require("./browser/create-browser-fetcher");
9
+ const node_1 = require("./browser/node");
10
+ const revisions_1 = require("./browser/revisions");
11
11
  const getSearchPathsForProduct = (product) => {
12
12
  var _a;
13
13
  if (product === 'chrome') {
@@ -44,8 +44,10 @@ const getLocalBrowser = (product) => {
44
44
  return null;
45
45
  };
46
46
  const getBrowserRevision = (product) => {
47
- const browserFetcher = puppeteer_core_1.default.createBrowserFetcher({
47
+ const browserFetcher = node_1.puppeteer.createBrowserFetcher({
48
48
  product,
49
+ path: null,
50
+ platform: null,
49
51
  });
50
52
  const revisionInfo = browserFetcher.revisionInfo(product === 'firefox'
51
53
  ? revisions_1.PUPPETEER_REVISIONS.firefox
@@ -73,7 +75,7 @@ const ensureLocalBrowser = async (browser, preferredBrowserExecutable) => {
73
75
  const status = getBrowserStatus(mapBrowserToProduct(browser), preferredBrowserExecutable);
74
76
  if (status.type === 'no-browser') {
75
77
  console.log('No local browser could be found. Downloading one from the internet...');
76
- await (0, install_1.downloadBrowser)();
78
+ await (0, create_browser_fetcher_1.downloadBrowser)(browser);
77
79
  }
78
80
  };
79
81
  exports.ensureLocalBrowser = ensureLocalBrowser;
package/dist/get-port.js CHANGED
@@ -14,7 +14,7 @@ const getAvailablePort = (portToTry) => new Promise((resolve) => {
14
14
  status = 'unavailable';
15
15
  socket.destroy();
16
16
  });
17
- socket.setTimeout(1000);
17
+ socket.setTimeout(3000);
18
18
  socket.on('timeout', () => {
19
19
  status = 'unavailable';
20
20
  socket.destroy();
@@ -26,15 +26,9 @@ const getAvailablePort = (portToTry) => new Promise((resolve) => {
26
26
  socket.on('close', () => resolve(status));
27
27
  socket.connect(portToTry, host);
28
28
  });
29
- const portCheckSequence = function* (ports) {
30
- if (ports) {
31
- yield* ports;
32
- }
33
- yield 0; // Fall back to 0 if anything else failed
34
- };
35
29
  const getPort = async (from, to) => {
36
30
  const ports = makeRange(from, to);
37
- for (const port of portCheckSequence(ports)) {
31
+ for (const port of ports) {
38
32
  if ((await getAvailablePort(port)) === 'available') {
39
33
  return port;
40
34
  }
@@ -71,10 +65,7 @@ const makeRange = (from, to) => {
71
65
  if (to < from) {
72
66
  throw new RangeError('`to` must be greater than or equal to `from`');
73
67
  }
74
- const generator = function* (f, t) {
75
- for (let port = f; port <= t; port++) {
76
- yield port;
77
- }
78
- };
79
- return generator(from, to);
68
+ return new Array(to - from + 1).fill(true).map((_, i) => {
69
+ return i + from;
70
+ });
80
71
  };
@@ -0,0 +1,8 @@
1
+ import type { FfmpegExecutable } from 'remotion';
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 {};
@@ -0,0 +1,50 @@
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.getVideoInfo = void 0;
7
+ const execa_1 = __importDefault(require("execa"));
8
+ const calculate_sar_dar_pixels_1 = require("./calculate-sar-dar-pixels");
9
+ const p_limit_1 = require("./p-limit");
10
+ const isVp9VideoCache = {};
11
+ const limit = (0, p_limit_1.pLimit)(1);
12
+ async function getVideoInfoUnlimited(src, ffprobeExecutable) {
13
+ var _a;
14
+ if (typeof isVp9VideoCache[src] !== 'undefined') {
15
+ return isVp9VideoCache[src];
16
+ }
17
+ const task = await (0, execa_1.default)(ffprobeExecutable !== null && ffprobeExecutable !== void 0 ? ffprobeExecutable : 'ffprobe', [src]);
18
+ const isVp9 = task.stderr.includes('Video: vp9');
19
+ const isVp8 = task.stderr.includes('Video: vp8');
20
+ const dimensions = (_a = task.stderr
21
+ .split('\n')
22
+ .find((n) => n.trim().startsWith('Stream #'))) === null || _a === void 0 ? void 0 : _a.match(/([0-9]{2,6})x([0-9]{2,6})/);
23
+ const dar = task.stderr.match(/DAR\s([0-9]+):([0-9]+)/);
24
+ let needsResize = null;
25
+ if (dimensions && dar) {
26
+ const width = parseInt(dimensions[1], 10);
27
+ const height = parseInt(dimensions[2], 10);
28
+ const darWidth = parseInt(dar[1], 10);
29
+ const darHeight = parseInt(dar[2], 10);
30
+ const { width: actualWidth, height: actualHeight } = (0, calculate_sar_dar_pixels_1.calculateDisplayVideoSize)({
31
+ darX: darWidth,
32
+ darY: darHeight,
33
+ x: width,
34
+ y: height,
35
+ });
36
+ if (actualWidth !== width || actualHeight !== height) {
37
+ needsResize = [actualWidth, actualHeight];
38
+ }
39
+ }
40
+ const result = {
41
+ specialVcodec: isVp9 ? 'vp9' : isVp8 ? 'vp8' : 'none',
42
+ needsResize,
43
+ };
44
+ isVp9VideoCache[src] = result;
45
+ return isVp9VideoCache[src];
46
+ }
47
+ const getVideoInfo = (src, ffprobeExecutable) => {
48
+ return limit(() => getVideoInfoUnlimited(src, ffprobeExecutable));
49
+ };
50
+ exports.getVideoInfo = getVideoInfo;
package/dist/index.d.ts CHANGED
@@ -1,3 +1,4 @@
1
+ /// <reference types="node" />
1
2
  import execa from 'execa';
2
3
  import mime from 'mime-types';
3
4
  import { SymbolicateableError } from './error-handling/symbolicateable-error';
@@ -51,7 +52,7 @@ export declare const RenderInternals: {
51
52
  }) => void;
52
53
  normalizeServeUrl: (unnormalized: string) => string;
53
54
  spawnFfmpeg: (options: import("./stitch-frames-to-video").StitcherOptions) => Promise<{
54
- task: Promise<void>;
55
+ task: Promise<Buffer | null>;
55
56
  getLogs: () => string;
56
57
  }>;
57
58
  getFileExtensionFromCodec: (codec: "h264" | "h265" | "vp8" | "vp9" | "mp3" | "aac" | "wav" | "prores" | "h264-mkv", type: "chunk" | "final") => "mp3" | "aac" | "wav" | "mp4" | "mkv" | "mov" | "webm";
@@ -61,12 +62,17 @@ export declare const RenderInternals: {
61
62
  ensureOutputDirectory: (outputLocation: string) => void;
62
63
  getRealFrameRange: (durationInFrames: number, frameRange: import("remotion").FrameRange | null) => [number, number];
63
64
  validatePuppeteerTimeout: (timeoutInMilliseconds: unknown) => void;
64
- downloadFile: (url: string, to: string, onProgress: ((progress: {
65
- progress: number;
66
- downloaded: number;
67
- totalSize: number;
68
- }) => void) | undefined) => Promise<{
65
+ downloadFile: ({ onProgress, url, to: toFn, }: {
66
+ url: string;
67
+ to: (contentDisposition: string | null) => string;
68
+ onProgress: ((progress: {
69
+ percent: number | null;
70
+ downloaded: number;
71
+ totalSize: number | null;
72
+ }) => void) | undefined;
73
+ }) => Promise<{
69
74
  sizeInBytes: number;
75
+ to: string;
70
76
  }>;
71
77
  validateScale: (scale: unknown) => void;
72
78
  killAllBrowsers: () => Promise<void>;
@@ -96,4 +102,6 @@ export declare const RenderInternals: {
96
102
  node(scriptPath: string, options?: execa.Options<string> | undefined): execa.ExecaChildProcess<string>;
97
103
  node(scriptPath: string, options?: execa.Options<null> | undefined): execa.ExecaChildProcess<Buffer>;
98
104
  };
105
+ registerErrorSymbolicationLock: () => number;
106
+ unlockErrorSymbolicationLock: (id: number) => void;
99
107
  };
package/dist/index.js CHANGED
@@ -31,6 +31,7 @@ const validate_even_dimensions_with_codec_1 = require("./validate-even-dimension
31
31
  const validate_ffmpeg_1 = require("./validate-ffmpeg");
32
32
  const validate_puppeteer_timeout_1 = require("./validate-puppeteer-timeout");
33
33
  const validate_scale_1 = require("./validate-scale");
34
+ const wait_for_symbolication_error_to_be_done_1 = require("./wait-for-symbolication-error-to-be-done");
34
35
  var combine_videos_1 = require("./combine-videos");
35
36
  Object.defineProperty(exports, "combineVideos", { enumerable: true, get: function () { return combine_videos_1.combineVideos; } });
36
37
  var handle_javascript_exception_1 = require("./error-handling/handle-javascript-exception");
@@ -80,4 +81,6 @@ exports.RenderInternals = {
80
81
  mime: mime_types_1.default,
81
82
  isPathInside: is_path_inside_1.isPathInside,
82
83
  execa: execa_1.default,
84
+ registerErrorSymbolicationLock: wait_for_symbolication_error_to_be_done_1.registerErrorSymbolicationLock,
85
+ unlockErrorSymbolicationLock: wait_for_symbolication_error_to_be_done_1.unlockErrorSymbolicationLock,
83
86
  };
@@ -1,5 +1,6 @@
1
+ /// <reference types="node" />
1
2
  import type { FfmpegExecutable, OffthreadVideoImageFormat } from 'remotion';
2
- import type { SpecialVCodecForTransparency } from './is-vp9-video';
3
+ import type { SpecialVCodecForTransparency } from './get-video-info';
3
4
  export declare type LastFrameOptions = {
4
5
  ffmpegExecutable: FfmpegExecutable;
5
6
  ffprobeExecutable: FfmpegExecutable;
@@ -7,6 +8,7 @@ export declare type LastFrameOptions = {
7
8
  src: string;
8
9
  specialVCodecForTransparency: SpecialVCodecForTransparency;
9
10
  imageFormat: OffthreadVideoImageFormat;
11
+ needsResize: [number, number] | null;
10
12
  };
11
13
  export declare const setLastFrameInCache: (options: LastFrameOptions, data: Buffer) => void;
12
14
  export declare const getLastFrameFromCache: (options: LastFrameOptions) => Buffer | null;
File without changes
@@ -0,0 +1 @@
1
+ "use strict";
@@ -45,12 +45,8 @@ const startOffthreadVideoServer = ({ ffmpegExecutable, ffprobeExecutable, downlo
45
45
  const { src, time, imageFormat } = (0, exports.extractUrlAndSourceFromUrl)(req.url);
46
46
  res.setHeader('access-control-allow-origin', '*');
47
47
  res.setHeader('content-type', `image/${imageFormat === 'jpeg' ? 'jpg' : 'png'}`);
48
- const to = (0, download_and_map_assets_to_file_1.getSanitizedFilenameForAssetUrl)({ downloadDir, src });
49
- (0, download_and_map_assets_to_file_1.startDownloadForSrc)({ src, downloadDir, onDownload }).catch((err) => {
50
- onError(new Error(`Error while downloading asset: ${err.stack}`));
51
- });
52
- (0, download_and_map_assets_to_file_1.waitForAssetToBeDownloaded)(src, to)
53
- .then(() => {
48
+ (0, download_and_map_assets_to_file_1.downloadAsset)({ src, downloadDir, onDownload })
49
+ .then((to) => {
54
50
  return (0, extract_frame_from_video_1.extractFrameFromVideo)({
55
51
  time,
56
52
  src: to,
@@ -1,5 +1,6 @@
1
- import puppeteer from 'puppeteer-core';
2
1
  import type { Browser } from 'remotion';
2
+ import type { Browser as PuppeteerBrowser } from './browser/Browser';
3
+ import type { Viewport } from './browser/PuppeteerViewport';
3
4
  declare const validRenderers: readonly ["swangle", "angle", "egl", "swiftshader"];
4
5
  declare type OpenGlRenderer = typeof validRenderers[number];
5
6
  export declare type ChromiumOptions = {
@@ -14,5 +15,6 @@ export declare const openBrowser: (browser: Browser, options?: {
14
15
  browserExecutable?: string | null;
15
16
  chromiumOptions?: ChromiumOptions;
16
17
  forceDeviceScaleFactor?: number;
17
- }) => Promise<puppeteer.Browser>;
18
+ viewport?: Viewport;
19
+ }) => Promise<PuppeteerBrowser>;
18
20
  export {};
@@ -7,8 +7,8 @@ exports.openBrowser = exports.killAllBrowsers = void 0;
7
7
  const fs_1 = __importDefault(require("fs"));
8
8
  const os_1 = __importDefault(require("os"));
9
9
  const path_1 = __importDefault(require("path"));
10
- const puppeteer_core_1 = __importDefault(require("puppeteer-core"));
11
10
  const remotion_1 = require("remotion");
11
+ const node_1 = require("./browser/node");
12
12
  const get_local_browser_executable_1 = require("./get-local-browser-executable");
13
13
  const validRenderers = ['swangle', 'angle', 'egl', 'swiftshader'];
14
14
  const getOpenGlRenderer = (option) => {
@@ -33,18 +33,17 @@ const killAllBrowsers = async () => {
33
33
  };
34
34
  exports.killAllBrowsers = killAllBrowsers;
35
35
  const openBrowser = async (browser, options) => {
36
- var _a, _b, _c, _d, _e, _f, _g, _h, _j;
36
+ var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k;
37
37
  if (browser === 'firefox' && !remotion_1.Internals.FEATURE_FLAG_FIREFOX_SUPPORT) {
38
38
  throw new TypeError('Firefox supported is not yet turned on. Stay tuned for the future.');
39
39
  }
40
40
  await (0, get_local_browser_executable_1.ensureLocalBrowser)(browser, (_a = options === null || options === void 0 ? void 0 : options.browserExecutable) !== null && _a !== void 0 ? _a : null);
41
41
  const executablePath = (0, get_local_browser_executable_1.getLocalBrowserExecutable)(browser, (_b = options === null || options === void 0 ? void 0 : options.browserExecutable) !== null && _b !== void 0 ? _b : null);
42
42
  const customGlRenderer = getOpenGlRenderer((_d = (_c = options === null || options === void 0 ? void 0 : options.chromiumOptions) === null || _c === void 0 ? void 0 : _c.gl) !== null && _d !== void 0 ? _d : null);
43
- const browserInstance = await puppeteer_core_1.default.launch({
43
+ const browserInstance = await node_1.puppeteer.launch({
44
44
  executablePath,
45
45
  product: browser,
46
46
  dumpio: (_e = options === null || options === void 0 ? void 0 : options.shouldDumpIo) !== null && _e !== void 0 ? _e : false,
47
- ignoreDefaultArgs: true,
48
47
  args: [
49
48
  'about:blank',
50
49
  '--allow-pre-commit-input',
@@ -61,8 +60,6 @@ const openBrowser = async (browser, options) => {
61
60
  '--no-proxy-server',
62
61
  "--proxy-server='direct://'",
63
62
  '--proxy-bypass-list=*',
64
- // TODO: remove AvoidUnnecessaryBeforeUnloadCheckSync below
65
- // once crbug.com/1324138 is fixed and released.
66
63
  '--disable-hang-monitor',
67
64
  '--disable-ipc-flooding-protection',
68
65
  '--disable-popup-blocking',
@@ -76,8 +73,6 @@ const openBrowser = async (browser, options) => {
76
73
  '--enable-automation',
77
74
  '--password-store=basic',
78
75
  '--use-mock-keychain',
79
- // TODO(sadym): remove '--enable-blink-features=IdleDetection'
80
- // once IdleDetection is turned on by default.
81
76
  '--enable-blink-features=IdleDetection',
82
77
  '--export-tagged-pdf',
83
78
  '--intensive-wake-up-throttling-policy=0',
@@ -113,6 +108,11 @@ const openBrowser = async (browser, options) => {
113
108
  ]
114
109
  : []),
115
110
  ].filter(Boolean),
111
+ defaultViewport: (_k = options === null || options === void 0 ? void 0 : options.viewport) !== null && _k !== void 0 ? _k : {
112
+ height: 720,
113
+ width: 1280,
114
+ deviceScaleFactor: 1,
115
+ },
116
116
  });
117
117
  const pages = await browserInstance.pages();
118
118
  await pages[0].close();
@@ -8,6 +8,7 @@ const fs_1 = require("fs");
8
8
  const path_1 = __importDefault(require("path"));
9
9
  const is_serve_url_1 = require("./is-serve-url");
10
10
  const serve_static_1 = require("./serve-static");
11
+ const wait_for_symbolication_error_to_be_done_1 = require("./wait-for-symbolication-error-to-be-done");
11
12
  const prepareServer = async ({ downloadDir, ffmpegExecutable, ffprobeExecutable, onDownload, onError, webpackConfigOrServeUrl, port, }) => {
12
13
  if ((0, is_serve_url_1.isServeUrl)(webpackConfigOrServeUrl)) {
13
14
  const { port: offthreadPort, close: closeProxy } = await (0, serve_static_1.serveStatic)(null, {
@@ -20,7 +21,9 @@ const prepareServer = async ({ downloadDir, ffmpegExecutable, ffprobeExecutable,
20
21
  });
21
22
  return Promise.resolve({
22
23
  serveUrl: webpackConfigOrServeUrl,
23
- closeServer: () => closeProxy(),
24
+ closeServer: () => {
25
+ return closeProxy();
26
+ },
24
27
  offthreadPort,
25
28
  });
26
29
  }
@@ -40,7 +43,7 @@ const prepareServer = async ({ downloadDir, ffmpegExecutable, ffprobeExecutable,
40
43
  });
41
44
  return Promise.resolve({
42
45
  closeServer: () => {
43
- return close();
46
+ return (0, wait_for_symbolication_error_to_be_done_1.waitForSymbolicationToBeDone)().then(() => close());
44
47
  },
45
48
  serveUrl: `http://localhost:${serverPort}`,
46
49
  offthreadPort: serverPort,
@@ -1,11 +1,12 @@
1
- import type puppeteer from 'puppeteer-core';
1
+ /// <reference types="node" />
2
2
  import type { ImageFormat } from 'remotion';
3
+ import type { Page } from './browser/Page';
3
4
  export declare const provideScreenshot: ({ page, imageFormat, options, quality, }: {
4
- page: puppeteer.Page;
5
+ page: Page;
5
6
  imageFormat: ImageFormat;
6
7
  quality: number | undefined;
7
8
  options: {
8
9
  frame: number;
9
- output?: string;
10
+ output: string | null;
10
11
  };
11
12
  }) => Promise<Buffer>;