Gemini 1.5 Proで「ComfyUI Custom Node リファレンスドキュメント」作ってみた🤣🤣🤣(サブ記事)
この記事は下の記事のサブ記事です😉内容は正しくない可能性があります😉
ComfyUI Custom Node リファレンスドキュメント
ComfyUIは、ノードベースのワークフローシステムで、Stable Diffusionなどの深層学習モデルを使った画像生成を簡単に行えるツールです。Custom Nodeを作成することで、ComfyUIの機能を拡張し、独自の処理やワークフローを実現できます。
本ドキュメントは、Custom Nodeを作成するためのガイドラインと、各機能の詳細を解説するリファレンスです。
Custom Nodeの基本構造
ComfyUIのCustom Nodeは、Pythonクラスとして定義します。基本的な構造は以下の通りです。
import torch
import comfy.utils
class MyCustomNode:
@classmethod
def INPUT_TYPES(s):
# ノードの入力タイプを定義
return {"required": {"input_image": ("IMAGE",),
"text": ("STRING", {"default": "a cat"}),
"strength": ("FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}),
}}
RETURN_TYPES = ("IMAGE",) # ノードの出力タイプを定義
FUNCTION = "my_function" # ノードの処理を行う関数の名前
CATEGORY = "image" # ノードのカテゴリを定義
def my_function(self, input_image, text, strength):
# ノードの処理を実装
# 例: 入力画像にテキストを埋め込む処理
# 出力データを返す
return (output_image,)
NODE_CLASS_MAPPINGS = {
"MyCustomNode": MyCustomNode # ノードクラスを登録
}
content_copyUse code with caution.Python
詳細解説
1. クラス定義
MyCustomNode: Custom Nodeの名前です。任意の名前に変更できます。
2. INPUT_TYPESメソッド
このメソッドは、ノードの入力タイプを定義します。
required キーには必須の入力、optional キーには任意の入力を指定します。
各入力は、(type, options) のタプルで定義します。
type: 入力のデータタイプです。IMAGE, STRING, FLOAT, INT, MODEL, CLIP, VAE, LATENT, MASK, CONDITIONING, CONTROL_NET, UPSCALE_MODEL など、ComfyUIで定義されているデータタイプを指定します。
options: 入力に関する追加情報を指定します。
default: デフォルト値
min, max, step: 数値入力の場合の最小値、最大値、ステップ
multiline: 文字列入力の場合に複数行入力を許可するかどうか
dynamicPrompts: 文字列入力の場合に動的プロンプトを許可するかどうか
image_upload: 画像アップロードを許可するかどうか
audio_upload: 音声アップロードを許可するかどうか
例:
@classmethod
def INPUT_TYPES(s):
return {"required": {"input_image": ("IMAGE",),
"text": ("STRING", {"default": "a cat", "multiline": True}),
"strength": ("FLOAT", {"default": 0.5, "min": 0.0, "max": 1.0, "step": 0.01}),
},
"optional": {"mask": ("MASK", )},
}
content_copyUse code with caution.Python
3. RETURN_TYPES属性
この属性は、ノードの出力タイプを定義します。
出力タイプは INPUT_TYPES と同様に、ComfyUIで定義されているデータタイプを指定します。
複数の出力がある場合は、タプルのリストで定義します。
例:
RETURN_TYPES = ("IMAGE", "MASK") # 2つの出力を定義
content_copyUse code with caution.Python
4. FUNCTION属性
この属性は、ノードの処理を行う関数の名前を指定します。
5. CATEGORY属性
この属性は、ノードのカテゴリを指定します。
カテゴリは、ComfyUIのノードメニューに表示されます。
例:
CATEGORY = "image/custom" # カスタムカテゴリを作成
content_copyUse code with caution.Python
6. 処理関数
my_function: FUNCTION 属性で指定した名前の関数です。
ノードの処理を実装します。
引数は INPUT_TYPES メソッドで定義した入力を受け取ります。
戻り値は RETURN_TYPES 属性で定義した出力データのタプルです。
例:
def my_function(self, input_image, text, strength):
# 入力画像にテキストを埋め込む処理
# 出力データを返す
return (output_image,)
content_copyUse code with caution.Python
7. NODE_CLASS_MAPPINGS辞書
この辞書は、ノードクラスをComfyUIに登録するために使用します。
キーにはノードクラスの名前、値にはノードクラス自体を指定します。
実装例
画像の特定色をマスクに変換するノード
import torch
import comfy.utils
class ImageToMaskByColor:
@classmethod
def INPUT_TYPES(s):
return {"required": { "image": ("IMAGE",),
"color": ("INT", {"default": 0, "min": 0, "max": 0xFFFFFF, "step": 1, "display": "color"}),
}}
RETURN_TYPES = ("MASK",)
FUNCTION = "image_to_mask"
CATEGORY = "image/mask"
def image_to_mask(self, image, color):
temp = (torch.clamp(image, 0, 1.0) * 255.0).round().to(torch.int)
temp = torch.bitwise_left_shift(temp[:,:,:,0], 16) + torch.bitwise_left_shift(temp[:,:,:,1], 8) + temp[:,:,:,2]
mask = torch.where(temp == color, 255, 0).float()
return (mask,)
NODE_CLASS_MAPPINGS = {
"ImageToMaskByColor": ImageToMaskByColor
}
content_copyUse code with caution.Python
モデルにLoraを適用するノード
import comfy.utils
import folder_paths
class ApplyLora:
@classmethod
def INPUT_TYPES(s):
return {"required": { "model": ("MODEL",),
"lora_path": ("STRING", {"default": "loras/example.safetensors", "multiline": False}),
"strength": ("FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}),
}}
RETURN_TYPES = ("MODEL",)
FUNCTION = "apply_lora"
CATEGORY = "model"
def apply_lora(self, model, lora_path, strength):
lora_path = folder_paths.get_annotated_filepath(lora_path)
lora = comfy.utils.load_torch_file(lora_path)
model_lora = model.clone()
model_lora.load_lora(lora, strength)
return (model_lora,)
NODE_CLASS_MAPPINGS = {
"ApplyLora": ApplyLora
}
content_copyUse code with caution.Python
まとめ
ComfyUIのCustom Node作成は、Pythonの基本的な知識があれば比較的容易です。ぜひ本ドキュメントを参考に、ComfyUIの機能を拡張するCustom Nodeを作成してみてください。
ここから先は
この記事が気に入ったらチップで応援してみませんか?