# 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