@remotion/renderer 3.0.22 → 3.0.25

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 (118) hide show
  1. package/dist/assets/calculate-asset-positions.d.ts +2 -2
  2. package/dist/assets/convert-assets-to-file-urls.d.ts +2 -2
  3. package/dist/assets/download-and-map-assets-to-file.d.ts +1 -1
  4. package/dist/assets/ffmpeg-volume-expression.d.ts +1 -1
  5. package/dist/assets/flatten-volume-array.d.ts +1 -1
  6. package/dist/assets/get-audio-channels.d.ts +1 -1
  7. package/dist/assets/types.d.ts +1 -1
  8. package/dist/browser/Browser.d.ts +5 -159
  9. package/dist/browser/Browser.js +5 -190
  10. package/dist/browser/BrowserConnector.d.ts +1 -1
  11. package/dist/browser/BrowserFetcher.d.ts +3 -3
  12. package/dist/browser/BrowserFetcher.js +38 -20
  13. package/dist/browser/BrowserRunner.d.ts +2 -2
  14. package/dist/browser/BrowserRunner.js +1 -1
  15. package/dist/browser/Connection.d.ts +2 -9
  16. package/dist/browser/Connection.js +3 -23
  17. package/dist/browser/ConsoleMessage.d.ts +1 -1
  18. package/dist/browser/DOMWorld.d.ts +5 -6
  19. package/dist/browser/DOMWorld.js +2 -18
  20. package/dist/browser/EvalTypes.d.ts +1 -1
  21. package/dist/browser/EventEmitter.d.ts +1 -48
  22. package/dist/browser/EventEmitter.js +0 -49
  23. package/dist/browser/ExecutionContext.d.ts +6 -5
  24. package/dist/browser/FrameManager.d.ts +9 -13
  25. package/dist/browser/FrameManager.js +3 -19
  26. package/dist/browser/HTTPRequest.d.ts +2 -2
  27. package/dist/browser/HTTPResponse.d.ts +0 -1
  28. package/dist/browser/HTTPResponse.js +2 -9
  29. package/dist/browser/JSHandle.d.ts +3 -4
  30. package/dist/browser/JSHandle.js +0 -3
  31. package/dist/browser/LaunchOptions.d.ts +2 -81
  32. package/dist/browser/Launcher.d.ts +2 -2
  33. package/dist/browser/Launcher.js +21 -119
  34. package/dist/browser/LifecycleWatcher.d.ts +4 -4
  35. package/dist/browser/LifecycleWatcher.js +4 -17
  36. package/dist/browser/NetworkEventManager.d.ts +1 -3
  37. package/dist/browser/NetworkEventManager.js +0 -47
  38. package/dist/browser/NetworkManager.d.ts +1 -3
  39. package/dist/browser/NetworkManager.js +3 -35
  40. package/dist/browser/Page.d.ts +7 -9
  41. package/dist/browser/PuppeteerNode.d.ts +7 -56
  42. package/dist/browser/PuppeteerNode.js +4 -58
  43. package/dist/browser/Target.d.ts +3 -3
  44. package/dist/browser/assert.d.ts +0 -20
  45. package/dist/browser/assert.js +0 -20
  46. package/dist/browser/create-browser-fetcher.d.ts +1 -1
  47. package/dist/browser/create-browser-fetcher.js +3 -11
  48. package/dist/browser/util.d.ts +2 -2
  49. package/dist/browser/util.js +1 -1
  50. package/dist/browser-log.d.ts +1 -1
  51. package/dist/calculate-ffmpeg-filters.d.ts +1 -1
  52. package/dist/calculate-sar-dar-pixels.d.ts +9 -0
  53. package/dist/calculate-sar-dar-pixels.js +19 -0
  54. package/dist/can-use-parallel-encoding.d.ts +1 -1
  55. package/dist/combine-videos.d.ts +1 -1
  56. package/dist/convert-to-pcm.d.ts +1 -1
  57. package/dist/create-silent-audio.d.ts +1 -1
  58. package/dist/cycle-browser-tabs.d.ts +1 -1
  59. package/dist/delay-render-embedded-stack.d.ts +1 -1
  60. package/dist/ensure-presentation-timestamp.d.ts +1 -1
  61. package/dist/ensure-presentation-timestamp.js +1 -1
  62. package/dist/error-handling/handle-javascript-exception.d.ts +2 -2
  63. package/dist/error-handling/handle-javascript-exception.js +2 -2
  64. package/dist/error-handling/symbolicate-error.d.ts +1 -1
  65. package/dist/error-handling/symbolicateable-error.d.ts +1 -1
  66. package/dist/extract-frame-from-video.d.ts +3 -4
  67. package/dist/extract-frame-from-video.js +26 -14
  68. package/dist/get-audio-codec-name.d.ts +1 -1
  69. package/dist/get-browser-instance.d.ts +4 -3
  70. package/dist/get-codec-name.d.ts +1 -1
  71. package/dist/get-compositions.d.ts +4 -4
  72. package/dist/get-compositions.js +2 -2
  73. package/dist/get-duration-from-frame-range.d.ts +1 -1
  74. package/dist/get-extension-from-codec.d.ts +1 -1
  75. package/dist/get-frame-to-render.d.ts +1 -1
  76. package/dist/get-local-browser-executable.d.ts +1 -1
  77. package/dist/get-local-browser-executable.js +7 -5
  78. package/dist/get-prores-profile-name.d.ts +1 -1
  79. package/dist/get-video-info.d.ts +8 -0
  80. package/dist/get-video-info.js +50 -0
  81. package/dist/image-format.d.ts +1 -1
  82. package/dist/is-vp9-video.d.ts +1 -1
  83. package/dist/last-frame-from-video-cache.d.ts +3 -2
  84. package/dist/merge-audio-track.d.ts +1 -1
  85. package/dist/offthread-video-server.d.ts +3 -3
  86. package/dist/open-browser.d.ts +5 -3
  87. package/dist/open-browser.js +8 -8
  88. package/dist/prepare-server.d.ts +2 -2
  89. package/dist/preprocess-audio-track.d.ts +2 -2
  90. package/dist/prespawn-ffmpeg.d.ts +2 -2
  91. package/dist/provide-screenshot.d.ts +4 -4
  92. package/dist/provide-screenshot.js +0 -1
  93. package/dist/puppeteer-evaluate.d.ts +1 -1
  94. package/dist/puppeteer-evaluate.js +3 -4
  95. package/dist/puppeteer-screenshot.d.ts +3 -2
  96. package/dist/puppeteer-screenshot.js +2 -4
  97. package/dist/render-frames.d.ts +9 -9
  98. package/dist/render-frames.js +18 -10
  99. package/dist/render-media.d.ts +8 -8
  100. package/dist/render-still.d.ts +6 -6
  101. package/dist/screenshot-dom-element.d.ts +6 -7
  102. package/dist/screenshot-dom-element.js +3 -6
  103. package/dist/screenshot-task.d.ts +3 -2
  104. package/dist/screenshot-task.js +3 -5
  105. package/dist/seek-to-frame.d.ts +2 -2
  106. package/dist/serve-handler/index.d.ts +1 -1
  107. package/dist/serve-handler/index.js +0 -1
  108. package/dist/serve-static.d.ts +2 -2
  109. package/dist/set-props-and-env.d.ts +1 -1
  110. package/dist/set-props-and-env.js +3 -0
  111. package/dist/stitch-frames-to-video.d.ts +3 -3
  112. package/dist/stringify-ffmpeg-filter.d.ts +2 -2
  113. package/dist/stringify-ffmpeg-filter.js +3 -0
  114. package/dist/symbolicate-stacktrace.d.ts +1 -1
  115. package/dist/types.d.ts +1 -1
  116. package/dist/validate-even-dimensions-with-codec.d.ts +1 -1
  117. package/dist/validate-output-filename.d.ts +1 -1
  118. package/package.json +10 -6
