# ComfyUI 模組開發 - 內建的節點放在nodes.py檔案 - 自定義的節點放在custom_nodes資料夾 - 用一個class定義一個node ## example node中文註解 ```python! class Example: """ 範例節點 類別方法 ------------- INPUT_TYPES (dict): 告訴主程式節點的輸入參數。 屬性 ---------- RETURN_TYPES (`tuple`): 輸出tuple中每個元素的類型。 RETURN_NAMES (`tuple`): 可選: 輸出tuple中每個輸出的名稱。 FUNCTION (`str`): 進入點方法的名稱。舉例來說,若 `FUNCTION = "execute"` 就會執行Example().execute()。 OUTPUT_NODE ([`bool`]): 此節點是否為圖中輸出結果/圖像的輸出節點。SaveImage節點可作為範例。 後端會遍歷這些輸出節點並試圖執行這些節點的上級(若這些上級圖有正確連接)。 若不存在則預設為False。 CATEGORY (`str`): 節點在介面中所屬的類別。 execute(s) -> tuple || None: 進入點方法。此方法的名稱必須與 `FUNCTION` 屬性的值相同。 舉例來說,若 `FUNCTION = "execute"` 則此方法的名稱必須為 `execute`,若 `FUNCTION = "foo"` 則名稱必須為 `foo`。 """ def __init__(self): pass @classmethod def INPUT_TYPES(s): """ 回傳一個包含所有輸入欄位設定的字典。 部分可能的類型(string): "MODEL", "VAE", "CLIP", "CONDITIONING", "LATENT", "IMAGE", "INT", "STRING", "FLOAT"。 "INT", "STRING" 或 "FLOAT" 這些輸入類型在節點上屬於特殊欄位。 類型可以是陣列以供選擇。 Returns: `dict`: - 鍵 input_fields_group (`string`): 可為required、hidden或optional。 一個節點類別必須具有 `required` 屬性。 - 值 input_fields (`dict`): 包含輸入欄位設定: * 鍵 欄位名稱 (`string`): 進入點方法參數的名稱。 * 值 欄位設定 (`tuple`): + 第一個值為以字串表示的欄位類型或用於選擇的陣列。 + 第二個值為 "INT", "STRING" 或 "FLOAT"的設定。 """ return { "required": { "image": ("IMAGE",), "int_field": ("INT", { "default": 0, "min": 0, # 最小值 "max": 4096, # 最大值 "step": 64, # 滑動條的步長 "display": "number" # 僅影響外觀: 以數字或滑動條顯示 }), "float_field": ("FLOAT", { "default": 1.0, "min": 0.0, "max": 10.0, "step": 0.01, # 該值表示預設四捨五入的精度。 可以設定為False來禁用四捨五入。 "round": 0.001, "display": "number"}), "print_to_screen": (["enable", "disable"],), "string_field": ("STRING", { # 若想讓此欄位看起來像ClipTextEncode節點一樣,設為True "multiline": False, "default": "Hello World!" }), }, } RETURN_TYPES = ("IMAGE",) # RETURN_NAMES = ("image_output_name",) FUNCTION = "test" # OUTPUT_NODE = False CATEGORY = "Example" def test(self, image, string_field, int_field, float_field, print_to_screen): if print_to_screen == "enable": print(f"""Your input contains: string_field aka input text: {string_field} int_field: {int_field} float_field: {float_field} """) # 對圖像做一些處理,在範例中我們反轉圖像的顏色 image = 1.0 - image return (image,) # 一個包含所有要匯出的節點以及名稱的字典 # NOTE: 名稱在全域中需為唯一值 NODE_CLASS_MAPPINGS = { "Example": Example } # 一個包含所有節點可讀名稱的字典 NODE_DISPLAY_NAME_MAPPINGS = { "Example": "Example Node" } ``` ## 參考 https://quail.ink/op7418/p/create-custom-node-in-5-minutes-comfyui-custom-node-getting-started-guide https://github.com/chrisgoringe/Comfy-Custom-Node-How-To/wiki/aaa_index