เหล่านี้เป็นโหนดที่กำหนดเองสำหรับการใช้งานแบบเนทีฟของ ComfyUI
การสนับสนุนของฉันจำกัดอยู่ที่การปรับ ComfyUI และเครดิตทั้งหมดเป็นของผู้เขียนบทความ
16 พฤษภาคม 2024 การทำงานใหม่ภายในเพื่อปรับปรุงความเข้ากันได้กับโหนดอื่นๆ มีการใช้งาน RAUNet
12 พฤษภาคม 2024 โหนด CutForInpaint ดูตัวอย่าง
11 พฤษภาคม 2024 มีการนำชุดรูปภาพไปใช้ คุณสามารถเพิ่ม BrushNet ลงในเวิร์กโฟลว์ AnimateDiff vid2vid ได้ แต่พวกมันไม่ทำงานร่วมกัน - เป็นรุ่นที่แตกต่างกันและทั้งคู่พยายามแก้ไข UNet เพิ่มตัวอย่างเพิ่มเติมบางส่วน
6 พฤษภาคม 2024 มีการใช้งานโมเดล PowerPaint v2 หลังจากอัพเดตเวิร์กโฟลว์ของคุณอาจจะไม่ทำงาน อย่าตื่นตกใจ! ตรวจสอบพารามิเตอร์ end_at
ของ BrushNode หากเท่ากับ 1 ให้เปลี่ยนเป็นตัวเลขจำนวนมาก อ่านเกี่ยวกับพารามิเตอร์ในส่วนการใช้งานด้านล่าง
2 พฤษภาคม 2024 BrushNet SDXL เผยแพร่แล้ว อย่างไรก็ตาม จำเป็นต้องมีการปรับเงื่อนไขเชิงบวกและเชิงลบ ดังนั้นเวิร์กโฟลว์จึงเปลี่ยนแปลงเล็กน้อย ดูตัวอย่าง
28 เม.ย. 2024 ปรับปรุงอีกครั้ง ขออภัยในความไม่สะดวก แต่ตอนนี้ BrushNet มีอยู่แล้วใน ComfyUI IPAdapter Plus ของ cubiq อันโด่งดังกำลังทำงานร่วมกับ BrushNet แล้ว! ฉันหวังว่า... :) กรุณารายงานข้อบกพร่องใด ๆ ที่คุณพบ
18 เม.ย. 2024 ปรับปรุงใหม่ให้เสร็จสิ้น ไม่มีไลบรารี diffusers
แบบกำหนดเองอีกต่อไป สามารถใช้รุ่น LoRA ได้
11 เมษายน 2024 การดำเนินการเริ่มต้น
โคลน repo ลงในไดเร็กทอรี custom_nodes
และติดตั้งข้อกำหนด:
git clone https://github.com/nullquant/ComfyUI-BrushNet.git
pip install -r requirements.txt
สามารถดาวน์โหลด Checkpoints ของ BrushNet ได้จากที่นี่
จุดตรวจสอบใน segmentation_mask_brushnet_ckpt
ให้จุดตรวจสอบที่ได้รับการฝึกอบรมเกี่ยวกับ BrushData ซึ่งมีการแบ่งส่วนก่อนหน้า (มาสก์มีรูปร่างวัตถุเหมือนกัน) random_mask_brushnet_ckpt
ให้ ckpt ทั่วไปมากขึ้นสำหรับรูปร่างมาสก์แบบสุ่ม
segmentation_mask_brushnet_ckpt
และ random_mask_brushnet_ckpt
มี BrushNet สำหรับรุ่น SD 1.5 ในขณะที่ segmentation_mask_brushnet_ckpt_sdxl_v0
และ random_mask_brushnet_ckpt_sdxl_v0
สำหรับ SDXL
คุณควรวางไฟล์ diffusion_pytorch_model.safetensors
ลงในโฟลเดอร์ models/inpaint
ของคุณ คุณยังสามารถระบุโฟลเดอร์ inpaint
ใน extra_model_paths.yaml
ของคุณได้
สำหรับ PowerPaint คุณควรดาวน์โหลดไฟล์สามไฟล์ ควรวางทั้ง diffusion_pytorch_model.safetensors
และ pytorch_model.bin
จากที่นี่ไว้ในโฟลเดอร์ models/inpaint
ของคุณ
นอกจากนี้ คุณต้องมีตัวเข้ารหัสข้อความ SD1.5 model model.safetensors
คุณสามารถรับได้จากที่นี่หรือจากที่อื่น คุณยังสามารถใช้เวอร์ชัน fp16 ได้ ควรวางไว้ในโฟลเดอร์ models/clip
ของคุณ
นี่คือโครงสร้างของโฟลเดอร์ models/inpaint
ของฉัน:
ของคุณอาจแตกต่างกัน
ด้านล่างนี้คือตัวอย่างสำหรับขั้นตอนการทำงานที่ต้องการ ขั้นตอนการทำงานสำหรับตัวอย่างสามารถพบได้ในไดเรกทอรี 'ตัวอย่าง'
ขั้นตอนการทำงาน
ขั้นตอนการทำงาน
ขั้นตอนการทำงาน
บางครั้งการอนุมานและ VAE ทำให้ภาพเสียหาย ดังนั้นคุณจึงต้องผสมผสานภาพในสีเข้ากับต้นฉบับ: ขั้นตอนการทำงาน คุณสามารถเห็นข้อความที่เบลอและแตกหักได้หลังจากวาดภาพในภาพแรก และฉันจะแก้ไขได้อย่างไร
ขั้นตอนการทำงาน
ขอบแสนรู้ของ ControlNet
ขั้นตอนการทำงาน
ขั้นตอนการทำงาน
หากต้องการยกระดับคุณควรใช้โมเดลพื้นฐาน ไม่ใช่ BrushNet เช่นเดียวกับการปรับสภาพ การลดขนาดแฝงระหว่าง BrushNet และ KSampler จะไม่ทำงานหรือจะให้ผลลัพธ์ที่แปลกประหลาดแก่คุณ ข้อจำกัดเหล่านี้เกิดจากโครงสร้างของ BrushNet และอิทธิพลต่อการคำนวณ UNet
ขั้นตอนการทำงาน
หากคุณมีปัญหา OOM คุณสามารถใช้ Evolved Sampling จาก AnimateDiff-Evolved:
ขั้นตอนการทำงาน
ใน Context Options ให้ตั้งค่า context_length เป็นจำนวนรูปภาพที่สามารถโหลดลงใน VRAM รูปภาพจะถูกประมวลผลเป็นชิ้นขนาดนี้
ขั้นตอนการทำงาน
เมื่อคุณทำงานกับภาพขนาดใหญ่และมาสก์ในอินเพนท์มีขนาดเล็ก ควรตัดบางส่วนของภาพ ทำงานกับมันแล้วผสมผสานกลับเข้าด้วยกัน ฉันสร้างโหนดสำหรับเวิร์กโฟลว์ดังกล่าว ดูตัวอย่าง
ขั้นตอนการทำงาน
ขั้นตอนการทำงาน
การลบวัตถุออกจนหมดมักจะเป็นเรื่องยาก โดยเฉพาะอย่างยิ่งหากวัตถุอยู่ด้านหน้า:
คุณควรพยายามเพิ่มคำอธิบายอ็อบเจ็กต์ลงในพรอมต์เชิงลบและอธิบายฉากว่าง ดังตัวอย่างนี้:
dtype
ค่าเริ่มต้นคือ torch.float16
torch.dtype ของ BrushNet หากคุณมี GPU เก่าหรือการ์ด NVIDIA 16 series ให้ลองเปลี่ยนไปใช้ torch.float32
scale
เริ่มต้นเป็น 1.0: "ความแข็งแกร่ง" ของ BrushNet ผลลัพธ์ของ BrushNet จะถูกคูณด้วย scale
ก่อนที่จะบวกเข้ากับส่วนที่เหลือใน unet ดั้งเดิมstart_at
มีค่าเริ่มต้นเป็น 0: ขั้นตอนที่ BrushNet เริ่มนำไปใช้end_at
มีค่าเริ่มต้นเป็น 10,000: ขั้นตอนที่ BrushNet หยุดใช้นี่คือตัวอย่างการใช้พารามิเตอร์สองตัวสุดท้ายนี้
CLIP
: PowerPaint CLIP ที่ควรส่งผ่านจากโหนด PowerPaintCLIPLoaderfitting
: ระดับที่เหมาะสมของ PowerPaintfunction
: ฟังก์ชั่น PowerPaint โปรดดูรายละเอียดที่หน้าของมันsave_memory
: หากตั้งค่าตัวเลือกนี้ โมดูลความสนใจจะแยกเทนเซอร์อินพุตออกเป็นชิ้น ๆ เพื่อคำนวณความสนใจในหลายขั้นตอน สิ่งนี้มีประโยชน์สำหรับการบันทึกหน่วยความจำบางส่วนเพื่อแลกกับความเร็วที่ลดลง หากคุณใช้ VRAM ไม่เพียงพอหรือได้รับ Error: total bytes of NDArray > 2**32
บน Mac ให้ลองตั้งค่าตัวเลือกนี้เป็น max
เมื่อใช้ฟังก์ชันเครือข่ายบางอย่าง ผู้เขียน PowerPaint แนะนำให้เพิ่มวลีลงในข้อความแจ้ง:
empty scene blur
empty scene
empty scene
ผู้ใช้ ComfyUI จำนวนมากใช้โหนดการสร้างข้อความแบบกำหนดเอง โหนด CLIP และเงื่อนไขอื่นๆ อีกมากมาย ฉันไม่ต้องการทำลายโหนดเหล่านี้ทั้งหมด ดังนั้นฉันจึงไม่ได้เพิ่มการอัปเดตทันทีและพึ่งพาผู้ใช้แทน การทดลองของฉันเองยังแสดงให้เห็นว่าการเพิ่มเติมเหล่านี้ไม่จำเป็นอย่างเคร่งครัด
รูปภาพแฝงอาจมาจากโหนด BrushNet หรือไม่ก็ได้ แต่ควรมีขนาดเท่ากับรูปภาพต้นฉบับ (หารด้วย 8 ในพื้นที่แฝง)
การปรับสภาพทั้ง positive
และ negative
ในโหนด BrushNet และ PowerPaint ใช้สำหรับการคำนวณภายใน แต่จากนั้นก็คัดลอกไปยังเอาต์พุตเท่านั้น
โปรดทราบว่าเวิร์กโฟลว์และโหนดทั้งหมดอาจไม่ทำงานกับ BrushNet เนื่องจากโครงสร้างของมัน ใส่การเปลี่ยนแปลงโมเดลไว้ข้างหน้าโหนด BrushNet ด้วย ไม่ใช่หลัง หากคุณต้องการโมเดลเพื่อทำงานกับรูปภาพหลังจากการอนุมาน BrushNet ให้ใช้ฐานหนึ่ง (ดูตัวอย่างการอัปเกรดด้านล่าง)
du_start
มีค่าเริ่มต้นเป็น 0: ขั้นตอนที่การปรับขนาด Downsample/Upsample เริ่มนำไปใช้du_end
มีค่าเริ่มต้นเป็น 4: ขั้นตอนที่การปรับขนาด Downsample/Upsample หยุดใช้xa_start
มีค่าเริ่มต้นเป็น 4: ขั้นตอนที่การปรับขนาด CrossAttention เริ่มนำไปใช้xa_end
มีค่าเริ่มต้นเป็น 10: ขั้นตอนที่การปรับขนาด CrossAttention หยุดใช้สำหรับตัวอย่างและคำอธิบาย โปรดดูที่นี่
BrushNet มีข้อ จำกัด บางประการ (จากกระดาษ):
น่าเสียดาย เนื่องจากลักษณะของโค้ด BrushNet บางโหนดจึงเข้ากันไม่ได้ เนื่องจากเรากำลังพยายามแก้ไขฟังก์ชันของ ComfyUI เดียวกัน
รายชื่อโหนดที่ไม่สามารถเปรียบเทียบได้
รหัสจะขึ้นอยู่กับ