fix multi wf

This commit is contained in:
NumZ
2025-07-28 08:20:00 +02:00
parent e740249982
commit 4dd886d586
2 changed files with 10 additions and 9 deletions
+1 -1
View File
@@ -60,7 +60,7 @@ async function recursiveZip(nodes, zipInstance) {
//const safePath = path.replace(/[^a-zA-Z0-9/._-]/g, "_");
//const fileNameInZip = path.endsWith(".json") ? path : `${safePath}.json`;
zipInstance.file(path, JSON.stringify(jsonFile, null, 2));
zipInstance.file(path, JSON.stringify(jsonFile["workflow"], null, 2));
console.log(`Added ${path} to zip.`);
if (jsonFile && jsonFile.workflow && jsonFile.workflow.nodes) {
+9 -8
View File
@@ -288,14 +288,14 @@ class Workflow(SaveImage):
return subworkflow
def merge_inputs_outputs(workflow, workflow_name, subworkflow, workflow_outputs):
def merge_inputs_outputs(workflow, workflow_name, subworkflow, workflow_outputs, do_not_delete):
# get max workflow id
# coinvert workflow_outputs to list
workflow_outputs = list(workflow_outputs.values())
# prendre le premier workflow
workflow_node = [{"id":k, **v} for k, v in workflow.items() if "class_type" in v and v["class_type"] == "Workflow" and v["inputs"]["workflows"] == workflow_name][0]
sub_input_nodes = {k: v for k, v in subworkflow.items() if "class_type" in v and v["class_type"] == "WorkflowInput"}
do_not_delete = []
#do_not_delete = []
for sub_id, sub_node in sub_input_nodes.items():
if sub_node["inputs"]["Name"] in workflow_node["inputs"]:
value = workflow_node["inputs"][sub_node["inputs"]["Name"]]
@@ -357,7 +357,7 @@ class Workflow(SaveImage):
# remove output node
subworkflow = {k: v for k, v in subworkflow.items() if not ("class_type" in v and v["class_type"] == "WorkflowOutput")}
return workflow, subworkflow
return workflow, subworkflow, do_not_delete
def clean_workflow(workflow, inputs=None, kwargs_values=None):
if kwargs_values is None:
@@ -377,7 +377,7 @@ class Workflow(SaveImage):
workflow = recursive_delete(workflow, switch_to_delete + continue_to_delete)
return workflow, workflow_outputs
def get_recursive_workflow(workflow_name, workflows, max_id=0):
def get_recursive_workflow(workflow_name, workflows, max_id=0,do_not_delete = []):
# if workflows[-5:] == ".json":
# workflow = get_workflow(workflows)
# else:
@@ -390,10 +390,11 @@ class Workflow(SaveImage):
workflow, max_id = redefine_id(workflow, max_id)
sub_workflows = {k: v for k, v in workflow.items() if "class_type" in v and v["class_type"] == "Workflow"}
for key, sub_workflow_node in sub_workflows.items():
workflow_json = sub_workflow_node["inputs"]["workflow"]
sub_workflow_name = sub_workflow_node["inputs"]["workflows"]
subworkflow, max_id = get_recursive_workflow(sub_workflow_name, workflow_json, max_id)
subworkflow, max_id, do_not_delete = get_recursive_workflow(sub_workflow_name, workflow_json, max_id, do_not_delete)
# get sub workflow file path
sub_workflow_file_path = os.path.join(folder_paths.user_directory, "default", "workflows", sub_workflow_name)
@@ -430,11 +431,11 @@ class Workflow(SaveImage):
sub_outputs_with_position.sort(key=lambda x: x[1])
workflow_outputs_sub = {k: workflow_outputs_sub[k] for k, _ in sub_outputs_with_position}
workflow, subworkflow = merge_inputs_outputs(workflow, sub_workflow_name, subworkflow, workflow_outputs_sub)
workflow, subworkflow, do_not_delete = merge_inputs_outputs(workflow, sub_workflow_name, subworkflow, workflow_outputs_sub, do_not_delete)
workflow = {k: v for k, v in workflow.items() if k != key}
# add subworkflow to workflow
workflow.update(subworkflow)
return workflow, max_id
return workflow, max_id, do_not_delete
server_instance = PromptServer.instance
client_id = server_instance.client_id
@@ -453,7 +454,7 @@ class Workflow(SaveImage):
# Fallback to empty inputs if server instance not available
original_inputs = {}
workflow, _ = get_recursive_workflow(workflows, workflow, 5000)
workflow, _, _ = get_recursive_workflow(workflows, workflow, 5000, [])
workflow, workflow_outputs = clean_workflow(workflow, original_inputs, kwargs)
# Accéder au fichier JSON original pour obtenir les positions correctes