🦊連続処理
一度workflowを作ってしまえば、それを使って画像を何百枚と生成・処理できたりするのがComfyUIの一つの強みといえますが、この連続処理にはいくつか種類があり、扱いが異なります
コンピュータ用語とComfyUIでの扱いは必ずしも一致しないのでご注意を
Queue(キュー)は実行したい処理を順番に並べておく仕組みです
ComfyUIではRunボタンを押すと、処理が実行されるのではなく、順番待ちの行列に追加されます
前の処理が終わると(前に処理がなければ即時に)、次の処理が実行されます
サイドバーのQueue欄で、現在予約されている処理が確認できます
https://gyazo.com/910d01780b3b7e6262aece8a462fe58b
さて、シードガチャのために100枚画像を生成しようと思ったとき、100回Runをクリックしてもいいですが流石に大変です
こんなときはBatch countという機能が役に立ちます
Batch Count
Batch Countは、一度のRunで設定した回数だけ処理をキューに予約する機能です
Batch Countを100にすれば、一回のRunで100回そのworkflowが実行されます
Run横の数値を変更 → Run
https://gyazo.com/5831e4d69bd26c7d5a533fb5781a33ad
ComfyUIでは"全く同じ設定"のworkflowが予約されていたとき、2つめ以降の処理はスキップされます
KSamplerのcontrol_after_generateをrandomizeにするなどして、どこかしらパラメーターを変化させる必要があります
Listを使うと、一つのノードに複数の値を設定することができます
例えばimgae2imageで3枚の画像をリストとして設定した場合
一回のRunで、「画像1 → 処理 → 出力1」「画像2 → 処理 → 出力2」「画像3 → 処理 → 出力3」のように、画像を入れ替えながら処理を繰り返します
Batch Countは「同じ設定を繰り返す」ためのものですが、Listは「入力データを変えながら繰り返す」ためのものです
Listを扱うノード
ComfyUIのデフォルトノードにはListを扱うノードがないため、カスタムノードを入れる必要があります
🪢カスタムノード
複数個の入力をリストに変換する
https://gyazo.com/cfa0611ab881a2d78b7f4d1802303852
Listとして格納した画像をimage2imageのworkflowに入力します
フォルダの画像をListとして読み込む
https://gyazo.com/7881b6467060fc338b21fd699d64095d
directoryに好きなフォルダのパスを入力すると、そのフォルダに入っている画像がListとして読み込まれます
Listからアイテムを取り出す
https://gyazo.com/f87f6570829183c0b2e42e471542881f
上のMakeImageListと違い、画像だけでなくstringでもなんでもリストにできるのでこちらを使ったほうが良いです
リストからN番目のアイテムを取り出します
バッチ (Batch size)
Batch Size は、複数の処理を同時(並列)に行う設定です
「Queue」や「Batch Count」が順番に処理していくものだったのに対し、Batch Sizeはまとめて処理するため、そもそも連続処理とはいえないかもしれません
高速化のための Batch Size
二枚以上の画像を生成したいとき、Batch CountよりBatch Sizeを使ったほうが処理が速くなる可能性があります
table: Batch Count vs Size
3枚生成する場合 動作イメージ 生成時間
Batch Count 3 1枚 → 2枚 → 3枚 を順番に作る 3 × 1回の処理時間
Batch Size 3 1回で 1・2・3枚を同時に作る 1〜1.5回の処理時間
とはいえBatch Sizeには制限があり、VRAMに収まる必要があります
使用VRAM量は「モデルの大きさ × 画像サイズ × Batch Size」に依存します
最近のモデルは非常に大きく、1枚生成するだけでもVRAMがギリギリなことが多いため、あまり使われません
length
注意点として、ここで言う動画生成は「静止画モデルを使っての動画生成」の話であって、「動画生成モデルを使った動画生成ではない」事です。
どういうことかと言うと、これは動画用モデルがオープン化される以前に、静止画モデルで頑張って動画を作るために行われていた試みで使われていた機能だからです。
HunyuanVideoやWan2.1と言った動画モデルはモデルのフロー上で別途フレーム数を指定してるのでこれを増やしても動画が複数同時生成されるだけです(そしてそんな事すると家庭用マシンではまずスペックが足りません⋯) 動画生成モデルについてすべて勘違いしていたnomadoor.icon
マジで申し訳ない
動画生成モデルの肝を並列処理によるものだとばかり思っていたが、現在のDiTベース動画生成モデルが一貫性を持った動画を作れる肝は何なんですか?
私も詳しくは知らないですが、大まかな概念として3次元的なBatch(※注:ここの三次元は我々の住む世界の3次元ではなく、2次元画像+時間軸、という意味らしい?(厳密には違うかもしれないけど)そんな感じで理解してる)に並べて、過去フレームと未来フレームに注意を双方向に払いながらノイズを取り除くことで動画にしていく感じだったと記憶している。morisoba65536.icon
🦊FramePackは少し特殊で開始フレームから「最終フレーム」(結末)を先に作ってその間を補完するように最初のフレームと直近の未来のフレームを参照しながら作成します。 動画は1フレーム目からNフレーム目まで同じ時間軸にあるという一貫性(時間的整合性)が必要なのですが、(※動画生成モデルが出る以前の)当時の技術では動画の時間分だけ並列に画像生成することでそれを実現していました(他にもいろいろやってますが) 🚨バッチ (Batch size)とリストと解像度
同じバッチ内の画像はすべて同じ解像度である必要があります
そうでない場合は自動で最初の画像の解像度にクロップされます
https://gyazo.com/af9df8ee1943f946fdfe38d521520b7f
🟪Batch
🟨List
リアルタイム処理
ComfyUIはそもそもリアルタイム処理ができません
しかし、前の処理が終わった瞬間に次の処理を始めることでリアルタイムっぽく見せることができます
Run(Instant)もしくはRun(Change)を使う
https://gyazo.com/c516b3b9fd8b2c506fb1fa91cf385174