@nodetool-ai/video-nodes 0.8.3 → 0.8.4-a24.1
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/.nodetool-build-stamp +1 -1
- package/dist/index.d.ts +3 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +19 -0
- package/dist/index.js.map +1 -1
- package/dist/nodes/ffmpeg-helpers.d.ts +2 -1
- package/dist/nodes/ffmpeg-helpers.d.ts.map +1 -1
- package/dist/nodes/ffmpeg-helpers.js +4 -5
- package/dist/nodes/ffmpeg-helpers.js.map +1 -1
- package/dist/nodes/model3d/convert.d.ts +2 -1
- package/dist/nodes/model3d/convert.d.ts.map +1 -1
- package/dist/nodes/model3d/convert.js +3 -3
- package/dist/nodes/model3d/convert.js.map +1 -1
- package/dist/nodes/model3d/render3d-headless.d.ts +15 -5
- package/dist/nodes/model3d/render3d-headless.d.ts.map +1 -1
- package/dist/nodes/model3d/render3d-headless.js +154 -36
- package/dist/nodes/model3d/render3d-headless.js.map +1 -1
- package/dist/nodes/model3d/types.d.ts +1 -0
- package/dist/nodes/model3d/types.d.ts.map +1 -1
- package/dist/nodes/model3d/utils.d.ts +6 -13
- package/dist/nodes/model3d/utils.d.ts.map +1 -1
- package/dist/nodes/model3d/utils.js +22 -65
- package/dist/nodes/model3d/utils.js.map +1 -1
- package/dist/nodes/timeline/browserRender.d.ts +83 -0
- package/dist/nodes/timeline/browserRender.d.ts.map +1 -0
- package/dist/nodes/timeline/browserRender.js +541 -0
- package/dist/nodes/timeline/browserRender.js.map +1 -0
- package/dist/nodes/timeline/browserSources.d.ts +26 -0
- package/dist/nodes/timeline/browserSources.d.ts.map +1 -0
- package/dist/nodes/timeline/browserSources.js +83 -0
- package/dist/nodes/timeline/browserSources.js.map +1 -0
- package/dist/nodes/timeline/compositeRender.d.ts.map +1 -1
- package/dist/nodes/timeline/compositeRender.js +27 -13
- package/dist/nodes/timeline/compositeRender.js.map +1 -1
- package/dist/nodes/timeline/pngSequence.d.ts +19 -0
- package/dist/nodes/timeline/pngSequence.d.ts.map +1 -1
- package/dist/nodes/timeline/pngSequence.js +21 -6
- package/dist/nodes/timeline/pngSequence.js.map +1 -1
- package/dist/nodes/timeline/rawFrames.d.ts +34 -1
- package/dist/nodes/timeline/rawFrames.d.ts.map +1 -1
- package/dist/nodes/timeline/rawFrames.js +68 -15
- package/dist/nodes/timeline/rawFrames.js.map +1 -1
- package/dist/nodes/timeline/renderPage.d.ts +14 -0
- package/dist/nodes/timeline/renderPage.d.ts.map +1 -0
- package/dist/nodes/timeline/renderPage.js +75 -0
- package/dist/nodes/timeline/renderPage.js.map +1 -0
- package/dist/nodes/timeline.d.ts +20 -14
- package/dist/nodes/timeline.d.ts.map +1 -1
- package/dist/nodes/timeline.js +226 -66
- package/dist/nodes/timeline.js.map +1 -1
- package/dist/timeline-render-page.js +6903 -0
- package/package.json +12 -11
|
@@ -1 +1 @@
|
|
|
1
|
-
2026-10-
|
|
1
|
+
2026-10-16T07:29:33.062Z
|
package/dist/index.d.ts
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import type { NodeClass, NodeRegistry } from "@nodetool-ai/node-sdk";
|
|
1
2
|
export * from "./nodes/video.js";
|
|
2
3
|
export * from "./nodes/timeline.js";
|
|
3
4
|
export * from "./nodes/script.js";
|
|
@@ -6,4 +7,6 @@ export * from "./nodes/lib-video-download.js";
|
|
|
6
7
|
export * from "./nodes/model3d.js";
|
|
7
8
|
export { TextTo3DNode, ImageTo3DNode } from "./nodes/model3d/generation.js";
|
|
8
9
|
export { DEFAULT_MODEL_3D, DEFAULT_FOLDER, DEFAULT_IMAGE, DEFAULT_TEXT_TO_3D_MODEL, DEFAULT_IMAGE_TO_3D_MODEL } from "./nodes/model3d/defaults.js";
|
|
10
|
+
export declare const ALL_VIDEO_NODES: readonly NodeClass[];
|
|
11
|
+
export declare function registerVideoNodes(registry: NodeRegistry): void;
|
|
9
12
|
//# 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,cAAc,kBAAkB,CAAC;AACjC,cAAc,qBAAqB,CAAC;AACpC,cAAc,mBAAmB,CAAC;AAClC,cAAc,uBAAuB,CAAC;AACtC,cAAc,+BAA+B,CAAC;AAC9C,cAAc,oBAAoB,CAAC;AAInC,OAAO,EACL,YAAY,EACZ,aAAa,EACd,MAAM,+BAA+B,CAAC;AACvC,OAAO,EACL,gBAAgB,EAChB,cAAc,EACd,aAAa,EACb,wBAAwB,EACxB,yBAAyB,EAC1B,MAAM,6BAA6B,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AAQrE,cAAc,kBAAkB,CAAC;AACjC,cAAc,qBAAqB,CAAC;AACpC,cAAc,mBAAmB,CAAC;AAClC,cAAc,uBAAuB,CAAC;AACtC,cAAc,+BAA+B,CAAC;AAC9C,cAAc,oBAAoB,CAAC;AAInC,OAAO,EACL,YAAY,EACZ,aAAa,EACd,MAAM,+BAA+B,CAAC;AACvC,OAAO,EACL,gBAAgB,EAChB,cAAc,EACd,aAAa,EACb,wBAAwB,EACxB,yBAAyB,EAC1B,MAAM,6BAA6B,CAAC;AAErC,eAAO,MAAM,eAAe,EAAE,SAAS,SAAS,EAO/C,CAAC;AAEF,wBAAgB,kBAAkB,CAAC,QAAQ,EAAE,YAAY,GAAG,IAAI,CAI/D"}
|
package/dist/index.js
CHANGED
|
@@ -1,3 +1,9 @@
|
|
|
1
|
+
import { VIDEO_NODES } from "./nodes/video.js";
|
|
2
|
+
import { TIMELINE_NODES } from "./nodes/timeline.js";
|
|
3
|
+
import { SCRIPT_NODES } from "./nodes/script.js";
|
|
4
|
+
import { STORYBOARD_NODES } from "./nodes/storyboard.js";
|
|
5
|
+
import { MODEL3D_NODES } from "./nodes/model3d.js";
|
|
6
|
+
import { LIB_YTDLP_NODES } from "./nodes/lib-video-download.js";
|
|
1
7
|
export * from "./nodes/video.js";
|
|
2
8
|
export * from "./nodes/timeline.js";
|
|
3
9
|
export * from "./nodes/script.js";
|
|
@@ -8,4 +14,17 @@ export * from "./nodes/model3d.js";
|
|
|
8
14
|
// 3D-model defaults / generation node classes directly.
|
|
9
15
|
export { TextTo3DNode, ImageTo3DNode } from "./nodes/model3d/generation.js";
|
|
10
16
|
export { DEFAULT_MODEL_3D, DEFAULT_FOLDER, DEFAULT_IMAGE, DEFAULT_TEXT_TO_3D_MODEL, DEFAULT_IMAGE_TO_3D_MODEL } from "./nodes/model3d/defaults.js";
|
|
17
|
+
export const ALL_VIDEO_NODES = [
|
|
18
|
+
...VIDEO_NODES,
|
|
19
|
+
...TIMELINE_NODES,
|
|
20
|
+
...SCRIPT_NODES,
|
|
21
|
+
...STORYBOARD_NODES,
|
|
22
|
+
...MODEL3D_NODES,
|
|
23
|
+
...LIB_YTDLP_NODES,
|
|
24
|
+
];
|
|
25
|
+
export function registerVideoNodes(registry) {
|
|
26
|
+
for (const nodeClass of ALL_VIDEO_NODES) {
|
|
27
|
+
registry.register(nodeClass);
|
|
28
|
+
}
|
|
29
|
+
}
|
|
11
30
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAC/C,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AACrD,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACjD,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AACzD,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACnD,OAAO,EAAE,eAAe,EAAE,MAAM,+BAA+B,CAAC;AAEhE,cAAc,kBAAkB,CAAC;AACjC,cAAc,qBAAqB,CAAC;AACpC,cAAc,mBAAmB,CAAC;AAClC,cAAc,uBAAuB,CAAC;AACtC,cAAc,+BAA+B,CAAC;AAC9C,cAAc,oBAAoB,CAAC;AAEnC,oEAAoE;AACpE,wDAAwD;AACxD,OAAO,EACL,YAAY,EACZ,aAAa,EACd,MAAM,+BAA+B,CAAC;AACvC,OAAO,EACL,gBAAgB,EAChB,cAAc,EACd,aAAa,EACb,wBAAwB,EACxB,yBAAyB,EAC1B,MAAM,6BAA6B,CAAC;AAErC,MAAM,CAAC,MAAM,eAAe,GAAyB;IACnD,GAAG,WAAW;IACd,GAAG,cAAc;IACjB,GAAG,YAAY;IACf,GAAG,gBAAgB;IACnB,GAAG,aAAa;IAChB,GAAG,eAAe;CACnB,CAAC;AAEF,MAAM,UAAU,kBAAkB,CAAC,QAAsB;IACvD,KAAK,MAAM,SAAS,IAAI,eAAe,EAAE,CAAC;QACxC,QAAQ,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC;IAC/B,CAAC;AACH,CAAC"}
|
|
@@ -13,10 +13,11 @@
|
|
|
13
13
|
*/
|
|
14
14
|
import { execFile as execFileCb } from "node:child_process";
|
|
15
15
|
import type { VideoRef } from "@nodetool-ai/node-sdk";
|
|
16
|
+
import { MissingRuntimePackageError } from "@nodetool-ai/protocol";
|
|
16
17
|
export declare const execFile: typeof execFileCb.__promisify__;
|
|
17
18
|
export declare const FFMPEG_MAX_BUFFER: number;
|
|
18
19
|
/** A required binary (ffmpeg/ffprobe) is not installed or not on PATH. */
|
|
19
|
-
export declare class MissingBinaryError extends
|
|
20
|
+
export declare class MissingBinaryError extends MissingRuntimePackageError {
|
|
20
21
|
readonly binary: string;
|
|
21
22
|
constructor(binary: string);
|
|
22
23
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ffmpeg-helpers.d.ts","sourceRoot":"","sources":["../../src/nodes/ffmpeg-helpers.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AACH,OAAO,EAAE,QAAQ,IAAI,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAM5D,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAC;
|
|
1
|
+
{"version":3,"file":"ffmpeg-helpers.d.ts","sourceRoot":"","sources":["../../src/nodes/ffmpeg-helpers.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AACH,OAAO,EAAE,QAAQ,IAAI,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAM5D,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AAEtD,OAAO,EAAE,0BAA0B,EAAoD,MAAM,uBAAuB,CAAC;AAOrH,eAAO,MAAM,QAAQ,iCAAwB,CAAC;AAE9C,eAAO,MAAM,iBAAiB,QAAmB,CAAC;AAElD,0EAA0E;AAC1E,qBAAa,kBAAmB,SAAQ,0BAA0B;IAChE,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,YAAY,MAAM,EAAE,MAAM,EAIzB;CACF;AAWD,0EAA0E;AAC1E,wBAAsB,UAAU,CAC9B,IAAI,EAAE,MAAM,EAAE,EACd,OAAO,GAAE;IAAE,SAAS,CAAC,EAAE,MAAM,CAAC;IAAC,MAAM,CAAC,EAAE,WAAW,CAAA;CAAO,GACzD,OAAO,CAAC;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAAC,CAY7C;AAED,2EAA2E;AAC3E,wBAAsB,WAAW,CAC/B,IAAI,EAAE,MAAM,EAAE,EACd,OAAO,GAAE;IAAE,SAAS,CAAC,EAAE,MAAM,CAAC;IAAC,MAAM,CAAC,EAAE,WAAW,CAAA;CAAO,GACzD,OAAO,CAAC;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAAC,CAY7C;AAED,4EAA4E;AAC5E,wBAAgB,QAAQ,CACtB,IAAI,EAAE,UAAU,EAChB,MAAM,GAAE,OAAO,CAAC,QAAQ,CAAM,GAC7B,QAAQ,CAMV;AAED,6EAA6E;AAC7E,wBAAgB,eAAe,IAAI,QAAQ,CAU1C;AAED,oEAAoE;AACpE,wBAAgB,QAAQ,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,CAUlD;AAED;;;GAGG;AACH,wBAAgB,UAAU,CAAC,GAAG,EAAE,OAAO,GAAG,MAAM,CAS/C;AAED,0DAA0D;AAC1D,wBAAgB,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAU7C;AAED;;;;GAIG;AACH,wBAAsB,gBAAgB,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAiBtE;AAED;;;GAGG;AACH,wBAAgB,cAAc,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CASlD;AAED;;;GAGG;AACH,wBAAsB,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAiBnE;AAED,gFAAgF;AAChF,wBAAsB,YAAY,CAChC,MAAM,EAAE,MAAM,EACd,KAAK,EAAE,UAAU,GAChB,OAAO,CAAC;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAA;CAAE,CAAC,CAUzD;AAED;;;;GAIG;AACH,wBAAgB,mBAAmB,CACjC,KAAK,EAAE,OAAO,EACd,QAAQ,EAAE,MAAM,GACf,UAAU,CAeZ;AAED,0EAA0E;AAC1E,wBAAgB,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,EAAE,CAalD"}
|
|
@@ -18,17 +18,16 @@ import path from "node:path";
|
|
|
18
18
|
import { fileURLToPath } from "node:url";
|
|
19
19
|
import { promisify } from "node:util";
|
|
20
20
|
import { withTaskSpan } from "@nodetool-ai/runtime";
|
|
21
|
+
import { MissingRuntimePackageError, missingRuntimePackageDetails, missingRuntimeText } from "@nodetool-ai/protocol";
|
|
21
22
|
import { isNonEmptyString, isObjectLike, isString } from "@nodetool-ai/node-sdk";
|
|
22
23
|
export const execFile = promisify(execFileCb);
|
|
23
24
|
export const FFMPEG_MAX_BUFFER = 50 * 1024 * 1024;
|
|
24
25
|
/** A required binary (ffmpeg/ffprobe) is not installed or not on PATH. */
|
|
25
|
-
export class MissingBinaryError extends
|
|
26
|
+
export class MissingBinaryError extends MissingRuntimePackageError {
|
|
26
27
|
binary;
|
|
27
28
|
constructor(binary) {
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
`out to ffmpeg/ffprobe and cannot run without it.`);
|
|
31
|
-
this.name = "MissingBinaryError";
|
|
29
|
+
const details = missingRuntimePackageDetails(binary, "ffmpeg");
|
|
30
|
+
super(missingRuntimeText(details), "ffmpeg", { details });
|
|
32
31
|
this.binary = binary;
|
|
33
32
|
}
|
|
34
33
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ffmpeg-helpers.js","sourceRoot":"","sources":["../../src/nodes/ffmpeg-helpers.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AACH,OAAO,EAAE,QAAQ,IAAI,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAC5D,OAAO,EAAE,QAAQ,IAAI,EAAE,EAAE,MAAM,SAAS,CAAC;AACzC,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AACzC,OAAO,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AAEtC,OAAO,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AACpD,OAAO,EACL,gBAAgB,EAChB,YAAY,EACZ,QAAQ,EACT,MAAM,uBAAuB,CAAC;AAE/B,MAAM,CAAC,MAAM,QAAQ,GAAG,SAAS,CAAC,UAAU,CAAC,CAAC;AAE9C,MAAM,CAAC,MAAM,iBAAiB,GAAG,EAAE,GAAG,IAAI,GAAG,IAAI,CAAC;AAElD,0EAA0E;AAC1E,MAAM,OAAO,kBAAmB,SAAQ,
|
|
1
|
+
{"version":3,"file":"ffmpeg-helpers.js","sourceRoot":"","sources":["../../src/nodes/ffmpeg-helpers.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import type { ProcessingContext } from "@nodetool-ai/runtime";
|
|
1
2
|
import { GlbTransformNode } from "./base.js";
|
|
2
3
|
import type { Model3DRefLike } from "./types.js";
|
|
3
4
|
/** Output handles FormatConverterNode.process() emits. */
|
|
@@ -21,7 +22,7 @@ export declare class FormatConverterNode extends GlbTransformNode {
|
|
|
21
22
|
model: Model3DRefLike;
|
|
22
23
|
output_format: "glb" | "gltf";
|
|
23
24
|
protected transform(_bytes: Uint8Array): Uint8Array | null;
|
|
24
|
-
process(): Promise<FormatConverterNodeOutputs>;
|
|
25
|
+
process(context?: ProcessingContext): Promise<FormatConverterNodeOutputs>;
|
|
25
26
|
}
|
|
26
27
|
export {};
|
|
27
28
|
//# sourceMappingURL=convert.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"convert.d.ts","sourceRoot":"","sources":["../../../src/nodes/model3d/convert.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"convert.d.ts","sourceRoot":"","sources":["../../../src/nodes/model3d/convert.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AAE9D,OAAO,EAAE,gBAAgB,EAAE,MAAM,WAAW,CAAC;AAC7C,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAKjD,0DAA0D;AAC1D,KAAK,0BAA0B,GAAG;IAChC,MAAM,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,IAAI,CAAC;QAAC,QAAQ,EAAE,IAAI,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC;CACxE,CAAC;AAEF,qBAAa,mBAAoB,SAAQ,gBAAgB;IACvD,MAAM,CAAC,QAAQ,CAAC,QAAQ,sCAAsC;IAC9D,MAAM,CAAC,QAAQ,CAAC,KAAK,sBAAsB;IAC3C,MAAM,CAAC,QAAQ,CAAC,WAAW,oUACmS;IAC9T,MAAM,CAAC,QAAQ,CAAC,mBAAmB;QACjC,MAAM;MACN;IACF,MAAM,CAAC,QAAQ,CAAC,YAAY,UAAM;IAClC,MAAM,CAAC,QAAQ,CAAC,WAAW,WAAa;IAQhC,KAAK,EAAE,cAAc,CAAC;IAStB,aAAa,EAAE,KAAK,GAAG,MAAM,CAAC;IAEtC,SAAS,CAAC,SAAS,CAAC,MAAM,EAAE,UAAU,GAAG,UAAU,GAAG,IAAI,CAEzD;IAEK,OAAO,CACX,OAAO,CAAC,EAAE,iBAAiB,GAC1B,OAAO,CAAC,0BAA0B,CAAC,CA4BrC;CACF"}
|
|
@@ -8,7 +8,7 @@ import { prop } from "@nodetool-ai/node-sdk";
|
|
|
8
8
|
import { GlbTransformNode } from "./base.js";
|
|
9
9
|
import { DEFAULT_MODEL_3D } from "./defaults.js";
|
|
10
10
|
import { convertGlbToGltf } from "./document-ops.js";
|
|
11
|
-
import {
|
|
11
|
+
import { modelFormat, modelRefToBytes, modelRef, replaceExtension } from "./utils.js";
|
|
12
12
|
export class FormatConverterNode extends GlbTransformNode {
|
|
13
13
|
static nodeType = "nodetool.model3d.FormatConverter";
|
|
14
14
|
static title = "Format Converter";
|
|
@@ -21,9 +21,9 @@ export class FormatConverterNode extends GlbTransformNode {
|
|
|
21
21
|
transform(_bytes) {
|
|
22
22
|
return null;
|
|
23
23
|
}
|
|
24
|
-
async process() {
|
|
24
|
+
async process(context) {
|
|
25
25
|
const model = this.getModel();
|
|
26
|
-
const bytes =
|
|
26
|
+
const bytes = await modelRefToBytes(model, context);
|
|
27
27
|
const inputFormat = modelFormat(model);
|
|
28
28
|
const outputFormat = this.output_format.toLowerCase();
|
|
29
29
|
if (outputFormat === inputFormat) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"convert.js","sourceRoot":"","sources":["../../../src/nodes/model3d/convert.ts"],"names":[],"mappings":";;;;;;AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,uBAAuB,CAAC;
|
|
1
|
+
{"version":3,"file":"convert.js","sourceRoot":"","sources":["../../../src/nodes/model3d/convert.ts"],"names":[],"mappings":";;;;;;AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,uBAAuB,CAAC;AAG7C,OAAO,EAAE,gBAAgB,EAAE,MAAM,WAAW,CAAC;AAE7C,OAAO,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAC;AACjD,OAAO,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AACrD,OAAO,EAAE,WAAW,EAAE,eAAe,EAAE,QAAQ,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAOtF,MAAM,OAAO,mBAAoB,SAAQ,gBAAgB;IACvD,MAAM,CAAU,QAAQ,GAAG,kCAAkC,CAAC;IAC9D,MAAM,CAAU,KAAK,GAAG,kBAAkB,CAAC;IAC3C,MAAM,CAAU,WAAW,GACzB,2TAA2T,CAAC;IAC9T,MAAM,CAAU,mBAAmB,GAAG;QACpC,MAAM,EAAE,UAAU;KACnB,CAAC;IACF,MAAM,CAAU,YAAY,GAAG,EAAE,CAAC;IAClC,MAAM,CAAU,WAAW,GAAG,CAAC,OAAO,CAAC,CAAC;IAmB9B,SAAS,CAAC,MAAkB;QACpC,OAAO,IAAI,CAAC;IACd,CAAC;IAED,KAAK,CAAC,OAAO,CACX,OAA2B;QAE3B,MAAM,KAAK,GAAG,IAAI,CAAC,QAAQ,EAAE,CAAC;QAC9B,MAAM,KAAK,GAAG,MAAM,eAAe,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;QACpD,MAAM,WAAW,GAAG,WAAW,CAAC,KAAK,CAAC,CAAC;QACvC,MAAM,YAAY,GAAG,IAAI,CAAC,aAAa,CAAC,WAAW,EAAE,CAAC;QAEtD,IAAI,YAAY,KAAK,WAAW,EAAE,CAAC;YACjC,OAAO;gBACL,MAAM,EAAE,QAAQ,CAAC,KAAK,EAAE;oBACtB,GAAG,EAAE,gBAAgB,CAAC,KAAK,CAAC,GAAG,IAAI,EAAE,EAAE,YAAY,CAAC;oBACpD,MAAM,EAAE,YAAY;iBACrB,CAAC;aACH,CAAC;QACJ,CAAC;QAED,IAAI,WAAW,KAAK,KAAK,IAAI,YAAY,KAAK,MAAM,EAAE,CAAC;YACrD,MAAM,IAAI,KAAK,CACb,iCAAiC,WAAW,MAAM,YAAY,2CAA2C,CAC1G,CAAC;QACJ,CAAC;QAED,MAAM,cAAc,GAAG,MAAM,gBAAgB,CAAC,KAAK,CAAC,CAAC;QACrD,OAAO;YACL,MAAM,EAAE,QAAQ,CAAC,cAAc,EAAE;gBAC/B,GAAG,EAAE,gBAAgB,CAAC,KAAK,CAAC,GAAG,IAAI,EAAE,EAAE,YAAY,CAAC;gBACpD,MAAM,EAAE,YAAY;aACrB,CAAC;SACH,CAAC;IACJ,CAAC;CACF;AA9CS;IANP,IAAI,CAAC;QACJ,IAAI,EAAE,UAAU;QAChB,OAAO,EAAE,gBAAgB;QACzB,KAAK,EAAE,OAAO;QACd,WAAW,EAAE,yBAAyB;KACvC,CAAC;kDAC4B;AAStB;IAPP,IAAI,CAAC;QACJ,IAAI,EAAE,MAAM;QACZ,OAAO,EAAE,KAAK;QACd,KAAK,EAAE,eAAe;QACtB,WAAW,EAAE,uEAAuE;QACpF,MAAM,EAAE,CAAC,KAAK,EAAE,MAAM,CAAC;KACxB,CAAC;0DACoC"}
|
|
@@ -4,7 +4,8 @@
|
|
|
4
4
|
* The backend has no WebGL, so it launches a headless Chromium, injects the
|
|
5
5
|
* self-contained render bundle (`dist/render3d-page.js`, built by
|
|
6
6
|
* `scripts/bundle-render3d-page.mjs`), and calls `__nodetoolRenderGlbFrames`
|
|
7
|
-
* over CDP. SwiftShader flags keep WebGL working on GPU-less servers.
|
|
7
|
+
* over CDP. SwiftShader flags keep WebGL working on GPU-less servers. Later
|
|
8
|
+
* renders reuse that browser until it has been idle for a minute.
|
|
8
9
|
*
|
|
9
10
|
* Chrome discovery follows the automation nodes: `CHROME_PATH` when set,
|
|
10
11
|
* otherwise chrome-launcher's platform search. Everything here is
|
|
@@ -63,10 +64,19 @@ export declare function connectCdp(port: number, { timeoutMs, retryMs }?: {
|
|
|
63
64
|
*/
|
|
64
65
|
export declare function launchChromeWithRetry<T>(launch: () => Promise<T>, retryDelayMs?: number): Promise<T>;
|
|
65
66
|
/**
|
|
66
|
-
*
|
|
67
|
-
*
|
|
68
|
-
|
|
69
|
-
|
|
67
|
+
* Close the shared render browser now. Exported for tests and shutdown;
|
|
68
|
+
* renders otherwise close it after {@link IDLE_CLOSE_MS} without work.
|
|
69
|
+
*/
|
|
70
|
+
export declare function closeHeadlessRenderer(): Promise<void>;
|
|
71
|
+
/**
|
|
72
|
+
* Render one session's worth of frames: one model load, one PNG per frame.
|
|
73
|
+
*
|
|
74
|
+
* Renders share one headless Chromium with the bundle already injected.
|
|
75
|
+
* Launching Chrome costs about half a second, and the first SwiftShader frame
|
|
76
|
+
* in a new browser about two more, so a browser per call made every render
|
|
77
|
+
* take seconds. The browser closes after {@link IDLE_CLOSE_MS} without work.
|
|
78
|
+
* A browser that fails or times out is closed, and a render on a browser that
|
|
79
|
+
* died while idle retries once on a new one.
|
|
70
80
|
*/
|
|
71
81
|
export declare function renderGlbFramesHeadless(glb: Uint8Array, options: Model3DSessionOptions, frames: readonly Model3DRenderFrame[]): Promise<Uint8Array[]>;
|
|
72
82
|
/** Render GLB bytes to PNG bytes: the one-frame case of the above. */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"render3d-headless.d.ts","sourceRoot":"","sources":["../../../src/nodes/model3d/render3d-headless.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"render3d-headless.d.ts","sourceRoot":"","sources":["../../../src/nodes/model3d/render3d-headless.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAIH,OAAO,EAGL,KAAK,kBAAkB,EACvB,KAAK,qBAAqB,EAC1B,KAAK,eAAe,EACrB,MAAM,oBAAoB,CAAC;AA0B5B,UAAU,qBAAqB;IAC7B,MAAM,CAAC,EAAE;QAAE,IAAI,CAAC,EAAE,MAAM,CAAC;QAAC,KAAK,CAAC,EAAE,OAAO,CAAA;KAAE,CAAC;IAC5C,gBAAgB,CAAC,EAAE;QACjB,IAAI,CAAC,EAAE,MAAM,CAAC;QACd,SAAS,CAAC,EAAE;YAAE,WAAW,CAAC,EAAE,MAAM,CAAC;YAAC,KAAK,CAAC,EAAE,OAAO,CAAA;SAAE,CAAC;KACvD,CAAC;CACH;AAED,UAAU,SAAS;IACjB,OAAO,EAAE;QACP,yEAAyE;QACzE,MAAM,IAAI,OAAO,CAAC,MAAM,CAAC,CAAC;QAC1B,QAAQ,CAAC,MAAM,EAAE;YACf,UAAU,EAAE,MAAM,CAAC;YACnB,YAAY,CAAC,EAAE,OAAO,CAAC;YACvB,aAAa,CAAC,EAAE,OAAO,CAAC;SACzB,GAAG,OAAO,CAAC,qBAAqB,CAAC,CAAC;KACpC,CAAC;IACF,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;CACxB;AAyDD;;;;;;;;;;;GAWG;AACH,wBAAsB,UAAU,CAC9B,IAAI,EAAE,MAAM,EACZ,EAAE,SAAkC,EAAE,OAA8B,EAAE;;;CAAK,GAC1E,OAAO,CAAC,SAAS,CAAC,CA2BpB;AAED;;;;;;;;GAQG;AACH,wBAAsB,qBAAqB,CAAC,CAAC,EAC3C,MAAM,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,EACxB,YAAY,SAAQ,GACnB,OAAO,CAAC,CAAC,CAAC,CASZ;AAiGD;;;GAGG;AACH,wBAAsB,qBAAqB,IAAI,OAAO,CAAC,IAAI,CAAC,CAO3D;AAmDD;;;;;;;;;GASG;AACH,wBAAsB,uBAAuB,CAC3C,GAAG,EAAE,UAAU,EACf,OAAO,EAAE,qBAAqB,EAC9B,MAAM,EAAE,SAAS,kBAAkB,EAAE,GACpC,OAAO,CAAC,UAAU,EAAE,CAAC,CAiDvB;AAED,sEAAsE;AACtE,wBAAsB,iBAAiB,CACrC,GAAG,EAAE,UAAU,EACf,OAAO,EAAE,eAAe,GACvB,OAAO,CAAC,UAAU,CAAC,CAOrB"}
|
|
@@ -4,7 +4,8 @@
|
|
|
4
4
|
* The backend has no WebGL, so it launches a headless Chromium, injects the
|
|
5
5
|
* self-contained render bundle (`dist/render3d-page.js`, built by
|
|
6
6
|
* `scripts/bundle-render3d-page.mjs`), and calls `__nodetoolRenderGlbFrames`
|
|
7
|
-
* over CDP. SwiftShader flags keep WebGL working on GPU-less servers.
|
|
7
|
+
* over CDP. SwiftShader flags keep WebGL working on GPU-less servers. Later
|
|
8
|
+
* renders reuse that browser until it has been idle for a minute.
|
|
8
9
|
*
|
|
9
10
|
* Chrome discovery follows the automation nodes: `CHROME_PATH` when set,
|
|
10
11
|
* otherwise chrome-launcher's platform search. Everything here is
|
|
@@ -126,59 +127,176 @@ export async function launchChromeWithRetry(launch, retryDelayMs = 1_000) {
|
|
|
126
127
|
return await launch();
|
|
127
128
|
}
|
|
128
129
|
}
|
|
130
|
+
/** How long an idle render browser stays open before it closes. */
|
|
131
|
+
const IDLE_CLOSE_MS = 60_000;
|
|
129
132
|
/**
|
|
130
|
-
*
|
|
131
|
-
*
|
|
132
|
-
* node stateless; launch cost (~1s) is negligible next to a typical
|
|
133
|
-
* workflow's model-generation steps.
|
|
133
|
+
* Hold the event loop only while a render runs. An idle browser must not keep
|
|
134
|
+
* the process alive: a CLI run would otherwise wait for the idle timeout.
|
|
134
135
|
*/
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
136
|
+
function holdEventLoop(browser, hold) {
|
|
137
|
+
// SAFETY: chrome-remote-interface keeps its `ws` socket on `_ws`, and ws
|
|
138
|
+
// keeps the net.Socket on `_socket`; both are absent once the client closes.
|
|
139
|
+
const socket = browser.client._ws?._socket;
|
|
140
|
+
for (const handle of [browser.chrome.process, socket]) {
|
|
141
|
+
if (hold) {
|
|
142
|
+
handle?.ref();
|
|
143
|
+
}
|
|
144
|
+
else {
|
|
145
|
+
handle?.unref();
|
|
146
|
+
}
|
|
147
|
+
}
|
|
148
|
+
}
|
|
149
|
+
let browserPromise = null;
|
|
150
|
+
let activeRenders = 0;
|
|
151
|
+
let idleTimer;
|
|
152
|
+
async function launchRenderBrowser(chromePath) {
|
|
138
153
|
const bundle = await loadRenderBundle();
|
|
139
154
|
const { launch } = await import("chrome-launcher");
|
|
140
|
-
const chrome = await launchChromeWithRetry(() => launch({
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
155
|
+
const chrome = await launchChromeWithRetry(() => launch({ chromeFlags: CHROME_FLAGS, chromePath }));
|
|
156
|
+
// An idle browser must not outlive the process: the idle timer is unref'd.
|
|
157
|
+
const onExit = () => {
|
|
158
|
+
try {
|
|
159
|
+
chrome.kill();
|
|
160
|
+
}
|
|
161
|
+
catch {
|
|
162
|
+
// Process may already be gone.
|
|
163
|
+
}
|
|
164
|
+
};
|
|
165
|
+
process.once("exit", onExit);
|
|
145
166
|
try {
|
|
146
|
-
client = await connectCdp(chrome.port);
|
|
167
|
+
const client = await connectCdp(chrome.port);
|
|
147
168
|
await client.Runtime.enable();
|
|
148
169
|
const injected = await client.Runtime.evaluate({ expression: bundle });
|
|
149
170
|
throwOnException(injected, "inject bundle");
|
|
150
|
-
|
|
151
|
-
|
|
171
|
+
return { chrome, client, chromePath, onExit };
|
|
172
|
+
}
|
|
173
|
+
catch (err) {
|
|
174
|
+
process.removeListener("exit", onExit);
|
|
175
|
+
onExit();
|
|
176
|
+
throw err;
|
|
177
|
+
}
|
|
178
|
+
}
|
|
179
|
+
async function closeRenderBrowser(browser) {
|
|
180
|
+
process.removeListener("exit", browser.onExit);
|
|
181
|
+
try {
|
|
182
|
+
await browser.client.close();
|
|
183
|
+
}
|
|
184
|
+
catch {
|
|
185
|
+
// Chrome is being killed right after; a failed CDP close is harmless.
|
|
186
|
+
}
|
|
187
|
+
try {
|
|
188
|
+
await browser.chrome.kill();
|
|
189
|
+
}
|
|
190
|
+
catch {
|
|
191
|
+
// Process may already be gone.
|
|
192
|
+
}
|
|
193
|
+
}
|
|
194
|
+
/** Drop the shared browser so the next render launches a new one. */
|
|
195
|
+
function discardRenderBrowser(promise) {
|
|
196
|
+
if (browserPromise !== promise)
|
|
197
|
+
return;
|
|
198
|
+
browserPromise = null;
|
|
199
|
+
void promise.then(closeRenderBrowser, () => undefined);
|
|
200
|
+
}
|
|
201
|
+
/**
|
|
202
|
+
* Close the shared render browser now. Exported for tests and shutdown;
|
|
203
|
+
* renders otherwise close it after {@link IDLE_CLOSE_MS} without work.
|
|
204
|
+
*/
|
|
205
|
+
export async function closeHeadlessRenderer() {
|
|
206
|
+
clearTimeout(idleTimer);
|
|
207
|
+
const promise = browserPromise;
|
|
208
|
+
browserPromise = null;
|
|
209
|
+
if (promise) {
|
|
210
|
+
await promise.then(closeRenderBrowser, () => undefined);
|
|
211
|
+
}
|
|
212
|
+
}
|
|
213
|
+
/** A failure of the page or the browser, not of the model being rendered. */
|
|
214
|
+
class RenderBrowserError extends Error {
|
|
215
|
+
}
|
|
216
|
+
async function renderInBrowser(browser, glb, options, frames) {
|
|
217
|
+
const glbBase64 = Buffer.from(glb).toString("base64");
|
|
218
|
+
let call;
|
|
219
|
+
try {
|
|
220
|
+
call = await withTimeout(browser.client.Runtime.evaluate({
|
|
152
221
|
expression: `globalThis.__nodetoolRenderGlbFrames(${JSON.stringify(glbBase64)}, ${JSON.stringify(JSON.stringify(options))}, ${JSON.stringify(JSON.stringify(frames))})`,
|
|
153
222
|
awaitPromise: true,
|
|
154
223
|
returnByValue: true
|
|
155
224
|
}), "render", RENDER_TIMEOUT_MS + EXTRA_FRAME_TIMEOUT_MS * (frames.length - 1));
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
225
|
+
}
|
|
226
|
+
catch (err) {
|
|
227
|
+
throw new RenderBrowserError(err instanceof Error ? err.message : String(err), { cause: err });
|
|
228
|
+
}
|
|
229
|
+
throwOnException(call, "render");
|
|
230
|
+
const pngsBase64 = call.result?.value;
|
|
231
|
+
if (!Array.isArray(pngsBase64) || pngsBase64.length !== frames.length) {
|
|
232
|
+
throw new Error(`RenderToImage: headless render returned ${Array.isArray(pngsBase64) ? pngsBase64.length : "no"} images for ${frames.length} frames`);
|
|
233
|
+
}
|
|
234
|
+
return pngsBase64.map((png) => {
|
|
235
|
+
if (!isNonEmptyString(png)) {
|
|
236
|
+
throw new Error("RenderToImage: headless render returned no image data");
|
|
160
237
|
}
|
|
161
|
-
return
|
|
162
|
-
|
|
163
|
-
|
|
238
|
+
return new Uint8Array(Buffer.from(png, "base64"));
|
|
239
|
+
});
|
|
240
|
+
}
|
|
241
|
+
/**
|
|
242
|
+
* Render one session's worth of frames: one model load, one PNG per frame.
|
|
243
|
+
*
|
|
244
|
+
* Renders share one headless Chromium with the bundle already injected.
|
|
245
|
+
* Launching Chrome costs about half a second, and the first SwiftShader frame
|
|
246
|
+
* in a new browser about two more, so a browser per call made every render
|
|
247
|
+
* take seconds. The browser closes after {@link IDLE_CLOSE_MS} without work.
|
|
248
|
+
* A browser that fails or times out is closed, and a render on a browser that
|
|
249
|
+
* died while idle retries once on a new one.
|
|
250
|
+
*/
|
|
251
|
+
export async function renderGlbFramesHeadless(glb, options, frames) {
|
|
252
|
+
if (frames.length === 0)
|
|
253
|
+
return [];
|
|
254
|
+
const chromePath = process.env.CHROME_PATH || undefined;
|
|
255
|
+
clearTimeout(idleTimer);
|
|
256
|
+
activeRenders += 1;
|
|
257
|
+
try {
|
|
258
|
+
for (let attempt = 0;; attempt += 1) {
|
|
259
|
+
let promise = browserPromise;
|
|
260
|
+
if (promise && (await promise.catch(() => null))?.chromePath !== chromePath) {
|
|
261
|
+
discardRenderBrowser(promise);
|
|
262
|
+
promise = null;
|
|
164
263
|
}
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
264
|
+
const launched = !promise;
|
|
265
|
+
if (!promise) {
|
|
266
|
+
promise = launchRenderBrowser(chromePath);
|
|
267
|
+
browserPromise = promise;
|
|
268
|
+
}
|
|
269
|
+
let browser;
|
|
170
270
|
try {
|
|
171
|
-
await
|
|
271
|
+
browser = await promise;
|
|
172
272
|
}
|
|
173
|
-
catch {
|
|
174
|
-
|
|
273
|
+
catch (err) {
|
|
274
|
+
discardRenderBrowser(promise);
|
|
275
|
+
throw err;
|
|
276
|
+
}
|
|
277
|
+
holdEventLoop(browser, true);
|
|
278
|
+
try {
|
|
279
|
+
return await renderInBrowser(browser, glb, options, frames);
|
|
280
|
+
}
|
|
281
|
+
catch (err) {
|
|
282
|
+
if (!(err instanceof RenderBrowserError))
|
|
283
|
+
throw err;
|
|
284
|
+
discardRenderBrowser(promise);
|
|
285
|
+
if (launched || attempt > 0) {
|
|
286
|
+
throw new Error(err.message, { cause: err.cause });
|
|
287
|
+
}
|
|
175
288
|
}
|
|
176
289
|
}
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
290
|
+
}
|
|
291
|
+
finally {
|
|
292
|
+
activeRenders -= 1;
|
|
293
|
+
if (activeRenders === 0 && browserPromise) {
|
|
294
|
+
void browserPromise.then((browser) => {
|
|
295
|
+
if (activeRenders === 0)
|
|
296
|
+
holdEventLoop(browser, false);
|
|
297
|
+
}, () => undefined);
|
|
298
|
+
idleTimer = setTimeout(() => void closeHeadlessRenderer(), IDLE_CLOSE_MS);
|
|
299
|
+
idleTimer.unref();
|
|
182
300
|
}
|
|
183
301
|
}
|
|
184
302
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"render3d-headless.js","sourceRoot":"","sources":["../../../src/nodes/model3d/render3d-headless.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"render3d-headless.js","sourceRoot":"","sources":["../../../src/nodes/model3d/render3d-headless.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/nodes/model3d/types.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/nodes/model3d/types.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,25 +1,18 @@
|
|
|
1
|
+
import type { ProcessingContext } from "@nodetool-ai/runtime";
|
|
1
2
|
import type { JsonResourceRef, JsonResources, Model3DRefLike } from "./types.js";
|
|
2
3
|
export declare function toBytes(data: Uint8Array | string | undefined): Uint8Array;
|
|
3
4
|
export declare function modelBytes(model: unknown): Uint8Array;
|
|
4
|
-
export declare function modelRefToBytes(model: unknown, context?:
|
|
5
|
-
storage?: {
|
|
6
|
-
retrieve(uri: string): Promise<Uint8Array | null>;
|
|
7
|
-
} | null;
|
|
8
|
-
}): Promise<Uint8Array>;
|
|
5
|
+
export declare function modelRefToBytes(model: unknown, context?: ProcessingContext): Promise<Uint8Array>;
|
|
9
6
|
/**
|
|
10
7
|
* Resolve an image-ref-shaped value (`{uri, data, asset_id, ...}`) to raw
|
|
11
|
-
* image bytes
|
|
12
|
-
* `data:` URI,
|
|
13
|
-
* URI
|
|
8
|
+
* image bytes through the shared media-ref resolver: inline `data`, a
|
|
9
|
+
* `data:` URI, an `asset://` URI or bare `asset_id`, a storage URI, a
|
|
10
|
+
* `file://` URI, or an http(s) URL.
|
|
14
11
|
*
|
|
15
12
|
* Throws when nothing resolvable is present so the caller can surface a
|
|
16
13
|
* clear "missing image" error rather than silently sending zero bytes.
|
|
17
14
|
*/
|
|
18
|
-
export declare function imageRefToBytes(ref: unknown, context?:
|
|
19
|
-
storage?: {
|
|
20
|
-
retrieve(uri: string): Promise<Uint8Array | null>;
|
|
21
|
-
} | null;
|
|
22
|
-
}): Promise<Uint8Array>;
|
|
15
|
+
export declare function imageRefToBytes(ref: unknown, context?: ProcessingContext): Promise<Uint8Array>;
|
|
23
16
|
export declare function modelRef(data: Uint8Array, extras?: Record<string, unknown>): {
|
|
24
17
|
type: string;
|
|
25
18
|
asset_id: null;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../../src/nodes/model3d/utils.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../../src/nodes/model3d/utils.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AAG9D,OAAO,KAAK,EACV,eAAe,EACf,aAAa,EACb,cAAc,EACf,MAAM,YAAY,CAAC;AAMpB,wBAAgB,OAAO,CAAC,IAAI,EAAE,UAAU,GAAG,MAAM,GAAG,SAAS,GAAG,UAAU,CAIzE;AAED,wBAAgB,UAAU,CAAC,KAAK,EAAE,OAAO,GAAG,UAAU,CAGrD;AAED,wBAAsB,eAAe,CACnC,KAAK,EAAE,OAAO,EACd,OAAO,CAAC,EAAE,iBAAiB,GAC1B,OAAO,CAAC,UAAU,CAAC,CAGrB;AAED;;;;;;;;GAQG;AACH,wBAAsB,eAAe,CACnC,GAAG,EAAE,OAAO,EACZ,OAAO,CAAC,EAAE,iBAAiB,GAC1B,OAAO,CAAC,UAAU,CAAC,CAqCrB;AAED,wBAAgB,QAAQ,CACtB,IAAI,EAAE,UAAU,EAChB,MAAM,GAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAM;;;;;EASrC;AAED,wBAAgB,QAAQ,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,CAGlD;AAED,wBAAgB,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAU7C;AAED,wBAAgB,SAAS,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAGlD;AAED,wBAAgB,IAAI,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAE3C;AAED,wBAAgB,gBAAgB,CAAC,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,MAAM,CAS1E;AAED,wBAAgB,WAAW,CAAC,KAAK,EAAE,cAAc,GAAG,MAAM,CAKzD;AAED,wBAAgB,mBAAmB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAgBvD;AAED,wBAAgB,cAAc,CAAC,KAAK,EAAE,UAAU,EAAE,GAAG,EAAE,MAAM,GAAG,MAAM,CAGrE;AAED,wBAAgB,qBAAqB,CACnC,IAAI,EAAE,eAAe,EAAE,GAAG,SAAS,EACnC,SAAS,EAAE,aAAa,GACvB,IAAI,CAON;AAED,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,cAAc;IAGlD,MAAM;;;;;;EAKT"}
|