From b09054f475d062157adc90a03f19d1c7adc4c1d3 Mon Sep 17 00:00:00 2001 From: NumZ Date: Sun, 18 May 2025 21:39:20 +0200 Subject: [PATCH] Fix multiple time same wj in main wf --- web/js/inputs.js | 7 +++++++ web/js/nodetype_workflow.js | 9 ++++++++- workflow.py | 20 ++++++++++++++------ 3 files changed, 29 insertions(+), 7 deletions(-) diff --git a/web/js/inputs.js b/web/js/inputs.js index ce1859c..a8553b8 100644 --- a/web/js/inputs.js +++ b/web/js/inputs.js @@ -131,6 +131,13 @@ export function addOutputs(root_obj, workflow_name) { root_obj.addOutput(name, type); } } + // remove out not in outputs + const all_outputs = Object.entries(outputs).map(([key, value]) => value); + for (let i = 0; i < root_obj.outputs.length; i++) { + if (!all_outputs.find((out) => out.inputs[0] == root_obj.outputs[i].name)) { + root_obj.removeOutput(i); + } + } organizeOutputs(root_obj, workflow_name); } diff --git a/web/js/nodetype_workflow.js b/web/js/nodetype_workflow.js index 0d3f56f..acf7638 100644 --- a/web/js/nodetype_workflow.js +++ b/web/js/nodetype_workflow.js @@ -302,7 +302,14 @@ function configure(info) { if (value["inputs"].length === undefined) { data_json[key]["inputs"]["type"] = value["inputs"].type.value; } else { - data_json[key]["inputs"]["type"] = value["inputs"][1]; + if ( + value["inputs"][2]?.values && + value["inputs"][2].values.length > 0 + ) { + data_json[key]["inputs"]["type"] = "COMBO"; + } else { + data_json[key]["inputs"]["type"] = value["inputs"][1]; + } } } this.widgets[1].value = JSON.stringify(data_json); diff --git a/workflow.py b/workflow.py index 9f24a15..cbee0b9 100644 --- a/workflow.py +++ b/workflow.py @@ -63,7 +63,10 @@ class Workflow(SaveImage): "workflows": ("COMBO", {"values": []}), "workflow": ("STRING", {"default": ""}) }, - "optional": {} + "optional": {}, + "hidden": { + "unique_id": "UNIQUE_ID", + } } RETURN_TYPES = ( @@ -116,7 +119,7 @@ class Workflow(SaveImage): return m.digest().hex() - def generate(self, workflows, workflow, **kwargs): + def generate(self, workflows, workflow, unique_id, **kwargs): def populate_inputs(workflow, inputs, kwargs_values): workflow_inputs = {k: v for k, v in workflow.items() if "class_type" in v and v["class_type"] == "WorkflowInput"} @@ -436,8 +439,7 @@ class Workflow(SaveImage): # Now you can access the original inputs as before queue_to_use = queue_info["queue_running"] - original_inputs = [v["inputs"] for k, v in queue_to_use[0][2].items() if - "workflows" in v["inputs"] and v["inputs"]["workflows"] == workflows][0] + original_inputs = [v["inputs"] for k, v in queue_to_use[0][2].items() if k == unique_id][0] else: # Fallback to empty inputs if server instance not available @@ -461,9 +463,15 @@ class Workflow(SaveImage): if "nodes" in original_workflow: for node in original_workflow["nodes"]: if node.get("type") == "WorkflowOutput": - node_id = str(node.get("id", "unknown")) + # node_id = str(node.get("id", "unknown")) pos_y = node.get("pos", [0, 0])[1] - node_name = node.get("widgets_values", "")["Name"]["value"] + + w_values = node.get("widgets_values", "") + if "Name" in w_values: + node_name = w_values["Name"]["value"] + else: + node_name = w_values[0] + original_positions[node_name] = pos_y except Exception as e: print(f"Erreur lors de la lecture du fichier workflow original: {str(e)}")