@revideo/renderer 0.3.3-alpha.979 → 0.3.3-final.955
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/lib/client/FFmpegExporterClient.d.ts +46 -0
- package/lib/client/FFmpegExporterClient.d.ts.map +1 -0
- package/lib/client/FFmpegExporterClient.js +118 -0
- package/lib/client/ffpmeg.d.ts +3 -0
- package/lib/client/ffpmeg.d.ts.map +1 -0
- package/lib/client/ffpmeg.js +9 -0
- package/lib/client/index.d.ts +3 -0
- package/lib/client/index.d.ts.map +1 -0
- package/lib/client/index.js +9 -0
- package/lib/index.js +5 -0
- package/lib/index.js.map +1 -0
- package/lib/server/RendererPlugin.d.ts +3 -0
- package/lib/server/RendererPlugin.d.ts.map +1 -0
- package/lib/server/RendererPlugin.js +50 -0
- package/lib/server/ffmpeg/FFmpegBridge.d.ts +22 -0
- package/lib/server/ffmpeg/FFmpegBridge.d.ts.map +1 -0
- package/lib/server/ffmpeg/FFmpegBridge.js +92 -0
- package/lib/server/ffmpeg/FFmpegExporterServer.d.ts +39 -0
- package/lib/server/ffmpeg/FFmpegExporterServer.d.ts.map +1 -0
- package/lib/server/ffmpeg/FFmpegExporterServer.js +264 -0
- package/lib/server/ffmpeg/FFmpegPlugin.d.ts +3 -0
- package/lib/server/ffmpeg/FFmpegPlugin.d.ts.map +1 -0
- package/lib/server/ffmpeg/FFmpegPlugin.js +23 -0
- package/lib/server/ffmpeg/ImageStream.d.ts +10 -0
- package/lib/server/ffmpeg/ImageStream.d.ts.map +1 -0
- package/lib/server/ffmpeg/ImageStream.js +25 -0
- package/lib/server/ffmpeg/VideoFrameExtractor.d.ts +41 -0
- package/lib/server/ffmpeg/VideoFrameExtractor.d.ts.map +1 -0
- package/lib/server/ffmpeg/VideoFrameExtractor.js +148 -0
- package/lib/server/ffmpeg/utils.d.ts +8 -0
- package/lib/server/ffmpeg/utils.d.ts.map +1 -0
- package/lib/server/ffmpeg/utils.js +141 -0
- package/lib/server/render-video.d.ts +7 -2
- package/lib/server/render-video.d.ts.map +1 -1
- package/lib/server/render-video.js +53 -11
- package/lib/server/renderVideo.d.ts +10 -0
- package/lib/server/renderVideo.d.ts.map +1 -0
- package/lib/server/renderVideo.js +124 -0
- package/lib/server/renderer-plugin.d.ts.map +1 -1
- package/lib/server/renderer-plugin.js +4 -1
- package/lib/server/tsconfig.tsbuildinfo +1 -1
- package/lib/server/utils.d.ts +3 -0
- package/lib/server/utils.d.ts.map +1 -0
- package/lib/server/utils.js +20 -0
- package/package.json +4 -4
|
@@ -0,0 +1,141 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.getSampleRate = exports.checkForAudioStream = exports.mergeAudioWithVideo = exports.doesFileExist = exports.getVideoDuration = exports.createSilentAudioFile = exports.concatenateMedia = void 0;
|
|
4
|
+
const path = require("path");
|
|
5
|
+
const fs = require("fs");
|
|
6
|
+
const os = require("os");
|
|
7
|
+
const ffmpeg = require("fluent-ffmpeg");
|
|
8
|
+
const uuid_1 = require("uuid");
|
|
9
|
+
async function concatenateMedia(files, outputFile) {
|
|
10
|
+
const tempFile = path.join(os.tmpdir(), `${(0, uuid_1.v4)()}.txt`);
|
|
11
|
+
const fileContent = files.map(file => `file '${file.replace(/'/g, "\\'")}'`).join('\n');
|
|
12
|
+
await fs.promises.writeFile(tempFile, fileContent);
|
|
13
|
+
return new Promise((resolve, reject) => {
|
|
14
|
+
const ffmpegCommand = ffmpeg();
|
|
15
|
+
ffmpegCommand.input(tempFile)
|
|
16
|
+
.inputOptions([
|
|
17
|
+
'-f concat',
|
|
18
|
+
'-safe 0'
|
|
19
|
+
])
|
|
20
|
+
.outputOptions([
|
|
21
|
+
'-c copy'
|
|
22
|
+
])
|
|
23
|
+
.on('error', (err) => {
|
|
24
|
+
console.error('Error:', err);
|
|
25
|
+
fs.promises.unlink(tempFile).catch(console.error);
|
|
26
|
+
reject(err); // Reject the promise on error
|
|
27
|
+
})
|
|
28
|
+
.on('end', () => {
|
|
29
|
+
console.log('Concatenation finished.');
|
|
30
|
+
fs.promises.unlink(tempFile).catch(console.error);
|
|
31
|
+
resolve(); // Resolve the promise on successful completion
|
|
32
|
+
})
|
|
33
|
+
.save(outputFile);
|
|
34
|
+
});
|
|
35
|
+
}
|
|
36
|
+
exports.concatenateMedia = concatenateMedia;
|
|
37
|
+
async function createSilentAudioFile(filePath, duration) {
|
|
38
|
+
return new Promise((resolve, reject) => {
|
|
39
|
+
ffmpeg()
|
|
40
|
+
.addInput('anullsrc')
|
|
41
|
+
.audioChannels(2)
|
|
42
|
+
.audioFrequency(48000)
|
|
43
|
+
.outputOptions(['-t', duration.toString(), '-acodec', 'aac'])
|
|
44
|
+
.on('end', () => {
|
|
45
|
+
console.log(`Silent audio file created at ${filePath}`);
|
|
46
|
+
resolve(filePath);
|
|
47
|
+
})
|
|
48
|
+
.on('error', (err) => {
|
|
49
|
+
console.error('Error creating silent audio file:', err);
|
|
50
|
+
reject(err);
|
|
51
|
+
})
|
|
52
|
+
.save(filePath);
|
|
53
|
+
});
|
|
54
|
+
}
|
|
55
|
+
exports.createSilentAudioFile = createSilentAudioFile;
|
|
56
|
+
async function getVideoDuration(filePath) {
|
|
57
|
+
return new Promise((resolve, reject) => {
|
|
58
|
+
ffmpeg.ffprobe(filePath, (err, metadata) => {
|
|
59
|
+
if (err) {
|
|
60
|
+
reject(err);
|
|
61
|
+
return;
|
|
62
|
+
}
|
|
63
|
+
const duration = metadata.format.duration;
|
|
64
|
+
if (duration) {
|
|
65
|
+
resolve(duration);
|
|
66
|
+
}
|
|
67
|
+
else {
|
|
68
|
+
reject(new Error('Could not determine video duration.'));
|
|
69
|
+
}
|
|
70
|
+
});
|
|
71
|
+
});
|
|
72
|
+
}
|
|
73
|
+
exports.getVideoDuration = getVideoDuration;
|
|
74
|
+
async function doesFileExist(filePath) {
|
|
75
|
+
try {
|
|
76
|
+
await fs.promises.access(filePath, fs.constants.F_OK);
|
|
77
|
+
return true;
|
|
78
|
+
}
|
|
79
|
+
catch {
|
|
80
|
+
return false;
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
exports.doesFileExist = doesFileExist;
|
|
84
|
+
async function mergeAudioWithVideo(audioPath, videoPath, outputPath) {
|
|
85
|
+
return new Promise((resolve, reject) => {
|
|
86
|
+
ffmpeg()
|
|
87
|
+
.input(videoPath)
|
|
88
|
+
.input(audioPath)
|
|
89
|
+
.outputOptions([
|
|
90
|
+
'-c:v',
|
|
91
|
+
'copy',
|
|
92
|
+
'-c:a',
|
|
93
|
+
'aac',
|
|
94
|
+
'-strict',
|
|
95
|
+
'experimental',
|
|
96
|
+
])
|
|
97
|
+
.on('end', () => {
|
|
98
|
+
resolve();
|
|
99
|
+
console.log(`\nRendered successfully! Video saved to: ${outputPath}`);
|
|
100
|
+
})
|
|
101
|
+
.on('error', err => {
|
|
102
|
+
console.error(`Error merging video and audio: ${err.message}`);
|
|
103
|
+
reject(err);
|
|
104
|
+
})
|
|
105
|
+
.save(outputPath);
|
|
106
|
+
});
|
|
107
|
+
}
|
|
108
|
+
exports.mergeAudioWithVideo = mergeAudioWithVideo;
|
|
109
|
+
async function checkForAudioStream(file) {
|
|
110
|
+
return new Promise((resolve, reject) => {
|
|
111
|
+
ffmpeg.ffprobe(file, (err, metadata) => {
|
|
112
|
+
if (err) {
|
|
113
|
+
console.error(`error checking for audioStream for file ${file}`, err);
|
|
114
|
+
reject(err);
|
|
115
|
+
return;
|
|
116
|
+
}
|
|
117
|
+
const audioStreams = metadata.streams.filter(s => s.codec_type === 'audio');
|
|
118
|
+
resolve(audioStreams.length > 0);
|
|
119
|
+
});
|
|
120
|
+
});
|
|
121
|
+
}
|
|
122
|
+
exports.checkForAudioStream = checkForAudioStream;
|
|
123
|
+
async function getSampleRate(filePath) {
|
|
124
|
+
return new Promise((resolve, reject) => {
|
|
125
|
+
ffmpeg.ffprobe(filePath, (err, metadata) => {
|
|
126
|
+
if (err) {
|
|
127
|
+
reject(err);
|
|
128
|
+
return;
|
|
129
|
+
}
|
|
130
|
+
const audioStream = metadata.streams.find(s => s.codec_type === 'audio');
|
|
131
|
+
if (audioStream && audioStream.sample_rate) {
|
|
132
|
+
resolve(audioStream.sample_rate);
|
|
133
|
+
}
|
|
134
|
+
else {
|
|
135
|
+
reject(new Error('No audio stream found'));
|
|
136
|
+
}
|
|
137
|
+
});
|
|
138
|
+
});
|
|
139
|
+
}
|
|
140
|
+
exports.getSampleRate = getSampleRate;
|
|
141
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zZXJ2ZXIvZmZtcGVnL3V0aWxzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLDZCQUE2QjtBQUM3Qix5QkFBeUI7QUFDekIseUJBQXlCO0FBQ3pCLHdDQUF3QztBQUN4QywrQkFBb0M7QUFHN0IsS0FBSyxVQUFVLGdCQUFnQixDQUFDLEtBQWUsRUFBRSxVQUFrQjtJQUN0RSxNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxNQUFNLEVBQUUsRUFBRSxHQUFHLElBQUEsU0FBTSxHQUFFLE1BQU0sQ0FBQyxDQUFDO0lBQzNELE1BQU0sV0FBVyxHQUFHLEtBQUssQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxTQUFTLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxFQUFFLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDeEYsTUFBTSxFQUFFLENBQUMsUUFBUSxDQUFDLFNBQVMsQ0FBQyxRQUFRLEVBQUUsV0FBVyxDQUFDLENBQUM7SUFFbkQsT0FBTyxJQUFJLE9BQU8sQ0FBQyxDQUFDLE9BQU8sRUFBRSxNQUFNLEVBQUUsRUFBRTtRQUNyQyxNQUFNLGFBQWEsR0FBRyxNQUFNLEVBQUUsQ0FBQztRQUUvQixhQUFhLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQzthQUMxQixZQUFZLENBQUM7WUFDWixXQUFXO1lBQ1gsU0FBUztTQUNWLENBQUM7YUFDRCxhQUFhLENBQUM7WUFDYixTQUFTO1NBQ1YsQ0FBQzthQUNELEVBQUUsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxHQUFHLEVBQUUsRUFBRTtZQUNuQixPQUFPLENBQUMsS0FBSyxDQUFDLFFBQVEsRUFBRSxHQUFHLENBQUMsQ0FBQztZQUM3QixFQUFFLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQyxLQUFL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
|
|
@@ -1,13 +1,19 @@
|
|
|
1
1
|
import { FfmpegSettings } from '@revideo/ffmpeg';
|
|
2
2
|
import { BrowserLaunchArgumentOptions } from 'puppeteer';
|
|
3
|
-
interface RenderVideoSettings {
|
|
3
|
+
export interface RenderVideoSettings {
|
|
4
4
|
name?: string;
|
|
5
5
|
range?: [number, number];
|
|
6
6
|
ffmpeg?: FfmpegSettings;
|
|
7
7
|
puppeteer?: BrowserLaunchArgumentOptions;
|
|
8
8
|
workers?: number;
|
|
9
9
|
dimensions?: [number, number];
|
|
10
|
+
logProgress?: boolean;
|
|
11
|
+
noMerge?: boolean;
|
|
10
12
|
}
|
|
13
|
+
export declare const renderPartial: (configFile: string, workerId: number, numWorkers: number, params?: Record<string, unknown>, progressCallback?: ((worker: number, progress: number) => void) | undefined, settings?: RenderVideoSettings) => Promise<{
|
|
14
|
+
audioFile: string;
|
|
15
|
+
videoFile: string;
|
|
16
|
+
}>;
|
|
11
17
|
/**
|
|
12
18
|
* Renders a video to a file.
|
|
13
19
|
* @param configFile - Path to the vite config file (vite.config.ts).
|
|
@@ -17,5 +23,4 @@ interface RenderVideoSettings {
|
|
|
17
23
|
* @returns - Path to the rendered video file.
|
|
18
24
|
*/
|
|
19
25
|
export declare const renderVideo: (configFile: string, params?: Record<string, unknown>, progressCallback?: ((worker: number, progress: number) => void) | undefined, settings?: RenderVideoSettings) => Promise<string>;
|
|
20
|
-
export {};
|
|
21
26
|
//# sourceMappingURL=render-video.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"render-video.d.ts","sourceRoot":"","sources":["../../server/render-video.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,cAAc,EAMf,MAAM,iBAAiB,CAAC;AAIzB,OAAkB,EAAU,4BAA4B,EAAC,MAAM,WAAW,CAAC;AA8B3E,
|
|
1
|
+
{"version":3,"file":"render-video.d.ts","sourceRoot":"","sources":["../../server/render-video.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,cAAc,EAMf,MAAM,iBAAiB,CAAC;AAIzB,OAAkB,EAAU,4BAA4B,EAAC,MAAM,WAAW,CAAC;AA8B3E,MAAM,WAAW,mBAAmB;IAElC,IAAI,CAAC,EAAE,MAAM,CAAC;IAGd,KAAK,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAEzB,MAAM,CAAC,EAAE,cAAc,CAAC;IAExB,SAAS,CAAC,EAAE,4BAA4B,CAAC;IACzC,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,UAAU,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC9B,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AA0PD,eAAO,MAAM,aAAa,eACZ,MAAM,YACR,MAAM,cACJ,MAAM,WACT,OAAO,MAAM,EAAE,OAAO,CAAC,+BACJ,MAAM,YAAY,MAAM,KAAK,IAAI,0BACnD,mBAAmB;;;EA4B9B,CAAA;AAED;;;;;;;GAOG;AACH,eAAO,MAAM,WAAW,eACV,MAAM,WACT,OAAO,MAAM,EAAE,OAAO,CAAC,+BACJ,MAAM,YAAY,MAAM,KAAK,IAAI,0BACnD,mBAAmB,oBAgD9B,CAAC"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.renderVideo = void 0;
|
|
3
|
+
exports.renderVideo = exports.renderPartial = void 0;
|
|
4
4
|
const ffmpeg_1 = require("@revideo/ffmpeg");
|
|
5
5
|
const fs = require("fs");
|
|
6
6
|
const os = require("os");
|
|
@@ -49,7 +49,20 @@ async function initBrowserAndServer(fixedPort, resolvedConfigPath, settings, par
|
|
|
49
49
|
/**
|
|
50
50
|
* Navigates to the URL and renders the video on the page
|
|
51
51
|
*/
|
|
52
|
-
async function renderVideoOnPage(id, browser, server, url, progressCallback) {
|
|
52
|
+
async function renderVideoOnPage(id, browser, server, url, progressTracker, progressCallback, logProgress) {
|
|
53
|
+
function printProgress() {
|
|
54
|
+
let line = '';
|
|
55
|
+
for (const [key, value] of progressTracker.entries()) {
|
|
56
|
+
line += `Render progress, worker ${key}: ${(value * 100).toFixed(0)}% `;
|
|
57
|
+
}
|
|
58
|
+
if (line === '') {
|
|
59
|
+
return;
|
|
60
|
+
}
|
|
61
|
+
console.log(line);
|
|
62
|
+
}
|
|
63
|
+
const interval = setInterval(() => {
|
|
64
|
+
printProgress();
|
|
65
|
+
}, 1000);
|
|
53
66
|
const page = await browser.newPage();
|
|
54
67
|
if (!server.httpServer) {
|
|
55
68
|
throw new Error('HTTP server is not initialized');
|
|
@@ -73,15 +86,20 @@ async function renderVideoOnPage(id, browser, server, url, progressCallback) {
|
|
|
73
86
|
if (progressCallback) {
|
|
74
87
|
progressCallback(id, progress);
|
|
75
88
|
}
|
|
89
|
+
if (logProgress) {
|
|
90
|
+
trackProgress(progressTracker, id, progress);
|
|
91
|
+
}
|
|
76
92
|
});
|
|
77
93
|
const renderingComplete = new Promise((resolve, reject) => {
|
|
78
94
|
page.exposeFunction('onRenderComplete', async () => {
|
|
79
95
|
await Promise.all([browser.close(), server.close()]);
|
|
96
|
+
clearInterval(interval);
|
|
80
97
|
resolve();
|
|
81
98
|
});
|
|
82
99
|
page.exposeFunction('onRenderFailed', async (errorMessage) => {
|
|
83
100
|
await Promise.all([browser.close(), server.close()]);
|
|
84
101
|
console.error('Rendering failed:', errorMessage);
|
|
102
|
+
clearInterval(interval);
|
|
85
103
|
reject(new Error(errorMessage));
|
|
86
104
|
});
|
|
87
105
|
});
|
|
@@ -93,9 +111,10 @@ async function renderVideoOnPage(id, browser, server, url, progressCallback) {
|
|
|
93
111
|
*/
|
|
94
112
|
async function initializeBrowserAndStartRendering(resolvedConfigPath, projectName, i, numOfWorkers, settings, hiddenFolderId, params, progressCallback) {
|
|
95
113
|
const port = 9000 + i;
|
|
114
|
+
const progressTracker = new Map();
|
|
96
115
|
const { browser, server } = await initBrowserAndServer(port, resolvedConfigPath, settings, params);
|
|
97
116
|
const url = buildUrl(port, `${projectName}-${i}`, i, numOfWorkers, settings.range, hiddenFolderId, settings.dimensions);
|
|
98
|
-
return renderVideoOnPage(i, browser, server, url, progressCallback);
|
|
117
|
+
return renderVideoOnPage(i, browser, server, url, progressTracker, progressCallback, settings.logProgress);
|
|
99
118
|
}
|
|
100
119
|
/**
|
|
101
120
|
* Collects audio and video files from each worker and returns them.
|
|
@@ -119,27 +138,47 @@ async function collectAudioAndVideoFiles(numOfWorkers, projectName, hiddenFolder
|
|
|
119
138
|
/**
|
|
120
139
|
* Concatenates audio and video files and merges them into a single video file.
|
|
121
140
|
*/
|
|
122
|
-
async function concatenateAudioAndVideoFiles(projectName, audioFiles, videoFiles) {
|
|
141
|
+
async function concatenateAudioAndVideoFiles(projectName, audioFiles, videoFiles, noMerge) {
|
|
123
142
|
await (0, ffmpeg_1.concatenateMedia)(videoFiles, path.join(process.cwd(), `output/${projectName}-visuals.mp4`));
|
|
124
143
|
await (0, ffmpeg_1.concatenateMedia)(audioFiles, path.join(process.cwd(), `output/${projectName}-audio.wav`));
|
|
125
|
-
|
|
144
|
+
if (!noMerge) {
|
|
145
|
+
await (0, ffmpeg_1.mergeAudioWithVideo)(path.join(process.cwd(), `output/${projectName}-audio.wav`), path.join(process.cwd(), `output/${projectName}-visuals.mp4`), path.join(process.cwd(), `output/${projectName}.mp4`));
|
|
146
|
+
}
|
|
126
147
|
}
|
|
127
148
|
/**
|
|
128
149
|
* Deletes all partial files after concatenation is done
|
|
129
150
|
*/
|
|
130
|
-
async function cleanup(projectName, numOfWorkers, hiddenFolderId) {
|
|
151
|
+
async function cleanup(projectName, numOfWorkers, hiddenFolderId, noMerge) {
|
|
131
152
|
const cleanupFolders = [];
|
|
132
153
|
const cleanupFiles = [];
|
|
133
154
|
for (let i = 0; i < numOfWorkers; i++) {
|
|
134
155
|
cleanupFolders.push(`${os.tmpdir()}/revideo-${projectName}-${i}-${hiddenFolderId}`);
|
|
135
156
|
cleanupFiles.push(path.join(process.cwd(), `output/${projectName}-${i}.mp4`));
|
|
136
157
|
}
|
|
137
|
-
|
|
138
|
-
|
|
158
|
+
if (!noMerge) {
|
|
159
|
+
cleanupFiles.push(path.join(process.cwd(), `output/${projectName}-audio.wav`));
|
|
160
|
+
cleanupFiles.push(path.join(process.cwd(), `output/${projectName}-visuals.mp4`));
|
|
161
|
+
}
|
|
139
162
|
const folderCleanupPromises = cleanupFolders.map(folder => fs.promises.rm(folder, { recursive: true, force: true }).catch(() => { }));
|
|
140
163
|
const fileCleanupPromises = cleanupFiles.map(file => fs.promises.unlink(file).catch(() => { }));
|
|
141
164
|
await Promise.all([...folderCleanupPromises, ...fileCleanupPromises]);
|
|
142
165
|
}
|
|
166
|
+
const renderPartial = async (configFile, workerId, numWorkers, params, progressCallback, settings = {}) => {
|
|
167
|
+
// Get settings
|
|
168
|
+
const resolvedConfigPath = path.resolve(process.cwd(), configFile);
|
|
169
|
+
const projectName = settings.name ?? 'project';
|
|
170
|
+
const hiddenFolderId = (0, uuid_1.v4)();
|
|
171
|
+
const numOfWorkers = numWorkers;
|
|
172
|
+
await initializeBrowserAndStartRendering(resolvedConfigPath, projectName, workerId, numOfWorkers, settings, hiddenFolderId, params, progressCallback);
|
|
173
|
+
const videoFilePath = `${os.tmpdir()}/revideo-${projectName}-${workerId}-${hiddenFolderId}/visuals.mp4`;
|
|
174
|
+
const audioFilePath = `${os.tmpdir()}/revideo-${projectName}-${workerId}-${hiddenFolderId}/audio.wav`;
|
|
175
|
+
if (!(await (0, ffmpeg_1.doesFileExist)(audioFilePath))) {
|
|
176
|
+
const videoDuration = await (0, ffmpeg_1.getVideoDuration)(videoFilePath);
|
|
177
|
+
await (0, ffmpeg_1.createSilentAudioFile)(audioFilePath, videoDuration);
|
|
178
|
+
}
|
|
179
|
+
return { audioFile: audioFilePath, videoFile: videoFilePath };
|
|
180
|
+
};
|
|
181
|
+
exports.renderPartial = renderPartial;
|
|
143
182
|
/**
|
|
144
183
|
* Renders a video to a file.
|
|
145
184
|
* @param configFile - Path to the vite config file (vite.config.ts).
|
|
@@ -163,9 +202,12 @@ const renderVideo = async (configFile, params, progressCallback, settings = {})
|
|
|
163
202
|
await Promise.all(renderPromises);
|
|
164
203
|
// Collect and concatenate audio and video files
|
|
165
204
|
const { audioFiles, videoFiles } = await collectAudioAndVideoFiles(numOfWorkers, projectName, hiddenFolderId);
|
|
166
|
-
await concatenateAudioAndVideoFiles(projectName, audioFiles, videoFiles);
|
|
167
|
-
await cleanup(projectName, numOfWorkers, hiddenFolderId);
|
|
205
|
+
await concatenateAudioAndVideoFiles(projectName, audioFiles, videoFiles, settings.noMerge || false);
|
|
206
|
+
await cleanup(projectName, numOfWorkers, hiddenFolderId, settings.noMerge || false);
|
|
168
207
|
return `output/${projectName}.mp4`;
|
|
169
208
|
};
|
|
170
209
|
exports.renderVideo = renderVideo;
|
|
171
|
-
|
|
210
|
+
function trackProgress(tracker, id, progress) {
|
|
211
|
+
tracker.set(id, progress);
|
|
212
|
+
}
|
|
213
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVuZGVyLXZpZGVvLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc2VydmVyL3JlbmRlci12aWRlby50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSw0Q0FPeUI7QUFDekIseUJBQXlCO0FBQ3pCLHlCQUF5QjtBQUN6Qiw2QkFBNkI7QUFDN0IseUNBQTJFO0FBQzNFLCtCQUFrQztBQUNsQywrQkFBaUQ7QUFDakQsdURBQWlEO0FBRWpEOzs7R0FHRztBQUNILFNBQVMsUUFBUSxDQUNmLElBQVksRUFDWixRQUFnQixFQUNoQixRQUFnQixFQUNoQixpQkFBeUIsRUFDekIsUUFBMEIsQ0FBQyxDQUFDLEVBQUUsUUFBUSxDQUFDLEVBQ3ZDLGNBQXNCLEVBQ3RCLFVBQTZCO0lBRTdCLE1BQU0sZUFBZSxHQUFHLGtCQUFrQixDQUFDLFFBQVEsQ0FBQyxDQUFDO0lBQ3JELE1BQU0scUJBQXFCLEdBQUcsa0JBQWtCLENBQUMsY0FBYyxDQUFDLENBQUM7SUFDakUsTUFBTSxnQkFBZ0IsR0FBRyxVQUFVO1FBQ2pDLENBQUMsQ0FBQyxlQUFlLFVBQVUsQ0FBQyxDQUFDLENBQUMsZ0JBQWdCLFVBQVUsQ0FBQyxDQUFDLENBQUMsRUFBRTtRQUM3RCxDQUFDLENBQUMsRUFBRSxDQUFDO0lBRVAsT0FBTyxDQUNMLG9CQUFvQixJQUFJLG9CQUFvQixlQUFlLGFBQWEsUUFBUSxzQkFBc0IsaUJBQWlCLG1CQUFtQixLQUFLLENBQUMsQ0FBQyxDQUFDLGlCQUFpQixLQUFLLENBQUMsQ0FBQyxDQUFDLG1CQUFtQixxQkFBcUIsRUFBRTtRQUNyTixnQkFBZ0IsQ0FDakIsQ0FBQztBQUNKLENBQUM7QUFrQkQ7O0dBRUc7QUFDSCxLQUFLLFVBQVUsb0JBQW9CLENBQ2pDLFNBQWlCLEVBQ2pCLGtCQUEwQixFQUMxQixRQUE2QixFQUM3QixNQUFnQztJQUVoQyxNQUFNLENBQUMsT0FBTyxFQUFFLE1BQU0sQ0FBQyxHQUFHLE1BQU0sT0FBTyxDQUFDLEdBQUcs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
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { BrowserLaunchArgumentOptions } from 'puppeteer';
|
|
2
|
+
interface RenderVideoSettings {
|
|
3
|
+
name?: string;
|
|
4
|
+
range?: [number, number];
|
|
5
|
+
puppeteer?: BrowserLaunchArgumentOptions;
|
|
6
|
+
workers?: number;
|
|
7
|
+
}
|
|
8
|
+
export declare const renderVideo: (configFile: string, params?: Record<string, unknown>, settings?: RenderVideoSettings) => Promise<void>;
|
|
9
|
+
export {};
|
|
10
|
+
//# sourceMappingURL=renderVideo.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"renderVideo.d.ts","sourceRoot":"","sources":["../../server/renderVideo.ts"],"names":[],"mappings":"AAUA,OAAkB,EAAU,4BAA4B,EAAC,MAAM,WAAW,CAAC;AAiB3E,UAAU,mBAAmB;IAE3B,IAAI,CAAC,EAAE,MAAM,CAAC;IAGd,KAAK,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAEzB,SAAS,CAAC,EAAE,4BAA4B,CAAC;IACzC,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,eAAO,MAAM,WAAW,eACV,MAAM,WACT,OAAO,MAAM,EAAE,OAAO,CAAC,aACtB,mBAAmB,kBAmE9B,CAAC"}
|
|
@@ -0,0 +1,124 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.renderVideo = void 0;
|
|
4
|
+
const ffmpeg_1 = require("@revideo/ffmpeg");
|
|
5
|
+
const fs = require("fs");
|
|
6
|
+
const os = require("os");
|
|
7
|
+
const path = require("path");
|
|
8
|
+
const puppeteer_1 = require("puppeteer");
|
|
9
|
+
const readline = require("readline");
|
|
10
|
+
const uuid_1 = require("uuid");
|
|
11
|
+
const vite_1 = require("vite");
|
|
12
|
+
const RendererPlugin_1 = require("./RendererPlugin");
|
|
13
|
+
function buildUrl(port, fileName, workerId, totalNumOfWorkers, range = [0, Infinity], hiddenFolderId) {
|
|
14
|
+
return `http://localhost:${port}/render?fileName=${fileName}&workerId=${workerId}&totalNumOfWorkers=${totalNumOfWorkers}&startInSeconds=${range[0]}&endInSeconds=${range[1]}&hiddenFolderId=${hiddenFolderId}`;
|
|
15
|
+
}
|
|
16
|
+
const renderVideo = async (configFile, params, settings = {}) => {
|
|
17
|
+
console.log('Rendering...');
|
|
18
|
+
const resolvedConfigPath = path.resolve(process.cwd(), configFile);
|
|
19
|
+
const projectName = settings.name ?? 'project';
|
|
20
|
+
const hiddenFolderId = (0, uuid_1.v4)();
|
|
21
|
+
const numOfWorkers = settings.workers ?? 1;
|
|
22
|
+
const renderPromises = [];
|
|
23
|
+
for (let i = 0; i < numOfWorkers; i++) {
|
|
24
|
+
const port = 9000 + i;
|
|
25
|
+
renderPromises.push(initBrowserAndServer(port, resolvedConfigPath, params, settings.puppeteer).then(({ browser, server }) => {
|
|
26
|
+
const url = buildUrl(port, `${projectName}-${i}`, i, numOfWorkers, settings.range, hiddenFolderId);
|
|
27
|
+
return renderVideoOnPage(browser, server, url);
|
|
28
|
+
}));
|
|
29
|
+
}
|
|
30
|
+
await Promise.all(renderPromises);
|
|
31
|
+
const audioFiles = [];
|
|
32
|
+
const videoFiles = [];
|
|
33
|
+
for (let i = 0; i < numOfWorkers; i++) {
|
|
34
|
+
const videoFilePath = `${os.tmpdir()}/revideo-${projectName}-${i}-${hiddenFolderId}/visuals.mp4`;
|
|
35
|
+
const audioFilePath = `${os.tmpdir()}/revideo-${projectName}-${i}-${hiddenFolderId}/audio.wav`;
|
|
36
|
+
if (!(await (0, ffmpeg_1.doesFileExist)(audioFilePath))) {
|
|
37
|
+
const videoDuration = await (0, ffmpeg_1.getVideoDuration)(videoFilePath);
|
|
38
|
+
await (0, ffmpeg_1.createSilentAudioFile)(audioFilePath, videoDuration);
|
|
39
|
+
}
|
|
40
|
+
videoFiles.push(videoFilePath);
|
|
41
|
+
audioFiles.push(audioFilePath);
|
|
42
|
+
}
|
|
43
|
+
await (0, ffmpeg_1.concatenateMedia)(videoFiles, path.join(process.cwd(), `output/${projectName}-visuals.mp4`));
|
|
44
|
+
await (0, ffmpeg_1.concatenateMedia)(audioFiles, path.join(process.cwd(), `output/${projectName}-audio.wav`));
|
|
45
|
+
await (0, ffmpeg_1.mergeAudioWithVideo)(path.join(process.cwd(), `output/${projectName}-audio.wav`), path.join(process.cwd(), `output/${projectName}-visuals.mp4`), path.join(process.cwd(), `output/${projectName}.mp4`));
|
|
46
|
+
console.log(`\nRendered successfully! Video saved to: ${path.join(process.cwd(), `output/${projectName}.mp4`)}`);
|
|
47
|
+
await cleanup(projectName, numOfWorkers, hiddenFolderId);
|
|
48
|
+
};
|
|
49
|
+
exports.renderVideo = renderVideo;
|
|
50
|
+
async function initBrowserAndServer(fixedPort, resolvedConfigPath, params, puppeteerOptions) {
|
|
51
|
+
const [browser, server] = await Promise.all([
|
|
52
|
+
puppeteer_1.default.launch({ headless: true, ...puppeteerOptions }),
|
|
53
|
+
(0, vite_1.createServer)({
|
|
54
|
+
configFile: resolvedConfigPath,
|
|
55
|
+
server: {
|
|
56
|
+
port: fixedPort,
|
|
57
|
+
},
|
|
58
|
+
plugins: [(0, RendererPlugin_1.rendererPlugin)(params)],
|
|
59
|
+
}).then(server => server.listen()),
|
|
60
|
+
]);
|
|
61
|
+
if (!server.httpServer) {
|
|
62
|
+
throw new Error('HTTP server is not initialized');
|
|
63
|
+
}
|
|
64
|
+
const address = server.httpServer.address();
|
|
65
|
+
const port = address && typeof address === 'object' ? address.port : null;
|
|
66
|
+
if (port === null) {
|
|
67
|
+
throw new Error('Server address is null');
|
|
68
|
+
}
|
|
69
|
+
return { browser, server, port };
|
|
70
|
+
}
|
|
71
|
+
async function renderVideoOnPage(browser, server, url) {
|
|
72
|
+
const page = await browser.newPage();
|
|
73
|
+
if (!server.httpServer) {
|
|
74
|
+
throw new Error('HTTP server is not initialized');
|
|
75
|
+
}
|
|
76
|
+
const address = server.httpServer.address();
|
|
77
|
+
const port = address && typeof address === 'object' ? address.port : null;
|
|
78
|
+
if (port === null) {
|
|
79
|
+
throw new Error('Server address is null');
|
|
80
|
+
}
|
|
81
|
+
// Attach logs from puppeteer to the console
|
|
82
|
+
page.on('console', msg => {
|
|
83
|
+
for (let i = 0; i < msg.args().length; ++i) {
|
|
84
|
+
console.log(`${port}: ${msg.args()[i]}`);
|
|
85
|
+
}
|
|
86
|
+
});
|
|
87
|
+
page.exposeFunction('logProgress', (progress) => {
|
|
88
|
+
const percentage = Math.floor(progress * 100);
|
|
89
|
+
const barLength = 20;
|
|
90
|
+
const filledLength = Math.floor((percentage / 100) * barLength);
|
|
91
|
+
const bar = '█'.repeat(filledLength) + '-'.repeat(barLength - filledLength);
|
|
92
|
+
const consoleLine = process.stdout.rows + port - 9000;
|
|
93
|
+
readline.cursorTo(process.stdout, 0, consoleLine);
|
|
94
|
+
readline.clearLine(process.stdout, 0);
|
|
95
|
+
process.stdout.write(`Progress for worker on port ${port}: [${bar}] ${percentage}%`);
|
|
96
|
+
});
|
|
97
|
+
const renderingComplete = new Promise((resolve, reject) => {
|
|
98
|
+
page.exposeFunction('onRenderComplete', async () => {
|
|
99
|
+
await Promise.all([browser.close(), server.close()]);
|
|
100
|
+
resolve();
|
|
101
|
+
});
|
|
102
|
+
page.exposeFunction('onRenderFailed', async (errorMessage) => {
|
|
103
|
+
await Promise.all([browser.close(), server.close()]);
|
|
104
|
+
console.error('Rendering failed:', errorMessage);
|
|
105
|
+
reject(new Error(errorMessage));
|
|
106
|
+
});
|
|
107
|
+
});
|
|
108
|
+
await page.goto(url);
|
|
109
|
+
return renderingComplete;
|
|
110
|
+
}
|
|
111
|
+
async function cleanup(projectName, numOfWorkers, hiddenFolderId) {
|
|
112
|
+
const cleanupFolders = [];
|
|
113
|
+
const cleanupFiles = [];
|
|
114
|
+
for (let i = 0; i < numOfWorkers; i++) {
|
|
115
|
+
cleanupFolders.push(`${os.tmpdir()}/revideo-${projectName}-${i}-${hiddenFolderId}`);
|
|
116
|
+
cleanupFiles.push(path.join(process.cwd(), `output/${projectName}-${i}.mp4`));
|
|
117
|
+
}
|
|
118
|
+
cleanupFiles.push(path.join(process.cwd(), `output/${projectName}-audio.wav`));
|
|
119
|
+
cleanupFiles.push(path.join(process.cwd(), `output/${projectName}-visuals.mp4`));
|
|
120
|
+
const folderCleanupPromises = cleanupFolders.map(folder => fs.promises.rm(folder, { recursive: true, force: true }).catch(() => { }));
|
|
121
|
+
const fileCleanupPromises = cleanupFiles.map(file => fs.promises.unlink(file).catch(() => { }));
|
|
122
|
+
await Promise.all([...folderCleanupPromises, ...fileCleanupPromises]);
|
|
123
|
+
}
|
|
124
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVuZGVyVmlkZW8uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zZXJ2ZXIvcmVuZGVyVmlkZW8udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsNENBTXlCO0FBQ3pCLHlCQUF5QjtBQUN6Qix5QkFBeUI7QUFDekIsNkJBQTZCO0FBQzdCLHlDQUEyRTtBQUMzRSxxQ0FBcUM7QUFDckMsK0JBQWtDO0FBQ2xDLCtCQUFpRDtBQUNqRCxxREFBZ0Q7QUFFaEQsU0FBUyxRQUFRLENBQ2YsSUFBWSxFQUNaLFFBQWdCLEVBQ2hCLFFBQWdCLEVBQ2hCLGlCQUF5QixFQUN6QixRQUEwQixDQUFDLENBQUMsRUFBRSxRQUFRLENBQUMsRUFDdkMsY0FBc0I7SUFFdEIsT0FBTyxvQkFBb0IsSUFBSSxvQkFBb0IsUUFBUSxhQUFhLFFBQVEsc0JBQXNCLGlCQUFpQixtQkFBbUIsS0FBSyxDQUFDLENBQUMsQ0FBQyxpQkFBaUIsS0FBSyxDQUFDLENBQUMsQ0FBQyxtQkFBbUIsY0FBYyxFQUFFLENBQUM7QUFDak4sQ0FBQztBQWFNLE1BQU0sV0FBVyxHQUFHLEtBQUssRUFDOUIsVUFBa0IsRUFDbEIsTUFBZ0MsRUFDaEMsV0FBZ0MsRUFBRSxFQUNsQyxFQUFFO0lBQ0YsT0FBTyxDQUFDLEdBQUcsQ0FBQyxjQUFjLENBQUMsQ0FBQztJQUU1QixNQUFNLGtCQUFrQixHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLEdBQUcsRUFBRSxFQUFFLFVBQVUsQ0FBQyxDQUFDO0lBQ25FLE1BQU0sV0FBVyxHQUFHLFFBQVEsQ0FBQyxJQUFJLElBQUksU0FBUyxDQUFDO0lBQy9DLE1BQU0sY0FBYyxHQUFHLElBQUEsU0FBTSxHQUFFLENBQUM7SUFFaEMsTUFBTSxZQUFZLEdBQUcsUUFBUSxDQUFDLE9BQU8sSUFBSSxDQUFDLENBQUM7SUFDM0MsTUFBTSxjQUFjLEdBQUcsRUFBRSxDQUFDO0lBRTFCLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxF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
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"renderer-plugin.d.ts","sourceRoot":"","sources":["../../server/renderer-plugin.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,cAAc,EAAiB,MAAM,iBAAiB,CAAC;AAG/D,OAAO,EAAC,MAAM,EAAC,MAAM,MAAM,CAAC;AAU5B,wBAAgB,cAAc,CAC5B,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAChC,oBAAoB,CAAC,EAAE,cAAc,GACpC,MAAM,
|
|
1
|
+
{"version":3,"file":"renderer-plugin.d.ts","sourceRoot":"","sources":["../../server/renderer-plugin.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,cAAc,EAAiB,MAAM,iBAAiB,CAAC;AAG/D,OAAO,EAAC,MAAM,EAAC,MAAM,MAAM,CAAC;AAU5B,wBAAgB,cAAc,CAC5B,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAChC,oBAAoB,CAAC,EAAE,cAAc,GACpC,MAAM,CAqDR"}
|
|
@@ -14,6 +14,9 @@ function rendererPlugin(params, customFfmpegSettings) {
|
|
|
14
14
|
if (customFfmpegSettings?.ffmpegPath) {
|
|
15
15
|
ffmpeg_1.ffmpegSettings.setFfmpegPath(customFfmpegSettings.ffmpegPath);
|
|
16
16
|
}
|
|
17
|
+
if (customFfmpegSettings?.ffprobePath) {
|
|
18
|
+
ffmpeg_1.ffmpegSettings.setFfprobePath(customFfmpegSettings.ffprobePath);
|
|
19
|
+
}
|
|
17
20
|
if (customFfmpegSettings?.ffmpegLogLevel) {
|
|
18
21
|
ffmpeg_1.ffmpegSettings.setLogLevel(customFfmpegSettings.ffmpegLogLevel);
|
|
19
22
|
}
|
|
@@ -59,4 +62,4 @@ function rendererPlugin(params, customFfmpegSettings) {
|
|
|
59
62
|
};
|
|
60
63
|
}
|
|
61
64
|
exports.rendererPlugin = rendererPlugin;
|
|
62
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
65
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVuZGVyZXItcGx1Z2luLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc2VydmVyL3JlbmRlcmVyLXBsdWdpbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSw0Q0FBK0Q7QUFDL0QseUJBQXlCO0FBQ3pCLDZCQUE2QjtBQUc3QixNQUFNLFlBQVksR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLFNBQVMsRUFBRSxrQkFBa0IsQ0FBQyxDQUFDO0FBQ2pFLE1BQU0sT0FBTyxHQUFHLEVBQUUsQ0FBQyxZQUFZLENBQUMsWUFBWSxFQUFFLE9BQU8sQ0FBQyxDQUFDO0FBQ3ZELE1BQU0sU0FBUyxHQUFHLE9BQU8sQ0FBQyxRQUFRLEVBQUUsQ0FBQyxLQUFLLENBQUMsWUFBWSxDQUFDLENBQUM7QUFFekQsU0FBUyxVQUFVLENBQUMsR0FBVztJQUM3QixPQUFPLFNBQVMsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLEdBQUcsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzNDLENBQUM7QUFFRCxTQUFnQixjQUFjLENBQzVCLE1BQWdDLEVBQ2hDLG9CQUFxQztJQUVyQyxJQUFJLG9CQUFvQixFQUFFLFVBQVUsRUFBRSxDQUFDO1FBQ3JDLHVCQUFjLENBQUMsYUFBYSxDQUFDLG9CQUFvQixDQUFDLFVBQVUsQ0FBQyxDQUFDO0lBQ2hFLENBQUM7SUFDRCxJQUFJLG9CQUFvQixFQUFFLFdBQVcsRUFBRSxDQUFDO1FBQ3RDLHVCQUFjLENBQUMsY0FBYyxDQUFDLG9CQUFvQixDQUFDLFdBQVcsQ0FBQyxDQUFDO0lBQ2xFLENBQUM7SUFDRCxJQUFJLG9CQUFvQixFQUFFLGNBQWMsRUFBRSxDQUFDO1FBQ3pDLHVCQUFjLENBQUMsV0FBVyxDQUFDLG9CQUFvQixDQUFDLGNBQWMsQ0FBQyxDQUFDO0lBQ2xFLENBQUM7SUFFRCxPQUFPO1FBQ0wsSUFBSSxFQUFFLHlCQUF5QjtRQUUvQixLQUFLLENBQUMsSUFBSSxDQUFDLEVBQUU7WUFDWCxJQUFJLEVBQUUsQ0FBQyxVQUFVLENBQUMsc0JBQXNCLENBQUMsRUFBRSxDQUFDO2dCQUMxQyxPQUFPOzs7OztrQ0FLbUIsTUFBTSxDQUFDLENBQUMsQ0FBQyxnQkFBZ0IsSUFBSSxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxtQkFBbUI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OzthQXFCL0YsQ0FBQztZQUNSLENBQUM7UUFDSCxDQUFDO1FBRUQsZUFBZSxDQUFDLE1BQU07WUFDcEIsTUFBTSxDQUFDLFdBQVcsQ0FBQyxHQUFHLENBQUMsU0FBUyxFQUFFLENBQUMsSUFBSSxFQUFFLEdBQUcsRUFBRSxFQUFFO2dCQUM5QyxHQUFHLENBQUMsU0FBUyxDQUFDLGNBQWMsRUFBRSxXQUFXLENBQUMsQ0FBQztnQkFDM0MsR0FBRyxDQUFDLEdBQUcsQ0FBQyxVQUFVLENBQUMsOEJBQThCLENBQUMsQ0FBQyxDQUFDO1lBQ3RELENBQUMsQ0FBQyxDQUFDO1FBQ0wsQ0FBQztLQUNGLENBQUM7QUFDSixDQUFDO0FBeERELHdDQXdEQyJ9
|