Move web/ to javascript/ and declare it via [tool.comfy] web. Rename the seven third-party bundles (playcanvas, spark, three.js, gsplat, OrbitControls, TrackballControls) to .mjs. Every reference to them is inside the HTML viewers, but ComfyUI auto-imports **/*.js under the web dir into the shared browser realm, so ~8MB of vendor code was being evaluated in the main page on every startup -- and with it 36 collision errors: document.body injection, document-level listeners, unguarded message listeners and self.onmessage writes. The importmap values, script srcs and three.module's internal ./three.core ref are rewritten to match. DisplayName becomes "GaussianPack": the namespace enforced on registerExtension names is derived from it, and "ComfyUI-GaussianPack" made that prefix invalid. The analysis extension is renamed to match. js/gaussian_preview.js hooked "PlyPreviewLoadGaussianPLYEnhance", a node id that appears nowhere in this repo, so the PLY dropdown auto-refresh had never run; it now targets LoadPLY and LoadPLYOutput, the two nodes that actually carry the ply_file widget. Guard its message listener on event.source. Asset seeding resolves the input directory through folder_paths.get_input_directory(), so it follows ComfyUI Desktop and --input-directory instead of writing into the code tree. comfy-test.toml moves to the current schema: [test.workflows] cuda (there is no "gpu" key -- the accelerator is named by backend, and the old spelling parsed to an empty list, so CUDA runners silently ran the full unfiltered set), an explicit [test.platforms] platforms allowlist (per-platform booleans are no longer supported), and the javascript level.
56 lines
2.1 KiB
JavaScript
56 lines
2.1 KiB
JavaScript
import { app } from "../../../scripts/app.js";
|
|
|
|
// Show the GaussianAnalysis report inside the node, mirroring the in-node
|
|
// text-panel pattern used by comfy_3d_viewers (addDOMWidget + onExecuted).
|
|
app.registerExtension({
|
|
name: "gaussianpack.analysisreport",
|
|
|
|
async beforeRegisterNodeDef(nodeType, nodeData) {
|
|
if (nodeData.name !== "GaussianAnalysis") return;
|
|
|
|
const onNodeCreated = nodeType.prototype.onNodeCreated;
|
|
nodeType.prototype.onNodeCreated = function () {
|
|
const r = onNodeCreated ? onNodeCreated.apply(this, arguments) : undefined;
|
|
|
|
const container = document.createElement("div");
|
|
Object.assign(container.style, {
|
|
padding: "8px",
|
|
backgroundColor: "#1e1e1e",
|
|
color: "#cfcfcf",
|
|
fontSize: "11px",
|
|
fontFamily: "monospace",
|
|
whiteSpace: "pre-wrap",
|
|
wordBreak: "break-word",
|
|
overflow: "auto",
|
|
height: "100%",
|
|
boxSizing: "border-box",
|
|
borderRadius: "4px",
|
|
marginTop: "4px",
|
|
});
|
|
container.textContent = "Run to analyze the splat…";
|
|
|
|
const widget = this.addDOMWidget("report_display", "TEXT_DISPLAY", container, {
|
|
getValue() { return container.textContent; },
|
|
setValue(v) { container.textContent = v ?? ""; },
|
|
// Don't serialize the report into the workflow JSON.
|
|
serialize: false,
|
|
});
|
|
widget.computeSize = () => [this.size?.[0] ?? 320, 220];
|
|
|
|
this._reportContainer = container;
|
|
|
|
const onExecuted = this.onExecuted;
|
|
this.onExecuted = function (message) {
|
|
onExecuted?.apply(this, arguments);
|
|
const txt = message?.text?.[0];
|
|
if (txt != null) this._reportContainer.textContent = txt;
|
|
};
|
|
|
|
// Give the node a sensible starting size for the panel.
|
|
if (this.size && this.size[1] < 260) this.setSize([Math.max(this.size[0], 320), 300]);
|
|
|
|
return r;
|
|
};
|
|
},
|
|
});
|