Static workflow
This commit is contained in:
+15
-3
@@ -39,12 +39,22 @@ def clear_remote_queue(remote_url):
|
|||||||
|
|
||||||
def get_remote_os(remote_url):
|
def get_remote_os(remote_url):
|
||||||
url = f"{remote_url}/system_stats"
|
url = f"{remote_url}/system_stats"
|
||||||
r = requests.get(url)
|
r = requests.get(url, timeout=4)
|
||||||
r.raise_for_status()
|
r.raise_for_status()
|
||||||
data = r.json()
|
data = r.json()
|
||||||
return data["system"]["os"]
|
return data["system"]["os"]
|
||||||
|
|
||||||
def dispatch_to_remote(remote_url, prompt, job_id=f"{get_client_id()}-unknown"):
|
def get_output_nodes(remote_url):
|
||||||
|
# I'm 90% sure this could just use the
|
||||||
|
# list from the host but better safe than sorry
|
||||||
|
url = f"{remote_url}/object_info"
|
||||||
|
r = requests.get(url, timeout=4)
|
||||||
|
r.raise_for_status()
|
||||||
|
data = r.json()
|
||||||
|
out = [k for k, v in data.items() if v.get("output_node")]
|
||||||
|
return out
|
||||||
|
|
||||||
|
def dispatch_to_remote(remote_url, prompt, job_id=f"{get_client_id()}-unknown", outputs="final_image"):
|
||||||
### PROMPT LOGIC ###
|
### PROMPT LOGIC ###
|
||||||
prompt = deepcopy(prompt)
|
prompt = deepcopy(prompt)
|
||||||
to_del = []
|
to_del = []
|
||||||
@@ -78,6 +88,7 @@ def dispatch_to_remote(remote_url, prompt, job_id=f"{get_client_id()}-unknown"):
|
|||||||
else:
|
else:
|
||||||
prompt[i]["inputs"]["enabled"] = "false"
|
prompt[i]["inputs"]["enabled"] = "false"
|
||||||
|
|
||||||
|
banned = [] if outputs == "any" else get_output_nodes(remote_url)
|
||||||
output = None
|
output = None
|
||||||
for i in prompt.keys():
|
for i in prompt.keys():
|
||||||
# only leave current fetch but replace with PreviewImage
|
# only leave current fetch but replace with PreviewImage
|
||||||
@@ -90,8 +101,9 @@ def dispatch_to_remote(remote_url, prompt, job_id=f"{get_client_id()}-unknown"):
|
|||||||
recursive_node_deletion(i)
|
recursive_node_deletion(i)
|
||||||
# do not save output on remote
|
# do not save output on remote
|
||||||
# todo: other output types
|
# todo: other output types
|
||||||
if prompt[i]["class_type"] in ["SaveImage", "PreviewImage"]:
|
if prompt[i]["class_type"] in banned:
|
||||||
recursive_node_deletion(i)
|
recursive_node_deletion(i)
|
||||||
|
if output:
|
||||||
prompt[str(max([int(x) for x in prompt.keys()])+1)] = output
|
prompt[str(max([int(x) for x in prompt.keys()])+1)] = output
|
||||||
for i in to_del: del prompt[i]
|
for i in to_del: del prompt[i]
|
||||||
|
|
||||||
|
|||||||
@@ -23,7 +23,11 @@ def wait_for_job(remote_url, job_id):
|
|||||||
continue
|
continue
|
||||||
for i,d in data.items():
|
for i,d in data.items():
|
||||||
if d["prompt"][3].get("job_id") == job_id:
|
if d["prompt"][3].get("job_id") == job_id:
|
||||||
|
# this needs to be less jank
|
||||||
|
if len(d["outputs"].keys()) > 0:
|
||||||
return d["outputs"][list(d["outputs"].keys())[-1]].get("images")
|
return d["outputs"][list(d["outputs"].keys())[-1]].get("images")
|
||||||
|
else:
|
||||||
|
return []
|
||||||
# todo: check if it's actually in the queue to avoid waiting forever
|
# todo: check if it's actually in the queue to avoid waiting forever
|
||||||
time.sleep(POLLING)
|
time.sleep(POLLING)
|
||||||
raise OSError("Failed to fetch image from remote client!")
|
raise OSError("Failed to fetch image from remote client!")
|
||||||
|
|||||||
+4
-2
@@ -75,6 +75,7 @@ class RemoteQueueWorker:
|
|||||||
}),
|
}),
|
||||||
"batch_override": ("INT", {"default": 0, "min": 0, "max": 8}),
|
"batch_override": ("INT", {"default": 0, "min": 0, "max": 8}),
|
||||||
"enabled": (["true", "false", "remote"],{"default": "true"}),
|
"enabled": (["true", "false", "remote"],{"default": "true"}),
|
||||||
|
"outputs": (["final_image", "any"],{"default":"final_image"}),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -84,7 +85,7 @@ class RemoteQueueWorker:
|
|||||||
CATEGORY = "remote/advanced"
|
CATEGORY = "remote/advanced"
|
||||||
TITLE = "Queue on remote (worker)"
|
TITLE = "Queue on remote (worker)"
|
||||||
|
|
||||||
def queue(self, remote_chain, remote_url, batch_override, enabled):
|
def queue(self, remote_chain, remote_url, batch_override, enabled, outputs):
|
||||||
current_offset = remote_chain["seed_offset"]
|
current_offset = remote_chain["seed_offset"]
|
||||||
remote_chain["seed_offset"] += 1 if batch_override == 0 else batch_override
|
remote_chain["seed_offset"] += 1 if batch_override == 0 else batch_override
|
||||||
if enabled == "false":
|
if enabled == "false":
|
||||||
@@ -101,7 +102,8 @@ class RemoteQueueWorker:
|
|||||||
dispatch_to_remote(
|
dispatch_to_remote(
|
||||||
remote_url,
|
remote_url,
|
||||||
remote_chain["prompt"],
|
remote_chain["prompt"],
|
||||||
remote_chain["job_id"]
|
remote_chain["job_id"],
|
||||||
|
outputs,
|
||||||
)
|
)
|
||||||
remote_info = {
|
remote_info = {
|
||||||
"remote_url" : remote_url,
|
"remote_url" : remote_url,
|
||||||
|
|||||||
+1
-1
@@ -53,7 +53,7 @@ class LoadDiskWorkflowJSON:
|
|||||||
TITLE = "Load workflow (disk)"
|
TITLE = "Load workflow (disk)"
|
||||||
|
|
||||||
def load_workflow(self, workflow):
|
def load_workflow(self, workflow):
|
||||||
json_path = folder_paths.get_annotated_filepath(cond)
|
json_path = folder_paths.get_annotated_filepath(workflow)
|
||||||
with open(json_path) as f:
|
with open(json_path) as f:
|
||||||
data = json.loads(f.read())
|
data = json.loads(f.read())
|
||||||
return (data,)
|
return (data,)
|
||||||
|
|||||||
Reference in New Issue
Block a user