見出し画像

ComfyUIの拡張機能をリリースしました!

ComfyUIの拡張機能をリリースしました。githubに公開したのでどなたでもお使い頂けます。このnoteでは、より詳しい経緯を交えてお話していきます。では、ですますを辞めていつも通りに


そもそもの経緯について

直近のテーマとして2つを掲げている

  • 計画したプロンプトとリファレンス画像でプロンプトだけの試行回数よりも少なくGoalに辿り着く

  • 毎回、確認するのが面倒なので、Stable Diffusionを「工場制手工業」から「自動化」に移行する。

理由は、無計画にプロンプトを打つことでコストもだが、とりわけ、毎回、Stable Diffusionを操作する時間「プロンプトを変更し結果を確認する作業の繰り返し」がとんでもないことになっており、あまりにも、自分の時間を食ってしまう(無駄に浪費してしまう)ことになるので、何とかしなければと言う危機感から取り組み始めた

「要は膨大な時間の浪費を避ける。無駄な時間の浪費を避ける」

そのためには「計画に基づいた画像生成」をすることである。
「予め、生成する内容を決めておいてプロンプトとリファレンス画像を用意してある状態」と定義する。(※1)

計画が決まれば、「後は自動生成さえ出来れば、自分が画面に付き合うことなく他の作業に時間を使うことが出来る」

と言うのが、拡張機能の開発に手を出した理由である

拡張機能の開発日誌と説明について

今回、作成した拡張機能の名前は下記の通りである

  • Load Images and Prompts from Directory

githubにインストール方法や使い方については説明があるが、もう少し踏み込んだ説明については太字の部分や箇条書きの部分を読んでもらえればと思う

拡張機能の範囲について

ComfyUIの拡張機能だけでは残念ながら自動化が難しい。理由は過去の記事で調査しているので興味がある人は見てほしいのだが、恐らく、ComfyUIの設計上、循環が難しいため、変数をアップデートできないということだ

そのため、拡張機能は以下の機能とした

  • Directory Pathを読み取り、プロンプト(.txt)とリファレンス画像(.png)を出力する拡張機能を作る。index番号とDirectory Pathを入力することにより、Directory Pathにある連番のファイルをindex番号から出力する仕組みだ

どういうことか。よくある、プログラミングの配列の添字を使用して、ファイルにアクセスできるようにしている

# 同一ディレクトリにて、下記のプロンプト(.txt)とリファレンス画像(.png)があるとする
# 拡張機能によりindex番号が割り振られる

001.txt -> indexは0
002.txt -> indexは1
003.txt -> indexは2

001.png -> indexは0
002.png -> indexは1
003.png -> indexは2

例えば、001のプロンプトとリファレンス画像にアクセスしたければ、index番号を0と指定すれば、拡張機能の出力対象となるプロンプトとリファレンス画像が、001.txtの内容と001.pngの内容となるように作ってある。

従って、ComfyUIで拡張機能をロードして、毎回、index番号を変えていけば、自分が用意したプロンプトとリファレンス画像を出力できる

これにより、ComfyUIのノードにある"ControlNet"や"Ksamplerのlatent image(i2i)"に繋いだり、"CLIP Text Encodeのtext(pronpt)"に繋ぐことが出来る

ComfyUIの拡張機能では変数の更新(インデックスの更新)が自動では出来ないので、毎回、手動の変更であれば自分の用意したプロンプトとリファレンス画像を変えて画像生成をできるのが、今回の拡張機能の範囲である

※ ちなみに、拡張機能を使うときは、ファイルの組み合わせをいくつ用意したか覚えて使って欲しい。組み合わせが40あれば、インデックスの番号は0から39である(プログラムあるあるだ)

Negative Promptの対応について

Negative Promptも内容によって変わることを失念していたので、後から出力に加えた。従ってフォルダの構成は

# 同一ディレクトリにて、下記のプロンプト(.txt)とリファレンス画像(.png)があるとする

# プロンプトが格納されているテキスト
001.txt
002.txt
003.txt

# ネガティブプロンプトが格納されているテキスト
001_n.txt
002_n.txt
003_n.txt

# リファレンス画像
001.png
002.png
003.png

出力は

  • string(プロンプト)

  • string(ネガティブプロンプト)

  • image(リファレンスする画像)

なお、読み込みは必要だが全ての出力を使う必要はないことを断っておく

以上である。

しかし、次項が理由でもう一つ拡張機能を開発することになった

Automatic1111 Stable Diffusion Web UIのプロンプトのBreak文の対応について

