mirror of
https://github.com/comfyanonymous/ComfyUI.git
synced 2026-04-29 10:51:27 +00:00
Fix ComfyAPI initialization for base async case, move on_load to be called before get_node_list
This commit is contained in:
@@ -22,14 +22,17 @@ class ComfyAPI_latest(ComfyAPIBase):
|
|||||||
VERSION = "latest"
|
VERSION = "latest"
|
||||||
STABLE = False
|
STABLE = False
|
||||||
|
|
||||||
|
def __init__(self):
|
||||||
|
super().__init__()
|
||||||
|
self.node_replacement = self.NodeReplacement()
|
||||||
|
self.execution = self.Execution()
|
||||||
|
|
||||||
class NodeReplacement(ProxiedSingleton):
|
class NodeReplacement(ProxiedSingleton):
|
||||||
async def register(self, node_replace: 'node_replace.NodeReplace') -> None:
|
async def register(self, node_replace: 'node_replace.NodeReplace') -> None:
|
||||||
"""Register a node replacement mapping."""
|
"""Register a node replacement mapping."""
|
||||||
from server import PromptServer
|
from server import PromptServer
|
||||||
PromptServer.instance.node_replace_manager.register(node_replace)
|
PromptServer.instance.node_replace_manager.register(node_replace)
|
||||||
|
|
||||||
node_replacement: NodeReplacement
|
|
||||||
|
|
||||||
class Execution(ProxiedSingleton):
|
class Execution(ProxiedSingleton):
|
||||||
async def set_progress(
|
async def set_progress(
|
||||||
self,
|
self,
|
||||||
@@ -82,8 +85,6 @@ class ComfyAPI_latest(ComfyAPIBase):
|
|||||||
image=to_display,
|
image=to_display,
|
||||||
)
|
)
|
||||||
|
|
||||||
execution: Execution
|
|
||||||
|
|
||||||
class ComfyExtension(ABC):
|
class ComfyExtension(ABC):
|
||||||
async def on_load(self) -> None:
|
async def on_load(self) -> None:
|
||||||
"""
|
"""
|
||||||
|
|||||||
@@ -16,7 +16,7 @@ async def register_replacements():
|
|||||||
|
|
||||||
async def register_replacements_longeredge():
|
async def register_replacements_longeredge():
|
||||||
# No dynamic inputs here
|
# No dynamic inputs here
|
||||||
await api.NodeReplacement().register(node_replace.NodeReplace(
|
await api.node_replacement.register(node_replace.NodeReplace(
|
||||||
new_node_id="ImageScaleToMaxDimension",
|
new_node_id="ImageScaleToMaxDimension",
|
||||||
old_node_id="ResizeImagesByLongerEdge",
|
old_node_id="ResizeImagesByLongerEdge",
|
||||||
old_widget_ids=["longer_edge"],
|
old_widget_ids=["longer_edge"],
|
||||||
@@ -31,7 +31,7 @@ async def register_replacements_longeredge():
|
|||||||
|
|
||||||
async def register_replacements_batchimages():
|
async def register_replacements_batchimages():
|
||||||
# BatchImages node uses Autogrow
|
# BatchImages node uses Autogrow
|
||||||
await api.NodeReplacement().register(node_replace.NodeReplace(
|
await api.node_replacement.register(node_replace.NodeReplace(
|
||||||
new_node_id="BatchImagesNode",
|
new_node_id="BatchImagesNode",
|
||||||
old_node_id="ImageBatch",
|
old_node_id="ImageBatch",
|
||||||
input_mapping=[
|
input_mapping=[
|
||||||
@@ -42,7 +42,7 @@ async def register_replacements_batchimages():
|
|||||||
|
|
||||||
async def register_replacements_upscaleimage():
|
async def register_replacements_upscaleimage():
|
||||||
# ResizeImageMaskNode uses DynamicCombo
|
# ResizeImageMaskNode uses DynamicCombo
|
||||||
await api.NodeReplacement().register(node_replace.NodeReplace(
|
await api.node_replacement.register(node_replace.NodeReplace(
|
||||||
new_node_id="ResizeImageMaskNode",
|
new_node_id="ResizeImageMaskNode",
|
||||||
old_node_id="ImageScaleBy",
|
old_node_id="ImageScaleBy",
|
||||||
old_widget_ids=["upscale_method", "scale_by"],
|
old_widget_ids=["upscale_method", "scale_by"],
|
||||||
@@ -56,7 +56,7 @@ async def register_replacements_upscaleimage():
|
|||||||
|
|
||||||
async def register_replacements_controlnet():
|
async def register_replacements_controlnet():
|
||||||
# T2IAdapterLoader → ControlNetLoader
|
# T2IAdapterLoader → ControlNetLoader
|
||||||
await api.NodeReplacement().register(node_replace.NodeReplace(
|
await api.node_replacement.register(node_replace.NodeReplace(
|
||||||
new_node_id="ControlNetLoader",
|
new_node_id="ControlNetLoader",
|
||||||
old_node_id="T2IAdapterLoader",
|
old_node_id="T2IAdapterLoader",
|
||||||
input_mapping=[
|
input_mapping=[
|
||||||
@@ -66,28 +66,28 @@ async def register_replacements_controlnet():
|
|||||||
|
|
||||||
async def register_replacements_load3d():
|
async def register_replacements_load3d():
|
||||||
# Load3DAnimation merged into Load3D
|
# Load3DAnimation merged into Load3D
|
||||||
await api.NodeReplacement().register(node_replace.NodeReplace(
|
await api.node_replacement.register(node_replace.NodeReplace(
|
||||||
new_node_id="Load3D",
|
new_node_id="Load3D",
|
||||||
old_node_id="Load3DAnimation",
|
old_node_id="Load3DAnimation",
|
||||||
))
|
))
|
||||||
|
|
||||||
async def register_replacements_preview3d():
|
async def register_replacements_preview3d():
|
||||||
# Preview3DAnimation merged into Preview3D
|
# Preview3DAnimation merged into Preview3D
|
||||||
await api.NodeReplacement().register(node_replace.NodeReplace(
|
await api.node_replacement.register(node_replace.NodeReplace(
|
||||||
new_node_id="Preview3D",
|
new_node_id="Preview3D",
|
||||||
old_node_id="Preview3DAnimation",
|
old_node_id="Preview3DAnimation",
|
||||||
))
|
))
|
||||||
|
|
||||||
async def register_replacements_svdimg2vid():
|
async def register_replacements_svdimg2vid():
|
||||||
# Typo fix: SDV → SVD
|
# Typo fix: SDV → SVD
|
||||||
await api.NodeReplacement().register(node_replace.NodeReplace(
|
await api.node_replacement.register(node_replace.NodeReplace(
|
||||||
new_node_id="SVD_img2vid_Conditioning",
|
new_node_id="SVD_img2vid_Conditioning",
|
||||||
old_node_id="SDV_img2vid_Conditioning",
|
old_node_id="SDV_img2vid_Conditioning",
|
||||||
))
|
))
|
||||||
|
|
||||||
async def register_replacements_conditioningavg():
|
async def register_replacements_conditioningavg():
|
||||||
# Typo fix: trailing space in node name
|
# Typo fix: trailing space in node name
|
||||||
await api.NodeReplacement().register(node_replace.NodeReplace(
|
await api.node_replacement.register(node_replace.NodeReplace(
|
||||||
new_node_id="ConditioningAverage",
|
new_node_id="ConditioningAverage",
|
||||||
old_node_id="ConditioningAverage ",
|
old_node_id="ConditioningAverage ",
|
||||||
))
|
))
|
||||||
|
|||||||
2
nodes.py
2
nodes.py
@@ -2264,6 +2264,7 @@ async def load_custom_node(module_path: str, ignore=set(), module_parent="custom
|
|||||||
if not isinstance(extension, ComfyExtension):
|
if not isinstance(extension, ComfyExtension):
|
||||||
logging.warning(f"comfy_entrypoint in {module_path} did not return a ComfyExtension, skipping.")
|
logging.warning(f"comfy_entrypoint in {module_path} did not return a ComfyExtension, skipping.")
|
||||||
return False
|
return False
|
||||||
|
await extension.on_load()
|
||||||
node_list = await extension.get_node_list()
|
node_list = await extension.get_node_list()
|
||||||
if not isinstance(node_list, list):
|
if not isinstance(node_list, list):
|
||||||
logging.warning(f"comfy_entrypoint in {module_path} did not return a list of nodes, skipping.")
|
logging.warning(f"comfy_entrypoint in {module_path} did not return a list of nodes, skipping.")
|
||||||
@@ -2276,7 +2277,6 @@ async def load_custom_node(module_path: str, ignore=set(), module_parent="custom
|
|||||||
node_cls.RELATIVE_PYTHON_MODULE = "{}.{}".format(module_parent, get_module_name(module_path))
|
node_cls.RELATIVE_PYTHON_MODULE = "{}.{}".format(module_parent, get_module_name(module_path))
|
||||||
if schema.display_name is not None:
|
if schema.display_name is not None:
|
||||||
NODE_DISPLAY_NAME_MAPPINGS[schema.node_id] = schema.display_name
|
NODE_DISPLAY_NAME_MAPPINGS[schema.node_id] = schema.display_name
|
||||||
await extension.on_load()
|
|
||||||
return True
|
return True
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
logging.warning(f"Error while calling comfy_entrypoint in {module_path}: {e}")
|
logging.warning(f"Error while calling comfy_entrypoint in {module_path}: {e}")
|
||||||
|
|||||||
Reference in New Issue
Block a user