هذه هي العقد المخصصة لتنفيذ 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. الالتزام الأولي.
انسخ الريبو في دليل 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
على 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.safetensors
. يمكنك أخذه من هنا أو من مكان آخر. يمكنك أيضًا استخدام إصدار fp16. يجب وضعه في مجلد models/clip
الخاص بك.
هذا هو هيكل مجلد models/inpaint
الخاص بي:
لك يمكن أن تكون مختلفة.
فيما يلي مثال لسير العمل المقصود. يمكن العثور على سير العمل الخاص بالمثال داخل دليل "المثال".
سير العمل
سير العمل
سير العمل
في بعض الأحيان يؤدي الاستدلال وVAE إلى كسر الصورة، لذلك تحتاج إلى مزج الصورة في الرسم مع الصورة الأصلية: سير العمل. يمكنك رؤية نص غير واضح ومكسور بعد الطلاء في الصورة الأولى وكيف أفترض إصلاحه.
سير العمل
ControlNet حافة ماكرة
سير العمل
سير العمل
للترقية، يجب عليك استخدام النموذج الأساسي، وليس BrushNet. وينطبق الشيء نفسه على التكييف. لن تعمل الترقية الكامنة بين BrushNet وKSampler أو ستعطيك نتائج غريبة. ترجع هذه القيود إلى بنية BrushNet وتأثيرها على حسابات UNet.
سير العمل
إذا كانت لديك مشكلات في OOM، فيمكنك استخدام Evolved Sampling من AnimateDiff-Evolved:
سير العمل
في خيارات السياق، قم بتعيين context_length على عدد الصور التي يمكن تحميلها في VRAM. ستتم معالجة الصور في أجزاء بهذا الحجم.
سير العمل
عندما تعمل مع صورة كبيرة ويكون قناع الرسام الخاص بك صغيرًا، فمن الأفضل قص جزء من الصورة والعمل معه ثم مزجه مرة أخرى. لقد قمت بإنشاء عقدة لسير العمل هذا، انظر المثال.
سير العمل
سير العمل
غالبًا ما يكون من الصعب إزالة الجسم تمامًا، خاصةً إذا كان في المقدمة:
يجب أن تحاول إضافة وصف الكائن إلى الموجه السلبي ووصف المشهد الفارغ، كما هو الحال هنا:
dtype
، الإعداد الافتراضي هو torch.float16
. torch.dtype من BrushNet. إذا كان لديك بطاقة GPU أو سلسلة NVIDIA 16 قديمة، فحاول التبديل إلى torch.float32
. scale
، القيمة الافتراضية هي 1.0: "قوة" BrushNet. يتم ضرب مخرجات BrushNet scale
قبل إضافتها إلى المتبقي في الوحدة الأصلية.start_at
، القيمة الافتراضية هي 0: الخطوة التي يبدأ عندها تطبيق BrushNet.end_at
، القيمة الافتراضية هي 10000: الخطوة التي تتوقف عندها BrushNet عن التطبيق.فيما يلي أمثلة لاستخدام هاتين المعلمتين الأخيرتين.
CLIP
: PowerPaint CLIP الذي يجب تمريره من عقدة PowerPaintCLIPLoader.fitting
: درجة ملائمة PowerPaint.function
: وظيفة 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.
قائمة العقد المعروفة غير القابلة للتجزئة.
يعتمد الكود على