見出し画像

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にすることで、リアルタイムで画像を生成できます。

Reference


この記事が気に入ったらサポートをしてみませんか?