@rendiv/renderer 0.1.11 → 0.1.12
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/index.d.ts +2 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js.map +1 -1
- package/dist/render-frames.d.ts +5 -2
- package/dist/render-frames.d.ts.map +1 -1
- package/dist/render-frames.js +11 -0
- package/dist/render-frames.js.map +1 -1
- package/dist/render-media.d.ts.map +1 -1
- package/dist/render-media.js +5 -3
- package/dist/render-media.js.map +1 -1
- package/dist/stitch-frames-to-video.d.ts +5 -0
- package/dist/stitch-frames-to-video.d.ts.map +1 -1
- package/dist/stitch-frames-to-video.js +100 -1
- package/dist/stitch-frames-to-video.js.map +1 -1
- package/dist/types.d.ts +16 -0
- package/dist/types.d.ts.map +1 -1
- package/package.json +1 -1
package/dist/index.d.ts
CHANGED
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
export { renderMedia, type RenderMediaOptions } from './render-media.js';
|
|
2
|
-
export { renderFrames, type RenderFramesOptions } from './render-frames.js';
|
|
2
|
+
export { renderFrames, type RenderFramesOptions, type RenderFramesResult } from './render-frames.js';
|
|
3
3
|
export { renderStill, type RenderStillOptions } from './render-still.js';
|
|
4
4
|
export { stitchFramesToVideo, type StitchOptions } from './stitch-frames-to-video.js';
|
|
5
5
|
export { getCompositions, selectComposition } from './get-compositions.js';
|
|
6
6
|
export { openBrowser, closeBrowser, ensureBrowser } from './browser.js';
|
|
7
7
|
export { makeCancelSignal, type CancelSignal } from './cancel-signal.js';
|
|
8
|
-
export type { CompositionInfo } from './types.js';
|
|
8
|
+
export type { AudioSourceInfo, CompositionInfo } from './types.js';
|
|
9
9
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,KAAK,kBAAkB,EAAE,MAAM,mBAAmB,CAAC;AACzE,OAAO,EAAE,YAAY,EAAE,KAAK,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,KAAK,kBAAkB,EAAE,MAAM,mBAAmB,CAAC;AACzE,OAAO,EAAE,YAAY,EAAE,KAAK,mBAAmB,EAAE,KAAK,kBAAkB,EAAE,MAAM,oBAAoB,CAAC;AACrG,OAAO,EAAE,WAAW,EAAE,KAAK,kBAAkB,EAAE,MAAM,mBAAmB,CAAC;AACzE,OAAO,EAAE,mBAAmB,EAAE,KAAK,aAAa,EAAE,MAAM,6BAA6B,CAAC;AACtF,OAAO,EAAE,eAAe,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAC;AAC3E,OAAO,EAAE,WAAW,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AACxE,OAAO,EAAE,gBAAgB,EAAE,KAAK,YAAY,EAAE,MAAM,oBAAoB,CAAC;AACzE,YAAY,EAAE,eAAe,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC"}
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAA2B,MAAM,mBAAmB,CAAC;AACzE,OAAO,EAAE,YAAY,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAA2B,MAAM,mBAAmB,CAAC;AACzE,OAAO,EAAE,YAAY,EAAqD,MAAM,oBAAoB,CAAC;AACrG,OAAO,EAAE,WAAW,EAA2B,MAAM,mBAAmB,CAAC;AACzE,OAAO,EAAE,mBAAmB,EAAsB,MAAM,6BAA6B,CAAC;AACtF,OAAO,EAAE,eAAe,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAC;AAC3E,OAAO,EAAE,WAAW,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AACxE,OAAO,EAAE,gBAAgB,EAAqB,MAAM,oBAAoB,CAAC"}
|
package/dist/render-frames.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type { CompositionInfo } from './types.js';
|
|
1
|
+
import type { AudioSourceInfo, CompositionInfo } from './types.js';
|
|
2
2
|
export interface RenderFramesOptions {
|
|
3
3
|
serveUrl: string;
|
|
4
4
|
composition: CompositionInfo;
|
|
@@ -13,5 +13,8 @@ export interface RenderFramesOptions {
|
|
|
13
13
|
cancelSignal?: AbortSignal;
|
|
14
14
|
timeoutPerFrame?: number;
|
|
15
15
|
}
|
|
16
|
-
export
|
|
16
|
+
export interface RenderFramesResult {
|
|
17
|
+
audioSources: AudioSourceInfo[];
|
|
18
|
+
}
|
|
19
|
+
export declare function renderFrames(options: RenderFramesOptions): Promise<RenderFramesResult>;
|
|
17
20
|
//# sourceMappingURL=render-frames.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"render-frames.d.ts","sourceRoot":"","sources":["../src/render-frames.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"render-frames.d.ts","sourceRoot":"","sources":["../src/render-frames.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,eAAe,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAEnE,MAAM,WAAW,mBAAmB;IAClC,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,EAAE,eAAe,CAAC;IAC7B,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACrC,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,UAAU,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC9B,eAAe,CAAC,EAAE,CAAC,IAAI,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,KAAK,IAAI,CAAC;IACnE,YAAY,CAAC,EAAE,WAAW,CAAC;IAC3B,eAAe,CAAC,EAAE,MAAM,CAAC;CAC1B;AA4BD,MAAM,WAAW,kBAAkB;IACjC,YAAY,EAAE,eAAe,EAAE,CAAC;CACjC;AAED,wBAAsB,YAAY,CAAC,OAAO,EAAE,mBAAmB,GAAG,OAAO,CAAC,kBAAkB,CAAC,CAuF5F"}
|
package/dist/render-frames.js
CHANGED
|
@@ -59,10 +59,21 @@ export async function renderFrames(options) {
|
|
|
59
59
|
}
|
|
60
60
|
};
|
|
61
61
|
await Promise.all(pages.map((page) => renderNext(page)));
|
|
62
|
+
// Collect audio source metadata registered by Audio/Video components.
|
|
63
|
+
// The persistent Map accumulates entries across all frames, so reading
|
|
64
|
+
// from any page after rendering captures everything.
|
|
65
|
+
const audioSources = await pages[0].evaluate(() => {
|
|
66
|
+
const w = window;
|
|
67
|
+
const map = w.__RENDIV_AUDIO_SOURCES__;
|
|
68
|
+
if (!map || map.size === 0)
|
|
69
|
+
return [];
|
|
70
|
+
return Array.from(map.values());
|
|
71
|
+
});
|
|
62
72
|
// Cleanup pages
|
|
63
73
|
for (const page of pages) {
|
|
64
74
|
await page.close();
|
|
65
75
|
}
|
|
76
|
+
return { audioSources };
|
|
66
77
|
}
|
|
67
78
|
finally {
|
|
68
79
|
server.close();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"render-frames.js","sourceRoot":"","sources":["../src/render-frames.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,IAAI,MAAM,WAAW,CAAC;AAE7B,OAAO,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,cAAc,CAAC;AACrD,OAAO,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAezC,KAAK,UAAU,iBAAiB,CAC9B,IAAU,EACV,KAAa,EACb,SAAiB,EACjB,eAAuB;IAEvB,4CAA4C;IAC5C,MAAM,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAS,EAAE,EAAE;QAChC,OAAQ,MAAc,CAAC,oBAAoB,CAAC,CAAC,CAAC,CAAC;IACjD,CAAC,EAAE,KAAK,CAAC,CAAC;IAEV,qCAAqC;IACrC,MAAM,IAAI,CAAC,eAAe,CACxB,GAAG,EAAE,CAAE,MAAc,CAAC,wBAAwB,EAAE,KAAK,CAAC,EACtD,EAAE,OAAO,EAAE,eAAe,EAAE,CAC7B,CAAC;IAEF,aAAa;IACb,MAAM,WAAW,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;IACnD,MAAM,IAAI,CAAC,UAAU,CAAC;QACpB,IAAI,EAAE,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,SAAS,WAAW,MAAM,CAAC;QACtD,IAAI,EAAE,KAAK;QACX,UAAU,EAAE,UAAU;KACvB,CAAC,CAAC;AACL,CAAC;
|
|
1
|
+
{"version":3,"file":"render-frames.js","sourceRoot":"","sources":["../src/render-frames.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"render-media.d.ts","sourceRoot":"","sources":["../src/render-media.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAElD,MAAM,WAAW,kBAAkB;IACjC,WAAW,EAAE,eAAe,CAAC;IAC7B,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,CAAC,EAAE,KAAK,GAAG,MAAM,CAAC;IACvB,cAAc,EAAE,MAAM,CAAC;IACvB,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACrC,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,UAAU,CAAC,EAAE,CAAC,IAAI,EAAE;QAAE,QAAQ,EAAE,MAAM,CAAC;QAAC,cAAc,EAAE,MAAM,CAAC;QAAC,WAAW,EAAE,MAAM,CAAA;KAAE,KAAK,IAAI,CAAC;IAC/F,UAAU,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC9B,YAAY,CAAC,EAAE,WAAW,CAAC;CAC5B;AAED,wBAAsB,WAAW,CAAC,OAAO,EAAE,kBAAkB,GAAG,OAAO,CAAC,IAAI,CAAC,
|
|
1
|
+
{"version":3,"file":"render-media.d.ts","sourceRoot":"","sources":["../src/render-media.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAElD,MAAM,WAAW,kBAAkB;IACjC,WAAW,EAAE,eAAe,CAAC;IAC7B,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,CAAC,EAAE,KAAK,GAAG,MAAM,CAAC;IACvB,cAAc,EAAE,MAAM,CAAC;IACvB,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACrC,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,UAAU,CAAC,EAAE,CAAC,IAAI,EAAE;QAAE,QAAQ,EAAE,MAAM,CAAC;QAAC,cAAc,EAAE,MAAM,CAAC;QAAC,WAAW,EAAE,MAAM,CAAA;KAAE,KAAK,IAAI,CAAC;IAC/F,UAAU,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC9B,YAAY,CAAC,EAAE,WAAW,CAAC;CAC5B;AAED,wBAAsB,WAAW,CAAC,OAAO,EAAE,kBAAkB,GAAG,OAAO,CAAC,IAAI,CAAC,CAsE5E"}
|
package/dist/render-media.js
CHANGED
|
@@ -14,8 +14,8 @@ export async function renderMedia(options) {
|
|
|
14
14
|
const outputDir = path.dirname(outputLocation);
|
|
15
15
|
fs.mkdirSync(outputDir, { recursive: true });
|
|
16
16
|
try {
|
|
17
|
-
// Step 1: Render frames
|
|
18
|
-
await renderFrames({
|
|
17
|
+
// Step 1: Render frames and collect audio metadata
|
|
18
|
+
const { audioSources } = await renderFrames({
|
|
19
19
|
serveUrl,
|
|
20
20
|
composition,
|
|
21
21
|
outputDir: tmpDir,
|
|
@@ -33,7 +33,7 @@ export async function renderMedia(options) {
|
|
|
33
33
|
});
|
|
34
34
|
if (cancelSignal?.aborted)
|
|
35
35
|
return;
|
|
36
|
-
// Step 2: Stitch frames to video
|
|
36
|
+
// Step 2: Stitch frames to video (with audio if available)
|
|
37
37
|
onProgress?.({
|
|
38
38
|
progress: 0.9,
|
|
39
39
|
renderedFrames: totalFrames,
|
|
@@ -44,6 +44,8 @@ export async function renderMedia(options) {
|
|
|
44
44
|
outputPath: outputLocation,
|
|
45
45
|
fps: composition.fps,
|
|
46
46
|
codec,
|
|
47
|
+
audioSources,
|
|
48
|
+
assetsDir: serveUrl,
|
|
47
49
|
});
|
|
48
50
|
onProgress?.({
|
|
49
51
|
progress: 1.0,
|
package/dist/render-media.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"render-media.js","sourceRoot":"","sources":["../src/render-media.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,EAAE,YAAY,EAA4B,MAAM,oBAAoB,CAAC;AAC5E,OAAO,EAAE,mBAAmB,EAAE,MAAM,6BAA6B,CAAC;AAelE,MAAM,CAAC,KAAK,UAAU,WAAW,CAAC,OAA2B;IAC3D,MAAM,EACJ,WAAW,EACX,QAAQ,EACR,KAAK,GAAG,KAAK,EACb,cAAc,EACd,UAAU,EACV,WAAW,EACX,UAAU,EACV,UAAU,EACV,YAAY,GACb,GAAG,OAAO,CAAC;IAEZ,MAAM,WAAW,GAAG,UAAU;QAC5B,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,GAAG,UAAU,CAAC,CAAC,CAAC,GAAG,CAAC;QACnC,CAAC,CAAC,WAAW,CAAC,gBAAgB,CAAC;IAEjC,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,MAAM,EAAE,EAAE,iBAAiB,IAAI,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;IACrE,EAAE,CAAC,SAAS,CAAC,MAAM,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAE1C,iCAAiC;IACjC,MAAM,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC,cAAc,CAAC,CAAC;IAC/C,EAAE,CAAC,SAAS,CAAC,SAAS,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAE7C,IAAI,CAAC;QACH,
|
|
1
|
+
{"version":3,"file":"render-media.js","sourceRoot":"","sources":["../src/render-media.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,EAAE,YAAY,EAA4B,MAAM,oBAAoB,CAAC;AAC5E,OAAO,EAAE,mBAAmB,EAAE,MAAM,6BAA6B,CAAC;AAelE,MAAM,CAAC,KAAK,UAAU,WAAW,CAAC,OAA2B;IAC3D,MAAM,EACJ,WAAW,EACX,QAAQ,EACR,KAAK,GAAG,KAAK,EACb,cAAc,EACd,UAAU,EACV,WAAW,EACX,UAAU,EACV,UAAU,EACV,YAAY,GACb,GAAG,OAAO,CAAC;IAEZ,MAAM,WAAW,GAAG,UAAU;QAC5B,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,GAAG,UAAU,CAAC,CAAC,CAAC,GAAG,CAAC;QACnC,CAAC,CAAC,WAAW,CAAC,gBAAgB,CAAC;IAEjC,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,MAAM,EAAE,EAAE,iBAAiB,IAAI,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;IACrE,EAAE,CAAC,SAAS,CAAC,MAAM,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAE1C,iCAAiC;IACjC,MAAM,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC,cAAc,CAAC,CAAC;IAC/C,EAAE,CAAC,SAAS,CAAC,SAAS,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAE7C,IAAI,CAAC;QACH,mDAAmD;QACnD,MAAM,EAAE,YAAY,EAAE,GAAG,MAAM,YAAY,CAAC;YAC1C,QAAQ;YACR,WAAW;YACX,SAAS,EAAE,MAAM;YACjB,UAAU;YACV,WAAW;YACX,UAAU;YACV,eAAe,EAAE,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE,EAAE;gBACpC,UAAU,EAAE,CAAC;oBACX,QAAQ,EAAE,CAAC,KAAK,GAAG,KAAK,CAAC,GAAG,GAAG,EAAE,0BAA0B;oBAC3D,cAAc,EAAE,KAAK;oBACrB,WAAW,EAAE,KAAK;iBACnB,CAAC,CAAC;YACL,CAAC;YACD,YAAY;SACb,CAAC,CAAC;QAEH,IAAI,YAAY,EAAE,OAAO;YAAE,OAAO;QAElC,2DAA2D;QAC3D,UAAU,EAAE,CAAC;YACX,QAAQ,EAAE,GAAG;YACb,cAAc,EAAE,WAAW;YAC3B,WAAW;SACZ,CAAC,CAAC;QAEH,MAAM,mBAAmB,CAAC;YACxB,SAAS,EAAE,MAAM;YACjB,UAAU,EAAE,cAAc;YAC1B,GAAG,EAAE,WAAW,CAAC,GAAG;YACpB,KAAK;YACL,YAAY;YACZ,SAAS,EAAE,QAAQ;SACpB,CAAC,CAAC;QAEH,UAAU,EAAE,CAAC;YACX,QAAQ,EAAE,GAAG;YACb,cAAc,EAAE,WAAW;YAC3B,WAAW;SACZ,CAAC,CAAC;IACL,CAAC;YAAS,CAAC;QACT,sBAAsB;QACtB,EAAE,CAAC,MAAM,CAAC,MAAM,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;IACtD,CAAC;AACH,CAAC"}
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import type { AudioSourceInfo } from './types.js';
|
|
1
2
|
export interface StitchOptions {
|
|
2
3
|
framesDir: string;
|
|
3
4
|
outputPath: string;
|
|
@@ -6,6 +7,10 @@ export interface StitchOptions {
|
|
|
6
7
|
crf?: number;
|
|
7
8
|
pixelFormat?: string;
|
|
8
9
|
onProgress?: (progress: number) => void;
|
|
10
|
+
/** Audio sources collected from Audio/Video components */
|
|
11
|
+
audioSources?: AudioSourceInfo[];
|
|
12
|
+
/** Root directory where static files are served from (for resolving audio src URLs) */
|
|
13
|
+
assetsDir?: string;
|
|
9
14
|
}
|
|
10
15
|
export declare function stitchFramesToVideo(options: StitchOptions): Promise<void>;
|
|
11
16
|
//# sourceMappingURL=stitch-frames-to-video.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"stitch-frames-to-video.d.ts","sourceRoot":"","sources":["../src/stitch-frames-to-video.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"stitch-frames-to-video.d.ts","sourceRoot":"","sources":["../src/stitch-frames-to-video.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAIlD,MAAM,WAAW,aAAa;IAC5B,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;IACnB,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,CAAC,EAAE,KAAK,GAAG,MAAM,CAAC;IACvB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,UAAU,CAAC,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,IAAI,CAAC;IACxC,0DAA0D;IAC1D,YAAY,CAAC,EAAE,eAAe,EAAE,CAAC;IACjC,uFAAuF;IACvF,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,wBAAsB,mBAAmB,CAAC,OAAO,EAAE,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC,CAoJ/E"}
|
|
@@ -1,22 +1,99 @@
|
|
|
1
1
|
import { spawn } from 'node:child_process';
|
|
2
2
|
import path from 'node:path';
|
|
3
|
+
import fs from 'node:fs';
|
|
3
4
|
// @ts-ignore - @ffmpeg-installer/ffmpeg has no types
|
|
4
5
|
import ffmpegInstaller from '@ffmpeg-installer/ffmpeg';
|
|
5
6
|
const ffmpegPath = ffmpegInstaller.path;
|
|
6
7
|
export async function stitchFramesToVideo(options) {
|
|
7
|
-
const { framesDir, outputPath, fps, codec = 'mp4', crf = 18, pixelFormat = 'yuv420p', } = options;
|
|
8
|
+
const { framesDir, outputPath, fps, codec = 'mp4', crf = 18, pixelFormat = 'yuv420p', audioSources = [], assetsDir, } = options;
|
|
8
9
|
const inputPattern = path.join(framesDir, 'frame-%06d.png');
|
|
10
|
+
// Resolve audio sources to absolute file paths, filtering out missing files
|
|
11
|
+
const resolvedAudio = [];
|
|
12
|
+
if (assetsDir && audioSources.length > 0) {
|
|
13
|
+
for (const source of audioSources) {
|
|
14
|
+
const cleaned = source.src.startsWith('/') ? source.src.slice(1) : source.src;
|
|
15
|
+
const filePath = path.resolve(assetsDir, cleaned);
|
|
16
|
+
if (fs.existsSync(filePath)) {
|
|
17
|
+
resolvedAudio.push({ ...source, filePath });
|
|
18
|
+
}
|
|
19
|
+
else {
|
|
20
|
+
console.warn(`[rendiv] Audio source not found: ${filePath} (src: ${source.src})`);
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
}
|
|
9
24
|
const args = [
|
|
10
25
|
'-y',
|
|
11
26
|
'-framerate', String(fps),
|
|
12
27
|
'-i', inputPattern,
|
|
13
28
|
];
|
|
29
|
+
// Add each audio source as an input
|
|
30
|
+
for (const audio of resolvedAudio) {
|
|
31
|
+
args.push('-i', audio.filePath);
|
|
32
|
+
}
|
|
33
|
+
// Build filter graph for audio processing
|
|
34
|
+
let filterGraph = '';
|
|
35
|
+
if (resolvedAudio.length > 0) {
|
|
36
|
+
const filterParts = [];
|
|
37
|
+
const mixInputs = [];
|
|
38
|
+
for (let i = 0; i < resolvedAudio.length; i++) {
|
|
39
|
+
const audio = resolvedAudio[i];
|
|
40
|
+
const inputIdx = i + 1; // input 0 is the video frames
|
|
41
|
+
const delayMs = Math.round((audio.startAtFrame / fps) * 1000);
|
|
42
|
+
const startFromSec = audio.startFrom / fps;
|
|
43
|
+
// Trim from the *source* file. When playbackRate != 1 the source
|
|
44
|
+
// is consumed faster/slower than real-time, so we need more/less
|
|
45
|
+
// source material. After atempo scales it, the output duration
|
|
46
|
+
// will equal durationInFrames / fps (the timeline duration).
|
|
47
|
+
const durationSec = (audio.durationInFrames / fps) * audio.playbackRate;
|
|
48
|
+
const label = `a${i}`;
|
|
49
|
+
// Build per-source filter chain: trim → atempo → adelay → volume
|
|
50
|
+
const filters = [];
|
|
51
|
+
// Trim: skip into source file and limit duration
|
|
52
|
+
filters.push(`atrim=start=${startFromSec.toFixed(6)}:duration=${durationSec.toFixed(6)}`);
|
|
53
|
+
filters.push('asetpts=PTS-STARTPTS');
|
|
54
|
+
// Playback rate adjustment via atempo (supports 0.5–100, chain for wider range)
|
|
55
|
+
if (audio.playbackRate !== 1) {
|
|
56
|
+
const tempoFilters = buildAtempoChain(audio.playbackRate);
|
|
57
|
+
filters.push(...tempoFilters);
|
|
58
|
+
}
|
|
59
|
+
// Delay: offset audio start position in the timeline
|
|
60
|
+
if (delayMs > 0) {
|
|
61
|
+
filters.push(`adelay=${delayMs}|${delayMs}`);
|
|
62
|
+
}
|
|
63
|
+
// Volume
|
|
64
|
+
if (audio.volume !== 1) {
|
|
65
|
+
filters.push(`volume=${audio.volume.toFixed(4)}`);
|
|
66
|
+
}
|
|
67
|
+
filterParts.push(`[${inputIdx}:a]${filters.join(',')}[${label}]`);
|
|
68
|
+
mixInputs.push(`[${label}]`);
|
|
69
|
+
}
|
|
70
|
+
// Mix all audio tracks together
|
|
71
|
+
if (mixInputs.length === 1) {
|
|
72
|
+
filterGraph = `${filterParts[0].replace(`[${mixInputs[0].slice(1, -1)}]`, '[aout]')}`.replace(filterParts[0], filterParts[0]);
|
|
73
|
+
// Simpler: just rename the output label
|
|
74
|
+
filterGraph = filterParts[0].slice(0, filterParts[0].lastIndexOf('[')) + '[aout]';
|
|
75
|
+
}
|
|
76
|
+
else {
|
|
77
|
+
filterGraph = filterParts.join(';')
|
|
78
|
+
+ `;${mixInputs.join('')}amix=inputs=${mixInputs.length}:duration=longest:normalize=0[aout]`;
|
|
79
|
+
}
|
|
80
|
+
args.push('-filter_complex', filterGraph);
|
|
81
|
+
args.push('-map', '0:v', '-map', '[aout]');
|
|
82
|
+
}
|
|
14
83
|
if (codec === 'mp4') {
|
|
15
84
|
args.push('-c:v', 'libx264', '-crf', String(crf), '-pix_fmt', pixelFormat, '-movflags', '+faststart');
|
|
85
|
+
if (resolvedAudio.length > 0) {
|
|
86
|
+
args.push('-c:a', 'aac', '-b:a', '192k');
|
|
87
|
+
}
|
|
16
88
|
}
|
|
17
89
|
else {
|
|
18
90
|
args.push('-c:v', 'libvpx-vp9', '-crf', String(crf), '-b:v', '0');
|
|
91
|
+
if (resolvedAudio.length > 0) {
|
|
92
|
+
args.push('-c:a', 'libopus', '-b:a', '128k');
|
|
93
|
+
}
|
|
19
94
|
}
|
|
95
|
+
// Ensure output duration matches the video (don't let audio extend it)
|
|
96
|
+
args.push('-shortest');
|
|
20
97
|
args.push(outputPath);
|
|
21
98
|
return new Promise((resolve, reject) => {
|
|
22
99
|
const proc = spawn(ffmpegPath, args, { stdio: ['ignore', 'pipe', 'pipe'] });
|
|
@@ -37,4 +114,26 @@ export async function stitchFramesToVideo(options) {
|
|
|
37
114
|
});
|
|
38
115
|
});
|
|
39
116
|
}
|
|
117
|
+
/**
|
|
118
|
+
* FFmpeg's atempo filter only supports values in [0.5, 100].
|
|
119
|
+
* For rates outside this range, chain multiple atempo filters.
|
|
120
|
+
*/
|
|
121
|
+
function buildAtempoChain(rate) {
|
|
122
|
+
const filters = [];
|
|
123
|
+
let remaining = rate;
|
|
124
|
+
if (remaining < 0.5) {
|
|
125
|
+
while (remaining < 0.5) {
|
|
126
|
+
filters.push('atempo=0.5');
|
|
127
|
+
remaining /= 0.5;
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
else if (remaining > 100) {
|
|
131
|
+
while (remaining > 100) {
|
|
132
|
+
filters.push('atempo=100');
|
|
133
|
+
remaining /= 100;
|
|
134
|
+
}
|
|
135
|
+
}
|
|
136
|
+
filters.push(`atempo=${remaining.toFixed(6)}`);
|
|
137
|
+
return filters;
|
|
138
|
+
}
|
|
40
139
|
//# sourceMappingURL=stitch-frames-to-video.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"stitch-frames-to-video.js","sourceRoot":"","sources":["../src/stitch-frames-to-video.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAC;AAC3C,OAAO,IAAI,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"stitch-frames-to-video.js","sourceRoot":"","sources":["../src/stitch-frames-to-video.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAC;AAC3C,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,MAAM,SAAS,CAAC;AAEzB,qDAAqD;AACrD,OAAO,eAAe,MAAM,0BAA0B,CAAC;AAIvD,MAAM,UAAU,GAAW,eAAe,CAAC,IAAI,CAAC;AAgBhD,MAAM,CAAC,KAAK,UAAU,mBAAmB,CAAC,OAAsB;IAC9D,MAAM,EACJ,SAAS,EACT,UAAU,EACV,GAAG,EACH,KAAK,GAAG,KAAK,EACb,GAAG,GAAG,EAAE,EACR,WAAW,GAAG,SAAS,EACvB,YAAY,GAAG,EAAE,EACjB,SAAS,GACV,GAAG,OAAO,CAAC;IAEZ,MAAM,YAAY,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,gBAAgB,CAAC,CAAC;IAE5D,4EAA4E;IAC5E,MAAM,aAAa,GAAkD,EAAE,CAAC;IACxE,IAAI,SAAS,IAAI,YAAY,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACzC,KAAK,MAAM,MAAM,IAAI,YAAY,EAAE,CAAC;YAClC,MAAM,OAAO,GAAG,MAAM,CAAC,GAAG,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC;YAC9E,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;YAClD,IAAI,EAAE,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;gBAC5B,aAAa,CAAC,IAAI,CAAC,EAAE,GAAG,MAAM,EAAE,QAAQ,EAAE,CAAC,CAAC;YAC9C,CAAC;iBAAM,CAAC;gBACN,OAAO,CAAC,IAAI,CAAC,oCAAoC,QAAQ,UAAU,MAAM,CAAC,GAAG,GAAG,CAAC,CAAC;YACpF,CAAC;QACH,CAAC;IACH,CAAC;IAED,MAAM,IAAI,GAAa;QACrB,IAAI;QACJ,YAAY,EAAE,MAAM,CAAC,GAAG,CAAC;QACzB,IAAI,EAAE,YAAY;KACnB,CAAC;IAEF,oCAAoC;IACpC,KAAK,MAAM,KAAK,IAAI,aAAa,EAAE,CAAC;QAClC,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,KAAK,CAAC,QAAQ,CAAC,CAAC;IAClC,CAAC;IAED,0CAA0C;IAC1C,IAAI,WAAW,GAAG,EAAE,CAAC;IACrB,IAAI,aAAa,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC7B,MAAM,WAAW,GAAa,EAAE,CAAC;QACjC,MAAM,SAAS,GAAa,EAAE,CAAC;QAE/B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,aAAa,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;YAC9C,MAAM,KAAK,GAAG,aAAa,CAAC,CAAC,CAAC,CAAC;YAC/B,MAAM,QAAQ,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,8BAA8B;YACtD,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,YAAY,GAAG,GAAG,CAAC,GAAG,IAAI,CAAC,CAAC;YAC9D,MAAM,YAAY,GAAG,KAAK,CAAC,SAAS,GAAG,GAAG,CAAC;YAC3C,kEAAkE;YAClE,iEAAiE;YACjE,gEAAgE;YAChE,6DAA6D;YAC7D,MAAM,WAAW,GAAG,CAAC,KAAK,CAAC,gBAAgB,GAAG,GAAG,CAAC,GAAG,KAAK,CAAC,YAAY,CAAC;YACxE,MAAM,KAAK,GAAG,IAAI,CAAC,EAAE,CAAC;YAEtB,iEAAiE;YACjE,MAAM,OAAO,GAAa,EAAE,CAAC;YAE7B,iDAAiD;YACjD,OAAO,CAAC,IAAI,CAAC,eAAe,YAAY,CAAC,OAAO,CAAC,CAAC,CAAC,aAAa,WAAW,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;YAC1F,OAAO,CAAC,IAAI,CAAC,sBAAsB,CAAC,CAAC;YAErC,gFAAgF;YAChF,IAAI,KAAK,CAAC,YAAY,KAAK,CAAC,EAAE,CAAC;gBAC7B,MAAM,YAAY,GAAG,gBAAgB,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC;gBAC1D,OAAO,CAAC,IAAI,CAAC,GAAG,YAAY,CAAC,CAAC;YAChC,CAAC;YAED,qDAAqD;YACrD,IAAI,OAAO,GAAG,CAAC,EAAE,CAAC;gBAChB,OAAO,CAAC,IAAI,CAAC,UAAU,OAAO,IAAI,OAAO,EAAE,CAAC,CAAC;YAC/C,CAAC;YAED,SAAS;YACT,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBACvB,OAAO,CAAC,IAAI,CAAC,UAAU,KAAK,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;YACpD,CAAC;YAED,WAAW,CAAC,IAAI,CAAC,IAAI,QAAQ,MAAM,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,KAAK,GAAG,CAAC,CAAC;YAClE,SAAS,CAAC,IAAI,CAAC,IAAI,KAAK,GAAG,CAAC,CAAC;QAC/B,CAAC;QAED,gCAAgC;QAChC,IAAI,SAAS,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC3B,WAAW,GAAG,GAAG,WAAW,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,SAAS,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,EAAE,QAAQ,CAAC,EAAE,CAAC,OAAO,CAC3F,WAAW,CAAC,CAAC,CAAC,EACd,WAAW,CAAC,CAAC,CAAC,CACf,CAAC;YACF,wCAAwC;YACxC,WAAW,GAAG,WAAW,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,WAAW,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,GAAG,QAAQ,CAAC;QACpF,CAAC;aAAM,CAAC;YACN,WAAW,GAAG,WAAW,CAAC,IAAI,CAAC,GAAG,CAAC;kBAC/B,IAAI,SAAS,CAAC,IAAI,CAAC,EAAE,CAAC,eAAe,SAAS,CAAC,MAAM,qCAAqC,CAAC;QACjG,CAAC;QAED,IAAI,CAAC,IAAI,CAAC,iBAAiB,EAAE,WAAW,CAAC,CAAC;QAC1C,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,QAAQ,CAAC,CAAC;IAC7C,CAAC;IAED,IAAI,KAAK,KAAK,KAAK,EAAE,CAAC;QACpB,IAAI,CAAC,IAAI,CACP,MAAM,EAAE,SAAS,EACjB,MAAM,EAAE,MAAM,CAAC,GAAG,CAAC,EACnB,UAAU,EAAE,WAAW,EACvB,WAAW,EAAE,YAAY,CAC1B,CAAC;QACF,IAAI,aAAa,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC7B,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;QAC3C,CAAC;IACH,CAAC;SAAM,CAAC;QACN,IAAI,CAAC,IAAI,CACP,MAAM,EAAE,YAAY,EACpB,MAAM,EAAE,MAAM,CAAC,GAAG,CAAC,EACnB,MAAM,EAAE,GAAG,CACZ,CAAC;QACF,IAAI,aAAa,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC7B,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;QAC/C,CAAC;IACH,CAAC;IAED,uEAAuE;IACvE,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;IAEvB,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;IAGtB,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;QACrC,MAAM,IAAI,GAAG,KAAK,CAAC,UAAU,EAAE,IAAI,EAAE,EAAE,KAAK,EAAE,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,CAAC,CAAC;QAE5E,IAAI,UAAU,GAAG,EAAE,CAAC;QACpB,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,IAAY,EAAE,EAAE;YACtC,UAAU,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;QAChC,CAAC,CAAC,CAAC;QAEH,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,IAAI,EAAE,EAAE;YACxB,IAAI,IAAI,KAAK,CAAC,EAAE,CAAC;gBACf,OAAO,EAAE,CAAC;YACZ,CAAC;iBAAM,CAAC;gBACN,MAAM,CAAC,IAAI,KAAK,CAAC,2BAA2B,IAAI,MAAM,UAAU,EAAE,CAAC,CAAC,CAAC;YACvE,CAAC;QACH,CAAC,CAAC,CAAC;QAEH,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,GAAG,EAAE,EAAE;YACvB,MAAM,CAAC,IAAI,KAAK,CAAC,2BAA2B,GAAG,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;QAC9D,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC;AAED;;;GAGG;AACH,SAAS,gBAAgB,CAAC,IAAY;IACpC,MAAM,OAAO,GAAa,EAAE,CAAC;IAC7B,IAAI,SAAS,GAAG,IAAI,CAAC;IAErB,IAAI,SAAS,GAAG,GAAG,EAAE,CAAC;QACpB,OAAO,SAAS,GAAG,GAAG,EAAE,CAAC;YACvB,OAAO,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;YAC3B,SAAS,IAAI,GAAG,CAAC;QACnB,CAAC;IACH,CAAC;SAAM,IAAI,SAAS,GAAG,GAAG,EAAE,CAAC;QAC3B,OAAO,SAAS,GAAG,GAAG,EAAE,CAAC;YACvB,OAAO,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;YAC3B,SAAS,IAAI,GAAG,CAAC;QACnB,CAAC;IACH,CAAC;IAED,OAAO,CAAC,IAAI,CAAC,UAAU,SAAS,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;IAC/C,OAAO,OAAO,CAAC;AACjB,CAAC"}
|
package/dist/types.d.ts
CHANGED
|
@@ -7,4 +7,20 @@ export interface CompositionInfo {
|
|
|
7
7
|
defaultProps: Record<string, unknown>;
|
|
8
8
|
type: 'composition' | 'still';
|
|
9
9
|
}
|
|
10
|
+
export interface AudioSourceInfo {
|
|
11
|
+
/** 'audio' for <Audio>, 'video' for <Video>/<OffthreadVideo> */
|
|
12
|
+
type: 'audio' | 'video';
|
|
13
|
+
/** Source URL (e.g. "/01_hook_intro.wav") */
|
|
14
|
+
src: string;
|
|
15
|
+
/** Absolute frame where this audio starts in the composition timeline */
|
|
16
|
+
startAtFrame: number;
|
|
17
|
+
/** How many frames this audio plays for */
|
|
18
|
+
durationInFrames: number;
|
|
19
|
+
/** Frame offset into the source file to start from */
|
|
20
|
+
startFrom: number;
|
|
21
|
+
/** Volume 0–1 */
|
|
22
|
+
volume: number;
|
|
23
|
+
/** Playback speed multiplier */
|
|
24
|
+
playbackRate: number;
|
|
25
|
+
}
|
|
10
26
|
//# sourceMappingURL=types.d.ts.map
|
package/dist/types.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,eAAe;IAC9B,EAAE,EAAE,MAAM,CAAC;IACX,gBAAgB,EAAE,MAAM,CAAC;IACzB,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACtC,IAAI,EAAE,aAAa,GAAG,OAAO,CAAC;CAC/B"}
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,eAAe;IAC9B,EAAE,EAAE,MAAM,CAAC;IACX,gBAAgB,EAAE,MAAM,CAAC;IACzB,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACtC,IAAI,EAAE,aAAa,GAAG,OAAO,CAAC;CAC/B;AAED,MAAM,WAAW,eAAe;IAC9B,gEAAgE;IAChE,IAAI,EAAE,OAAO,GAAG,OAAO,CAAC;IACxB,6CAA6C;IAC7C,GAAG,EAAE,MAAM,CAAC;IACZ,yEAAyE;IACzE,YAAY,EAAE,MAAM,CAAC;IACrB,2CAA2C;IAC3C,gBAAgB,EAAE,MAAM,CAAC;IACzB,sDAAsD;IACtD,SAAS,EAAE,MAAM,CAAC;IAClB,iBAAiB;IACjB,MAAM,EAAE,MAAM,CAAC;IACf,gCAAgC;IAChC,YAAY,EAAE,MAAM,CAAC;CACtB"}
|