これらは、ComfyUI ネイティブ実装のカスタム ノードです。
私の貢献は ComfyUI の適応に限定されており、すべての功績は論文の著者に与えられます。
2024 年 5 月 16 日。他のノードとの互換性を向上させるための内部の再作業。 RAUNetが実装されています。
2024 年 5 月 12 日。CutForInpaint ノード、例を参照。
2024 年 5 月 11 日。画像バッチが実装されました。 BrushNet を AnimateDiff vid2vid ワークフローに追加することもできますが、これらは連携しません。これらは異なるモデルであり、どちらも UNet にパッチを適用しようとします。さらにいくつかの例を追加しました。
2024 年 5 月 6 日。PowerPaint v2 モデルが実装されました。更新後、ワークフローが機能しなくなる可能性があります。慌てないで! BrushNode のend_at
パラメータを確認し、それが 1 に等しい場合は、大きな数値に変更します。パラメーターについては、以下の「使用法」セクションを参照してください。
2024 年 5 月 2 日。BrushNet SDXL が公開されました。ただし、ポジティブとネガティブのコンディショニングが必要なので、ワークフローが少し変わります。例を参照してください。
2024年4月28日. またまた手直し、ご迷惑をおかけして申し訳ございません。しかし現在、BrushNet は ComfyUI にネイティブです。有名な cubiq の IPAdapter Plus が BrushNet で動作するようになりました。願っています... :) 見つけたバグを報告してください。
2024 年 4 月 18 日。完全に作り直され、カスタムdiffusers
ライブラリはなくなりました。 LoRAモデルの使用も可能です。
2024 年 4 月 11 日。最初のコミット。
リポジトリのクローンをcustom_nodes
ディレクトリに作成し、要件をインストールします。
git clone https://github.com/nullquant/ComfyUI-BrushNet.git
pip install -r requirements.txt
BrushNet のチェックポイントはここからダウンロードできます。
segmentation_mask_brushnet_ckpt
のチェックポイントは、BrushData でトレーニングされたチェックポイントを提供します。これは、事前にセグメンテーションが行われています (マスクはオブジェクトの形状と同じです)。 random_mask_brushnet_ckpt
ランダム マスク形状のより一般的な ckpt を提供します。
segmentation_mask_brushnet_ckpt
とrandom_mask_brushnet_ckpt
には SD 1.5 モデル用の BrushNet が含まれており、SDXL 用のsegmentation_mask_brushnet_ckpt_sdxl_v0
とrandom_mask_brushnet_ckpt_sdxl_v0
が含まれています。
diffusion_pytorch_model.safetensors
ファイルをmodels/inpaint
フォルダーに配置する必要があります。 extra_model_paths.yaml
でinpaint
フォルダーを指定することもできます。
PowerPaint の場合は、3 つのファイルをダウンロードする必要があります。ここのdiffusion_pytorch_model.safetensors
とpytorch_model.bin
は両方ともmodels/inpaint
フォルダーに配置する必要があります。
また、SD1.5 テキスト エンコーダ モデルmodel.safetensors
も必要です。ここから、または別の場所から取得できます。 fp16バージョンも使用できます。これは、 models/clip
フォルダーに配置する必要があります。
これは私のmodels/inpaint
フォルダーの構造です。
あなたのものは違うかもしれません。
以下は、意図したワークフローの例です。サンプルのワークフローは、「example」ディレクトリ内にあります。
ワークフロー
ワークフロー
ワークフロー
場合によっては、推論と VAE によって画像が壊れるため、画像の修復を元のワークフローとブレンドする必要があります。最初の画像では、修復後にぼやけて壊れたテキストと、それをどのように修復するかがわかります。
ワークフロー
ControlNet キャニー エッジ
ワークフロー
ワークフロー
アップスケールするには、BrushNet ではなくベース モデルを使用する必要があります。コンディショニングについても同様です。 BrushNet と KSampler の間の潜在的なアップスケーリングは機能しないか、奇妙な結果が得られます。これらの制限は、BrushNet の構造と、UNet の計算に対するその影響によるものです。
ワークフロー
OOM の問題がある場合は、AnimateDiff-Evolved の Evolved Sampling を使用できます。
ワークフロー
Context Options で、context_length を VRAM にロードできる画像の数に設定します。画像はこのサイズのチャンクに分けて処理されます。
ワークフロー
大きな画像を操作し、修復マスクが小さい場合は、画像の一部を切り取って操作し、ブレンドし直すことをお勧めします。このようなワークフロー用のノードを作成しました。例を参照してください。
ワークフロー
ワークフロー
特にオブジェクトが前面にある場合、オブジェクトを完全に削除するのは難しいことがよくあります。
次のように、ネガティブ プロンプトにオブジェクトの説明を追加し、空のシーンを説明してみてください。
dtype
、デフォルトはtorch.float16
です。 BrushNet の torch.dtype。古い GPU または NVIDIA 16 シリーズ カードをお持ちの場合は、 torch.float32
に切り替えてみてください。 scale
、デフォルトは 1.0: BrushNet の「強さ」。 BrushNet の出力は、元の unet の残差に追加される前に、 scale
で乗算されます。start_at
、デフォルトは 0: BrushNet の適用を開始するステップ。end_at
、デフォルトは 10000: BrushNet の適用を停止するステップ。これら最後の 2 つのパラメータの使用例を次に示します。
CLIP
: PowerPaintCLIPLoader ノードから渡される PowerPaint CLIP。fitting
: PowerPaint フィッティング程度。function
: PowerPaint 関数。詳細については、そのページを参照してください。save_memory
: このオプションが設定されている場合、attention モジュールは入力テンソルをスライスに分割して、複数のステップでアテンションを計算します。これは、速度の低下と引き換えにメモリを節約するのに役立ちます。 Mac で VRAM が不足するか、 Error: total bytes of NDArray > 2**32
発生する場合は、このオプションをmax
に設定してみてください。特定のネットワーク機能を使用する場合、PowerPaint の作成者はプロンプトにフレーズを追加することを推奨しています。
empty scene blur
empty scene
empty scene
ComfyUI ユーザーの多くは、カスタム テキスト生成ノード、CLIP ノード、その他多くの条件付けを使用しています。これらのノードをすべて壊したくないので、プロンプト更新を追加せず、代わりにユーザーに依存しました。また、私自身の実験によると、プロンプトへのこれらの追加は厳密には必要ではありません。
潜在イメージは BrushNet ノードからのものでもそうでなくても構いませんが、元のイメージと同じサイズ (潜在空間で 8 で割ったもの) である必要があります。
BrushNet ノードと PowerPaint ノードのpositive
とnegative
両方の条件付けは内部での計算に使用されますが、その後は単純に出力にコピーされます。
BrushNet の構造上、すべてのワークフローとノードが BrushNet で動作するわけではないことに注意してください。また、モデルの変更は、BrushNet ノードの後ではなく、前に行います。 BrushNet 推論後に画像を操作するモデルが必要な場合は、基本モデルを使用してください (以下のアップスケールの例を参照)。
du_start
、デフォルトは 0: ダウンサンプル/アップサンプルのサイズ変更の適用が開始されるステップ。du_end
、デフォルトは 4: ダウンサンプル/アップサンプルのサイズ変更の適用を停止するステップです。xa_start
、デフォルトは 4 です。CrossAttend のサイズ変更の適用が開始されるステップです。xa_end
、デフォルトは 10 です。CrossAttend のサイズ変更の適用が停止されるステップです。例と説明については、ここを参照してください。
BrushNet にはいくつかの制限があります (論文より)。
残念ながら、同じ ComfyUI の機能にパッチを適用しようとしているため、BrushNet コードの性質により、一部のノードはこれらと互換性がありません。
既知の互換性のないノードのリスト。
コードは以下に基づいています