CivitAI で公開されている Simple & Effective Flux.1 img2img + upscale ComfyUI workflow で使用されているノードについて説明します。名前のとおり ComfyUI による Flux.1 を使用した img2img とアップスケールのタスクに対応しています。
FLUX.1 : ComfyUI img2img & upscale 用ワークフロー詳細
作成 : Masashi Okumura (@ClassCat)
作成日時 : 08/18/2024
* 本記事は ComfyUI Wiki を参考にしています :
* サンプルコードの動作確認はしておりますが、必要な場合には適宜、追加改変しています。
* ご自由にリンクを張って頂いてかまいませんが、sales-info@classcat.com までご一報いただけると嬉しいです。
◆ お問合せ : 本件に関するお問合せは下記までお願いします。
- クラスキャット セールス・インフォメーション
- sales-info@classcat.com
- ClassCatJP
FLUX.1 : ComfyUI img2img & upscale 用ワークフロー詳細
この記事では、CivitAI で公開されている Simple & Effective Flux.1 img2img + upscale ComfyUI workflow で使用されているノードについて説明します。名前のとおり ComfyUI による Flux.1 を使用した img2img とアップスケールのタスクに対応しており、ワークフロー定義も妥当です :
ComfyUI 公式の txt2img 用 FLUX.1 schnell ワークフロー や dev ワークフロー と大きな違いはありませんが、もちろん img2img や upscale 用のノードが組み込まれています。
ローダー・ノード
モデル本体、CLIP、そして VAE をロードするためのノード群に加えて、img2img 用にリファレンス画像をロードするノードも含みます。
Load Diffusion Model
Load Diffusion Model ノードは以前は UNET Loader ノードと呼称されていました。U-Net モデルを名前でロードするように設計されており、システム内で事前訓練済み U-Net アーキテクチャの使用を簡単にします。
モデルファイルは ComfyUI/models/unet に配置されている必要があります。
※ 出力 ‘MODEL’ は、BasicGuider と BasicScheduler ノードへの入力となります。
DualClipLoader
DualCLIPLoader ノードは、2 つの CLIP モデルを同時にロードするように設計されており、両方のモデルの機能の統合や比較を必要とする操作を簡単にします。
キッチンで料理を準備していて、塩と胡椒 (こしょう) の 2 つの異なるスパイスの瓶があるとします。それぞれのスパイスは料理に独特な風味を与えます。そして、両方の瓶を同時に使用して料理に味付けすることを可能にする特別なツールがあると想像してください。
これは DualCLIPLoader ノードに類似しています。2 つの異なる CLIP モデルを同時にロードして使用することを可能にしますので、それらの独自の機能とスタイルを組み合わせてより多用途で洗練された AI 生成アートを作成することができます。
※ 出力 CLIP は、CLIPTextEncodeFlux ノードへの入力になります。
Load VAE
Load VAE ノードは、変分オートエンコーダ (VAE) モデルをロードするために設計されており、標準 VAE と近似 VAE の両方を処理できるように特にカスタマイズされています。
名前による VAE のロードをサポートし、’taesd’ と ‘taesdxl’ モデルに特化された処理も含み、VAE の特定の設定に基づいて動的に調整します。
※ 出力 VAE は、”VAE Encode” と “VAE Decode” ノードへの入力になります。”VAE Encode” ノードは img2img タスク用です。
Load Image
img2img タスクに必須のノードです。
LoadImage ノードは、指定されたパスからの画像をロードして前処理するように設計されています。複数のフレームを含む画像形式を処理し、EXIF データに基づいて回転などの必要な変換を適用し、ピクセル値を正規化し、そしてオプションでアルファチャネルを持つ画像用にマスクも生成します。このノードは、パイプライン内で更に処理や分析を行うための画像の準備に不可欠です。
※ この出力 IMAGE は、”VAE Encode” ノードへの入力 pixels になります。
補助的ノード (出力のみを持つノード)
(変更可能なプロパティは持ちますが、) 他のノードからの入力はなく、他のノードへの出力のみを持つノード群です :
RandomNoise
RandomNoise ノードは与えられたシードに基づいてランダムノイズを生成します。シード値 (noise_seed) を使用して一貫して再生成可能なランダム化された要素を提供することで、変動性をプロセスに導入するように設計されています。
※ この出力 NOISE は、SamplerCustomAdvanced ノードへの入力 noise になります。
KSampler Select
KSamplerSelect ノードは、euler のような指定されたサンプラー名に基づいて特定のサンプラーを選択するように設計されています。サンプラー選択の複雑さを抽象化し、ユーザがタスクに合わせて様々なサンプリング・ストラテジー間で簡単に切り替えることを可能にします。
※ この出力 SAMPLER は、SamplerCustomAdvanced への入力 sampler になります。
主要ノード (入力と出力の両方を持つノード)
他のノードからの入力と、他のノードへの出力の両方を持つノード群について説明します。
VAE Encode
img2img タスクに必要なノードです。
VAE Encode ノードは、指定された VAE モデルを使用して画像を潜在空間表現にエンコードするように設計されています。エンコーディング過程の複雑さを抽象化し、画像を潜在表現に変換する簡単な方法を提供します。
* 入力は “Load VAE” ノードからの vae と、”Load Image” ノードからの pixels です
* 出力 LATENT は “Upscale Latent By” ノードへの入力になります。
Upscale Latent By
upscale タスクに必要なノードです。
“Upscale Latent” ノードは、潜在 (latent) 画像をリサイズするために使用できます。
* 入力は “VAE Encode” ノードからの samples です。
* 出力 LATENT は SamplerCustomAdvanced ノードへの入力になります。
Clip Text Encode Flux
Clip Text Encode Flux ノードの直接的な説明は、現時点では Reddit の この質疑応答 くらいしか見つかりませんでしたが、後述の “Clip Text Encode” ノードを Flux にカスタマイズし、ガイダンス値を設定可能にしたノードでしょう。
* 入力は DualClipLoader ノードからの CLIP です。
* 出力は BasicGuider ノードへの入力になります。
参考までに Reddit の該当箇所を簡単に訳しておきますと :
Flux は 2 つのテキストモデル、clip (タグのようなもの) と T5 (自然言語) を持っています。SDXL も同様ですが、ベストな結果のためには両方に同じテキストを送るだけで済みました。
T5 に自然言語プロンプトを入力してから clip にいくつかのタグ (e.g. flat shaded, pixelart, illustration) を入力することを試すことはできますが、AFAIK それほど価値はありません。
ガイダンスはモデルが異なる CFG 値で訓練されている場合に使用されます。これは一種のチート技術で、たとえば “guidance 2” の場合、モデルは 2 に設定された CFG で訓練中に生成した画像のような画像を生成しようとします (しかし実際には CFG は 1 のままです)。
これは奇妙に思えますが、1 より大きい CFG は生成時間が長くなるので、ガイダンスの使用はより高速になります。欠点は、どのようなガイダンス値でもネガティブプロンプトを持てないことです、それが機能するためには実際には CFG > 1 が必要です (そして生成時間の増加を引き起こすのがネガティブです)。
既存の “Clip Text Encode” ノードの説明も記載しておきます :
Clip Text Encode (Prompt)
CLIPTextEncode ノードは、CLIP モデルを使用してテキスト入力をエンコードし、テキストを生成タスクで条件付けに利用できるような形式に変換する ように設計されています。それはテキストのトークン化とエンコーディングの複雑さを抽象化し、テキストベースの条件付けベクトルを生成するための合理的なインターフェイスを提供します。
入力
- ‘text’ パラメータはエンコードされるテキスト入力です。これはエンコーディング・プロセスの情報の主要ソースであるため、出力条件付けベクトルを決定する上で重要な役割を果たします。
- ‘clip’ パラメータはテキストのトークン化とエンコーディングに使用される CLIP モデルを表します。これはテキスト入力を条件付けベクトルに変換するために不可欠で、生成出力の品質と関連性に影響します。
出力
- 出力 ‘conditioning’ は CLIP モデルによりエンコードされた、入力テキストのベクトル表現です。関連性と一貫性のある出力を生成するために生成モデルをガイドするための重要なコンポーネントとして機能します。
BasicGuider
BasicGuider ノードは、モデルと条件付け入力を利用して、AI アート生成におけるガイダンス・プロセスを簡単にするように設計されています。その主目的は、モデルへの条件付けの適用を効率化することで、生成されたアートが指定された条件に従うことを確実にします。このノードは、特定のプロンプトや条件を使用して AI モデルの出力に影響を与え、創造プロセスをより制御された予測可能なものしたいアーティストに特に役立ちます。BasicGuider の使用により、条件付けをモデルに簡単に設定し適用することができて、生成されたアートワークの品質と関連性を強化できます。
* 入力は (Load Diffusion Model ノードの出力) ‘model’ と (ClipTextEncodeFlux ノードの出力) ‘conditioning’ です。
* 出力は SamplerCustomAdvanced への ‘guider’ です。
BasicScheduler
BasicScheduler ノードは、提供されるスケジューラ、モデルとノイズ除去パラメータに基づいて、拡散モデル用のシグマ値のシークエンスを計算するように設計されています。拡散過程を調整するためにノイズ除去因子に基づいて合計ステップ数を動的に調整します。
* デフォルトは 25 ステップです。
* 入力は (“Load Diffusion Model” ノードの出力) ‘model’ です。
* 出力は SamplerCustomAdvanced ノードへの ‘sigmas’ です。
SamplerCustomAdvanced
SamplerCustom ノードは、柔軟でカスタマイズ可能なサンプリング機構を提供するように設計されています。特定のニーズに合わせて、ユーザが様々なサンプリング・ストラテジーを選択して構成することを可能にし、サンプリング過程の適応性や効率性を強化します
そして SamplerCustomAdvanced ノードは、生成モデル・フレームワーク内でのサンプリング過程のための高度なカスタマイズ・オプションを提供します。特定の要件や実験的なセットアップに対して調整可能な洗練されたサンプリング・ストラテジーの実装を可能にし、生成モデリングのタスクの柔軟性と効果性を強化します。
入力
- ‘noise’ パラメータは、サンプリングプロセスを摂動させるために使用されるノイズで、変動を導入して生成モデルの空間をより徹底的に探索する方法を提供します。
※ このケースでは、RandomNoise ノードの出力が該当します。
- ‘guider’ パラメータは、生成を望ましい結果に向けるか、望ましくないものから遠ざけるような、サンプリング過程のためのガイディング (誘導) 機構を指定します。
* BasicGuider ノード出力。
- ‘sampler’ パラメータは、使用される特定のサンプリング・アルゴリズムやストラテジーを定義し、サンプリング過程のカスタマイズを可能にします。
* KSamplerSelect ノード出力。
- ‘sigmas’ パラメータは、サンプリング過程の異なるステップで適用されるノイズレベルを表し、変動の導入に対する制御の微調整を可能にします。
* BasicScheduler ノード出力。
- ‘latent_image’ パラメータは、サンプリング過程用の初期状態あるいはコンテキストを提供し、生成のための基底 (basis) として機能します。
* “Upscale Latent By” ノード出力。
出力
- ‘output’ は、サンプリング過程の結果を提供します、これは指定されたサンプリング・ストラテジーを提供した後の生成されたデータを反映しています。
※ このケースでは、VAE Decoder ノードへの入力 ‘samples’ になります。
- ‘denoised_output’ は、ノイズ削減された生成データを提供し、よりクリアで洗練された結果の実現におけるサンプリング・ストラテジーの有効性を示します。
※ このケースでは使用しません。
VAE Decode
VAEDecode ノードは、指定された変分オートエンコーダ (VAE) を使用して潜在表現を画像にデコードするように設計されています。
圧縮されたデータ表現から画像を生成し、潜在空間エンコーディングから画像の再構築を簡単にするような目的で機能します。
入力
- ‘samples’ パラメータは、画像にデコードされる潜在表現を表します。これは (そこから) 画像が再構築される圧縮データを提供しますので、デコーディング処理に対して重要です。
※ このケースでは、SamplerCustomAdvanced ノードの出力です。
- ‘vae’ パラメータは潜在表現を画像にデコードするために使用される変分オートエンコーダ・モデルを指定します。それはデコーディング機構と再構築された画像の品質を決定するために不可欠です。
出力
- ‘image’ 出力は、指定された VAE モデルを使用して、提供された潜在表現から再構築された画像です。
画像保存ノード
Save Image
SaveImage ノードは、画像をディスクに保存するように設計されています。テンソルから適切な画像形式に画像を変換し、オプションのメタデータを適用し、そして設定可能な圧縮レベルで画像を指定された位置に書き込むプロセスを処理します。
以上