概要
ComfyUI での Hires. Fix に悩みましたので、情報残しておきます。
Stable Diffusion の WebUI のひとつである ComfyUI はワークフローを使って画像生成における処理を柔軟に構成できますが、初学者にとっては、逆に自由度高すぎてどうしたらよいかわからなくなります。
最終的には個人の好みに強く依存するので、そもそも Hires. Fix の方法に正解はないと思います。
ここで記載しているのは、あくまで一例にすぎません。
ComfyUI で Hires. Fix が利用できれば、Stable Diffusion 3.5 のモデルで画像生成する際にも高解像度化できます。
環境
別ページで記載していますが、以前作成した Stability Matrix による環境を使います。
ComfyUI について
ComfyUI は、Stable Diffusion をノードベースのワークフローで操作します。
ComfyUI におけるノード は、画像生成プロセスの各ステップを構成する基本単位です。ノードは、それぞれ特定の機能を持ち、入力データを処理し、出力データを次のノードに渡します。
ノードはだいたい以下のように分類できます。
- データ入力ノード – テキストプロンプトや画像データを受け取る。
- 処理ノード – モデルの適用、サンプリング、エンコーディングなどを行う。
- 出力ノード – 画像をプレビューしたり、保存したりする。
ワークフローとは、ノード単位での処理を接続したものです。
Stable Diffusion WebUI (AUTOMATIC1111 版) との比較
先日確認しましたが、Stable Diffusion WebUI (AUTOMATIC1111 版) では、WebUI に [Hires fix] の項目があり各パラメータの値を設定するだけで利用できました。
ComfyUI では自由度が高いがために、どのタイミングでどのノードを使い、どのように接続したらよいかについて考慮が必要です。
サンプルのワークフロー
今回は、Stable Diffusion 3.5 の SD3 Examples のページにある sd3.5_text_encoders_example.png のワークフローを使ってみたいと思います。
Stable Diffuion 3.5 の Checkpoint ファイルや Clip ファイルの準備方法は 別ページに記載した通りです。
Hires. Fix を含めたワークフロー
以下で例としてあげる Comfy UI での Hires. Fix のワークフローは、Stability Matrix の Inference における Hires. Fix の処理や AUTOMATIC1111 における Hires. Fix の処理を参考にしています。
先に完成図から記載しておくと sd3.5_text_encoders_example.png に対して、Hires. Fix の処理を追加したワークフローが以下となります。
Hires. Fix の処理の追加手順
上記のワークフローの作成方法です。
(1)
ComfyUI で sd3.5_text_encoders_example.png を開きます。
(ダウンロードした画像ファイルを ComfyUIドラックアンドドロップ)
(2)
私は環境の都合上 Checkpoint ファイルを sd3.5_medium.safetensors に変更しました。
他はそのままとしてあります。
(3)
まずは、このワークフローに対してHires. Fix 用のノードを追加します。
さらに、それぞれのノードのパラメータの値を設定します。
ノードの追加は、ワークフローの何もないところをダブルクリックして表示されたボックスで検索するか、何もないところを右クリックして- [Add Node] から行います。
追加するノード | 設定 (記載以外はデフォルト) |
---|---|
Load Upscale Model [Add Node] – [loaders] – [Load Upscale Model] | model_name : RealESRGAN_x4plus.pth |
Upscale Image (using Model) [Add Node] – [image] – [upscaling] – [Upscale Image (using Model)] | |
Upscale Image [Add Node] – [image] – [upscaling] – [Upscale Image] | upscale_method : bilinear width : 1024 height : 1024 crop : disabled |
VAE Encode [Add Node] – [latent] – [VAE Encode] | |
KSampler [Add Node] – [sampling] – [KSampler] | seed : ランダムで割り当てられた値 control_after_generate : randomize steps : 20 cfg : 7.0 sampler_name : euler_ancestral scheduler : normal denode : 0.30 |
VAE Decode [Add Node] – [latent] – [VAE Decode] | |
Save Image [Add Node] – [image] – [Save Image] |
ノードを追加したのが以下の図です。
可読性をよくするために、Hires. Fix 用のノードは下のほうに配置して Hires. Fix のグループに入れてあります。
(4)
上記のノード間を接続します。
(わかりにくいところは、両端に番号を振ってあります。)
① もともとの画像生成の VAE Decode の IMAGE → Upscale Image (Using Model) の image へ
② Load Upscale Model – UPSCALE_MODEL → Upscale Image (Using Model) の upscale_model へ
③ Upscale Image (Using Model) – IMAGE → Upscale Image の image へ
④ Upscale Image – IMAGE → VAE Encode の pixels へ
⑤ Load Checkpoint – VAE → VAE Encode の vae へ
⑥ VAE Encode – LATENT – Hires. Fix 用の KSampler の latent_image へ
⑦ Load Checkpoint – MODEL → Hires. Fix 用の KSampler の model へ
⑧ Positive Prompt 用の CLIP Text Encode (Prompt) – CONDITIONING → Hires. Fix 用の KSampler の positive へ
⑨ Negative Prompt 用の CLIP Text Encode (Prompt) – CONDITIONING → Hires. Fix 用の KSampler の negative へ
⑩ Hires. Fix 用の KSampler – LATENT → Hires. Fix 用の VAE Decode – samples へ
⑪ Load Checkpoint – VAE → Hires. Fix 用の VAE Decode の vae へ
⑫ VAE Decode の IMAGE → Save Image – images へ
(4) 作成できたワークフローは、最初に記載した通り以下になります。
(5)
画像を生成してみます。
▼ 高解像度化前
▼ Hires. Fix 後
この画像をダウンロードして、Comfy UI で開けば、ワークフローが確認できます。
(6)
実際の Hires. Fix 化の際に、好みに合わせて各ノードのパラメータを調整していく形となります。
参考までに Stable Diffusion オールインワンチェックポイントファイルでも同じように Hires. Fix は構成できます。
生成された画像
▼ 高解像度化前
▼ Hires. Fix 後
この画像をダウンロードして、Comfy UI で開けば、ワークフローが確認できます。
参考となれば幸いです。