@@ -3,14 +3,14 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
3
3
  return (mod && mod.__esModule) ? mod : { "default": mod };
4
4
  };
5
5
  Object.defineProperty(exports, "__esModule", { value: true });
6
- exports.extractFrameFromVideo = exports.getLastFrameOfVideo = exports.determineVcodecFfmepgFlags = void 0;
6
+ exports.extractFrameFromVideo = exports.getLastFrameOfVideo = exports.determineResizeParams = void 0;
7
7
  const execa_1 = __importDefault(require("execa"));
8
8
  const remotion_1 = require("remotion");
9
9
  const get_audio_channels_1 = require("./assets/get-audio-channels");
10
10
  const ensure_presentation_timestamp_1 = require("./ensure-presentation-timestamp");
11
11
  const frame_to_ffmpeg_timestamp_1 = require("./frame-to-ffmpeg-timestamp");
12
+ const get_video_info_1 = require("./get-video-info");
12
13
  const is_beyond_last_frame_1 = require("./is-beyond-last-frame");
13
- const is_vp9_video_1 = require("./is-vp9-video");
14
14
  const last_frame_from_video_cache_1 = require("./last-frame-from-video-cache");
15
15
  const p_limit_1 = require("./p-limit");
16
16
  const lastFrameLimit = (0, p_limit_1.pLimit)(1);
