@remotion/renderer 4.0.255 → 4.0.257

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 (43) hide show
  1. package/dist/browser/Browser.d.ts +23 -6
  2. package/dist/browser/Browser.js +22 -12
  3. package/dist/browser/BrowserPage.d.ts +5 -2
  4. package/dist/browser/BrowserPage.js +4 -2
  5. package/dist/browser/Launcher.js +1 -1
  6. package/dist/browser/Target.d.ts +7 -1
  7. package/dist/browser/Target.js +6 -1
  8. package/dist/browser/mitt/index.js +3 -3
  9. package/dist/browser-instances.js +1 -1
  10. package/dist/can-use-parallel-encoding.d.ts +1 -0
  11. package/dist/can-use-parallel-encoding.js +9 -1
  12. package/dist/client.d.ts +2 -2
  13. package/dist/cycle-browser-tabs.d.ts +6 -1
  14. package/dist/cycle-browser-tabs.js +2 -2
  15. package/dist/get-browser-instance.d.ts +2 -1
  16. package/dist/get-browser-instance.js +14 -4
  17. package/dist/get-codec-name.d.ts +1 -1
  18. package/dist/get-compositions.js +1 -0
  19. package/dist/index.d.ts +3 -3
  20. package/dist/make-page.d.ts +27 -0
  21. package/dist/make-page.js +71 -0
  22. package/dist/next-frame-to-render.d.ts +10 -0
  23. package/dist/next-frame-to-render.js +35 -0
  24. package/dist/open-browser.js +3 -3
  25. package/dist/options/gl.d.ts +1 -1
  26. package/dist/options/index.d.ts +2 -2
  27. package/dist/options/metadata.d.ts +1 -1
  28. package/dist/options/webhook-custom-data.d.ts +1 -1
  29. package/dist/pool.d.ts +7 -6
  30. package/dist/render-frame-and-retry-target-close.d.ts +50 -0
  31. package/dist/render-frame-and-retry-target-close.js +165 -0
  32. package/dist/render-frame-with-option-to-reject.d.ts +43 -0
  33. package/dist/render-frame-with-option-to-reject.js +136 -0
  34. package/dist/render-frame.d.ts +43 -0
  35. package/dist/render-frame.js +46 -0
  36. package/dist/render-frames.js +86 -312
  37. package/dist/render-partitions.d.ts +7 -0
  38. package/dist/render-partitions.js +50 -0
  39. package/dist/render-still.js +7 -2
  40. package/dist/replace-browser.js +1 -1
  41. package/dist/select-composition.js +1 -0
  42. package/dist/test-gpu.js +1 -0
  43. package/package.json +12 -12
@@ -50,12 +50,24 @@ export declare class HeadlessBrowser extends EventEmitter {
50
50
  runner: BrowserRunner;
51
51
  });
52
52
  browserContexts(): BrowserContext[];
53
- newPage(context: SourceMapGetter, logLevel: LogLevel, indent: boolean): Promise<Page>;
54
- _createPageInContext(context: SourceMapGetter, logLevel: LogLevel, indent: boolean): Promise<Page>;
53
+ newPage({ context, logLevel, indent, pageIndex, }: {
54
+ context: SourceMapGetter;
55
+ logLevel: LogLevel;
56
+ indent: boolean;
57
+ pageIndex: number;
58
+ }): Promise<Page>;
59
+ _createPageInContext({ context, logLevel, indent, pageIndex, }: {
60
+ context: SourceMapGetter;
61
+ logLevel: LogLevel;
62
+ indent: boolean;
63
+ pageIndex: number;
64
+ }): Promise<Page>;
55
65
  targets(): Target[];
56
66
  waitForTarget(predicate: (x: Target) => boolean | Promise<boolean>, options?: WaitForTargetOptions): Promise<Target>;
57
- pages(logLevel: LogLevel, indent: boolean): Promise<Page[]>;
58
- close(silent: boolean, logLevel: LogLevel, indent: boolean): Promise<void>;
67
+ pages(): Promise<Page[]>;
68
+ close({ silent }: {
69
+ silent: boolean;
70
+ }): Promise<void>;
59
71
  disconnect(): void;
60
72
  }