今回、Automatic1111 Stable Diffusion Web UIで計画の準備をしていたためプロンプトにBreak文が存在する。ComfyUIではBreak文を認識しないので、BREAK文が来るたびにプロンプトを分割して、Conditioning(Concat)ノードに接続することを想定して、拡張機能をもう1つ追加した

  • Load Images and Prompts from Directory(Advanced)

こちらは、ComfyUIをメインで使用しているユーザーには関係ないのため、"Advanced"とした。最大5のBREAK文に対応し6つの分離したプロンプトを出力するように作ってある。必ず、プロンプトのテキストファイルにあるBREAK文は5つある必要はないし、出力を全て使う必要はないので柔軟性がある

"Load Images and Prompts from Directory(Advanced)"は、"Load Images and Prompts from Directory"とフォルダ構成は変わらない。異なる点はプロンプトのファイルの中身をBREAK文で分割して出力している点だ

# プロンプトファイルの内容
a, b, c, BREAK,
d, e, f, g, BREAK,
h, i, j, k, l, BREAK,
o, p, q, r, s, t, BREAK,
v, w, x, BREAK,
y, z

# 出力先
a, b, c, -> 1st prompt
d, e, f, g,  -> 2nd prompt
h, i, j, k, l, -> 3rd prompt
o, p, q, r, s, t, -> 4th prompt
v, w, x, -> 5th prompt
y, z -> 6th prompt

なお、ネガティブプロンプトはBREAK文の分割に対応していない。理由は自分が使用していないためだ

以上である

開発した拡張機能を使った感想について

Load Images and Prompts from Directory

著者のプロンプトはBREAK文を含める程度には長いので、ComfyUIで、そのまま使うには厳しかった。もっとシンプルで短いプロンプトの計画であれば悪くないので、そのときに使用をする

ただし、当初の自分のユースケースでは使えないので、次項の拡張機能を使用することになった

一方で、image(出力)に関してはcontrolnetやksamplerのlatent imageなど、いくつかのパターンで片方だけ繋いだり、両方繋いだり、柔軟性ある繋ぎ方が出来ることが分かり魅力的であった

Load Images and Prompts from Directory(Advanced)

自分の目的に沿う機能となっていたので良かった。この記事を執筆している裏で自動化処理と合わせて使用をしている。自分の目的にとっては実用的な拡張機能となった

拡張機能のオススメポイント

自分の要件は満たせたので、他の人が使う場合の想定をお伝えする

Load Images and Prompts from Directory

  • シンプルなプロンプトを使っている
    (CLIP Text Encodeが1つで済んでいる)

  • 計画的に実行する複数のプロンプトがある
    (プロンプトだけ使いたい人は必ずしもリファレンス画像を用意する必要はなく、最悪、画像はダミーで複製して用意しても良い)

Load Images and Prompts from Directory(Advanced)

  • Automatic1111 Stable Diffusion Web UIを使用しているユーザーで、BREAK文を含むプロンプトを使っている

  • 計画的に実行する複数のプロンプトがある

  • 計画的に実行するプロンプトとリファレンスする画像のセットが複数ある

まとめ

無事に使用することが出来て一安心した。後述する自動化と合わせて拡張機能を使うことで当初の目的を満たすことが出来た

備考

(※1)こちらの詳細については割愛する。成果が出たら別途、有料記事にして話をする

拡張機能を使用した自動化について

ここまでで、目的の達成は半分だ

ComfyUIのAPIを活用すれば自動化ができる。これは十分なヒントとなる筈だ。noteでも実践している人がいたので調べてみるといい。アイディアであれば、ChatGPTに相談するのもありだ

有料記事の部分としては、著者がGoogle Colabを使ったパターンを記録として残す。ひとつの実例として捉えてもらえればと思う。実際に試して分からない人、どうしても知りたい人、調べる時間を短縮したい人は購入を検討すると良い

前提

  • Google Colabを使用しているユーザーであり、有料契約を結んでいる前提で話を進める

  • Google ColabでComfyUIを使ったことがある人

  • この拡張機能のインストール及び、試行が完了していること

  • Windows、Mac

2024/10/5 追記
MacBook Air M1の対応を検証中→対応完了

注意事項

本記事は、読者の結果や商業的な効果を約束するものではありません。また、記事の内容を実行したことによる損失、損害に関して一切責任を負いかねます

本記事は、2024年10月2日に実行した結果となりますので、ソフトウェアやサービスの仕様の変更等に伴って、ユーザーによる対応が発生するかもしれません。そのときは別途、対応を検討ください

本、有料記事は、一般の個人ユーザー向けに販売しており、法人向けに販売はしておりません。法人の方の購入はご遠慮ください

返金について

有料記事の返金機能は有効にしてありますが、noteによる一定の審査がありますのでご注意ください

ここから先は

6,449字 / 5画像

¥ 200