mirror of
https://github.com/comfyanonymous/ComfyUI.git
synced 2026-01-27 06:40:16 +08:00
parent
df0c752520
commit
5f9cc806f5
63
execution.py
63
execution.py
@ -87,39 +87,8 @@ def get_input_data_batches(input_data_all):
|
|||||||
batch[input_name] = value
|
batch[input_name] = value
|
||||||
batches.append(batch)
|
batches.append(batch)
|
||||||
|
|
||||||
print("------------------=+++++++++++++++++")
|
|
||||||
for batch in batches:
|
|
||||||
print(format_dict(batch))
|
|
||||||
print(format_dict(input_to_index))
|
|
||||||
print(format_dict({ "v": index_to_values }))
|
|
||||||
print(index_to_coords)
|
|
||||||
print("------------------=+++++++++++++++++")
|
|
||||||
|
|
||||||
return CombinatorialBatches(batches, input_to_index, index_to_values, indices, combinations)
|
return CombinatorialBatches(batches, input_to_index, index_to_values, indices, combinations)
|
||||||
|
|
||||||
|
|
||||||
def format_dict(d):
|
|
||||||
s = []
|
|
||||||
for k,v in d.items():
|
|
||||||
st = f"{k}: "
|
|
||||||
if isinstance(v, list):
|
|
||||||
st += f"list[len: {len(v)}]["
|
|
||||||
i = []
|
|
||||||
for v2 in v:
|
|
||||||
if isinstance(v2, (int, float, bool)):
|
|
||||||
i.append(str(v2))
|
|
||||||
else:
|
|
||||||
i.append(v2.__class__.__name__)
|
|
||||||
st += ",".join(i) + "]"
|
|
||||||
else:
|
|
||||||
if isinstance(v, (int, float, bool)):
|
|
||||||
st += str(v)
|
|
||||||
else:
|
|
||||||
st += str(type(v))
|
|
||||||
s.append(st)
|
|
||||||
return "( " + ", ".join(s) + " )"
|
|
||||||
|
|
||||||
|
|
||||||
def get_input_data(inputs, class_def, unique_id, outputs={}, prompt={}, extra_data={}):
|
def get_input_data(inputs, class_def, unique_id, outputs={}, prompt={}, extra_data={}):
|
||||||
"""Given input data from the prompt, returns a list of input data dicts for
|
"""Given input data from the prompt, returns a list of input data dicts for
|
||||||
each combinatorial batch."""
|
each combinatorial batch."""
|
||||||
@ -148,15 +117,7 @@ def get_input_data(inputs, class_def, unique_id, outputs={}, prompt={}, extra_da
|
|||||||
# Make the outputs into a list for map-over-list use
|
# Make the outputs into a list for map-over-list use
|
||||||
# (they are themselves lists so flatten them afterwards)
|
# (they are themselves lists so flatten them afterwards)
|
||||||
input_values = [batch_output[output_index] for batch_output in outputs_for_all_batches]
|
input_values = [batch_output[output_index] for batch_output in outputs_for_all_batches]
|
||||||
print("COMB")
|
input_values = { "combinatorial": True, "values": flatten(input_values) }
|
||||||
print(str(input_unique_id))
|
|
||||||
print(str(output_index))
|
|
||||||
print(format_dict({ "values": input_values }))
|
|
||||||
input_values = {
|
|
||||||
"combinatorial": True,
|
|
||||||
"values": flatten(input_values),
|
|
||||||
"axis_id": prompt[input_unique_id].get("axis_id")
|
|
||||||
}
|
|
||||||
input_data_all[x] = input_values
|
input_data_all[x] = input_values
|
||||||
elif is_combinatorial_input(input_data):
|
elif is_combinatorial_input(input_data):
|
||||||
if required_or_optional:
|
if required_or_optional:
|
||||||
@ -182,6 +143,22 @@ def get_input_data(inputs, class_def, unique_id, outputs={}, prompt={}, extra_da
|
|||||||
|
|
||||||
input_data_all_batches = get_input_data_batches(input_data_all)
|
input_data_all_batches = get_input_data_batches(input_data_all)
|
||||||
|
|
||||||
|
def format_dict(d):
|
||||||
|
s = []
|
||||||
|
for k,v in d.items():
|
||||||
|
st = f"{k}: "
|
||||||
|
if isinstance(v, list):
|
||||||
|
st += f"list[len: {len(v)}]["
|
||||||
|
i = []
|
||||||
|
for v2 in v:
|
||||||
|
i.append(v2.__class__.__name__)
|
||||||
|
st += ",".join(i) + "]"
|
||||||
|
else:
|
||||||
|
st += str(type(v))
|
||||||
|
s.append(st)
|
||||||
|
return "( " + ", ".join(s) + " )"
|
||||||
|
|
||||||
|
|
||||||
print("---------------------------------")
|
print("---------------------------------")
|
||||||
from pprint import pp
|
from pprint import pp
|
||||||
for batch in input_data_all_batches.batches:
|
for batch in input_data_all_batches.batches:
|
||||||
@ -297,7 +274,7 @@ def get_output_data(obj, input_data_all_batches, server, unique_id, prompt_id):
|
|||||||
"output": outputs_ui_to_send,
|
"output": outputs_ui_to_send,
|
||||||
"prompt_id": prompt_id,
|
"prompt_id": prompt_id,
|
||||||
"batch_num": inner_totals,
|
"batch_num": inner_totals,
|
||||||
"total_batches": total_inner_batches,
|
"total_batches": total_inner_batches
|
||||||
}
|
}
|
||||||
if input_data_all_batches.indices:
|
if input_data_all_batches.indices:
|
||||||
message["indices"] = input_data_all_batches.indices[batch_num]
|
message["indices"] = input_data_all_batches.indices[batch_num]
|
||||||
@ -434,7 +411,7 @@ def recursive_output_delete_if_changed(prompt, old_prompt, outputs, current_item
|
|||||||
if unique_id in old_prompt and 'is_changed' in old_prompt[unique_id]:
|
if unique_id in old_prompt and 'is_changed' in old_prompt[unique_id]:
|
||||||
is_changed_old = old_prompt[unique_id]['is_changed']
|
is_changed_old = old_prompt[unique_id]['is_changed']
|
||||||
if 'is_changed' not in prompt[unique_id]:
|
if 'is_changed' not in prompt[unique_id]:
|
||||||
input_data_all_batches = get_input_data(inputs, class_def, unique_id, outputs, prompt)
|
input_data_all_batches = get_input_data(inputs, class_def, unique_id, outputs)
|
||||||
if input_data_all_batches is not None:
|
if input_data_all_batches is not None:
|
||||||
try:
|
try:
|
||||||
#is_changed = class_def.IS_CHANGED(**input_data_all)
|
#is_changed = class_def.IS_CHANGED(**input_data_all)
|
||||||
@ -777,7 +754,7 @@ def validate_inputs(prompt, item, validated):
|
|||||||
inputs[x] = r[1]
|
inputs[x] = r[1]
|
||||||
|
|
||||||
if hasattr(obj_class, "VALIDATE_INPUTS"):
|
if hasattr(obj_class, "VALIDATE_INPUTS"):
|
||||||
input_data_all_batches = get_input_data(inputs, obj_class, unique_id, {}, prompt)
|
input_data_all_batches = get_input_data(inputs, obj_class, unique_id)
|
||||||
#ret = obj_class.VALIDATE_INPUTS(**input_data_all)
|
#ret = obj_class.VALIDATE_INPUTS(**input_data_all)
|
||||||
for batch in input_data_all_batches.batches:
|
for batch in input_data_all_batches.batches:
|
||||||
ret = map_node_over_list(obj_class, batch, "VALIDATE_INPUTS")
|
ret = map_node_over_list(obj_class, batch, "VALIDATE_INPUTS")
|
||||||
|
|||||||
@ -23,7 +23,7 @@ app.registerExtension({
|
|||||||
nodeType.prototype.onNodeCreated = function () {
|
nodeType.prototype.onNodeCreated = function () {
|
||||||
const r = onNodeCreated ? onNodeCreated.apply(this, arguments) : undefined;
|
const r = onNodeCreated ? onNodeCreated.apply(this, arguments) : undefined;
|
||||||
|
|
||||||
this.showGridWidget = this.addWidget("button", "Show Grid", "Show Grid", () => {
|
this.addWidget("button", "Show Grid", "Show Grid", () => {
|
||||||
const grid = app.nodeGrids[this.id];
|
const grid = app.nodeGrids[this.id];
|
||||||
if (grid == null) {
|
if (grid == null) {
|
||||||
console.warn("No grid to show!");
|
console.warn("No grid to show!");
|
||||||
@ -282,14 +282,6 @@ app.registerExtension({
|
|||||||
|
|
||||||
document.body.appendChild(this._gridPanel);
|
document.body.appendChild(this._gridPanel);
|
||||||
})
|
})
|
||||||
|
|
||||||
this.showGridWidget.disabled = true;
|
|
||||||
}
|
|
||||||
|
|
||||||
const onExecuted = nodeType.prototype.onExecuted;
|
|
||||||
nodeType.prototype.onExecuted = function (output) {
|
|
||||||
const r = onExecuted ? onExecuted.apply(this, arguments) : undefined;
|
|
||||||
this.showGridWidget.disabled = app.nodeGrids[this.id] == null;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
|||||||
@ -999,16 +999,14 @@ export class ComfyApp {
|
|||||||
});
|
});
|
||||||
|
|
||||||
api.addEventListener("executed", ({ detail }) => {
|
api.addEventListener("executed", ({ detail }) => {
|
||||||
if (detail.batch_num === detail.total_batches) {
|
this.nodeOutputs[detail.node] = detail.output;
|
||||||
this.nodeOutputs[detail.node] = detail.output;
|
if (detail.output != null) {
|
||||||
if (detail.output != null) {
|
this.nodeGrids[detail.node] = this.#resolveGrid(detail.node, detail.output, this.runningPrompt)
|
||||||
this.nodeGrids[detail.node] = this.#resolveGrid(detail.node, detail.output, this.runningPrompt)
|
}
|
||||||
}
|
const node = this.graph.getNodeById(detail.node);
|
||||||
const node = this.graph.getNodeById(detail.node);
|
if (node) {
|
||||||
if (node) {
|
if (node.onExecuted)
|
||||||
if (node.onExecuted)
|
node.onExecuted(detail.output);
|
||||||
node.onExecuted(detail.output);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
if (this.batchProgress != null) {
|
if (this.batchProgress != null) {
|
||||||
this.batchProgress.value = detail.batch_num
|
this.batchProgress.value = detail.batch_num
|
||||||
@ -1475,7 +1473,6 @@ export class ComfyApp {
|
|||||||
|
|
||||||
const inputs = {};
|
const inputs = {};
|
||||||
const widgets = node.widgets;
|
const widgets = node.widgets;
|
||||||
let axis_id = null;
|
|
||||||
|
|
||||||
// Store all widget values
|
// Store all widget values
|
||||||
if (widgets) {
|
if (widgets) {
|
||||||
@ -1487,13 +1484,6 @@ export class ComfyApp {
|
|||||||
if (typeof widgetValue === "object" && widgetValue.__inputType__) {
|
if (typeof widgetValue === "object" && widgetValue.__inputType__) {
|
||||||
totalCombinatorialNodes += 1;
|
totalCombinatorialNodes += 1;
|
||||||
executionFactor *= widgetValue.values.length;
|
executionFactor *= widgetValue.values.length;
|
||||||
|
|
||||||
if (widgetValue.axis_id != null) {
|
|
||||||
if (axis_id != null && axis_id != widgetValue.axis_id) {
|
|
||||||
throw new RuntimeError("Each node's outputs can only belong to one axis at a time");
|
|
||||||
}
|
|
||||||
axis_id = widgetValue.axis_id;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
totalExecuted += executionFactor;
|
totalExecuted += executionFactor;
|
||||||
}
|
}
|
||||||
@ -1523,7 +1513,6 @@ export class ComfyApp {
|
|||||||
output[String(node.id)] = {
|
output[String(node.id)] = {
|
||||||
inputs,
|
inputs,
|
||||||
class_type: node.comfyClass,
|
class_type: node.comfyClass,
|
||||||
axis_id,
|
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user