2024-03-03

【ComfyUI ノードを作ろう #1】とりあえず動くノードを作る!ノード名の付け方

ComfyUIのノードを自作するシリーズ1回目。とりあえず自作ノードの読み込みと名前に関する混乱しやすい仕組みを解説。

Article Image

ComfyUIでノードを作るシリーズ

このシリーズはComfyUIでノードを自作するシリーズ。

詳しく解説するのが目的ではなく、とにかく早く、簡単に作ることを目的とする。

前提条件

  • pythonの基礎は習得している
  • ComfuUIの使い方は解説しない

ディレクトリとファイルの作成

まずは次のディレクトリに好きな名前のディレクトリを作る。

\ComfyUI_windows_portable\ComfyUI\custom_nodes\

今回は適当にComfyUI-noob-nodesにした。

ここにファイルを作っていく。

__init__.py

ノードファイル

次のコードを記述した__init__.pyファイルを作成する

from .nodes import NODE_CLASS_MAPPINGS, NODE_DISPLAY_NAME_MAPPINGS
__all__ = ['NODE_CLASS_MAPPINGS', 'NODE_DISPLAY_NAME_MAPPINGS']

.nodesの箇所は次のファイル名。自由に名前を変更して良い。

基本は変えなくてOK。

ここにインストールされているライブラリを管理するコードを入れているノードを見かけるが、ひとまずここはテンプレ的に覚えておけば良いと思う。

nodes.py

サンプルとして次のコードを作成した。

まずはコピペして使ってみてほしい。

class aaaaa:
    @classmethod
    def INPUT_TYPES(s):
        return {"required": {"myINT": ("INT",{"forceInput": True})}}

    RETURN_TYPES = ("INT",)
    FUNCTION = "go"
    CATEGORY = "test"

    def go(self, myINT):
        return (myINT,)

NODE_CLASS_MAPPINGS = {
    "bbbbb": aaaaa,
}

NODE_DISPLAY_NAME_MAPPINGS = {
    "bbbbb": "ccccc",
}

これをコピペでComfyUIを実行(既に起動している場合は再起動)すればひとまずノードが読み込まれる。

ノード名の付け方

この記事ではちょっと混乱しやすいノード名がどうなっているのかを先に解説してしまう。

どうせ後で苦労する箇所。

揃える箇所

class aaaaa:

今回は解説しないがaaaaaになっているところにノードが行なう処理を実際に書いていく。

とにかくここではクラス名をaaaaaと定義したことだけ理解できればOK。

この下からノードに名前をつけていく。

NODE_CLASS_MAPPINGS

ここのキー名はノードにつけたい名前、値にノードの中身を記述するクラス名を記述

つまりキー名:bbbbbは自由に設定してよく、値:aaaaaは上のクラス名と一致させなければならない。

NODE_DISPLAY_NAME_MAPPINGS

キー名は上で設定したものと同じもので合わせる。

つまりbbbbb以外にしてしまうと意味がない。

cccccになっている箇所には表示用に自由な名前を設定してよい。なんなら日本語でも使用できることを確認。

つまりどういうこと?

つまるところ実際にComfyUIをユーザーが使う上ではノードに名前が2個ついているようなイメージになるはず。

私も使用する側で少し混乱していた。

で、これがどういう意味があるかまだ混乱していると思うので実際にComfyUI上で出したノードを確認する。

右クリックから出すノード名

まず、右クリックでノードを出そうとした場合

classの中で定義したCATEGORY = “test”の中に自作のノードが入っている。

更にその中に③で指定したcccccが入る。

つまりここはノードのクラス名に関係なく自由に設定できるということになる。

ノード名の付け方

ノード検索で出す場合

ノードを検索で出す場合は

検索から出るノード

キー名のbbbbbでも、表示名のcccccでもどちらでもヒットするようになっている。

たしかこれはいつぞやのComfyのアップデートで入った調整で、以前はキー名でしか反応しなかった。

ノードの外観

実際ノードを出した時、名前はcccccになる。

実際のノード外観

しかしながら右クリックメニューのトップはbbbbbになる。

今回はここまで

今回はclassの中身(ノードの中身)は一切考えないところで解説した。

まず覚えてほしいのは

  • 自作ノード自体は非常に簡単なスクリプトで追加できる
  • ノード名の付け方が混乱しやすい

ということを覚えてもらえればと思う。

ちょっとここが複雑で絶対にすぐ忘れるので暗記するのではなくこの記事をメモ書き代わりに再度開いてもらえればと思う。

まだこれだけではまるで使い物にならないので、シリーズとして続く。



この記事をシェア


謎の技術研究部 (謎技研)