Skip to content

plugin

Plugin helpers.

ComfyUIAutoCreator

Bases: AutoCreator

Generic ComfyUI autocreator to extend.

Source code in client/ayon_comfyui/api/plugin.py
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
class ComfyUIAutoCreator(AutoCreator):
    """Generic ComfyUI autocreator to extend."""

    skip_discovery = True
    settings_category = "comfyui"

    def get_instance_attr_defs(self):
        return []

    def collect_instances(self):
        for instance_data in list_instances():
            # Process only instances that were created by this creator
            creator_id = instance_data.get("creator_identifier")
            if creator_id == self.identifier:
                # Create instance object from existing data
                instance = CreatedInstance.from_existing(instance_data, self)
                # Add instance to create context
                self._add_instance_to_context(instance)

    def update_instances(self, update_list: list[tuple[CreatedInstance, Any]]):
        stub = QRPCManager.get_instance().stub
        updated = [
            instance.data_to_store() for instance, _changes in update_list
        ]
        stub.update_instance(updated)

    def create(self, options=None):
        stub = QRPCManager.get_instance().stub
        existing_instance = None
        for instance in self.create_context.instances:
            if instance.product_type == self.product_type:
                existing_instance = instance
                break

        context: CreateContext = self.create_context
        project_name = context.get_current_project_name()
        folder_path = context.get_current_folder_path()
        task_name = context.get_current_task_name()
        host_name = context.host_name

        if existing_instance is None:
            existing_instance_folder = None
        else:
            existing_instance_folder = existing_instance["folderPath"]

        if existing_instance is None:
            folder_entity = ayon_api.get_folder_by_path(
                project_name, folder_path
            )
            task_entity = ayon_api.get_task_by_name(
                project_name, folder_entity["id"], task_name
            )
            product_name = self.get_product_name(
                project_name,
                folder_entity,
                task_entity,
                self.default_variant,
                host_name,
            )
            data = {
                "folderPath": folder_path,
                "task": task_name,
                "variant": self.default_variant,
                "productName": product_name,
                "projectName": project_name,
            }
            data.update(
                self.get_dynamic_data(
                    project_name,
                    folder_entity,
                    task_entity,
                    self.default_variant,
                    host_name,
                    None,
                )
            )

            new_instance = CreatedInstance(
                self.product_type, product_name, data, self
            )
            self._add_instance_to_context(new_instance)
            stub.update_instance(new_instance.data_to_store())

        elif (
            existing_instance_folder != folder_path
            or existing_instance["task"] != task_name
        ):
            folder_entity = ayon_api.get_folder_by_path(
                project_name, folder_path
            )
            task_entity = ayon_api.get_task_by_name(
                project_name, folder_entity["id"], task_name
            )
            product_name = self.get_product_name(
                project_name,
                folder_entity,
                task_entity,
                self.default_variant,
                host_name,
            )
            existing_instance["folderPath"] = folder_path
            existing_instance["task"] = task_name
            existing_instance["productName"] = product_name
            existing_instance["projectName"] = project_name

ComfyUICreator

Bases: Creator

Source code in client/ayon_comfyui/api/plugin.py
22
23
24
25
26
27
28
29
class ComfyUICreator(Creator):
    skip_discovery = True
    settings_category = "comfyui"

    @property
    def stub(self) -> RPCStub:
        """Return stub stored on QRPCManager."""
        return QRPCManager.get_instance().stub

stub property

Return stub stored on QRPCManager.

ComfyUILoader

Bases: LoaderPlugin

Base for loader plugins.

Source code in client/ayon_comfyui/api/plugin.py
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
class ComfyUILoader(LoaderPlugin):
    """Base for loader plugins."""

    hosts: ClassVar[list[str]] = ["comfyui"]
    settings_category = "comfyui"

    @property
    def stub(self) -> RPCStub:
        """Return stub stored on QRPCManager."""
        return QRPCManager.get_instance().stub

    @property
    def comfy_url(self) -> RPCStub:
        """Return url stored on QRPCManager."""
        return QRPCManager.get_instance().comfy_url

comfy_url property

Return url stored on QRPCManager.

stub property

Return stub stored on QRPCManager.