Skip to content

Commit

Permalink
Load API JSON (#1932)
Browse files Browse the repository at this point in the history
* added loading api json

* revert async change

* reorder
  • Loading branch information
pythongosssss authored Nov 9, 2023
1 parent cd6df8b commit 72e3feb
Showing 1 changed file with 60 additions and 9 deletions.
69 changes: 60 additions & 9 deletions web/scripts/app.js
Original file line number Diff line number Diff line change
Expand Up @@ -1469,6 +1469,17 @@ export class ComfyApp {
localStorage.setItem("litegrapheditor_clipboard", old);
}

showMissingNodesError(missingNodeTypes, hasAddedNodes = true) {
this.ui.dialog.show(
`When loading the graph, the following node types were not found: <ul>${Array.from(new Set(missingNodeTypes)).map(
(t) => `<li>${t}</li>`
).join("")}</ul>${hasAddedNodes ? "Nodes that have failed to load will show as red on the graph." : ""}`
);
this.logging.addEntry("Comfy.App", "warn", {
MissingNodes: missingNodeTypes,
});
}

/**
* Populates the graph with the specified workflow data
* @param {*} graphData A serialized graph object
Expand Down Expand Up @@ -1587,14 +1598,7 @@ export class ComfyApp {
}

if (missingNodeTypes.length) {
this.ui.dialog.show(
`When loading the graph, the following node types were not found: <ul>${Array.from(new Set(missingNodeTypes)).map(
(t) => `<li>${t}</li>`
).join("")}</ul>Nodes that have failed to load will show as red on the graph.`
);
this.logging.addEntry("Comfy.App", "warn", {
MissingNodes: missingNodeTypes,
});
this.showMissingNodesError(missingNodeTypes);
}
}

Expand Down Expand Up @@ -1825,9 +1829,11 @@ export class ComfyApp {
} else if (file.type === "application/json" || file.name?.endsWith(".json")) {
const reader = new FileReader();
reader.onload = () => {
var jsonContent = JSON.parse(reader.result);
const jsonContent = JSON.parse(reader.result);
if (jsonContent?.templates) {
this.loadTemplateData(jsonContent);
} else if(this.isApiJson(jsonContent)) {
this.loadApiJson(jsonContent);
} else {
this.loadGraphData(jsonContent);
}
Expand All @@ -1841,6 +1847,51 @@ export class ComfyApp {
}
}

isApiJson(data) {
return Object.values(data).every((v) => v.class_type);
}

loadApiJson(apiData) {
const missingNodeTypes = Object.values(apiData).filter((n) => !LiteGraph.registered_node_types[n.class_type]);
if (missingNodeTypes.length) {
this.showMissingNodesError(missingNodeTypes.map(t => t.class_type), false);
return;
}

const ids = Object.keys(apiData);
app.graph.clear();
for (const id of ids) {
const data = apiData[id];
const node = LiteGraph.createNode(data.class_type);
node.id = id;
graph.add(node);
}

for (const id of ids) {
const data = apiData[id];
const node = app.graph.getNodeById(id);
for (const input in data.inputs ?? {}) {
const value = data.inputs[input];
if (value instanceof Array) {
const [fromId, fromSlot] = value;
const fromNode = app.graph.getNodeById(fromId);
const toSlot = node.inputs?.findIndex((inp) => inp.name === input);
if (toSlot !== -1) {
fromNode.connect(fromSlot, node, toSlot);
}
} else {
const widget = node.widgets?.find((w) => w.name === input);
if (widget) {
widget.value = value;
widget.callback?.(value);
}
}
}
}

app.graph.arrange();
}

/**
* Registers a Comfy web extension with the app
* @param {ComfyExtension} extension
Expand Down

0 comments on commit 72e3feb

Please sign in to comment.