Extensions/ComfyUI-QuickMode
ComfyUI Extension

ComfyUI-QuickMode

Custom node pack for embedding draft and production modes within ComfyUI workflows using if-statement-like conditional branching. (Description by CC)

By yanadere0549·Created about a month ago·Updated about a month ago· 0
yanadere0549/ComfyUI-QuickMode
Nodes
On cloudLocal install
Stars0
Updatedabout a month ago
Readme

ComfyUI-QuickMode

draft(下書き・高速反復用)と production(本番・高品質用)を、if 文の分岐と同じ 考え方でワークフロー内に組み込むためのカスタムノードパック。

設計思想

1 つの boolean 条件(production かどうか)をグラフ内に流し、各所の分岐点で 「if ノード」が on_true / on_false のどちらを実行するかを選ぶ。lazy 評価により、 選ばれなかった側の上流サブグラフはスケジュールされず、実際に計算されない。

ノード

QuickMode Condition (QuickModeCondition)

グラフ全体で唯一のスイッチ。production の boolean ウィジェットを持ち、その値と 文字列表現を出力する。

  • 入力: production (BOOLEAN, default False, label_on="production", label_off="draft")
  • 出力: production (BOOLEAN), mode (STRING, "production" または "draft")

production 出力を、分岐させたい箇所の数だけ QuickMode If ノードの condition 入力へ配線する(1 出力から複数入力への分岐配線)。

QuickMode If (QuickModeIf)

任意型を通せる 2 入力の lazy if ノード。condition が true なら on_true、 false なら on_false を出力する。選ばれなかった側の入力は評価されない (未接続でもエラーにならない)。選ばれた側が未接続の場合はエラーを送出する。

  • 入力: condition (BOOLEAN, forceInput — ウィジェットではなくソケット), on_true (any, lazy, optional), on_false (any, lazy, optional)
  • 出力: output

配線例

例1: 解像度の切り替え

  1. QuickMode Condition を 1 つ配置する。
  2. EmptyLatentImage を 2 つ用意する: draft 用 512x512、production 用 1024x1024。
  3. QuickMode If を 1 つ配置し、Condition.productionIf.condition に接続。 If.on_true に production 用(1024x1024)の latent、If.on_false に draft 用(512x512)の latent を接続する。
  4. If.outputKSampler.latent_image に接続する。

例2: steps の切り替え

steps のような数値も同様に、2 系統の値ソース(例えば Primitive ノードや整数を 出力するノード 2 個)を用意し、別の QuickMode Ifon_true / on_false に 接続する。Condition.production をこの Ifcondition にも接続し、 If.output を KSampler の steps 入力(ウィジェットを右クリックして 「Convert widget to input」した後)に接続する。

同じ QuickMode Conditionproduction 出力を、必要な数だけ複数の QuickMode If に配線して構わない(ファンアウト)。すべての If が同じ条件で 連動して切り替わる。

フロントエンド機能

  • アクションバーボタン: キャンバス上部のツールバーにトグルボタンを追加。 クリックでグラフ内の全 QuickMode Condition ノードの production を 一括で反転(draft ⇄ production)。
  • キーボードショートカット: Alt+Q でトグル。
  • トップメニュー: QuickMode メニューから Toggle / Set draft / Set production を実行可能。

切り替えは「その時点のグラフの状態を読んでから反転する」方式(read-then-flip) のため、内部状態とグラフの実際の値がズレることはない。

制限事項

  • トグル操作はルートグラフ (app.graph._nodes) のみを走査する。 サブグラフ内の QuickMode Condition ノードは対象外。

QuickMode Size Preset (QuickModeSizePreset)

EmptyLatentImage を解像度違いで何個も並べる代わりに、GUI からプリセットを 選ぶだけで width / height / latent をまとめて出力する 1 ノード。

  • 入力: preset(プリセット名のドロップダウン、または custom), swap(BOOLEAN, default False, label_on="swap WxH", label_off="normal"。 true にすると width/height を入れ替える), custom_width / custom_heightpresetcustom のときに使用、 INT, 64〜8192, step 8), batch_size(INT, 1〜64)
  • 出力: width (INT), height (INT), latent (LATENT)

プリセット一覧(1024系):

  • 1024x1024 正方形
  • 896x1152 縦長
  • 1152x896 横長
  • 832x1216 縦長+
  • 1216x832 横長+
  • 768x1344 縦長++
  • 1344x768 横長++

プリセット一覧(512 / 1280系。総ピクセル数は約1.64Mで統一):

  • 512x512 正方形
  • 1280x1280 正方形 (1:1)
  • 1040x1552 縦長 (2:3)
  • 1104x1472 縦長 (3:4)
  • 1136x1424 縦長 (4:5)
  • 1472x1104 横長 (4:3)
  • 1520x1056 IMAX (1.43:1)
  • 1616x992 黄金比 (1.618:1)
  • 1648x992 ワイド (1.66:1)
  • 1680x960 ワイド (1.75:1)
  • 1696x960 ワイド (16:9)
  • 1728x928 ワイド (1.85:1)
  • 1952x832 シネスコ (2.35:1)
  • 1968x816 アナモルフィック (2.39:1)

custom を選んだ場合は custom_width / custom_height の値がそのまま 使われる。それ以外の未知の文字列が渡された場合はエラーを送出する。

swap が true の場合、preset または custom から解決した width/height を 入れ替えてから latent を生成する。例えば 9:16 の縦長スマホサイズが欲しい 場合は 1696x960 ワイド (16:9) を選び swap を有効にすると 960x1696 になる。

内部では EmptyLatentImage に解決済み(swap 適用後)の width/height/batch_size を渡して latent を生成しているだけなので、 KSampler 以降の挙動は EmptyLatentImage を直接使う場合と変わらない。

ノード上には全プリセット分のワンクリックボタン(ノード定義から自動生成、 custom を除く)と、swap ウィジェットの値を反転させる「反転 ↕」ボタンが あり、押すとそれぞれ即座に値が切り替わる。custom を使う場合は ドロップダウンから選択する。

配線: width / height は i2i やリサイズ処理のサイズ指定に、latentKSampler.latent_image にそのまま接続する。

QuickMode If との組み合わせ: draft 用に小さめのプリセット (832x1216 縦長+ など)を選んだ QuickMode Size Preset、production 用に 大きめのプリセット(1216x832 横長+ など)を選んだ別の QuickMode Size Preset を用意し、両方の latent 出力を QuickMode Ifon_true / on_false に接続すれば、QuickMode Condition の切り替えだけで 解像度も一括で切り替わる。

テスト

tests/test_nodes.py は torch/comfy 本体なしで nodes.py を直接ロードし、 ノードロジック(Condition の出力、If の lazy 判定・分岐選択・未接続エラー、 AnyType の等価性、Size Preset のプリセット解決・custom モード・不明プリセット 時のエラー・latent 生成への委譲・swap による width/height 入れ替え)を 検証する。