SDXL Modular Workflow
詳細
ファイルをダウンロード
モデル説明
!日本語の説明は下部にあります!
モジュール形式でカスタマイズが容易なワークフロー
特徴
StableDiffusion WebUIに近いワークフロー(HiresFix, UpScale, ADetailer, PingInfo保存)
モジュラー構造でワークフローの拡張、入れ替えが容易
PingInfoにプロンプトの保存が可能
カスタムノードは四つに厳選(rgthree, ImpactPack+Subpack, prompt-reader-node)
コンセプト
用語
モジュール:単体で完結した機能を持つ、グループで囲まれた一連のノード
入力コンテキスト:前方のモジュールからパラメータを受け取り、モジュール内のノードに渡すためのノード
出力コンテキスト:モジュール内の最終出力を受け取り、後続のモジュールに渡すためのノード
コンテキストとは:複数のパラメータをまとめてフローを管理しやすくするためのノード。他のカスタムノードで「パイプ」と呼ばれているものと役割は同じ
見やすさと拡張性を重視したワークフローを構築しました。
各機能をモジュールとして縦方向に構築し、モジュールの入力と出力をrgthreeのコンテキストノードに制限することでモジュール同士の接続が一本で済むように組んでいます。
コンテキストノードの特性である入力スロットが空なら既存の値を流用し、繋がれていればその値で上書きするという動作を利用しています。
注意点として、前のモジュールの出力結果を把握し、モジュールの入力部に何が流れてくるかを意識する必要があります。
各セクションの説明
以下はワークフロー内の各セクション説明です。
1 ~ 4の数字キーを押すことでそれぞれのセクションに素早く画面遷移できます。
⚙️Configセクション
画像生成のための各種設定を行う区画。左側には各モジュールのON/OFFを切り替えるためのFast Groups Bypasserノードを並べています。
プロンプト入力の ImpactWildcardEncode ノードの下部UIからワイルドカードとLoraの追加が出来ます。詳しい使い方は公式リポジトリを確認してください
KSampler Configの
refiner_stepはHiresFixのステップ数として扱っていますModel&Clip Modifierのグループ内でclipとmodelに変更を加えられます。デフォルトではV-PredictionとKohya Deep Shrinkのノードを接続しています
大きめのLatentサイズを使いたい場合はCustom Empty Latentノードを有効にしてください。Empty Latent Selectorで簡単に切り替えられます
🖼️Mainセクション
画像生成のメインとなる区画。ControlNet、HiresFix、Hires後のアップスケールに対応しています。
WebUIのようにLatentで直接アップスケールするモジュールと、Upscalerモデルを使ったモジュールの二つを用意しています。お好みに合せて切り替えてください
UPS_KSamplerUpscaleでVRAMが溢れる場合は、VAE DecodeをVAE Decode (Tiled)に変更してみてください
- そのままでもデコード失敗時に自動的にTiledで再試行するはずです
Apply ControlNetノードについて:
- Controlnetモジュールが無効の場合、このノードの実行時にエラーになるのでデフォルトでは接続していません。ControlNetを適用したい場合は出力スロットをKSamplerに接続してください
ControlNetをフル活用したい場合は comfyui_controlnet_aux と必要なモデルを適宜用意してください
💎Detailerセクション
生成後の画像の細部にディテールを追加する区画。専用のサンプラーコンフィグやチェックポイントを指定出来ます。
顔のディテール追加にはFaceDetailerノード、それ以外は検出領域のフィルターと並び替えが出来るようにDetailer (SEGS)を採用しています。
ディテール処理を追加したい領域がある場合、既存のモジュールを複製して横に並べれば簡単に追加できます。
デフォルトでは以下の検出モデルを使用しています。
💾Outputセクション
画像を保存する区画。デフォルトでは日付毎のフォルダーにpng形式で保存されます。
現在、モデル名とVAE名は保存されません。詳細は「制約」の内容を確認してください。
ワークフローの拡張方法
新しくモジュールを追加したい場合は、以下の手順で行ってください。接続の視認性確保のため、ワークフロー編集時のリンク描画モードはスプラインがお勧めです。
モジュールを追加したい場所を特定し、後続のモジュールを移動させスペースを設ける
入力と出力のコンテキストノードを作成する
必要なノードを追加し、縦方向に並べ接続していく
最後のノードの出力を出力コンテキストノードに接続する
新しく追加したモジュールのグループ名は三文字の接頭辞(CTL_, EXT_など)を付けることを推奨します。
既存のグループはこの接頭辞でどのON/OFF切り替えノードに表示するか判定をしています。
Tips
数字キーの1 ~ 4で各セクションの先頭に素早く遷移できます(rgthreeのブックマークノード利用)
- ブックマークのショートカットが効かない場合は一度別のブラウザタブに切り替えると効くようになります
遷移後の画面がフィットしない場合は遷移後の左上にあるブックマークノードを開き、zoom値を調整できます
グループの名前欄をドラッグすると内包しているノードも一緒に移動します。少し移動させてからCtrlを押すと、グループのみ移動させることが出来ます
入れ子になったグループを作成する場合、必ず親の方から先に作成してください。これはグループの前面背面を変更する手段がないので、逆の順番で作成すると子グループを選択できなくなります
制約
PingInfoへのモデル名の保存について
現在のワークフローはPingInfoにモデル名を保存できません。解決方法としてprompt-reader-nodeのSD Parameter Generaterノードを配置し、MODEL_NAMEを接続すれば保存されます。
ただし、以下の3つの懸念からこのノードの採用は見送りました。
SD Parameter Generaterノードはパラメータを固定しても毎回ワークフローの最初から実行されてしまう
ImpactWildcardEncodeのシード入力に対応していないので、シード値が変わっても同じプロンプトが生成される(ImpactPack側が未対応)
ファイルシステム上のチェックポイント(safetensors)が増えたり減ったりすると、画像保存時にエラーが発生し保存されない。ComfyUIを再起動しないと解消しない(おそらくComfyUIの設計上の問題)
VAE名も同様に保存しません。これはコンテキストノードにスロットがない事と、SDXLは基本的にモデル内蔵か標準のVAEを利用する想定なので含めていません。
もしよく利用する固定のVAEがある場合、追加パラメータに直接記述すると保存出来ます。
Contextノードの制約について
Contextノードは画像生成に必要なパラメータはほぼ網羅していますが、動画生成やカスタムノード独自のパラメータは扱えません。例として、ClipVisionモデルやsd-pppのDocument型のスロットは用意されてないので接続出来ません。
現状、独自のパラメータを後続のモジュールに渡したい場合は一つのモジュールとして構築するか、Rerouteノードで後続に渡す必要があります。
同梱ワークフローのバリエーション
sdxl_moduler_txt2img.json
- プロンプトから画像を生成する基本ワークフロー
sdxl_moduler_mask_detailer.json
- マスクした範囲にDetailerを適用するワークフロー
sdxl_moduler_sd-ppp_inpaint.json
- sd-ppp カスタムノードを利用したDetailerワークフロー
⚠実行するには最新版のPhotoshopが必要です
- sd-ppp カスタムノードを利用したDetailerワークフロー

