2024-02-26: Get/Setノードとどっち使えば良い? の項を追加
ComfyUIはノードの線は右へ行ったり左へ行ったりすることがよくある。
また、ちょっと複雑な処理をするとノード数も無駄に多くなる。
特にVAEやCheckpointのように一つのノードのピンを何度も再利用するケースが無駄に感じる
Use Everywhere
を使うとこれをめちゃくちゃスマートにまとめられるので紹介する。
KJNodes
を始め、いくつかのカスタムノードにGet/Set
ノードが存在する。
これらはプログラミング的にSet
で定数として保存しておきGet
でそれを読み込むというノードで線のごちゃごちゃを解決するために作用する。
しかしながらこれらは同じインプットがたくさんある時に結局ノードがごちゃごちゃするデメリットがある。
Use Everywhere
は言い換えれば各ピンのデフォルト値を決めるノード。
したがって何度も再利用するケースで更にスマートな外観にできる。
ピンが繋がなくても良いというちょっと特殊なノードなので理解が難しいかもしれないが、この記事を最後まで読んでもらえればわかると思う。
ComfyUI Manager
からはそのままUse Everywhere (UE Nodes)
で検索。
GitHubのリンク:GitHub - chrisgoringe/cg-use-everywhere
例えば1度小さい画像で生成して、更にそれをアップスケールする場合。
基本的なノードのつなぎ方は次になる。
一部省略しているが、それでもチェックポイントやClip Text周りからは何本もの線が出てしまう。
なんと次のようになる
確かに見やすくなっている。が...
何度も言うが実際はKSampler間にはアップスケール系のノードが入るが省略している
そう、このUse Everywhere (UE Nodes)
なのだが、省略パワーがすごすぎてちゃんと動作原理を理解していないと何が起こっているのかさっぱりわからなくなる
逆に笑ってしまう。
まずは基本の基本。
Anything Everywhere
ノードを「使わない」例を先に出すと
これを変化させて、チェックポイントをKSampler
に繋がないでUse Everywhere
ノードに繋いで見る
KSampler
のmodel
には何も繋がない
ここで気づいただろうか?
KSampler
のmodel
のピンの表示が変わっている
ここが光っていればAnything Everywhere
ノードから見えない線で繋がっている
なんでこういう接続になるのかわからないと思うので、これを先に解説する。
コレを見ると「あれ、じゃぁ何個もmodelのインプットがあるノードがある場合どうなるの?」となるだろう
例を見ると
model
の入力があるノードには全て繋がっている。
つまり1個Anything Everywhere
を繋げるだけで、画面上のすべてのインプットに自動で接続される。
そうすると今度はmodel
を分けたい場合どうするか。
これは簡単で、別途用意して直接繋げばOKだ。
この下側のLoad Checkpoint
もAnything Everywhere
化したい場合、後の項で紹介するAnything Everywhere?
ノードを使用する。
Anything Everywhere
の他にAnything Everywhere3
というノードがある。
これは単純にAnything Everywhere
3個分を一つにまとめただけのノードだ。
Anything EveryWhere?
(最後にクエスチョンマーク)のノードを使うと自動でつなぐピンを限定できる
このノードは入力蘭が2つあり、ここを指定してやらないといけないので解説する。
ここはノードのタイトルの一部を入れる(正規表現)
例えばKSampler
と入れてやるとノードの表示名(タイトル)にKSampler
と入っているノードにしか繋がらなくなる。
したがって、上の例のようにタイトルがFaceDetailer
になっているノードには繋がらなくなる。
regex
とは正規表現を意味する。
正規表現はプログラミングの領域に入るので細かい表記法は別サイトに譲るが、タイトルの途中にKSampler
と入っていればヒットしてしまうので注意
タイトルの中程にKSampler
が入っているので、この場合は繋がってしまう。
正規表現を覚えると「タイトルに数字が入っているものだけ」とか「aが3個以上連続するものだけ」のような複雑なものにもヒットする。
ここを勉強すると良いかも知れない。
input_regex
を使用すると入力ピンの名前を限定できる
これは次の項で詳しく解説する。
次のケースは最初に躓くポイントだと思う。
ポジティブとネガティブのプロンプトをClip Text Encode
で作成しAnything Everywhere
に入れた。
しかし、KSampler
の入力ピンを見ると光ってない=繋がってない。
これはKSampler
自体にconditioning
という同じ入力ピンが2本あるから。
どっちに繋げばよいかはAnything Everywhere
が勝手に決める訳にはいかず、ユーザーが明示する必要がある箇所になる。
そこで上で紹介したAnything Everywhere?
のinput_regex
を使う。
ここでAnything Everywhere?
のinput_regex
を使うことで、同じconditioning
の入力ピンがあってもその名前でつなぐピンを明示できる
これを使えばポジティブとネガティブをどちらにつなぐべきか明示できるため正しく接続される。
上でプロンプトのつなぎ分けを紹介したわけだが... 実はそもそもこれ専用のノードがある。
それがPrompts Everywhere
これははじめからポジティブネガティブを分けてくれるノードで、わざわざ上のようなAnything Everywhere?
を使ったノードをくまなくても良い。
上のピンがポジティブ、下がネガティブになるようだ
ここはconditioning
を入れるところであってテキストを直接入れても繋がらないので注意。
Seed値のEverywhereノードもある。
ただし、これを使う場合はKSampler
を右クリックしてメニューを出し、seed
とcontrol_after_generate
ピンをConvert
しておく必要があるので注意。
コンバートすれば直接入力をインプットピンに変更できる。
現在control_afeter_generate
がうまく接続できないのを確認。これはConvert
する必要がないかも?
要調査
Everywhere系ノードを使っていると、逆に線が省略されすぎてどこから出たピンかわからなくなることが有る。
こういったときにはなにもないところを右クリック > Show UE links
をクリックしてみると良い。
最近このノードを使った海外のワークフローをよく見かけるので記事にしてみた。
他にも線をスマートにするカスタムノードはいくつも有ると思うが一つの選択肢として持っておくと良いと思う。