61
73
  export declare class BrowserContext extends EventEmitter {
@@ -65,8 +77,13 @@ export declare class BrowserContext extends EventEmitter {
65
77
  waitForTarget(predicate: (x: Target) => boolean | Promise<boolean>, options?: {
66
78
  timeout?: number;
67
79
  }): Promise<Target>;
68
- pages(logLevel: LogLevel, indent: boolean): Promise<Page[]>;
69
- newPage(context: SourceMapGetter, logLevel: LogLevel, indent: boolean): Promise<Page>;
80
+ pages(): Promise<Page[]>;
81
+ newPage({ context, logLevel, indent, pageIndex, }: {
82
+ context: SourceMapGetter;
83
+ logLevel: LogLevel;
84
+ indent: boolean;
85
+ pageIndex: number;
86
+ }): Promise<Page>;
70
87
  browser(): HeadlessBrowser;
71
88
  }
72
89
  export {};
@@ -75,10 +75,10 @@ class HeadlessBrowser extends EventEmitter_1.EventEmitter {
75
75
  browserContexts() {
76
76
  return [__classPrivateFieldGet(this, _HeadlessBrowser_defaultContext, "f"), ...Array.from(__classPrivateFieldGet(this, _HeadlessBrowser_contexts, "f").values())];
77
77
  }
78
- newPage(context, logLevel, indent) {
79
- return __classPrivateFieldGet(this, _HeadlessBrowser_defaultContext, "f").newPage(context, logLevel, indent);
78
+ newPage({ context, logLevel, indent, pageIndex, }) {
79
+ return __classPrivateFieldGet(this, _HeadlessBrowser_defaultContext, "f").newPage({ context, logLevel, indent, pageIndex });
80
80
  }
81
- async _createPageInContext(context, logLevel, indent) {
81
+ async _createPageInContext({ context, logLevel, indent, pageIndex, }) {
82
82
  const { value: { targetId }, } = await this.connection.send('Target.createTarget', {
83
83
  url: 'about:blank',
84
84
  browserContextId: undefined,
@@ -91,7 +91,12 @@ class HeadlessBrowser extends EventEmitter_1.EventEmitter {
91
91
  if (!initialized) {
92
92
  throw new Error(`Failed to create target for page (id = ${targetId})`);
93
93
  }
94
- const page = await target.page(context, logLevel, indent);
94
+ const page = await target.page({
95
+ sourceMapGetter: context,
96
+ logLevel,
97
+ indent,
98
+ pageIndex,
99
+ });
95
100
  if (!page) {
96
101
  throw new Error(`Failed to create a page for context`);
97
102
  }
@@ -129,18 +134,18 @@ class HeadlessBrowser extends EventEmitter_1.EventEmitter {
129
134
  }
130
135
  }
131
136
  }
132
- async pages(logLevel, indent) {
137
+ async pages() {
133
138
  const contextPages = await Promise.all(this.browserContexts().map((context) => {
134
- return context.pages(logLevel, indent);
139
+ return context.pages();
135
140
  }));
136
141
  // Flatten array.
137
142
  return contextPages.reduce((acc, x) => {
138
143
  return acc.concat(x);
139
144
  }, []);
140
145
  }
141
- async close(silent, logLevel, indent) {
146
+ async close({ silent }) {
142
147
  await this.runner.closeProcess();
143
- (await this.pages(logLevel, indent)).forEach((page) => {
148
+ (await this.pages()).forEach((page) => {
144
149
  page.emit("disposed" /* PageEmittedEvents.Disposed */);
145
150
  page.closed = true;
146
151
  });
@@ -207,16 +212,21 @@ class BrowserContext extends EventEmitter_1.EventEmitter {
207
212
  return target.browserContext() === this && predicate(target);
208
213
  }, options);
209
214
  }
210
- async pages(logLevel, indent) {
215
+ async pages() {
211
216
  const pages = await Promise.all(this.targets()
212
217
  .filter((target) => target.type() === 'page')
213
- .map((target) => target.page(() => null, logLevel, indent)));
218
+ .map((target) => target.expectPage()));
214
219
  return pages.filter((page) => {
215
220
  return Boolean(page);
216
221
  });
217
222
  }
218
- newPage(context, logLevel, indent) {
219
- return __classPrivateFieldGet(this, _BrowserContext_browser, "f")._createPageInContext(context, logLevel, indent);
223
+ newPage({ context, logLevel, indent, pageIndex, }) {
224
+ return __classPrivateFieldGet(this, _BrowserContext_browser, "f")._createPageInContext({
225
+ context,
226
+ logLevel,
227
+ indent,
228
+ pageIndex,
229
+ });
220
230
  }
221
231
  browser() {
222
232
  return __classPrivateFieldGet(this, _BrowserContext_browser, "f");
@@ -27,7 +27,7 @@ interface PageEventObject {
27
27
  export declare class Page extends EventEmitter {
28
28
  #private;
29
29
  id: string;
30
- static _create({ client, target, defaultViewport, browser, sourceMapGetter, logLevel, indent, }: {
30
+ static _create({ client, target, defaultViewport, browser, sourceMapGetter, logLevel, indent, pageIndex, }: {
31
31
  client: CDPSession;
32
32
  target: Target;
33
33
  defaultViewport: Viewport;
@@ -35,19 +35,22 @@ export declare class Page extends EventEmitter {
35
35
  sourceMapGetter: SourceMapGetter;
36
36
  logLevel: LogLevel;
37
37
  indent: boolean;
38
+ pageIndex: number;
38
39
  }): Promise<Page>;
39
40
  closed: boolean;
40
41
  browser: HeadlessBrowser;
41
42
  screenshotTaskQueue: TaskQueue;
42
43
  sourceMapGetter: SourceMapGetter;
43
44
  logLevel: LogLevel;
44
- constructor({ client, target, browser, sourceMapGetter, logLevel, indent, }: {
45
+ pageIndex: number;
46
+ constructor({ client, target, browser, sourceMapGetter, logLevel, indent, pageIndex, }: {
45
47
  client: CDPSession;
46
48
  target: Target;
47
49
  browser: HeadlessBrowser;
48
50
  sourceMapGetter: SourceMapGetter;
49
51
  logLevel: LogLevel;
50
52
  indent: boolean;
53
+ pageIndex: number;
51
54
  });
52
55
  /**
53
56
  * Listen to page events.
@@ -49,7 +49,7 @@ const shouldHideWarning = (log) => {
49
49
  return false;
50
50
  };
51
51
  class Page extends EventEmitter_1.EventEmitter {
52
- static async _create({ client, target, defaultViewport, browser, sourceMapGetter, logLevel, indent, }) {
52
+ static async _create({ client, target, defaultViewport, browser, sourceMapGetter, logLevel, indent, pageIndex, }) {
53
53
  const page = new Page({
54
54
  client,
55
55
  target,
@@ -57,12 +57,13 @@ class Page extends EventEmitter_1.EventEmitter {
57
57
  sourceMapGetter,
58
58
  logLevel,
59
59
  indent,
60
+ pageIndex,
60
61
  });
61
62
  await __classPrivateFieldGet(page, _Page_instances, "m", _Page_initialize).call(page);
62
63
  await page.setViewport(defaultViewport);
63
64
  return page;
64
65
  }
65
- constructor({ client, target, browser, sourceMapGetter, logLevel, indent, }) {
66
+ constructor({ client, target, browser, sourceMapGetter, logLevel, indent, pageIndex, }) {
66
67
  super();
67
68
  _Page_instances.add(this);
68
69
  this.closed = false;
@@ -79,6 +80,7 @@ class Page extends EventEmitter_1.EventEmitter {
79
80
  this.id = String(Math.random());
80
81
  this.sourceMapGetter = sourceMapGetter;
81
82
  this.logLevel = logLevel;
83
+ this.pageIndex = pageIndex;
82
84
  client.on('Target.attachedToTarget', (event) => {
83
85
  switch (event.targetInfo.type) {
84
86
  case 'iframe':
@@ -34,7 +34,7 @@ const launchChrome = async ({ args, executablePath, defaultViewport, indent, log
34
34
  }, { timeout });
35
35
  }
36
36
  catch (error) {
37
- await browser.close(false, logLevel, indent);
37
+ await browser.close({ silent: false });
38
38
  throw error;
39
39
  }
40
40
  return browser;
@@ -37,7 +37,13 @@ export declare class Target {
37
37
  /**
38
38
  * If the target is not of type `"page"` or `"background_page"`, returns `null`.
39
39
  */
40
- page(sourceMapGetter: SourceMapGetter, logLevel: LogLevel, indent: boolean): Promise<Page | null>;
40
+ page({ sourceMapGetter, logLevel, indent, pageIndex, }: {
41
+ sourceMapGetter: SourceMapGetter;
42
+ logLevel: LogLevel;
43
+ indent: boolean;
44
+ pageIndex: number;
45
+ }): Promise<Page | null>;
46
+ expectPage(): Promise<Page | null>;
41
47
  url(): string;
42
48
  /**
43
49
  * Identifies what kind of target this is.
@@ -79,7 +79,7 @@ class Target {
79
79
  /**
80
80
  * If the target is not of type `"page"` or `"background_page"`, returns `null`.
81
81
  */
82
- async page(sourceMapGetter, logLevel, indent) {
82
+ async page({ sourceMapGetter, logLevel, indent, pageIndex, }) {
83
83
  var _a;
84
84
  if (isPagetTarget(__classPrivateFieldGet(this, _Target_targetInfo, "f")) && !__classPrivateFieldGet(this, _Target_pagePromise, "f")) {
85
85
  __classPrivateFieldSet(this, _Target_pagePromise, __classPrivateFieldGet(this, _Target_sessionFactory, "f").call(this).then((client) => {
@@ -92,11 +92,16 @@ class Target {
92
92
  sourceMapGetter,
93
93
  logLevel,
94
94
  indent,
95
+ pageIndex,
95
96
  });
96
97
  }), "f");
97
98
  }
98
99
  return (_a = (await __classPrivateFieldGet(this, _Target_pagePromise, "f"))) !== null && _a !== void 0 ? _a : null;
99
100
  }
101
+ async expectPage() {
102
+ var _a;
103
+ return (_a = (await __classPrivateFieldGet(this, _Target_pagePromise, "f"))) !== null && _a !== void 0 ? _a : null;
104
+ }
100
105
  url() {
101
106
  return __classPrivateFieldGet(this, _Target_targetInfo, "f").url;
102
107
  }
@@ -19,21 +19,21 @@ function mitt(all) {
19
19
  * @param {Function} handler Function to call in response to given event
20
20
  * @memberOf mitt
21
21
  */
22
- on(type, handler) {
22
+ on: (type, handler) => {
23
23
  const handlers = all === null || all === void 0 ? void 0 : all.get(type);
24
24
  const added = handlers === null || handlers === void 0 ? void 0 : handlers.push(handler);
25
25
  if (!added) {
26
26
  all === null || all === void 0 ? void 0 : all.set(type, [handler]);
27
27
  }
28
28
  },
29
- off(type, handler) {
29
+ off: (type, handler) => {
30
30
  const handlers = all === null || all === void 0 ? void 0 : all.get(type);
31
31
  if (handlers) {
32
32
  // eslint-disable-next-line no-bitwise
33
33
  handlers.splice(handlers.indexOf(handler) >>> 0, 1);
34
34
  }
35
35
  },
36
- emit(type, evt) {
36
+ emit: (type, evt) => {
37
37
  ((all === null || all === void 0 ? void 0 : all.get(type)) || [])
38
38
  .slice()
39
39
  .forEach((handler) => {
@@ -5,7 +5,7 @@ const browserInstances = [];
5
5
  const killAllBrowsers = async () => {
6
6
  for (const browser of browserInstances) {
7
7
  try {
8
- await browser.close(true, 'info', false);
8
+ await browser.close({ silent: true });
9
9
  }
10
10
  catch (_a) { }
11
11
  }
@@ -1,2 +1,3 @@
1
1
  import type { Codec } from './codec';
2
2
  export declare const canUseParallelEncoding: (codec: Codec) => boolean;
3
+ export declare const getShouldUsePartitionedRendering: () => boolean;
@@ -1,11 +1,19 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.canUseParallelEncoding = void 0;
3
+ exports.getShouldUsePartitionedRendering = exports.canUseParallelEncoding = void 0;
4
4
  const is_audio_codec_1 = require("./is-audio-codec");
5
5
  const canUseParallelEncoding = (codec) => {
6
+ if ((0, exports.getShouldUsePartitionedRendering)()) {
7
+ return false;
8
+ }
6
9
  if ((0, is_audio_codec_1.isAudioCodec)(codec)) {
7
10
  return false;
8
11
  }
9
12
  return codec === 'h264' || codec === 'h264-mkv' || codec === 'h265';
10
13
  };
11
14
  exports.canUseParallelEncoding = canUseParallelEncoding;
15
+ const getShouldUsePartitionedRendering = () => {
16
+ const shouldUsePartitionedRendering = process.env.REMOTION_PARTITIONED_RENDERING === 'true';
17
+ return shouldUsePartitionedRendering;
18
+ };
19
+ exports.getShouldUsePartitionedRendering = getShouldUsePartitionedRendering;
package/dist/client.d.ts CHANGED
@@ -394,7 +394,7 @@ export declare const BrowserSafeApis: {
394
394
  webhookCustomDataOption: {
395
395
  name: string;
396
396
  cliFlag: "webhook-custom-data";
397
- description: (type: "ssr" | "cli") => import("react/jsx-runtime").JSX.Element;
397
+ description: (type: "cli" | "ssr") => import("react/jsx-runtime").JSX.Element;
398
398
  ssrName: "customData";
399
399
  docLink: string;
400
400
  type: Record<string, unknown> | null;
@@ -807,7 +807,7 @@ export declare const BrowserSafeApis: {
807
807
  metadataOption: {
808
808
  name: string;
809
809
  cliFlag: "metadata";
810
- description: (mode: "ssr" | "cli") => import("react/jsx-runtime").JSX.Element;
810
+ description: (mode: "cli" | "ssr") => import("react/jsx-runtime").JSX.Element;
811
811
  docLink: string;
812
812
  type: import("./options/metadata").Metadata;
813
813
  getValue: ({ commandLine }: {
@@ -1,5 +1,10 @@
1
1
  import type { LogLevel } from './log-level';
2
2
  import type { BrowserReplacer } from './replace-browser';
3
- export declare const cycleBrowserTabs: (puppeteerInstance: BrowserReplacer, concurrency: number, logLevel: LogLevel, indent: boolean) => {
3
+ export declare const cycleBrowserTabs: ({ puppeteerInstance, concurrency, logLevel, indent, }: {
4
+ puppeteerInstance: BrowserReplacer;
5
+ concurrency: number;
6
+ logLevel: LogLevel;
7
+ indent: boolean;
8
+ }) => {
4
9
  stopCycling: () => void;
5
10
  };
@@ -2,7 +2,7 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.cycleBrowserTabs = void 0;
4
4
  const logger_1 = require("./logger");
5
- const cycleBrowserTabs = (puppeteerInstance, concurrency, logLevel, indent) => {
5
+ const cycleBrowserTabs = ({ puppeteerInstance, concurrency, logLevel, indent, }) => {
6
6
  if (concurrency <= 1) {
7
7
  return {
8
8
  stopCycling: () => undefined,
@@ -15,7 +15,7 @@ const cycleBrowserTabs = (puppeteerInstance, concurrency, logLevel, indent) => {
15
15
  interval = setTimeout(() => {
16
16
  puppeteerInstance
17
17
  .getBrowser()
18
- .pages(logLevel, indent)
18
+ .pages()
19
19
  .then((pages) => {
20
20
  if (pages.length === 0) {
21
21
  return;
@@ -5,7 +5,7 @@ import type { LogLevel } from './log-level';
5
5
  import type { ChromiumOptions } from './open-browser';
6
6
  import type { ChromeMode } from './options/chrome-mode';
7
7
  import type { OnBrowserDownload } from './options/on-browser-download';
8
- export declare const getPageAndCleanupFn: ({ passedInInstance, browserExecutable, chromiumOptions, forceDeviceScaleFactor, indent, logLevel, onBrowserDownload, chromeMode, }: {
8
+ export declare const getPageAndCleanupFn: ({ passedInInstance, browserExecutable, chromiumOptions, forceDeviceScaleFactor, indent, logLevel, onBrowserDownload, chromeMode, pageIndex, }: {
9
9
  passedInInstance: HeadlessBrowser | undefined;
10
10
  browserExecutable: BrowserExecutable | null;
11
11
  chromiumOptions: ChromiumOptions;
@@ -14,6 +14,7 @@ export declare const getPageAndCleanupFn: ({ passedInInstance, browserExecutable
14
14
  logLevel: LogLevel;
15
15
  onBrowserDownload: OnBrowserDownload;
16
16
  chromeMode: ChromeMode;
17
+ pageIndex: number;
17
18
  }) => Promise<{
18
19
  cleanupPage: () => Promise<void>;
19
20
  page: Page;
@@ -4,9 +4,14 @@ exports.getPageAndCleanupFn = void 0;
4
4
  const browser_1 = require("./browser");
5
5
  const logger_1 = require("./logger");
6
6
  const open_browser_1 = require("./open-browser");
7
- const getPageAndCleanupFn = async ({ passedInInstance, browserExecutable, chromiumOptions, forceDeviceScaleFactor, indent, logLevel, onBrowserDownload, chromeMode, }) => {
7
+ const getPageAndCleanupFn = async ({ passedInInstance, browserExecutable, chromiumOptions, forceDeviceScaleFactor, indent, logLevel, onBrowserDownload, chromeMode, pageIndex, }) => {
8
8
  if (passedInInstance) {
9
- const page = await passedInInstance.newPage(() => null, logLevel, indent);
9
+ const page = await passedInInstance.newPage({
10
+ context: () => null,
11
+ logLevel,
12
+ indent,
13
+ pageIndex,
14
+ });
10
15
  return {
11
16
  page,
12
17
  cleanupPage: () => {
@@ -32,12 +37,17 @@ const getPageAndCleanupFn = async ({ passedInInstance, browserExecutable, chromi
32
37
  onBrowserDownload,
33
38
  chromeMode,
34
39
  });
35
- const browserPage = await browserInstance.newPage(() => null, logLevel, indent);
40
+ const browserPage = await browserInstance.newPage({
41
+ context: () => null,
42
+ logLevel,
43
+ indent,
44
+ pageIndex,
45
+ });
36
46
  return {
37
47
  page: browserPage,
38
48
  cleanupPage: () => {
39
49
  // Close whole browser that was just created and don't wait for it to finish.
40
- browserInstance.close(true, logLevel, indent).catch((err) => {
50
+ browserInstance.close({ silent: true }).catch((err) => {
41
51
  if (!err.message.includes('Target closed')) {
42
52
  logger_1.Log.error({ indent, logLevel }, 'Was not able to close puppeteer page', err);
43
53
  }
@@ -9,7 +9,7 @@ export declare const hasSpecifiedUnsupportedHardwareQualifySettings: ({ encoding
9
9
  encodingMaxRate: string | null;
10
10
  encodingBufferSize: string | null;
11
11
  crf: unknown;
12
- }) => "crf" | "encodingBufferSize" | "encodingMaxRate" | null;
12
+ }) => "encodingMaxRate" | "encodingBufferSize" | "crf" | null;
13
13
  export declare const getCodecName: ({ codec, encodingMaxRate, encodingBufferSize, crf, hardwareAcceleration, logLevel, indent, }: {
14
14
  codec: Codec;
15
15
  hardwareAcceleration: HardwareAccelerationOption;
@@ -91,6 +91,7 @@ const internalGetCompositionsRaw = async ({ browserExecutable, chromiumOptions,
91
91
  logLevel,
92
92
  onBrowserDownload,
93
93
  chromeMode,
94
+ pageIndex: 0,
94
95
  });
95
96
  const cleanup = [cleanupPage];
96
97
  return new Promise((resolve, reject) => {
package/dist/index.d.ts CHANGED
@@ -140,7 +140,7 @@ export declare const RenderInternals: {
140
140
  validPixelFormats: readonly ["yuv420p", "yuva420p", "yuv422p", "yuv444p", "yuv420p10le", "yuv422p10le", "yuv444p10le", "yuva444p10le"];
141
141
  DEFAULT_BROWSER: "chrome";
142
142
  validateFrameRange: (frameRange: import("./frame-range").FrameRange | null) => void;
143
- DEFAULT_OPENGL_RENDERER: "angle" | "swangle" | "egl" | "swiftshader" | "vulkan" | "angle-egl" | null;
143
+ DEFAULT_OPENGL_RENDERER: "swangle" | "angle" | "egl" | "swiftshader" | "vulkan" | "angle-egl" | null;
144
144
  validateOpenGlRenderer: (option: unknown) => import("./options/gl").OpenGlRenderer | null;
145
145
  validCodecs: readonly ["h264", "h265", "vp8", "vp9", "mp3", "aac", "wav", "prores", "h264-mkv", "h264-ts", "gif"];
146
146
  DEFAULT_PIXEL_FORMAT: "yuv420p" | "yuva420p" | "yuv422p" | "yuv444p" | "yuv420p10le" | "yuv422p10le" | "yuv444p10le" | "yuva444p10le";
@@ -353,8 +353,8 @@ export declare const RenderInternals: {
353
353
  }) => execa.ExecaChildProcess<string>;
354
354
  validStillImageFormats: readonly ["png", "jpeg", "pdf", "webp"];
355
355
  validVideoImageFormats: readonly ["png", "jpeg", "none"];
356
- DEFAULT_STILL_IMAGE_FORMAT: "jpeg" | "png" | "webp" | "pdf";
357
- DEFAULT_VIDEO_IMAGE_FORMAT: "jpeg" | "png" | "none";
356
+ DEFAULT_STILL_IMAGE_FORMAT: "png" | "jpeg" | "webp" | "pdf";
357
+ DEFAULT_VIDEO_IMAGE_FORMAT: "png" | "jpeg" | "none";
358
358
  DEFAULT_JPEG_QUALITY: number;
359
359
  chalk: {
360
360
  enabled: () => boolean;
@@ -0,0 +1,27 @@
1
+ import type { VideoConfig } from 'remotion/no-react';
2
+ import type { BrowserLog } from './browser-log';
3
+ import type { Page } from './browser/BrowserPage';
4
+ import type { SourceMapGetter } from './browser/source-map-getter';
5
+ import type { VideoImageFormat } from './image-format';
6
+ import type { LogLevel } from './log-level';
7
+ import type { BrowserReplacer } from './replace-browser';
8
+ export declare const makePage: ({ context, initialFrame, browserReplacer, logLevel, indent, pagesArray, onBrowserLog, scale, timeoutInMilliseconds, composition, proxyPort, serveUrl, muted, envVariables, serializedInputPropsWithCustomSchema, imageFormat, serializedResolvedPropsWithCustomSchema, pageIndex, }: {
9
+ context: SourceMapGetter;
10
+ initialFrame: number;
11
+ browserReplacer: BrowserReplacer;
12
+ logLevel: LogLevel;
13
+ indent: boolean;
14
+ pagesArray: Page[];
15
+ onBrowserLog: ((log: BrowserLog) => void) | undefined | null;
16
+ scale: number;
17
+ timeoutInMilliseconds: number;
18
+ composition: Omit<VideoConfig, "defaultProps" | "props">;
19
+ proxyPort: number;
20
+ serveUrl: string;
21
+ muted: boolean;
22
+ envVariables: Record<string, string>;
23
+ serializedInputPropsWithCustomSchema: string;
24
+ serializedResolvedPropsWithCustomSchema: string;
25
+ imageFormat: VideoImageFormat;
26
+ pageIndex: number;
27
+ }) => Promise<Page>;
@@ -0,0 +1,71 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.makePage = void 0;
4
+ const puppeteer_evaluate_1 = require("./puppeteer-evaluate");
5
+ const set_props_and_env_1 = require("./set-props-and-env");
6
+ const makePage = async ({ context, initialFrame, browserReplacer, logLevel, indent, pagesArray, onBrowserLog, scale, timeoutInMilliseconds, composition, proxyPort, serveUrl, muted, envVariables, serializedInputPropsWithCustomSchema, imageFormat, serializedResolvedPropsWithCustomSchema, pageIndex, }) => {
7
+ const page = await browserReplacer
8
+ .getBrowser()
9
+ .newPage({ context, logLevel, indent, pageIndex });
10
+ pagesArray.push(page);
11
+ await page.setViewport({
12
+ width: composition.width,
13
+ height: composition.height,
14
+ deviceScaleFactor: scale,
15
+ });
16
+ const logCallback = (log) => {
17
+ onBrowserLog === null || onBrowserLog === void 0 ? void 0 : onBrowserLog({
18
+ stackTrace: log.stackTrace(),
19
+ text: log.text,
20
+ type: log.type,
21
+ });
22
+ };
23
+ if (onBrowserLog) {
24
+ page.on('console', logCallback);
25
+ }
26
+ await (0, set_props_and_env_1.setPropsAndEnv)({
27
+ serializedInputPropsWithCustomSchema,
28
+ envVariables,
29
+ page,
30
+ serveUrl,
31
+ initialFrame,
32
+ timeoutInMilliseconds,
33
+ proxyPort,
34
+ retriesRemaining: 2,
35
+ audioEnabled: !muted,
36
+ videoEnabled: imageFormat !== 'none',
37
+ indent,
38
+ logLevel,
39
+ onServeUrlVisited: () => undefined,
40
+ });
41
+ await (0, puppeteer_evaluate_1.puppeteerEvaluateWithCatch)({
42
+ // eslint-disable-next-line max-params
43
+ pageFunction: (id, props, durationInFrames, fps, height, width, defaultCodec) => {
44
+ window.remotion_setBundleMode({
45
+ type: 'composition',
46
+ compositionName: id,
47
+ serializedResolvedPropsWithSchema: props,
48
+ compositionDurationInFrames: durationInFrames,
49
+ compositionFps: fps,
50
+ compositionHeight: height,
51
+ compositionWidth: width,
52
+ compositionDefaultCodec: defaultCodec,
53
+ });
54
+ },
55
+ args: [
56
+ composition.id,
57
+ serializedResolvedPropsWithCustomSchema,
58
+ composition.durationInFrames,
59
+ composition.fps,
60
+ composition.height,
61
+ composition.width,
62
+ composition.defaultCodec,
63
+ ],
64
+ frame: null,
65
+ page,
66
+ timeoutInMilliseconds,
67
+ });
68
+ page.off('console', logCallback);
69
+ return page;
70
+ };
71
+ exports.makePage = makePage;
@@ -0,0 +1,10 @@
1
+ export declare const nextFrameToRenderState: ({ allFramesAndExtraFrames, concurrencyOrFramesToRender: _concurrency, }: {
2
+ allFramesAndExtraFrames: number[];
3
+ concurrencyOrFramesToRender: number;
4
+ }) => {
5
+ getNextFrame: (_pageIndex: number) => number;
6
+ };
7
+ type Fn = typeof nextFrameToRenderState;
8
+ export type NextFrameToRender = ReturnType<Fn>;
9
+ export declare const partitionedNextFrameToRenderState: Fn;
10
+ export {};
@@ -0,0 +1,35 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.partitionedNextFrameToRenderState = exports.nextFrameToRenderState = void 0;
4
+ const render_partitions_1 = require("./render-partitions");
5
+ const nextFrameToRenderState = ({ allFramesAndExtraFrames,
6
+ // eslint-disable-next-line @typescript-eslint/no-unused-vars
7
+ concurrencyOrFramesToRender: _concurrency, }) => {
8
+ const rendered = new Map();
9
+ return {
10
+ // eslint-disable-next-line @typescript-eslint/no-unused-vars
11
+ getNextFrame: (_pageIndex) => {
12
+ const nextFrame = allFramesAndExtraFrames.find((frame) => {
13
+ return !rendered.has(frame);
14
+ });
15
+ if (nextFrame === undefined) {
16
+ throw new Error('No more frames to render');
17
+ }
18
+ rendered.set(nextFrame, true);
19
+ return nextFrame;
20
+ },
21
+ };
22
+ };
23
+ exports.nextFrameToRenderState = nextFrameToRenderState;
24
+ const partitionedNextFrameToRenderState = ({ allFramesAndExtraFrames, concurrencyOrFramesToRender: concurrency, }) => {
25
+ const partitions = (0, render_partitions_1.renderPartitions)({
26
+ frames: allFramesAndExtraFrames,
27
+ concurrency,
28
+ });
29
+ return {
30
+ getNextFrame: (pageIndex) => {
31
+ return partitions.getNextFrame(pageIndex);
32
+ },
33
+ };
34
+ };
35
+ exports.partitionedNextFrameToRenderState = partitionedNextFrameToRenderState;
@@ -51,7 +51,7 @@ const getOpenGlRenderer = (option) => {
51
51
  return [`--use-gl=${renderer}`];
52
52
  };
53
53
  const internalOpenBrowser = async ({ browser, browserExecutable, chromiumOptions, forceDeviceScaleFactor, indent, viewport, logLevel, onBrowserDownload, chromeMode, }) => {
54
- var _a, _b, _c;
54
+ var _a, _b, _c, _d;
55
55
  // @ts-expect-error Firefox
56
56
  if (browser === 'firefox') {
57
57
  throw new TypeError('Firefox supported is not yet turned on. Stay tuned for the future.');
@@ -165,8 +165,8 @@ const internalOpenBrowser = async ({ browser, browserExecutable, chromiumOptions
165
165
  deviceScaleFactor: 1,
166
166
  },
167
167
  });
168
- const pages = await browserInstance.pages(logLevel, indent);
169
- await pages[0].close();
168
+ const pages = await browserInstance.pages();
169
+ await ((_d = pages[0]) === null || _d === void 0 ? void 0 : _d.close());
170
170
  (0, browser_instances_1.addHeadlessBrowser)(browserInstance);
171
171
  return browserInstance;
172
172
  };
@@ -1,7 +1,7 @@
1
1
  export declare const validOpenGlRenderers: readonly ["swangle", "angle", "egl", "swiftshader", "vulkan", "angle-egl"];
2
2
  export type OpenGlRenderer = (typeof validOpenGlRenderers)[number];
3
3
  export declare const DEFAULT_OPENGL_RENDERER: OpenGlRenderer | null;
4
- export declare const getChromiumOpenGlRenderer: () => "angle" | "swangle" | "egl" | "swiftshader" | "vulkan" | "angle-egl" | null;
4
+ export declare const getChromiumOpenGlRenderer: () => "swangle" | "angle" | "egl" | "swiftshader" | "vulkan" | "angle-egl" | null;
5
5
  export declare const setChromiumOpenGlRenderer: (renderer: OpenGlRenderer) => void;
6
6
  export declare const glOption: {
7
7
  cliFlag: "gl";
@@ -171,7 +171,7 @@ export declare const allOptions: {
171
171
  webhookCustomDataOption: {
172
172
  name: string;
173
173
  cliFlag: "webhook-custom-data";
174
- description: (type: "ssr" | "cli") => import("react/jsx-runtime").JSX.Element;
174
+ description: (type: "cli" | "ssr") => import("react/jsx-runtime").JSX.Element;
175
175
  ssrName: "customData";
176
176
  docLink: string;
177
177
  type: Record<string, unknown> | null;
@@ -584,7 +584,7 @@ export declare const allOptions: {
584
584
  metadataOption: {
585
585
  name: string;
586
586
  cliFlag: "metadata";
587
- description: (mode: "ssr" | "cli") => import("react/jsx-runtime").JSX.Element;
587
+ description: (mode: "cli" | "ssr") => import("react/jsx-runtime").JSX.Element;
588
588
  docLink: string;
589
589
  type: import("./metadata").Metadata;
590
590
  getValue: ({ commandLine }: {