ComfyUI で Stream Diffusion を動かす
0. はじめに
先日 Stream Diffusion が公開されていたみたいなので、ComfyUI でも実行できるように、カスタムノードを開発しました。
Stream Diffusionは、連続して画像を生成する際に、現在生成している画像のステップに加えて、もう次の生成のステップを始めてしまうというバッチ処理をするそうです。
学者ではないので、詳しくはわかりませんが、上記のようなことを公式のYouTubeチャンネルでお話しされていたみたいなので、興味のある方はのぞいてみてください。
実際のリポジトリをのぞいてみると、Diffusers を使って書かれていたため、そのままではカスタムノードにできないので、いっそ Diffusers をComfyUIで使えるようにして、それを使って Stream Diffusion を動かそうという魂胆のもと、開発しました。
この記事以降も開発は続けますので、機能の追加案、問題などありましたら、issuesに立てていただけるとありがたいです。
また、一緒に開発していただけるも歓迎します。
1. 使い方
Comfy UI が既に実行できるという状態から解説します。
0. ComfyUI-Diffusers
実際のリポジトリはこちらです。
名称が、Diffusers になっていますが、StreamDiffusion を実行するためのノードは内包しています。
1. インストール
ComfyUI/custom_nodes/ に、リポジトリをクローンして、必要なモジュールをインストールします。
git clone https://github.com/Limitex/ComfyUI-Diffusers.git
cd ComfyUI-Diffusers
pip install -r requirements.txt
git clone https://github.com/cumulo-autumn/StreamDiffusion.git
python -m streamdiffusion.tools.install-tensorrt
2. Example
実際に、どのように使うかは、下記のWorkflowを参照してください。
実際のWorkflowは ここ にあります。
また、以下のようにすることでリアルタイム生成が可能になります。
Extra options の Auto Queue を有効にすることで、リアルタイムで画像を生成できます。
実際のWorkflowは ここ にあります。
また、VideoHelperSuite と組み合わせることによって、video2videoをすることもできます。実際のWorkflowは ここ にあります。
実際に実行させると、以下のようになります。
2. Nodes
ここでは、実装してあるノードについて解説します。
Diffusers Pipeline Loader
Class : DiffusersPipelineLoader
safetensorsや、ckptなど、ComfyUI/models/checkpoints に保存してあるモデルから Diffusers モデルのキャッシュを作成して pipeline を読み込みます。
Diffusers Vae Loader
Class : DiffusersVaeLoader
ComfyUI/models/vae に保存してあるモデルから Diffusers モデルのキャッシュを作成して vae を読み込みます。
Diffusers Scheduler Loader
Class : DiffusersSchedulerLoader
pipeline を読み込み、スケジューラーを選択します。
Diffusers Model Makeup
Class : DiffusersModelMakeup
pipeline, scheduker, autoencoder を読み込み、生成モデルを準備します。
Diffusers Clip Text Encode
Class : DiffusersClipTextEncode
準備したpipelineを読み込み、実際のプロンプトをembedsします。
positive, negative に関しては、テキストをそのまま返しています。(STRING)
Diffusers Sampler
Class : DiffusersSampler
Diffusersを用いて画像生成します。
Create Int List
class : CreateIntListNode
intリストを作成します。
elements_countにリストの長さを入力します。下記例では、[0, 16, 32, 45] のリストが作成されます。
LcmLoraLoader
class : LcmLoraLoader
LCM Lora の safetensors ファイルをロードします。
公式で利用されているLCM LORA は、lcm-lora-sdv1-5 にあります。
StreamDiffusion Create Stream
Class : StreamDiffusionCreateStream
StreamDiffusionのStreamを作成します。
StreamDiffusion Sampler
Class : StreamDiffusionSampler
Streamから、複数の画像を生成します。
Imageに画像を入力することによって、image2imageをすることができます。また、VideoHelperSuite と組み合わせることによって、video2videoをすることもできます。
StreamDiffusion Warmup
class : StreamDiffusionWarmup
作成されたstreamから、Fast Samplerのためのwarmup_streamを作成します。
StreamDiffusion Fast Sampler
class : StreamDiffusionFastSampler
Warmupされたストリームから、StreamDiffusionSamplerよりも高速に生成します。Extra options の Auto Queue をTrueにすることで、リアルタイムで画像を生成できます。