見出し画像

【画像生成 AI】 ComfyUI-easygoing-nodes を公開! SDXL のプロンプト解析の改良と LAB 色補正

はじめに

こんにちは、きまま / Easygoing です。

今回は、ComfyUI のカスタムノードパックの ComfyUI-easygoing-nodes を公開したのでご紹介します。

メインは SDXL のプロンプト解析の改良

ComfyUI-easygoing-nodes には、次の3つの機能が含まれています。

  • SDXL のプロンプト解析の試作改良

  • HiDream のテキストエンコーダーの処理を CPU で行う

  • 色補正 やその他のカスタムノード

それぞれについて、順番に見ていきます。

アニメスタイルの女性キャラクターが夜のバーで立っているイラスト。背景にネオンサインの「BAR COMFY」とボトルが並ぶ棚。

1.CLIP-G のプロンプト解析の処理

SDXL には、次の2種類のテキストエンコーダーが搭載されています。

  • CLIP-L(軽量・短文を理解)

  • CLIP-G(高性能・長文を理解)

CLIP-L と CLIP-G は、それぞれが別々にプロンプトを解析していて、プロンプトを入力すると次のような処理が行われます。

入力プロンプト

cat, cute, sleeping

CLIP-L の解析(イメージ)

cat, cute, sleeping <終了>

CLIP-G の解析(イメージ)

cat, cute, sleeping<空><空><空><空><空><空><空><空><空><空><空><空><空><空><空><空><空><空><空><空><空><空><空><空><空><空><空><空><空><空><空><空><空><空><空><空><空><空><空><空><空><空><空><空><空><空><空><空><空><空><空><空><空><空><空><空><空><空><空><空><空><空><空><空><空><空><空><空><空>

CLIP-L は、短文を解析するため、終了のタグ が決められています。

一方で、CLIP-G は本来は長文を解析するため、終了のタグは使わず 開いた部分は<空>のタグ で埋められていきます。

これは CLIP-G と SDXL の仕様に基づいた正しい実装 なのですが、短いプロンプトを入力する場合(特に、タグ入力のアニメモデルの Negative Prompt など)、<空>が多く存在するため 意味のある単語から注意が分散してしまう 可能性があります。

CLIP-G にも、シンプルに理解させる

そこで、CLIP-L のシンプルな解釈を CLIP-G にも適用してみます。

具体的には、ComfyUI/comfy/sdxl_clip.py というファイルを、shiba*2 さんが公開されている修正版に差し替えてみます。

なお、同じく CLIP-G を利用する Stable Diffusion 3.5HiDream も この sdxl_clip.py を呼び出して使っているので、これらのモデルを利用する場合も違いが生じてきます。

実際のイラストで比較!

オリジナルの sdxl_clip.py

アニメスタイルの女性キャラクターが夜の港で立っているイラスト。背景にネオンライトの街並みと水面の反射。
モデル:true_pencil-XL-v1.0.0

試作改良版の sdxl_clip.py

試作改良版の sdxl_clip.py で生成したアニメスタイルの女性キャラクターが夜の港で立っているイラスト。背景にネオンライトの街並みと水面の反射。

画像の一致率:99 ~ 99.5 %

2つの画像の比較結果。OriginalとPrototypeの画像、Color DifferenceとGrayscale Differenceの差分画像、MAE:2.66 (99.0%)とSSIM:1.00 (99.5%)の数値が表示されている。

画像比較ツール

イラストには確かに違いがあり、どちらが優れているか 優劣はつけ難い ですが、下の表現が気にいるようであれば、試作改良版を使ってみても良いと思います。

sdxl_clip.py の試作改良版は、ComfyUI-easygoing-nodes をインストールすれば自動で適用 されるので、その後の操作は必要ありません。

2.カスタムノードの追加

ここから、ComfyUI-easygoing-nodes で追加したカスタムノードについてご紹介します。

LAB 色空間での色補正

HDR Effects with LAB Adjust

