Ini adalah node khusus untuk implementasi asli ComfyUI
Kontribusi saya terbatas pada adaptasi ComfyUI, dan semua penghargaan diberikan kepada penulis makalah.
16 Mei 2024. Pengerjaan ulang internal untuk meningkatkan kompatibilitas dengan node lain. RAUNet diimplementasikan.
12 Mei 2024. Node CutForInpaint, lihat contoh.
11 Mei 2024. Kumpulan gambar telah diterapkan. Anda bahkan dapat menambahkan BrushNet ke alur kerja AnimateDiff vid2vid, tetapi keduanya tidak bekerja sama - keduanya adalah model yang berbeda dan keduanya mencoba menambal UNet. Menambahkan beberapa contoh lagi.
6 Mei 2024. Model PowerPaint v2 diimplementasikan. Setelah pembaruan, alur kerja Anda mungkin tidak akan berfungsi. Jangan panik! Periksa parameter end_at
dari BrushNode, jika sama dengan 1, ubah ke angka besar. Baca tentang parameter di bagian Penggunaan di bawah.
2 Mei 2024. BrushNet SDXL sedang tayang. Ini memerlukan pengondisian positif dan negatif, jadi alur kerja sedikit berubah, lihat contoh.
28 April 2024. Pengerjaan ulang lagi, maaf atas ketidaknyamanannya. Tapi sekarang BrushNet adalah asli ComfyUI. IPAdapter Plus cubiq yang terkenal sekarang bekerja dengan BrushNet! Saya harap... :) Silakan laporkan bug apa pun yang Anda temukan.
18 Apr 2024. Selesaikan pengerjaan ulang, tidak ada lagi perpustakaan diffusers
khusus. Dimungkinkan untuk menggunakan model LoRA.
11 April 2024. Komitmen awal.
Kloning repo ke direktori custom_nodes
dan instal persyaratannya:
git clone https://github.com/nullquant/ComfyUI-BrushNet.git
pip install -r requirements.txt
Pos pemeriksaan BrushNet dapat diunduh dari sini.
Pos pemeriksaan di segmentation_mask_brushnet_ckpt
menyediakan pos pemeriksaan yang dilatih pada BrushData, yang memiliki segmentasi sebelumnya (mask memiliki bentuk objek yang sama). random_mask_brushnet_ckpt
memberikan ckpt yang lebih umum untuk bentuk topeng acak.
segmentation_mask_brushnet_ckpt
dan random_mask_brushnet_ckpt
berisi BrushNet untuk model SD 1.5 sedangkan segmentation_mask_brushnet_ckpt_sdxl_v0
dan random_mask_brushnet_ckpt_sdxl_v0
untuk SDXL.
Anda harus menempatkan file diffusion_pytorch_model.safetensors
ke folder models/inpaint
Anda. Anda juga dapat menentukan folder inpaint
di extra_model_paths.yaml
Anda.
Untuk PowerPaint Anda harus mengunduh tiga file. diffusion_pytorch_model.safetensors
dan pytorch_model.bin
dari sini harus ditempatkan di folder models/inpaint
Anda.
Anda juga memerlukan model encoder teks SD1.5 model.safetensors
. Anda bisa mengambilnya dari sini atau dari tempat lain. Anda juga dapat menggunakan versi fp16. Itu harus ditempatkan di folder models/clip
Anda.
Ini adalah struktur folder models/inpaint
saya:
Milik Anda bisa berbeda.
Di bawah ini adalah contoh alur kerja yang dimaksudkan. Alur kerja untuk contoh dapat ditemukan di dalam direktori 'contoh'.
alur kerja
alur kerja
alur kerja
Terkadang inferensi dan VAE merusak gambar, jadi Anda perlu memadukan gambar inpaint dengan alur kerja asli:. Anda dapat melihat teks buram dan rusak setelah dilukis pada gambar pertama dan bagaimana saya bisa memperbaikinya.
alur kerja
Keunggulan ControlNet yang cerdik
alur kerja
alur kerja
Untuk kelas atas Anda harus menggunakan model dasar, bukan BrushNet. Hal yang sama berlaku untuk pengondisian. Peningkatan laten antara BrushNet dan KSampler tidak akan berfungsi atau akan memberi Anda hasil yang aneh. Keterbatasan ini disebabkan oleh struktur BrushNet dan pengaruhnya terhadap perhitungan UNet.
alur kerja
Jika Anda memiliki masalah OOM, Anda dapat menggunakan Evolved Sampling dari AnimateDiff-Evolved:
alur kerja
Dalam Opsi Konteks atur konteks_panjang ke jumlah gambar yang dapat dimuat ke VRAM. Gambar akan diproses dalam potongan sebesar ini.
alur kerja
Saat Anda bekerja dengan gambar besar dan topeng inpaint Anda kecil, lebih baik potong sebagian gambar, kerjakan, lalu padukan kembali. Saya membuat simpul untuk alur kerja seperti itu, lihat contoh.
alur kerja
alur kerja
Seringkali sulit untuk menghilangkan objek sepenuhnya, terutama jika objek tersebut berada di depan:
Anda harus mencoba menambahkan deskripsi objek ke prompt negatif dan mendeskripsikan adegan kosong, seperti di sini:
dtype
, defaultnya adalah torch.float16
. Tipe torch.d dari BrushNet. Jika Anda memiliki GPU lama atau kartu seri NVIDIA 16 coba beralih ke torch.float32
. scale
, defaultnya adalah 1.0: "Kekuatan" BrushNet. Output dari BrushNet dikalikan dengan scale
sebelum ditambahkan ke sisa di unet asli.start_at
, defaultnya adalah 0: langkah saat BrushNet mulai diterapkan.end_at
, defaultnya adalah 10000: langkah di mana BrushNet berhenti diterapkan.Berikut adalah contoh penggunaan dua parameter terakhir tersebut.
CLIP
: PowerPaint CLIP yang harus diteruskan dari node PowerPaintCLIPLoader.fitting
: gelar pas PowerPaint.function
: Fungsi PowerPaint, lihat halamannya untuk detailnya.save_memory
: Jika opsi ini disetel, modul perhatian akan membagi tensor masukan menjadi beberapa bagian untuk menghitung perhatian dalam beberapa langkah. Ini berguna untuk menghemat sebagian memori dengan imbalan penurunan kecepatan. Jika Anda kehabisan VRAM atau mendapatkan Error: total bytes of NDArray > 2**32
di Mac, coba setel opsi ini ke max
.Saat menggunakan fungsi jaringan tertentu, penulis PowerPaint menyarankan untuk menambahkan frasa ke prompt:
empty scene blur
empty scene
empty scene
Banyak pengguna ComfyUI menggunakan node pembuatan teks khusus, node CLIP, dan banyak pengondisian lainnya. Saya tidak ingin merusak semua node ini, jadi saya tidak menambahkan pembaruan cepat dan mengandalkan pengguna. Eksperimen saya sendiri juga menunjukkan bahwa penambahan pada prompt ini tidak sepenuhnya diperlukan.
Gambar laten dapat berasal dari node BrushNet atau tidak, tetapi ukurannya harus sama dengan gambar asli (dibagi 8 dalam ruang laten).
Pengkondisian positive
dan negative
di node BrushNet dan PowerPaint digunakan untuk perhitungan di dalam, tetapi kemudian disalin ke output.
Harap diperhatikan, tidak semua alur kerja dan node akan bekerja dengan BrushNet karena strukturnya. Letakkan juga perubahan model sebelum node BrushNet, bukan setelahnya. Jika Anda memerlukan model untuk bekerja dengan gambar setelah inferensi BrushNet, gunakan model dasar (lihat contoh kelas atas di bawah).
du_start
, defaultnya adalah 0: langkah saat pengubahan ukuran Downsample/Upsample mulai diterapkan.du_end
, defaultnya adalah 4: langkah di mana pengubahan ukuran Downsample/Upsample berhenti diterapkan.xa_start
, defaultnya adalah 4: langkah saat pengubahan ukuran CrossAttention mulai diterapkan.xa_end
, defaultnya adalah 10: langkah di mana pengubahan ukuran CrossAttention berhenti diterapkan.Untuk contoh dan penjelasannya, silakan lihat di sini.
BrushNet memiliki beberapa keterbatasan (dari makalah):
Sayangnya, karena sifat kode BrushNet, beberapa node tidak kompatibel dengan ini, karena kami mencoba menambal fungsi ComfyUI yang sama.
Daftar node yang diketahui tidak dapat dikomposisi.
Kode ini didasarkan pada