StreamDiffusionをControlNetに対応させて遊ぶ
注意
StreamDiffusionを素人改造した遊びです。
素人が週末に改造して遊んでいるだけですので正確性、品質などご容赦ください。
あくまで個人で改造して遊んでいるだけですので、本家様への問い合わせ等迷惑が掛からないようにお願います。
動機
VTuberのようなキャラクターで生配信をする際に、リアルタイムにプロンプトを変更して、猫耳を生やしたり、髪色を変えたりできると面白そう!
やったこと
StreamDiffusion v0.1.1はControlNetには非対応なのですが、どうしても検証したかったので、特定の条件下であればControlNetが動くように少し改造して動かしました。
他にもやってみたいという方もいましたので、コードを公開しておきます。
ただ、ControlNetは有用な技術ですし、公式でもissueに上がっているようなので、将来的には公式でも対応されるかもしれません。
素人改造でもいいから、今すぐCntrolNetで遊んでみたい!というレベルでよければお使いください。
使い方
StreamDiffusionのリポジトリをクローンし、StreamDiffusionが動作する環境を整えてください。v0.1.1で動作確認しています。
私のリポジトリのプログラムを取得し、以下のようにStreamDiffusionのexampleのフォルダに配置してください。
必要に応じて、ctlnet_exampleの中にあるrequirements.txtを以下のコマンドでinstall してください。
pip install -r requirements.txt
exampleフォルダをカレントディレクトリにし、以下のコマンドで起動します。
python ctlnet_example/main.py
デフォルトのプロンプトを変えたい場合は、main.pyのこの辺りを変えてください。
また、以下のあたりのパラメタを変えることで、いくつか動作を変えることができます。
IP-Adapterが使用できます。
adapterをTrueにして、ip_adapter_image_filepathに画像を指定することで、適用できます。
cfg_typeは基本的にnoneのみ対応しています。一応fullでも動作しますが自信はないです。
keep_latentをTrueにすることで、潜在変数が固定されます。キャラクターが変わりにくくなります。Falseにすると、潜在変数が毎回変わるため、生成される画像がランダムになります。
基本的な遊び方
StreamDiffusionのexampleのimg2imgのように、キャプチャ用のウインドウが出ますので、CntrolNetのOpenpose用の画像の上にのせてEnterを押してください。
イメージ用のウィンドウに画像が表示されると思います。
初期値が悪い場合など?画像がノイジーになる場合があるので、その場合はもう一度やり直してください。
プロンプトを変えると、猫耳を生やしたり、メガネをかけたり、髪の毛の色を変えたりできると思います。
遊び方1.同じキャラクターでポーズやプロンプトを変えて遊びたい
keep_latent=Trueにしてください。
可能なら、キャラクターの画像を用意し、adapter=True, ip_adapter_image_filepathに画像を指定してください。
遊び方2.ポーズを決めて画像をたくさん表示させたい
keep_latent=Falseにしてください。
似たキャラクターをたくさん表示したい場合adapter=True, ip_adapter_image_filepathに画像を指定してください。
異なるキャラクターでよい場合、adapter=Falseにしてください。
参考
StreamDiffusion本体様
ありがとう あき先生
アキ先生による論文解説
とても分かりやすい。