ComfyUI はノードベースプログラミングと呼ばれることがありますが、基本的には、モデルやプロンプトを KSampler に入れると画像が出力されるだけの、一本道でシンプルなものです。

しかし、少し複雑なパイプラインを組みたいときもあります。

  • 入力画像が小さければアップスケール処理を挟む。
  • 画像を解析して、手が崩れていそうなら後処理を入れる。
  • プロンプトに特定の文字が含まれていたら、別のモデルや設定に切り替える

このような「条件によって処理を変える」仕組みを、プログラミングでは条件分岐と呼びますが、ComfyUI にも、この条件分岐に近いことをするための基本的なノードがあります。

条件分岐の基本

Switch.json

Switch で切り替える

条件分岐の基本になるのは Switch ノード です。

2 つ入力のうち、どちらを出力するかを切り替えるものです。

これを使えば、条件が合っているときは a、そうでないときは b を出力する、という使い方ができそうです。

Switch には Boolean を渡す

Switch において、2 つの入力のうち、どちらを出力するのか決めるための値が Boolean です。

Boolean は、truefalse(0 or 1)のどちらかしか持たないシンプルな型で、トグルスイッチのようなものです。

もちろん手動でポチポチしても切り替えられますが、それでは面白くないですね。

プログラミング的に処理を切り替えるというのは、つまり、この Boolean をどのように作るか?という話になってきます。


Boolean を作る方法

プログラミングの世界では、Boolean を作る方法はいくらでもありますが、ここでは、ComfyUI のコアノードで扱える、汎用的なものをいくつか見てみましょう。

Math Expression

単純な計算 でも使ったものですが、このノードを使えば、数値を比べて Boolean を作ることができます。

例えば以下のように書いてみましょう。

Math_Expression.json
a == 20

a に 1820 といった数値を入力した int ノードを繋いでみましょう。 ご覧の通り、20 つまり、設定した値と同じになったときだけ、true と表示されますね。

もっとたくさんの数値、変数を使うこともできます。

0 < a <= b * 100

この式なら、a0 より大きく、b * 100 以下のとき true になります。

他にも以下のような比較演算子が使えますね。

a == b  # 等しい
a != b  # 等しくない
a > b   # a が b より大きい
a >= b  # a が b 以上
a < b   # a が b より小さい
a <= b  # a が b 以下

Compare Text

文字列から Boolean を作るには、Compare Text ノードが使えます。

機能はかなりシンプルで、2 つの string を比較し、その結果を Boolean として出力します。

たとえば、入力されたテキストが Hello と一致するか、Hello から始まっているか / 終わっているか、といった判定ができます。

Compare_Text.json

string_astring_b を比較し、条件に合っていれば true、合っていなければ false を出力します。

  • mode
    • Starts With: string_astring_b から始まっているか
    • Ends With: string_astring_b で終わっているか
    • Equal: string_astring_b が同じか
  • case_sensitivetrue にすると、大文字・小文字を区別します。

MLLM

少しリッチな方法ですが、MLLM を使って、Boolean を作り出すこともできます。

Boolean というのは true / false で表現される、という話をしましたが、実はこれは数字の 1 / 0 でも良いのです。

つまり、MLLM に対して、「〇〇だったら 1、そうでないときは 0 と出力して」 といえば、それを Boolean に変換することができるんですね。

Qwen3.5_4b.json
  • ここでは TextGenerate ノードを使い、Qwen 3.5 4B を使用しています。
  • 少しややこしいですが、MLLM の出力はテキスト、つまり string なので、それを int に変換し、それをさらに Boolean に直します。

MLLM を使うと、単なる数値やテキスト比較に比べて、遥かに柔軟で複雑なことができます。

  • この画像に映っている人の人数は?
  • このプロンプトに合うのはアニメ系モデル?実写系モデル?
  • 出力画像の品質は良い?悪い?

複数条件を組み合わせる

「画像の高さが 1000px 以上 かつ 横幅が 500px 未満」というように、複数の条件を組み合わせたい場合があります。

そのような場面で使うのが 論理演算子 です。

AND / OR / NOT

論理演算子には AND / OR / NOT の三種類があります。

複数の Boolean 入力があったとき、その組み合わせによって truefalse を出力します。

AND_OR_NOT.json
  • AND: 全てが true のときだけ true
  • OR: どれかが true なら true
  • NOT: truefalse を反転する

もちろん、これらは組み合わせても構いません。

AND に NOT を組み合わせれば、2 つの入力が true のとき、false を出力する、なんてことができるわけですね。

難しく考える必要はありません。実際に使って動きを見てみましょう。


実践例

画像が縦長なら 90 度回転

Rotate_If_Portrait.json
  1. Get Image Size で画像のサイズを取得
  2. 縦長のときは、width < heighttrue になります
  3. true のとき、入力画像を Rotate Image で回転させたものを出力します

女性が映っていれば男性に変える

女性が映っていれば男性に変え、それ以外の場合は人物をすべて消します。

Switch_MLLM_Flux.2-Klein-9B.json
  1. MLLM に画像を見せて、女性が映っていれば 1、そうでなければ 0 を出力させます
  2. true のときは、女性を男性に変えるプロンプト、false のときは、人物を除去するプロンプトに切り替えます
  3. 画像とプロンプトを Flux.2 Klein 9B に渡し、画像編集させます