@remotion/renderer 4.0.255 → 4.0.256
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.
- package/dist/browser/Browser.d.ts +23 -6
- package/dist/browser/Browser.js +22 -12
- package/dist/browser/BrowserConnector.d.ts +19 -0
- package/dist/browser/BrowserConnector.js +17 -0
- package/dist/browser/BrowserPage.d.ts +5 -2
- package/dist/browser/BrowserPage.js +4 -2
- package/dist/browser/Launcher.js +1 -1
- package/dist/browser/PuppeteerNode.d.ts +30 -0
- package/dist/browser/PuppeteerNode.js +52 -0
- package/dist/browser/Target.d.ts +7 -1
- package/dist/browser/Target.js +6 -1
- package/dist/browser/mitt/index.js +3 -3
- package/dist/browser/node.d.ts +2 -0
- package/dist/browser/node.js +5 -0
- package/dist/browser-instances.js +1 -1
- package/dist/can-use-parallel-encoding.d.ts +1 -0
- package/dist/can-use-parallel-encoding.js +9 -1
- package/dist/client.d.ts +2 -2
- package/dist/copy-to-clipboard.d.ts +2 -0
- package/dist/copy-to-clipboard.js +18 -0
- package/dist/cycle-browser-tabs.d.ts +6 -1
- package/dist/cycle-browser-tabs.js +2 -2
- package/dist/example-videos.d.ts +34 -0
- package/dist/example-videos.js +43 -0
- package/dist/get-browser-instance.d.ts +2 -1
- package/dist/get-browser-instance.js +14 -4
- package/dist/get-codec-name.d.ts +1 -1
- package/dist/get-compositions.js +1 -0
- package/dist/get-local-browser.d.ts +1 -0
- package/dist/get-local-browser.js +19 -0
- package/dist/index.d.ts +3 -3
- package/dist/make-page.d.ts +27 -0
- package/dist/make-page.js +71 -0
- package/dist/next-frame-to-render.d.ts +10 -0
- package/dist/next-frame-to-render.js +35 -0
- package/dist/open-browser.js +3 -3
- package/dist/options/gl.d.ts +1 -1
- package/dist/options/index.d.ts +2 -2
- package/dist/options/metadata.d.ts +1 -1
- package/dist/options/webhook-custom-data.d.ts +1 -1
- package/dist/pool.d.ts +7 -6
- package/dist/render-frame-and-retry-target-close.d.ts +50 -0
- package/dist/render-frame-and-retry-target-close.js +165 -0
- package/dist/render-frame-with-option-to-reject.d.ts +43 -0
- package/dist/render-frame-with-option-to-reject.js +136 -0
- package/dist/render-frame.d.ts +43 -0
- package/dist/render-frame.js +46 -0
- package/dist/render-frames.js +86 -312
- package/dist/render-partitions.d.ts +7 -0
- package/dist/render-partitions.js +50 -0
- package/dist/render-still.js +7 -2
- package/dist/replace-browser.js +1 -1
- package/dist/select-composition.js +1 -0
- package/dist/take-frame-and-compose.d.ts +22 -0
- package/dist/take-frame-and-compose.js +100 -0
- package/dist/test-gpu.js +1 -0
- package/ensure-browser.mjs +458 -514
- package/package.json +12 -12
|
@@ -0,0 +1,136 @@
|
|
|
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.renderFrameWithOptionToReject = void 0;
|
|
7
|
+
const path_1 = __importDefault(require("path"));
|
|
8
|
+
const download_and_map_assets_to_file_1 = require("./assets/download-and-map-assets-to-file");
|
|
9
|
+
const compress_assets_1 = require("./compress-assets");
|
|
10
|
+
const handle_javascript_exception_1 = require("./error-handling/handle-javascript-exception");
|
|
11
|
+
const filter_asset_types_1 = require("./filter-asset-types");
|
|
12
|
+
const get_frame_padded_index_1 = require("./get-frame-padded-index");
|
|
13
|
+
const logger_1 = require("./logger");
|
|
14
|
+
const perf_1 = require("./perf");
|
|
15
|
+
const seek_to_frame_1 = require("./seek-to-frame");
|
|
16
|
+
const take_frame_1 = require("./take-frame");
|
|
17
|
+
const truthy_1 = require("./truthy");
|
|
18
|
+
const renderFrameWithOptionToReject = async ({ reject, width, height, compId, attempt, stoppedSignal, indent, logLevel, timeoutInMilliseconds, outputDir, onFrameBuffer, imageFormat, onError, lastFrame, jpegQuality, frameDir, scale, countType, assets, framesToRender, onArtifact, onDownload, downloadMap, binariesDirectory, cancelSignal, framesRenderedObj, onFrameUpdate, frame, page, }) => {
|
|
19
|
+
const startTime = performance.now();
|
|
20
|
+
const index = framesToRender.indexOf(frame);
|
|
21
|
+
const assetsOnly = index === -1;
|
|
22
|
+
if (stoppedSignal.stopped) {
|
|
23
|
+
return Promise.reject(new Error('Render was stopped'));
|
|
24
|
+
}
|
|
25
|
+
const errorCallbackOnFrame = (err) => {
|
|
26
|
+
reject(err);
|
|
27
|
+
};
|
|
28
|
+
const cleanupPageError = (0, handle_javascript_exception_1.handleJavascriptException)({
|
|
29
|
+
page,
|
|
30
|
+
onError: errorCallbackOnFrame,
|
|
31
|
+
frame,
|
|
32
|
+
});
|
|
33
|
+
page.on('error', errorCallbackOnFrame);
|
|
34
|
+
const startSeeking = Date.now();
|
|
35
|
+
await (0, seek_to_frame_1.seekToFrame)({
|
|
36
|
+
frame,
|
|
37
|
+
page,
|
|
38
|
+
composition: compId,
|
|
39
|
+
timeoutInMilliseconds,
|
|
40
|
+
indent,
|
|
41
|
+
logLevel,
|
|
42
|
+
attempt,
|
|
43
|
+
});
|
|
44
|
+
const timeToSeek = Date.now() - startSeeking;
|
|
45
|
+
if (timeToSeek > 1000) {
|
|
46
|
+
logger_1.Log.verbose({ indent, logLevel }, `Seeking to frame ${frame} took ${timeToSeek}ms`);
|
|
47
|
+
}
|
|
48
|
+
if (!outputDir && !onFrameBuffer && imageFormat !== 'none') {
|
|
49
|
+
throw new Error('Called renderFrames() without specifying either `outputDir` or `onFrameBuffer`');
|
|
50
|
+
}
|
|
51
|
+
if (outputDir && onFrameBuffer && imageFormat !== 'none') {
|
|
52
|
+
throw new Error('Pass either `outputDir` or `onFrameBuffer` to renderFrames(), not both.');
|
|
53
|
+
}
|
|
54
|
+
const id = (0, perf_1.startPerfMeasure)('save');
|
|
55
|
+
const { buffer, collectedAssets } = await (0, take_frame_1.takeFrame)({
|
|
56
|
+
frame,
|
|
57
|
+
freePage: page,
|
|
58
|
+
height,
|
|
59
|
+
imageFormat: assetsOnly ? 'none' : imageFormat,
|
|
60
|
+
output: index === null
|
|
61
|
+
? null
|
|
62
|
+
: path_1.default.join(frameDir, (0, get_frame_padded_index_1.getFrameOutputFileName)({
|
|
63
|
+
frame,
|
|
64
|
+
imageFormat,
|
|
65
|
+
index,
|
|
66
|
+
countType,
|
|
67
|
+
lastFrame,
|
|
68
|
+
totalFrames: framesToRender.length,
|
|
69
|
+
})),
|
|
70
|
+
jpegQuality,
|
|
71
|
+
width,
|
|
72
|
+
scale,
|
|
73
|
+
wantsBuffer: Boolean(onFrameBuffer),
|
|
74
|
+
timeoutInMilliseconds,
|
|
75
|
+
});
|
|
76
|
+
if (onFrameBuffer && !assetsOnly) {
|
|
77
|
+
if (!buffer) {
|
|
78
|
+
throw new Error('unexpected null buffer');
|
|
79
|
+
}
|
|
80
|
+
onFrameBuffer(buffer, frame);
|
|
81
|
+
}
|
|
82
|
+
(0, perf_1.stopPerfMeasure)(id);
|
|
83
|
+
const onlyAvailableAssets = assets.filter(truthy_1.truthy);
|
|
84
|
+
const previousAudioRenderAssets = onlyAvailableAssets
|
|
85
|
+
.map((a) => a.audioAndVideoAssets)
|
|
86
|
+
.flat(2);
|
|
87
|
+
const previousArtifactAssets = onlyAvailableAssets
|
|
88
|
+
.map((a) => a.artifactAssets)
|
|
89
|
+
.flat(2);
|
|
90
|
+
const audioAndVideoAssets = (0, filter_asset_types_1.onlyAudioAndVideoAssets)(collectedAssets);
|
|
91
|
+
const artifactAssets = (0, filter_asset_types_1.onlyArtifact)(collectedAssets);
|
|
92
|
+
for (const artifact of artifactAssets) {
|
|
93
|
+
for (const previousArtifact of previousArtifactAssets) {
|
|
94
|
+
if (artifact.filename === previousArtifact.filename) {
|
|
95
|
+
return Promise.reject(new Error(`An artifact with output "${artifact.filename}" was already registered at frame ${previousArtifact.frame}, but now registered again at frame ${artifact.frame}. Artifacts must have unique names. https://remotion.dev/docs/artifacts`));
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
onArtifact === null || onArtifact === void 0 ? void 0 : onArtifact(artifact);
|
|
99
|
+
}
|
|
100
|
+
const compressedAssets = audioAndVideoAssets.map((asset) => {
|
|
101
|
+
return (0, compress_assets_1.compressAsset)(previousAudioRenderAssets, asset);
|
|
102
|
+
});
|
|
103
|
+
assets.push({
|
|
104
|
+
audioAndVideoAssets: compressedAssets,
|
|
105
|
+
frame,
|
|
106
|
+
artifactAssets: artifactAssets.map((a) => {
|
|
107
|
+
return {
|
|
108
|
+
frame: a.frame,
|
|
109
|
+
filename: a.filename,
|
|
110
|
+
};
|
|
111
|
+
}),
|
|
112
|
+
});
|
|
113
|
+
for (const renderAsset of compressedAssets) {
|
|
114
|
+
(0, download_and_map_assets_to_file_1.downloadAndMapAssetsToFileUrl)({
|
|
115
|
+
renderAsset,
|
|
116
|
+
onDownload,
|
|
117
|
+
downloadMap,
|
|
118
|
+
indent,
|
|
119
|
+
logLevel,
|
|
120
|
+
binariesDirectory,
|
|
121
|
+
cancelSignalForAudioAnalysis: cancelSignal,
|
|
122
|
+
shouldAnalyzeAudioImmediately: true,
|
|
123
|
+
}).catch((err) => {
|
|
124
|
+
const truncateWithEllipsis = renderAsset.src.substring(0, 1000) +
|
|
125
|
+
(renderAsset.src.length > 1000 ? '...' : '');
|
|
126
|
+
onError(new Error(`Error while downloading ${truncateWithEllipsis}: ${err.stack}`));
|
|
127
|
+
});
|
|
128
|
+
}
|
|
129
|
+
cleanupPageError();
|
|
130
|
+
page.off('error', errorCallbackOnFrame);
|
|
131
|
+
if (!assetsOnly) {
|
|
132
|
+
framesRenderedObj.count++;
|
|
133
|
+
onFrameUpdate === null || onFrameUpdate === void 0 ? void 0 : onFrameUpdate(framesRenderedObj.count, frame, performance.now() - startTime);
|
|
134
|
+
}
|
|
135
|
+
};
|
|
136
|
+
exports.renderFrameWithOptionToReject = renderFrameWithOptionToReject;
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
import type { VideoConfig } from 'remotion/no-react';
|
|
2
|
+
import type { RenderMediaOnDownload } from './assets/download-and-map-assets-to-file';
|
|
3
|
+
import type { DownloadMap } from './assets/download-map';
|
|
4
|
+
import type { Page } from './browser/BrowserPage';
|
|
5
|
+
import type { CountType } from './get-frame-padded-index';
|
|
6
|
+
import type { VideoImageFormat } from './image-format';
|
|
7
|
+
import type { LogLevel } from './log-level';
|
|
8
|
+
import type { CancelSignal } from './make-cancel-signal';
|
|
9
|
+
import type { NextFrameToRender } from './next-frame-to-render';
|
|
10
|
+
import type { FrameAndAssets, OnArtifact } from './render-frames';
|
|
11
|
+
export declare const renderFrame: ({ attempt, binariesDirectory, cancelSignal, imageFormat, indent, logLevel, assets, countType, downloadMap, frameDir, framesToRender, jpegQuality, onArtifact, onDownload, scale, composition, onError, outputDir, stoppedSignal, timeoutInMilliseconds, lastFrame, onFrameBuffer, onFrameUpdate, framesRenderedObj, frame, page, }: {
|
|
12
|
+
attempt: number;
|
|
13
|
+
indent: boolean;
|
|
14
|
+
logLevel: LogLevel;
|
|
15
|
+
imageFormat: VideoImageFormat;
|
|
16
|
+
cancelSignal: CancelSignal | undefined;
|
|
17
|
+
binariesDirectory: string | null;
|
|
18
|
+
jpegQuality: number;
|
|
19
|
+
frameDir: string;
|
|
20
|
+
scale: number;
|
|
21
|
+
countType: CountType;
|
|
22
|
+
assets: FrameAndAssets[];
|
|
23
|
+
framesToRender: number[];
|
|
24
|
+
onArtifact: OnArtifact | null;
|
|
25
|
+
onDownload: RenderMediaOnDownload | null;
|
|
26
|
+
downloadMap: DownloadMap;
|
|
27
|
+
composition: Omit<VideoConfig, "defaultProps" | "props">;
|
|
28
|
+
onError: (err: Error) => void;
|
|
29
|
+
stoppedSignal: {
|
|
30
|
+
stopped: boolean;
|
|
31
|
+
};
|
|
32
|
+
timeoutInMilliseconds: number;
|
|
33
|
+
outputDir: string | null;
|
|
34
|
+
onFrameBuffer: null | ((buffer: Buffer, frame: number) => void) | undefined;
|
|
35
|
+
lastFrame: number;
|
|
36
|
+
onFrameUpdate: null | ((framesRendered: number, frameIndex: number, timeToRenderInMilliseconds: number) => void);
|
|
37
|
+
framesRenderedObj: {
|
|
38
|
+
count: number;
|
|
39
|
+
};
|
|
40
|
+
nextFrameToRender: NextFrameToRender;
|
|
41
|
+
frame: number;
|
|
42
|
+
page: Page;
|
|
43
|
+
}) => Promise<void>;
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.renderFrame = void 0;
|
|
4
|
+
const render_frame_with_option_to_reject_1 = require("./render-frame-with-option-to-reject");
|
|
5
|
+
const renderFrame = ({ attempt, binariesDirectory, cancelSignal, imageFormat, indent, logLevel, assets, countType, downloadMap, frameDir, framesToRender, jpegQuality, onArtifact, onDownload, scale, composition, onError, outputDir, stoppedSignal, timeoutInMilliseconds, lastFrame, onFrameBuffer, onFrameUpdate, framesRenderedObj, frame, page, }) => {
|
|
6
|
+
return new Promise((resolve, reject) => {
|
|
7
|
+
(0, render_frame_with_option_to_reject_1.renderFrameWithOptionToReject)({
|
|
8
|
+
reject,
|
|
9
|
+
width: composition.width,
|
|
10
|
+
height: composition.height,
|
|
11
|
+
compId: composition.id,
|
|
12
|
+
attempt,
|
|
13
|
+
indent,
|
|
14
|
+
logLevel,
|
|
15
|
+
stoppedSignal,
|
|
16
|
+
timeoutInMilliseconds,
|
|
17
|
+
imageFormat,
|
|
18
|
+
onFrameBuffer,
|
|
19
|
+
outputDir,
|
|
20
|
+
assets,
|
|
21
|
+
binariesDirectory,
|
|
22
|
+
cancelSignal,
|
|
23
|
+
countType,
|
|
24
|
+
downloadMap,
|
|
25
|
+
frameDir,
|
|
26
|
+
framesToRender,
|
|
27
|
+
jpegQuality,
|
|
28
|
+
lastFrame,
|
|
29
|
+
onArtifact,
|
|
30
|
+
onDownload,
|
|
31
|
+
onError,
|
|
32
|
+
scale,
|
|
33
|
+
framesRenderedObj,
|
|
34
|
+
onFrameUpdate,
|
|
35
|
+
frame,
|
|
36
|
+
page,
|
|
37
|
+
})
|
|
38
|
+
.then(() => {
|
|
39
|
+
resolve();
|
|
40
|
+
})
|
|
41
|
+
.catch((err) => {
|
|
42
|
+
reject(err);
|
|
43
|
+
});
|
|
44
|
+
});
|
|
45
|
+
};
|
|
46
|
+
exports.renderFrame = renderFrame;
|