easygoing-nodesカテゴリのHDR Effects with LAB AdjustノードのUI。パラメータとしてhdr_intensity, shadow_intensityなど。

HDR Effect with LAB Adjust ノードは、LAB 色空間 で色の補正を行うカスタムノードです。

画像生成で扱う PNG 画像は、通常は RGB 色空間 で処理を行いますが、これを LAB 色空間 に変換して明るさと色の調整を行います。

RGB 色空間

RGB色空間の説明図。R(赤), G(緑), B(青)のチャンネルを示すグラデーションバー。

RGB 色空間では、Red(赤)、Green(緑)、Blue(青)の3つの原色を組み合わせて色を表現しています。

RGB 色空間では、明るさは RGB の合計値 で決まります。

そのため、RGB 色空間では 色を変えると明るさも変化 してしまい、また逆に 明るさを変えると色も変わって しまいます。

LAB 色空間

LAB色空間の説明図。L(明度), A(緑-赤), B(青-黄)のチャンネルを示すグラデーションバー。

それに対して、LAB 色空間は 明るさと色を別のチャンネル に分けて処理します。

LAB 色空間では、明るさと色が互いに影響することなく、それぞれ個別に調整することができます。

各設定値の意味

HDR Effect with LAB Adjust ノードには、次の設定値があります。

easygoing-nodesカテゴリのHDR Effects with LAB AdjustノードのUI再掲。パラメータとしてhdr_intensity, shadow_intensityなど。
  • 明るさの調整

    • hdr_intensity: 明るさ調整の強さ

    • shadow_intensity: 暗い色を落とす

    • highlight_intensity: 明るい色を上げる

    • gamma_intensity: 全体を暗くする

  • 色の調整

    • ab_strength: 色調整の強さ

    • a_adjustment: 緑 ⇔ 赤 の調整

    • b_adjustment: 青 ⇔ 黄 の調整

  • 最終仕上げ

    • contrast: コントラスト

    • enhance_color: 彩度(色の濃さ)の調整

アニメスタイルの女性キャラクターが夜のバーで立っているイラスト。背景にネオンサインの「Bar Comfy」とボトル棚。

HDR Effect with LAB Adjust ノードは、デフォルトの設定値だと、

  • 暗い色を強調して コントラストを上げる

  • 肌色をターゲットに 少し赤みを加える

  • 画像生成 AI 特有の 黄色っぽさを軽減する

する設定になっています。

実際のイラスト

それでは、実際のイラストで比べてみます。

HDR Effect wuth LAD Adjust ノードは単独でも効果はありますが、以前に紹介した ComfyUI-SuperBeasts の AI 自動色補正 と組み合わせるとさらに良い結果が得られることが多いので、合わせて利用することをオススメします。

オリジナル

アニメスタイルの女性キャラクターが夜のバーで立っているイラスト。全体的に青みがかったオリジナル版。
全体が青くくすんでいる

AI 自動色補正(Super POP)

アニメスタイルの女性キャラクターが夜のバーで立っているイラスト。Super POP自動色補正適用版でくすみが除去され肌色が鮮明。
くすみを取り除き、肌色がハッキリする

HDR 補正(HDR Eddects with LAB Adjust)

アニメスタイルの女性キャラクターが夜のバーで立っているイラスト。HDR Effects with LAB Adjust適用版で黄色みが軽減されコントラスト向上。
黄色っぽさを軽減し、黒を落として引き締める

ワークフロー

今回の色補正で使ったワークフローです。

ComfyUIのワークフローのスクリーンショット。Super POP Color AdjustmentとHDR Effects with LAB Adjustノードを含むフロー。

Save Image With Prompt

次は、Save Image With Prompt ノードをご紹介します。

easygoing-nodesカテゴリのSave Image With PromptノードのUI。filename_prefix, positive_prompt, negative_prompt, caption, numbersの設定。
  • filename_prefix:ファイル名

  • positive_prompt

  • negative_prompt

  • caption:画像のキャプション

  • numbers:ファイル名末尾の連番の有無