@@ -23,16 +23,22 @@ const determineVcodecFfmepgFlags = (vcodecFlag) => {
23
23
  vcodecFlag === 'vp8' ? 'libvpx' : null,
24
24
  ].filter(remotion_1.Internals.truthy);
25
25
  };
26
- exports.determineVcodecFfmepgFlags = determineVcodecFfmepgFlags;
26
+ const determineResizeParams = (needsResize) => {
27
+ if (needsResize === null) {
28
+ return [];
29
+ }
30
+ return ['-s', `${needsResize[0]}x${needsResize[1]}`];
31
+ };
32
+ exports.determineResizeParams = determineResizeParams;
27
33
  // Uses no seeking, therefore the whole video has to be decoded. This is a last resort and should only happen
28
34
  // if the video is corrupted
29
- const getFrameOfVideoSlow = async ({ src, timestamp, ffmpegExecutable, imageFormat, specialVCodecForTransparency, }) => {
35
+ const getFrameOfVideoSlow = async ({ src, timestamp, ffmpegExecutable, imageFormat, specialVCodecForTransparency, needsResize, }) => {
30
36
  console.warn(`\nUsing a slow method to extract the frame at ${timestamp}ms of ${src}. See https://remotion.dev/docs/slow-method-to-extract-frame for advice`);
31
37
  const actualOffset = `-${timestamp * 1000}ms`;
32
38
  const command = [
33
39
  '-itsoffset',
34
40
  actualOffset,
35
- ...(0, exports.determineVcodecFfmepgFlags)(specialVCodecForTransparency),
41
+ ...determineVcodecFfmepgFlags(specialVCodecForTransparency),
36
42
  '-i',
37
43
  src,
38
44
  '-frames:v',
@@ -41,6 +47,7 @@ const getFrameOfVideoSlow = async ({ src, timestamp, ffmpegExecutable, imageForm
41
47
  imageFormat === 'jpeg' ? 'mjpeg' : 'png',
42
48
  '-f',
43
49
  'image2pipe',
50
+ ...(0, exports.determineResizeParams)(needsResize),
44
51
  '-',
45
52
  ].filter(remotion_1.Internals.truthy);
46
53
  const { stdout, stderr } = (0, execa_1.default)(ffmpegExecutable !== null && ffmpegExecutable !== void 0 ? ffmpegExecutable : 'ffmpeg', command);
@@ -86,6 +93,7 @@ const getLastFrameOfVideoFastUnlimited = async (options) => {
86
93
  src,
87
94
  imageFormat: options.imageFormat,
88
95
  specialVCodecForTransparency: options.specialVCodecForTransparency,
96
+ needsResize: options.needsResize,
89
97
  });
90
98
  return last;
91
99
  }
@@ -93,7 +101,7 @@ const getLastFrameOfVideoFastUnlimited = async (options) => {
93
101
  const { stdout, stderr } = (0, execa_1.default)(ffmpegExecutable !== null && ffmpegExecutable !== void 0 ? ffmpegExecutable : 'ffmpeg', [
94
102
  '-ss',
95
103
  actualOffset,
96
- ...(0, exports.determineVcodecFfmepgFlags)(options.specialVCodecForTransparency),
104
+ ...determineVcodecFfmepgFlags(options.specialVCodecForTransparency),
97
105
  '-i',
98
106
  src,
99
107
  '-frames:v',
@@ -102,6 +110,7 @@ const getLastFrameOfVideoFastUnlimited = async (options) => {
102
110
  options.imageFormat === 'jpeg' ? 'mjpeg' : 'png',
103
111
  '-f',
104
112
  'image2pipe',
113
+ ...(0, exports.determineResizeParams)(options.needsResize),
105
114
  '-',
106
115
  ].filter(remotion_1.Internals.truthy));
107
116
  if (!stderr) {
@@ -138,6 +147,7 @@ const getLastFrameOfVideoFastUnlimited = async (options) => {
138
147
  ffprobeExecutable,
139
148
  imageFormat: options.imageFormat,
140
149
  specialVCodecForTransparency: options.specialVCodecForTransparency,
150
+ needsResize: options.needsResize,
141
151
  });
142
152
  return unlimited;
143
153
  }
@@ -151,16 +161,15 @@ const getLastFrameOfVideo = async (options) => {
151
161
  exports.getLastFrameOfVideo = getLastFrameOfVideo;
152
162
  const extractFrameFromVideoFn = async ({ time, src, ffmpegExecutable, ffprobeExecutable, imageFormat, }) => {
153
163
  await (0, ensure_presentation_timestamp_1.ensurePresentationTimestamps)(src);
154
- const specialVCodecForTransparency = imageFormat === 'jpeg'
155
- ? 'none'
156
- : await (0, is_vp9_video_1.getSpecialVCodecForTransparency)(src, ffprobeExecutable);
157
- if (specialVCodecForTransparency === 'vp8') {
164
+ const { specialVcodec, needsResize } = await (0, get_video_info_1.getVideoInfo)(src, ffprobeExecutable);
165
+ if (specialVcodec === 'vp8') {
158
166
  return getFrameOfVideoSlow({
159
167
  ffmpegExecutable,
160
168
  imageFormat,
161
- specialVCodecForTransparency,
169
+ specialVCodecForTransparency: specialVcodec,
162
170
  src,
163
171
  timestamp: time,
172
+ needsResize,
164
173
  });
165
174
  }
166
175
  if ((0, is_beyond_last_frame_1.isBeyondLastFrame)(src, time)) {
@@ -170,7 +179,8 @@ const extractFrameFromVideoFn = async ({ time, src, ffmpegExecutable, ffprobeExe
170
179
  offset: 0,
171
180
  src,
172
181
  imageFormat,
173
- specialVCodecForTransparency,
182
+ specialVCodecForTransparency: specialVcodec,
183
+ needsResize,
174
184
  });
175
185
  return lastFrame;
176
186
  }
@@ -178,7 +188,7 @@ const extractFrameFromVideoFn = async ({ time, src, ffmpegExecutable, ffprobeExe
178
188
  const { stdout, stderr } = (0, execa_1.default)(ffmpegExecutable !== null && ffmpegExecutable !== void 0 ? ffmpegExecutable : 'ffmpeg', [
179
189
  '-ss',
180
190
  ffmpegTimestamp,
181
- ...(0, exports.determineVcodecFfmepgFlags)(specialVCodecForTransparency),
191
+ ...determineVcodecFfmepgFlags(specialVcodec),
182
192
  '-i',
183
193
  src,
184
194
  '-frames:v',
@@ -187,6 +197,7 @@ const extractFrameFromVideoFn = async ({ time, src, ffmpegExecutable, ffprobeExe
187
197
  'image2pipe',
188
198
  '-vcodec',
189
199
  imageFormat === 'jpeg' ? 'mjpeg' : 'png',
200
+ ...(0, exports.determineResizeParams)(needsResize),
190
201
  '-',
191
202
  ].filter(remotion_1.Internals.truthy), {
192
203
  buffer: false,
@@ -221,7 +232,8 @@ const extractFrameFromVideoFn = async ({ time, src, ffmpegExecutable, ffprobeExe
221
232
  offset: 0,
222
233
  src,
223
234
  imageFormat,
224
- specialVCodecForTransparency,
235
+ specialVCodecForTransparency: specialVcodec,
236
+ needsResize,
225
237
  });
226
238
  return last;
227
239
  }
@@ -1,2 +1,2 @@
1
- import { Codec } from 'remotion';
1
+ import type { Codec } from 'remotion';
2
2
  export declare const getAudioCodecName: (codec: Codec) => string | null;
@@ -1,6 +1,7 @@
1
- import { Browser, Page } from 'puppeteer-core';
2
- import { BrowserExecutable } from 'remotion';
3
- import { ChromiumOptions } from './open-browser';
1
+ import type { BrowserExecutable } from 'remotion';
2
+ import type { Browser } from './browser/Browser';
3
+ import type { Page } from './browser/Page';
4
+ import type { ChromiumOptions } from './open-browser';
4
5
  export declare const getPageAndCleanupFn: ({ passedInInstance, browserExecutable, chromiumOptions, }: {
5
6
  passedInInstance: Browser | undefined;
6
7
  browserExecutable: BrowserExecutable | null;
@@ -1,2 +1,2 @@
1
- import { Codec } from 'remotion';
1
+ import type { Codec } from 'remotion';
2
2
  export declare const getCodecName: (codec: Codec) => string | null;
@@ -1,7 +1,7 @@
1
- import { Browser } from 'puppeteer-core';
2
- import { BrowserExecutable, FfmpegExecutable, TCompMetadata } from 'remotion';
3
- import { BrowserLog } from './browser-log';
4
- import { ChromiumOptions } from './open-browser';
1
+ import type { BrowserExecutable, FfmpegExecutable, TCompMetadata } from 'remotion';
2
+ import type { BrowserLog } from './browser-log';
3
+ import type { Browser } from './browser/Browser';
4
+ import type { ChromiumOptions } from './open-browser';
5
5
  declare type GetCompositionsConfig = {
6
6
  inputProps?: object | null;
7
7
  envVariables?: Record<string, string>;
@@ -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
  }
@@ -1,2 +1,2 @@
1
- import { FrameRange } from 'remotion';
1
+ import type { FrameRange } from 'remotion';
2
2
  export declare const getDurationFromFrameRange: (frameRange: FrameRange | null, durationInFrames: number) => number;
@@ -1,2 +1,2 @@
1
- import { Codec } from 'remotion';
1
+ import type { Codec } from 'remotion';
2
2
  export declare const getFileExtensionFromCodec: (codec: Codec, type: 'chunk' | 'final') => "mp3" | "aac" | "wav" | "mp4" | "mkv" | "mov" | "webm";
@@ -1,2 +1,2 @@
1
- import { FrameRange } from 'remotion';
1
+ import type { FrameRange } from 'remotion';
2
2
  export declare const getRealFrameRange: (durationInFrames: number, frameRange: FrameRange | null) => [number, number];
@@ -1,3 +1,3 @@
1
- import { Browser, BrowserExecutable } from 'remotion';
1
+ import type { Browser, BrowserExecutable } from 'remotion';
2
2
  export declare const ensureLocalBrowser: (browser: Browser, preferredBrowserExecutable: BrowserExecutable) => Promise<void>;
3
3
  export declare const getLocalBrowserExecutable: (browser: Browser, preferredBrowserExecutable: BrowserExecutable) => string;
@@ -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;
@@ -1,2 +1,2 @@
1
- import { Codec, ProResProfile } from 'remotion';
1
+ import type { Codec, ProResProfile } from 'remotion';
2
2
  export declare const getProResProfileName: (codec: Codec, proResProfile: ProResProfile | undefined) => string | null;
@@ -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;
@@ -1,2 +1,2 @@
1
- import { ImageFormat } from 'remotion';
1
+ import type { ImageFormat } from 'remotion';
2
2
  export declare const DEFAULT_IMAGE_FORMAT: ImageFormat;
@@ -1,3 +1,3 @@
1
- import { FfmpegExecutable } from 'remotion';
1
+ import type { FfmpegExecutable } from 'remotion';
2
2
  export declare type SpecialVCodecForTransparency = 'vp9' | 'vp8' | 'none';
3
3
  export declare const getSpecialVCodecForTransparency: (src: string, ffprobeExecutable: FfmpegExecutable) => Promise<SpecialVCodecForTransparency>;
@@ -1,6 +1,6 @@
1
1
  /// <reference types="node" />
2
- import { FfmpegExecutable, OffthreadVideoImageFormat } from 'remotion';
3
- import { SpecialVCodecForTransparency } from './is-vp9-video';
2
+ import type { FfmpegExecutable, OffthreadVideoImageFormat } from 'remotion';
3
+ import type { SpecialVCodecForTransparency } from './get-video-info';
4
4
  export declare type LastFrameOptions = {
5
5
  ffmpegExecutable: FfmpegExecutable;
6
6
  ffprobeExecutable: FfmpegExecutable;
@@ -8,6 +8,7 @@ export declare type LastFrameOptions = {
8
8
  src: string;
9
9
  specialVCodecForTransparency: SpecialVCodecForTransparency;
10
10
  imageFormat: OffthreadVideoImageFormat;
11
+ needsResize: [number, number] | null;
11
12
  };
12
13
  export declare const setLastFrameInCache: (options: LastFrameOptions, data: Buffer) => void;
13
14
  export declare const getLastFrameFromCache: (options: LastFrameOptions) => Buffer | null;
@@ -1,4 +1,4 @@
1
- import { FfmpegExecutable } from 'remotion';
1
+ import type { FfmpegExecutable } from 'remotion';
2
2
  declare type Options = {
3
3
  ffmpegExecutable: FfmpegExecutable;
4
4
  files: string[];
@@ -1,6 +1,6 @@
1
- import { RequestListener } from 'http';
2
- import { FfmpegExecutable, OffthreadVideoImageFormat } from 'remotion';
3
- import { RenderMediaOnDownload } from './assets/download-and-map-assets-to-file';
1
+ import type { RequestListener } from 'http';
2
+ import type { FfmpegExecutable, OffthreadVideoImageFormat } from 'remotion';
3
+ import type { RenderMediaOnDownload } from './assets/download-and-map-assets-to-file';
4
4
  export declare const extractUrlAndSourceFromUrl: (url: string) => {
5
5
  src: string;
6
6
  time: number;
@@ -1,5 +1,6 @@
1
- import puppeteer from 'puppeteer-core';
2
- import { Browser } from 'remotion';
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();
@@ -1,5 +1,5 @@
1
- import { FfmpegExecutable } from 'remotion';
2
- import { RenderMediaOnDownload } from './assets/download-and-map-assets-to-file';
1
+ import type { FfmpegExecutable } from 'remotion';
2
+ import type { RenderMediaOnDownload } from './assets/download-and-map-assets-to-file';
3
3
  export declare const prepareServer: ({ downloadDir, ffmpegExecutable, ffprobeExecutable, onDownload, onError, webpackConfigOrServeUrl, port, }: {
4
4
  webpackConfigOrServeUrl: string;
5
5
  downloadDir: string;
@@ -1,5 +1,5 @@
1
- import { FfmpegExecutable } from 'remotion';
2
- import { MediaAsset } from './assets/types';
1
+ import type { FfmpegExecutable } from 'remotion';
2
+ import type { MediaAsset } from './assets/types';
3
3
  declare type Options = {
4
4
  ffmpegExecutable: FfmpegExecutable;
5
5
  ffprobeExecutable: FfmpegExecutable;
@@ -1,6 +1,6 @@
1
1
  import execa from 'execa';
2
- import { Codec, FfmpegExecutable, ImageFormat, PixelFormat, ProResProfile } from 'remotion';
3
- import { CancelSignal } from './make-cancel-signal';
2
+ import type { Codec, FfmpegExecutable, ImageFormat, PixelFormat, ProResProfile } from 'remotion';
3
+ import type { CancelSignal } from './make-cancel-signal';
4
4
  declare type PreSticherOptions = {
5
5
  fps: number;
6
6
  width: number;
@@ -1,12 +1,12 @@
1
1
  /// <reference types="node" />
2
- import puppeteer from 'puppeteer-core';
3
- import { ImageFormat } from 'remotion';
2
+ import type { ImageFormat } from 'remotion';
3
+ import type { Page } from './browser/Page';
4
4
  export declare const provideScreenshot: ({ page, imageFormat, options, quality, }: {
5
- page: puppeteer.Page;
5
+ page: Page;
6
6
  imageFormat: ImageFormat;
7
7
  quality: number | undefined;
8
8
  options: {
9
9
  frame: number;
10
- output?: string;
10
+ output: string | null;
11
11
  };
12
12
  }) => Promise<Buffer>;
@@ -7,7 +7,6 @@ const provideScreenshot = ({ page, imageFormat, options, quality, }) => {
7
7
  page,
8
8
  opts: {
9
9
  path: options.output,
10
- selector: '#remotion-canvas',
11
10
  },
12
11
  imageFormat,
13
12
  quality,
@@ -1,4 +1,4 @@
1
- import { Page } from 'puppeteer-core';
1
+ import type { Page } from './browser/Page';
2
2
  export declare function puppeteerEvaluateWithCatch<ReturnType>({ page, pageFunction, frame, args, }: {
3
3
  page: Page;
4
4
  pageFunction: Function | string;
@@ -1,8 +1,7 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.puppeteerEvaluateWithCatch = void 0;
4
- /* eslint-disable no-new */
5
- const puppeteer_core_1 = require("puppeteer-core");
4
+ const JSHandle_1 = require("./browser/JSHandle");
6
5
  const symbolicateable_error_1 = require("./error-handling/symbolicateable-error");
7
6
  const parse_browser_error_stack_1 = require("./parse-browser-error-stack");
8
7
  const EVALUATION_SCRIPT_URL = '__puppeteer_evaluation_script__';
@@ -33,7 +32,7 @@ function isString(obj) {
33
32
  async function puppeteerEvaluateWithCatch({ page, pageFunction, frame, args, }) {
34
33
  var _a, _b, _c, _d, _e, _f, _g;
35
34
  const contextId = (await page.mainFrame().executionContext())._contextId;
36
- const client = page._client;
35
+ const client = page._client();
37
36
  const suffix = `//# sourceURL=${EVALUATION_SCRIPT_URL}`;
38
37
  if (isString(pageFunction)) {
39
38
  const expression = pageFunction;
@@ -140,7 +139,7 @@ function convertArgument(arg) {
140
139
  return { unserializableValue: '-Infinity' };
141
140
  if (Object.is(arg, NaN))
142
141
  return { unserializableValue: 'NaN' };
143
- const objectHandle = arg && arg instanceof puppeteer_core_1.JSHandle ? arg : null;
142
+ const objectHandle = arg && arg instanceof JSHandle_1.JSHandle ? arg : null;
144
143
  if (objectHandle) {
145
144
  if (objectHandle._disposed)
146
145
  throw new Error('JSHandle is disposed!');
@@ -1,3 +1,4 @@
1
1
  /// <reference types="node" />
2
- import { Page, ScreenshotOptions } from 'puppeteer-core';
3
- export declare const screenshot: (page: Page, options?: ScreenshotOptions) => Promise<Buffer | string | void>;
2
+ import type { Page } from './browser/Page';
3
+ import type { ScreenshotOptions } from './browser/ScreenshotOptions';
4
+ export declare const screenshot: (page: Page, options: ScreenshotOptions) => Promise<Buffer | string | void>;
@@ -26,7 +26,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
26
26
  exports.screenshot = void 0;
27
27
  const assert = __importStar(require("assert"));
28
28
  const screenshot_task_1 = require("./screenshot-task");
29
- const screenshot = (page, options = {}) => {
29
+ const screenshot = (page, options) => {
30
30
  let screenshotType = null;
31
31
  // options.type takes precedence over inferring the type from options.path
32
32
  // because it may be a 0-length file with no extension created beforehand
@@ -58,7 +58,6 @@ const screenshot = (page, options = {}) => {
58
58
  assert.ok(options.quality >= 0 && options.quality <= 100, 'Expected options.quality to be between 0 and 100 (inclusive), got ' +
59
59
  options.quality);
60
60
  }
61
- assert.ok(!options.clip || !options.fullPage, 'options.clip and options.fullPage are exclusive');
62
61
  if (options.clip) {
63
62
  assert.ok(typeof options.clip.x === 'number', 'Expected options.clip.x to be a number but found ' +
64
63
  typeof options.clip.x);
@@ -71,7 +70,6 @@ const screenshot = (page, options = {}) => {
71
70
  assert.ok(options.clip.width !== 0, 'Expected options.clip.width not to be 0.');
72
71
  assert.ok(options.clip.height !== 0, 'Expected options.clip.height not to be 0.');
73
72
  }
74
- // @ts-expect-error
75
- return page._screenshotTaskQueue.postTask(() => (0, screenshot_task_1._screenshotTask)(page, screenshotType, options));
73
+ return page.screenshotTaskQueue.postTask(() => (0, screenshot_task_1._screenshotTask)(page, screenshotType, options));
76
74
  };
77
75
  exports.screenshot = screenshot;
@@ -1,12 +1,12 @@
1
1
  /// <reference types="node" />
2
- import { Browser as PuppeteerBrowser } from 'puppeteer-core';
3
- import { BrowserExecutable, FfmpegExecutable, FrameRange, ImageFormat, SmallTCompMetadata } from 'remotion';
4
- import { RenderMediaOnDownload } from './assets/download-and-map-assets-to-file';
5
- import { BrowserLog } from './browser-log';
6
- import { ServeUrlOrWebpackBundle } from './legacy-webpack-config';
7
- import { CancelSignal } from './make-cancel-signal';
8
- import { ChromiumOptions } from './open-browser';
9
- import { OnStartData, RenderFramesOutput } from './types';
2
+ import type { BrowserExecutable, FfmpegExecutable, FrameRange, ImageFormat, SmallTCompMetadata } from 'remotion';
3
+ import type { RenderMediaOnDownload } from './assets/download-and-map-assets-to-file';
4
+ import type { BrowserLog } from './browser-log';
5
+ import type { Browser } from './browser/Browser';
6
+ import type { ServeUrlOrWebpackBundle } from './legacy-webpack-config';
7
+ import type { CancelSignal } from './make-cancel-signal';
8
+ import type { ChromiumOptions } from './open-browser';
9
+ import type { OnStartData, RenderFramesOutput } from './types';
10
10
  declare type ConfigOrComposition = {
11
11
  /**
12
12
  * @deprecated This field has been renamed to `composition`
@@ -26,7 +26,7 @@ declare type RenderFramesOptions = {
26
26
  quality?: number;
27
27
  frameRange?: FrameRange | null;
28
28
  dumpBrowserLogs?: boolean;
29
- puppeteerInstance?: PuppeteerBrowser;
29
+ puppeteerInstance?: Browser;
30
30
  browserExecutable?: BrowserExecutable;
31
31
  onBrowserLog?: (log: BrowserLog) => void;
32
32
  onFrameBuffer?: (buffer: Buffer, frame: number) => void;