フォルダの画像をまとめてワークフローに通すとき、横向きのものと縦向きのものが混ざっています。すべてを1つの形にリサイズすると、半分がつぶれてしまいます。解決策は、各画像の向きを確認して適切なサイズを選ぶ、小さなロジックのブール値スイッチです。オンかオフか、AかBかを選びます。
アーティストの私にとって、ブール値は新しい概念で、理解するのに時間がかかりました。そのため、このガイドでは基礎から説明します。AIモデルは一切使わず、純粋なロジックで、より大きな3Dからコンセプトアートまでの自動化パイプラインの一部です。2つのバージョンを紹介します。画像を切り替えるもの(分かりやすい)と、数値を切り替えるもの(より速い)です。
ポイント
- Image Aspect Ratio(WAS Node Suite)は、横向きなら1、縦向きなら0を出力します。
- If/elseノードを通します。スイッチは直接は受け付けません。
- バージョン1: すべての画像を両方向にリサイズし、Image Input Switchに正しいほうを選ばせます。
- バージョン2: 幅と高さの数値だけを、2つのNumber Input Switchで切り替えます。より速く、私が使っているのはこちらです。
- 正方形の画像は扱いません。すべて正方形なら、これは不要です。
共通の最初の部分:向きを検出する
どちらのバージョンも、同じように始まります。
- (WAS Node Suiteの)Load Image Batchがフォルダを指定し、incremental imageモードで、実行のたびに次の画像を読み込んで延々とループします。テストでは3枚だけのフォルダを使い、素早く一巡できるようにしました。
- (同じくWASの)Image Aspect Ratioが画像を読み取って
is_landscape_boolを出力します。横向きなら1、縦向きなら0です。これがブール値です。 - (rgthreeの)Display Anyノードが、1か0の値を表示します。トラブルシューティングと、仕組みを人に見せるためだけのものです。
- If/elseノードが値を渡します。アスペクト比の出力をスイッチのブール入力に直接接続することはできません。If/elseを通すと動きます。
バージョン1:画像を切り替える
何が起きているかを見るには、最も簡単な方法です。
- 入ってくる各画像を2回リサイズします。1回は横向きのサイズに、もう1回は強制的に縦向きのサイズにします。FluxとSDXLに合うサイズを使います。
- 両方を(WASの)Image Input Switchに接続します。横向きをimage_a、縦向きをimage_b、ブール値をスイッチに接続します。
- ブール値が1(横向き)なら、スイッチは画像Aを、0(縦向き)なら画像Bを出力します。
スイッチの後のプレビューで、正しい形とサイズになったか確認できます。
同じコツは、画像生成以外でも使えます。何千枚もの写真を、横向きのフォルダと縦向きのフォルダに振り分けたいですか?このスイッチに、2つの保存ノードを付けるだけです。
欠点は、すべての画像が2回リサイズされ、両方のコピーがメモリに保持されることです。毎回の実行に時間がかかるので、バージョン2を作りました。
バージョン2:数値を切り替える
画像を切り替える代わりに、サイズだけを切り替えます。余計なものはメモリに保持されません。このバージョンには専用の短い動画があります:パート2。
- 2つのConstant Numberノードがサイズを保持します。長辺用の1920と、短辺用の1088です。
- 幅用と高さ用の2つの(WASの)Number Input Switchを、同じブール値で動かします。
- 横向き(1): 幅のスイッチは数値A(1920)を、高さのスイッチは1088を選びます。縦向き(0): 逆になり、幅1088、高さ1920を選びます。
- 選ばれた幅と高さがimage resizeに渡され、ワークフローの残りに進みます。
画像を切り替えるより読みにくいものの、堅牢で壊れず、最後のプレビューで常にうまく動いているかが分かります。どんな枚数の画像でも、どちらの向きでもSDXLやFluxが得意とする最大のサイズにリサイズして通せます。
画像以外にも
ブール値スイッチは、ComfyUIのあらゆる用途の構成要素です。入力したテキスト、説明、プロンプトに基づいて切り替えることもできます。一度理解すれば、多くの自動化への道が開けます。もっと効率的な方法をご存知なら、動画のコメントで教えていただけると嬉しいです。
このスイッチは、それが入力する深度の構成とともに、私のPatreonにある、より大きなワークフローのパッケージの一部です。その構成は、VRAM 4GBのGPUでスケッチからアートへで説明しています。
動画版を見る (4:50)
上の内容はすべて動画でも説明しています。画面を見ながら進めたい方はこちらをどうぞ。 動画は英語です。
よくある質問
ComfyUIは画像が横向きか縦向きかをどうやって知るのですか?
WAS Node SuiteのImage Aspect Ratioノードが、ブール値を出力します。横向きなら1(true)、縦向きなら0(false)です。この値を使って、画像や数値を切り替えます。
If/elseノードが必要なのはなぜですか?
アスペクト比の出力は、スイッチのブール入力に直接接続できません。If/elseノードを通すと、スイッチが受け付ける値に変換されます。
正方形の画像はどうなりますか?
この構成では扱えません。画像が正方形なら、スイッチ自体が不要です。