Save Image With Prompt ノードは、PNG 画像に、positive_prompt, negative_prompt, caption のメタデータをつけて保存します。

caption は、CLIP-VisionFlorence-2 モデルなどを使って、自動でキャプションをつけて保存するケースを想定しています。

numbers はファイル名末尾の連番の有無を表していて、true でデフォルトと同じ動作、False にすると 連番を省略 します。

サンプルワークフロー

ComfyUIのワークフロー図。Save Image With Promptノードを含むサンプルフローと生成画像プレビュー。

モデル:true_pencil-XL-v1.0.0

参考:XnView MP(画像一括管理・編集ソフト)での表示画面

XnView MPソフトウェアのスクリーンショット。画像のサムネイル一覧と選択画像のメタデータ表示(positive_prompt, negative_prompt, caption)。

メタデータを閲覧できるアプリがあれば、ComfyUI を開かずに prompt, caption の内容を確認することができます。

D2 Load Image で prompt を呼び出す

D2-nodes-ComfyUI を公開している だにえる さんに、Save Image With Prompt ノードで保存した positive_prompt と negative_prompt のメタデータの呼び出しに対応していただきました。

D2 Load Image ノードを使うと、簡単に 過去のプロンプト を再利用することができます。

Screenshot of the workflow calling positive and negative in the D2 Load Image node

D2-nodes-ComfyUI には、ワークフローを見やすくして便利にする カスタムノードが多数収録されているので、みなさんもぜひ試してみて下さい。

D2 Regex Replace ノードの紹介

ComfyUI-easygoing-nodes のインストール方法

最後に、ComfyUI-easygoing-nodes のインストール方法をご紹介します。

ComfyUI-easygoing-nodes は、通常のカスタムノードと同じく、ComfyUI-Manager からインストールすることができます。

ComfyUI-Manager を使用(推奨)

ComfyUI-Managerの検索画面。easygoingで検索し、Easygoing Nodesが表示されている。

ComfyUI-Manager で「easygoing」で検索すると、一覧に Easygoing Nodes  が表示されます。

手動でインストール

手動でインストールする場合は、custom_nodes フォルダ内で次のコマンドを実行します。

git clone https://github.com/easygoing0114/ComfyUI-easygoing-nodes.git

ComfyUI 起動時の ComfyUI-easygoing-nodes の読み込みの確認

ComfyUI の起動時に、ComfyUI-easygoing-nodes が正常に読み込まれると、次のログが表示されます。

ComfyUI起動時のコンソールログ。comfy.sdxl_clip.pyとcomfy.text_encoders.hidream.pyの置き換え成功メッセージ。

このログが表示されていれば、CLIP-G 試作改良版 と HiDream のテキストエンコーダーの処理は正しく行われています。

まとめ:ComfyUI-easygoing-nodes を使ってみよう!

  • CLIP-G の処理の試作改良版

  • HiDream のテキストエンコーダーを CPU で処理

  • LAB 色補正を行うノード

今回、ComfyUI のカスタムノードを初めて作りましたが、その柔軟な実装方法に驚きました。

オリジナルのノードが作れることはもちろん、ComfyUI 本体の実行ファイルを、オリジナルのファイルを保ったまま修正版に置き換える ことができるので、元の環境を壊すことなく ComfyUI を改造できることが分かりました。

アニメスタイルの女性キャラクターが夜のバーで立っているイラスト。背景にネオンサインの「A BAR COMFY」とボトル棚。
好きに改造してね

ComfyUI の本体はミニマムを追求し、コミュニティの自由な開発を促すエコシステム は、本当によくできていると思います。

なお、今回 ComfyUI-easygoing-nodes の公開にあたり、快くコードを提供いただいた Shiba*2 さんと SuperBeastsAI 氏に、改めて感謝したいと思います。

最後までお読みいただきありがとうございます!


更新履歴

2025.1.9

ComfyUI のアップデートに伴い、Load Clip (set device) ノード群を削除したため、記事を修正しました


English Article


いいなと思ったら応援しよう!