المدونةشرح ComfyUI: كيف تحوّل العُقد توليد الصور بالذكاء الاصطناعي على جهازك إلى مسار تتحكم فيه بالكامل
تطوير الويب10 دقائق قراءة

شرح ComfyUI: كيف تحوّل العُقد توليد الصور بالذكاء الاصطناعي على جهازك إلى مسار تتحكم فيه بالكامل

دليل عملي إلى ComfyUI: لماذا يعتمد على العُقد بدل الأزرار الثابتة، وما العتاد الذي يحتاجه فعلًا، وكيف يعمل سير توليد الصور من النص، وأي إعدادات KSampler تهمّ، وكيف تُضاف أدوات تعديل الصور والإكمال الجزئي وLoRA وControlNet.

بهاء اسماعيل
قائد أمن المعلومات وDevOps
رسم لعُقد سير عمل متصلة على خلفية كحلية مع عنوان ComfyUI: توليد الصور محليًا بمسارات من العُقد

نماذج الصور المفتوحة مثل Stable Diffusion وFlux وQwen Image تشبه محركًا بلا لوحة قيادة. تحتاج إلى برنامج يحوّل وصفك النصي وإعداداتك وصورك المرجعية إلى صيغة يفهمها النموذج، ثم يحوّل ناتجه إلى صورة يمكنك حفظها.

وComfyUI أكثر هذه البرامج مرونة، وأكثرها إرباكًا في النظرة الأولى: بدل نموذج فيه حقول وزر «توليد»، تجد لوحة مليئة بالمربعات والأسلاك. يشرح هذا الدليل وظيفة هذه المربعات، والعتاد الذي تحتاجه، وكيف تبني مسارات العمل الأساسية وتعدّلها بنفسك.

لماذا العُقد بدل الأزرار الثابتة؟

الواجهات القائمة على النماذج والحقول، مثل Forge وFooocus، تُخفي مسار التوليد خلف شاشات ثابتة: تملأ الحقول وتضغط الزر، وتبقى الخطوات الوسيطة مخفية. هذا سهل التعلم، لكن تغيير المسار نفسه يعني انتظار المطورين حتى يضيفوا خيارًا جديدًا.

أما ComfyUI فيعرض المسار في صورة شبكة. كل خطوة (تحميل النموذج، ترميز الوصف، أخذ العينات، فك الترميز، الحفظ) عقدة مستقلة، وتربط العُقد بعضها ببعض بوصلات. يمكنك رؤية أي نتيجة وسيطة، واستبدال جزء دون المساس بالباقي، وحفظ الشبكة كاملة كسير عمل يُعاد استخدامه. وليس ComfyUI الأداة الوحيدة بهذه الفكرة؛ فبرنامج InvokeAI مثلًا يضم أيضًا محرر سير عمل قائمًا على العُقد إلى جانب لوحة الرسم.

مرّر أفقيًا لعرض جميع الأعمدة

الواجهات القائمة على الحقول مقابل ComfyUI
الجانبالواجهات القائمة على الحقولComfyUI
مسار التوليدثابت يحدده المطورونتبنيه من عُقد تربطها وتعيد ترتيبها
الشفافيةالخطوات الوسيطة مخفيةيمكن معاينة أي ناتج أو إعادة استخدامه
إعادة التشغيلتعيد المهمة كاملة عادةًتعيد تشغيل العُقد التي تغيّرت مدخلاتها فقط
نوع الوسائطصور ثابتة غالبًاصور وفيديو وصوت ونماذج ثلاثية الأبعاد وغيرها حسب النموذج
منحنى التعلمسهلأصعب في البداية

صف «إعادة التشغيل» مهم: ComfyUI لا يعيد تنفيذ إلا الأجزاء التي تغيّرت مدخلاتها، فتعديل الخطوة الأخيرة لا يعيد تحميل النموذج ولا يكرر كل ما قبلها.

ما العتاد الذي تحتاجه؟

تتوزع المهمة على ثلاثة أجزاء من جهازك. ذاكرة كرت الشاشة (VRAM) تحمل أوزان النموذج المستخدمة الآن والبيانات التي يعمل عليها المُعايِن (Sampler). وذاكرة الجهاز (RAM) تحمل النماذج المحمّلة غير المطلوبة في اللحظة الحالية، وأجزاء النموذج التي لا تتسع لها ذاكرة الكرت. أما قرص SSD فيخزّن ملفات النماذج، وحجم الواحد منها كثيرًا ما يبلغ عدة جيجابايت.

رسم توضيحي: ذاكرة كرت الشاشة تحمل أوزان النموذج المستخدمة وبيانات المُعايِن، والرام تحمل النماذج المنتظرة والأجزاء التي لا تتسع لها ذاكرة الكرت، وقرص SSD يخزّن ملفات النماذج، ويقول المشروع إن النماذج الكبيرة تعمل بذاكرة كرت 4 جيجابايت مع 8 جيجابايت رام.
كيف يوزّع ComfyUI العمل على ذاكرة الكرت والرام وقرص SSD.

يقول المشروع إن ComfyUI يستطيع تشغيل حتى النماذج الكبيرة بذاكرة كرت لا تتجاوز 4 جيجابايت مع 8 جيجابايت رام، عبر نقل الأوزان تباعًا بين الرام وكرت الشاشة. هذا يجعل الكروت الضعيفة صالحة للاستخدام لا سريعة: كلما زادت ذاكرة الكرت قلّ النقل وأسرعت النتائج، خاصة مع نماذج الصور الكبيرة والفيديو. فمثلًا يصف الدرس الرسمي لنموذج SD1.5 هذا النموذج، الذي يبلغ حجمه نحو 4 جيجابايت، بأنه يعمل بسلاسة على كرت منزلي بذاكرة 6 جيجابايت تقريبًا.

كروت NVIDIA هي الأوسع دعمًا. وبحسب متطلبات التشغيل الرسمية، يعمل ComfyUI أيضًا على كروت AMD عبر ROCm (على Linux وWindows)، وكروت Intel Arc، وأجهزة Mac بمعالجات Apple Silicon عبر واجهة MPS في PyTorch، بل وعلى المعالج وحده لكن بسرعة أبطأ كثيرًا. بعض العُقد الإضافية التي يكتبها المجتمع مصممة مع وضع NVIDIA في الحسبان، فتأكد من توافقها قبل الاعتماد عليها مع عتاد آخر.

وهناك ثلاث طرق للتثبيت. تطبيق سطح المكتب هو الأسهل. والنسخة المحمولة لنظام Windows تضم Python خاصًا بها في مجلد واحد، فلا تتعارض مع برامجك الأخرى، ولها إصدارات لكروت NVIDIA وAMD وIntel. أما التثبيت اليدوي عبر Git فيعمل على كل الأنظمة ويعطيك أحدث التغييرات أولًا.

تشريح العقدة

كل عقدة تتبع التصميم نفسه. شريط العنوان يعرض اسمها ويتيح طيّها، ومن قائمة النقر بالزر الأيمن (أو شريط الأدوات العائم عند تحديدها) تغيّر وضع تشغيلها، مثل التخطي. وفي داخلها أدوات الضبط: حقول أرقام ومربعات نص وقوائم منسدلة. المدخلات على الحافة اليسرى، والمخرجات على الحافة اليمنى.

رسم مبسّط لعقدة KSampler: شريط العنوان في الأعلى، ومنافذ الإدخال model وpositive وnegative وlatent_image على اليسار، ومخرج LATENT على اليمين، وأدوات ضبط seed وsteps وcfg والمُعايِن والمُجدوِل وdenoise.
أجزاء العقدة، وعقدة KSampler مثالًا.

كل وصلة تحمل نوعًا واحدًا من البيانات، ويلوّن ComfyUI المنافذ والوصلات حسب النوع. لا يمكنك ربط منفذين إلا إذا كانا من النوع نفسه، وهذا يمنع كثيرًا من الأخطاء. الألوان في الجدول هي الألوان الافتراضية الواردة في التوثيق الرسمي، وقد تغيّرها السمات (Themes).

مرّر أفقيًا لعرض جميع الأعمدة

أنواع البيانات الشائعة في ComfyUI
النوعما الذي يحملهاللون الافتراضي
MODELنموذج الانتشار (UNet أو DiT) الذي يزيل الضوضاءخزامي فاتح
CLIPمُرمّز النص الذي يحوّل الوصف إلى متجهاتأصفر
VAEيحوّل بين البكسلات والفضاء الكامنوردي داكن
CONDITIONINGالوصف بعد ترميزه وأي توجيه آخربرتقالي
LATENTالصورة المضغوطة التي يعمل عليها المُعايِنوردي
IMAGEبكسلات RGB عاديةأزرق
MASKالمنطقة المطلوب تعديلها من الصورةأخضر

سير العمل الأساسي: من النص إلى الصورة

سير العمل الافتراضي يضم ستة أنواع من العُقد، وكل سير عمل آخر تقريبًا تنويع عليه.

مخطط سير العمل الافتراضي من النص إلى الصورة: ترسل Load Checkpoint مخرج CLIP إلى عقدتي CLIP Text Encode، وMODEL إلى KSampler، وVAE إلى VAE Decode؛ وتغذي Empty Latent Image عقدة KSampler، التي تغذي VAE Decode، ثم Save Image.
سير العمل الافتراضي من النص إلى الصورة، وما ينتقل عبر كل وصلة.
  • Load Checkpoint تقرأ ملف النموذج وتُخرج ثلاثة أشياء: MODEL وCLIP وVAE.
  • عقدتا CLIP Text Encode تستخدمان CLIP لترميز الوصف الإيجابي (ما تريده) والوصف السلبي (ما لا تريده). ويذهب ناتجهما CONDITIONING إلى مدخلي positive وnegative في المُعايِن.
  • Empty Latent Image تُنشئ اللوحة الفارغة في الفضاء الكامن، وفيها تحدد العرض والارتفاع وعدد الصور في الدفعة.
  • KSampler تأخذ النموذج والوصفين واللوحة الكامنة، وتزيل الضوضاء خطوة بعد خطوة.
  • VAE Decode تحوّل ناتج المُعايِن الكامن إلى بكسلات باستخدام VAE.
  • Save Image (أو Preview Image) تعرض النتيجة وتحفظها في مجلد output.

لماذا لوحة «كامنة»؟ نماذج الانتشار لا تعمل على البكسلات مباشرة. ومع أدوات VAE التي تستخدمها Stable Diffusion وFlux، تكون الصورة الكامنة أصغر 8 مرات من الصورة في كل بُعد، فتصبح صورة 1024 × 1024 لوحة كامنة بحجم 128 × 128. لهذا يمكن التوليد على كروت منزلية، ولهذا يتغير العرض والارتفاع في ComfyUI بخطوات من 8.

إعدادات KSampler المهمة

في عقدة KSampler تُصنع الصورة فعلًا، وإعداداتها تحدد الجودة والسرعة ومدى التزام النتيجة بالوصف.

بطاقات تلخص إعدادات KSampler: البذرة، وعدد الخطوات (الافتراضي 20)، وCFG (الافتراضي 8، وFlux يعمل بـ 1)، والمُعايِن، والمُجدوِل، وdenoise (1.0 للتوليد من النص).
إعدادات KSampler الستة وقيمها الافتراضية.

البذرة (seed) تحدد الضوضاء التي يبدأ منها التوليد. البذرة نفسها مع النموذج والإعدادات والبرنامج نفسها تعطي الصورة نفسها، وخيار control after generate يحدد هل تبقى البذرة ثابتة بعد كل تشغيل، أم تتغير عشوائيًا، أم تزيد أو تنقص بواحد. ينشئ ComfyUI هذه الضوضاء على المعالج، وهذا يساعد على تطابق النتائج بين الأجهزة، لكن التكرار التام غير مضمون: كرت شاشة أو تعريف أو إصدار مختلف من ComfyUI قد يغيّر الناتج قليلًا. حتى خيار التشغيل ‎--deterministic موصوف في البرنامج بأنه لا يجعل الصور متطابقة في كل الحالات.

الخطوات (steps) عدد مراحل إزالة الضوضاء، والقيمة الافتراضية 20. زيادة الخطوات تطيل الوقت، وتحسّن التفاصيل عادةً حتى حد معيّن فقط. وبعض النماذج مصممة لخطوات قليلة جدًا: سير العمل الرسمي لنموذج Flux.1 Schnell يستخدم 4 خطوات.

قيمة CFG تتحكم في قوة التزام الصورة بالوصف. القيمة الافتراضية 8؛ والقيمة المرتفعة جدًا تضر بالجودة، فتظهر غالبًا ألوان حادة وتشوهات، والمنخفضة جدًا تترك النموذج يبتعد عن الوصف. والمدى المناسب يختلف حسب النموذج: النماذج المقطّرة مثل Flux تعمل بقيمة CFG تساوي 1، وأمثلة ComfyUI الخاصة بـ Flux تنص على ذلك صراحة.

المُعايِن (sampler) هو الخوارزمية التي تزيل الضوضاء. Euler بسيط وسريع، وDPM++ 2M خيار شائع يصل إلى نتيجة جيدة بعدد معتدل من الخطوات، أما أنواع SDE و«ancestral» فتضيف ضوضاء جديدة أثناء التوليد، وهذا يغيّر طابع الصورة ويجعل النتائج أكثر تنوعًا.

المُجدوِل (scheduler) يحدد كيف تتوزع مستويات الضوضاء على الخطوات. فمُجدوِل Karras مثلًا يخصص جزءًا أكبر من الخطوات للمرحلة الأخيرة قليلة الضوضاء، ويرى كثيرون أنه يعطي تفاصيل أدق.

قيمة denoise تحدد مقدار ما يُستبدل من اللوحة الكامنة الأولى. اتركها 1.0 عند التوليد من النص، أما القيم الأقل فهي لتعديل الصور، كما سيأتي.

من الفضاء الكامن إلى PNG، وسير العمل داخل الصورة

تشغّل عقدة VAE Decode جزء فك الترميز في VAE لتحويل الصورة الكامنة إلى بكسلات عادية، ثم تكتب Save Image النتيجة في مجلد output الخاص بـ ComfyUI.

ويحفظ ComfyUI أيضًا سير العمل كاملًا، بما فيه البذرة، داخل بيانات ملف PNG الوصفية. اسحب الصورة وأفلتها على اللوحة، فتظهر الشبكة نفسها التي صنعتها، ولذلك تصلح صور PNG وسيلة سهلة لمشاركة مسارات العمل. لكن انتبه إلى أمرين: خيار التشغيل ‎--disable-metadata يوقف هذه الميزة، والمواقع والتطبيقات التي تعيد حفظ الصور أو ضغطها قد تحذف هذه البيانات.

تعديل الصور والإكمال الجزئي

لتعديل صورة موجودة (image-to-image)، استبدل Empty Latent Image بعقدتين: Load Image ثم VAE Encode التي تحوّل صورتك إلى صورة كامنة. أرسل الناتج إلى KSampler واخفض قيمة denoise.

سلسلة تعديل الصور: Load Image ثم VAE Encode ثم KSampler بقيمة denoise أقل من 1 ثم VAE Decode، ومقياس denoise يحدد 0.2 إلى 0.4 للحفاظ على البنية و0.5 إلى 0.7 لأسلوب جديد مع التكوين نفسه، وخياران للإكمال الجزئي: VAE Encode (for Inpainting) وSet Latent Noise Mask.
تعديل الصور، ونقاط بداية تقريبية لقيمة denoise، وطريقتان للإكمال الجزئي.

تصبح denoise هنا الإعداد الأهم: كلما انخفضت بقيت النتيجة أقرب إلى الأصل. وكنقطة بداية تقريبية، القيم المنخفضة بين 0.2 و0.4 تحافظ على البنية وتغيّر التفاصيل، والقيم بين 0.5 و0.7 تغيّر الأسلوب أكثر مع الإبقاء على التكوين العام في الغالب. والقيمة المناسبة تختلف حسب النموذج والصورة. ولاحظ أن خفض denoise لا يعني خطوات أقل: يشغّل ComfyUI عدد الخطوات الذي حددته، لكن على الجزء قليل الضوضاء من جدول أطول، كما يوضح دليل تعديل الصور الرسمي.

أما الإكمال الجزئي (inpainting) فيغيّر جزءًا من الصورة فقط. ترسم قناعًا بمحرر الأقنعة المدمج (أو تستخدم شفافية الصورة)، فيحدد القناع للمُعايِن أين يُسمح له بالعمل. وتوفر النسخة الأساسية من ComfyUI عدة طرق لذلك (يشرح دليل الإكمال الجزئي الطريقة الأولى):

  • VAE Encode (for Inpainting) تملأ المنطقة المحددة بلون رمادي محايد قبل الترميز، لذا تعمل أفضل مع denoise تساوي 1.0، ويُفضَّل مع نموذج مدرَّب على الإكمال الجزئي. وإعدادها grow_mask_by يوسّع القناع قليلًا لتخفيف أثر الحواف.
  • Set Latent Noise Mask تحتفظ بالمحتوى الأصلي تحت القناع، فتناسب التعديلات الأصغر بقيمة denoise أقل ومع النماذج العادية.
  • InpaintModelConditioning تجهّز الصورة والقناع والوصف معًا لنماذج الإكمال الجزئي.

LoRA وControlNet

ملف LoRA إضافة صغيرة تعدّل النموذج نحو أسلوب أو شخصية أو موضوع معيّن دون أن تحل محله. ويكون عادةً أصغر كثيرًا من ملف النموذج الذي يعدّله، ويختلف حجمه حسب النموذج الأساسي وطريقة تدريبه. توضع عقدة Load LoRA بين Load Checkpoint وبقية الشبكة على مساري MODEL وCLIP معًا. ويتحكم إعدادا strength_model وstrength_clip في قوة تأثيرها على نموذج الصور وعلى مُرمّز النص، ويمكن ربط أكثر من عقدة Load LoRA على التوالي.

مخطط يوضح عقدة Load LoRA بين Load Checkpoint وبقية سير العمل على مساري MODEL وCLIP، وعقدة Apply ControlNet التي تأخذ الوصف المرمّز ونموذج ControlNet وخريطة مرجعية معالجة قبل KSampler.
LoRA تعدّل النموذج ومُرمّز النص، وControlNet يضيف توجيهًا إلى الوصف.

أما ControlNet فيوجّه تكوين الصورة بخريطة مرجعية بدل الكلمات: حواف، أو عمق، أو وضعية جسم. تحوّل عقدة معالجة مسبقة (preprocessor) صورتك المرجعية إلى هذه الخريطة. تضم النسخة الأساسية من ComfyUI عقدة Canny لاستخراج الحواف، أما معظم أدوات المعالجة الأخرى (العمق والخطوط ووضعيات OpenPose وغيرها) فتأتي من حزم عُقد إضافية مثل comfyui_controlnet_aux.

تحمّل عقدة Load ControlNet النموذج، وتضيفه عقدة Apply ControlNet إلى الوصفين الإيجابي والسلبي قبل وصولهما إلى KSampler. يحدد إعداد strength قوة تقييده للصورة، ويحدد start_percent وend_percent الجزء من عملية التوليد الذي يعمل فيه. ويعرض دليل ControlNet الرسمي مثالًا كاملًا.

كيف تبقي مسارات العمل الكبيرة مرتبة؟

تكبر مسارات العمل بسرعة، وبعض العادات تبقيها مقروءة:

  • المجموعات (Ctrl+G) تضع إطارًا ملونًا حول العُقد المترابطة، مثل «الأوصاف» أو «التكبير».
  • نقاط إعادة التوجيه (Reroute) تبعد الأسلاك عن الطريق، وفي اللوحة ميزة مدمجة لذلك يُنصح بها في مسارات العمل الجديدة.
  • التخطي (Bypass عبر Ctrl+B) يتجاوز العقدة ويمرر مدخلها كما هو، فيمكنك إيقاف LoRA دون إعادة توصيل. أما الكتم (Mute عبر Ctrl+M) فيوقف العقدة تمامًا، فتتعطل كل عقدة تعتمد عليها.
  • الشبكات الفرعية (Subgraphs) تجمع مجموعة عُقد في عقدة واحدة قابلة لإعادة الاستخدام.
  • عُقد Primitive تتيح لقيمة واحدة، مثل العرض أو الارتفاع، أن تغذي عدة عُقد في الوقت نفسه.

الخلاصة

يحوّل ComfyUI توليد الصور من ضغط زر إلى تصميم مسار. منحنى التعلم حقيقي، لكن المفاهيم قليلة: أنواع البيانات والوصلات، والفرق بين الفضاء الكامن وفضاء البكسلات، وإعدادات المُعايِن، والإضافات التي تدخل على مساري الوصف والنموذج. وحين تتضح هذه المفاهيم، تستطيع قراءة أي سير عمل منشور، وإصلاحه حين يتعطل، وتكييفه مع عتادك.

وأسرع طريقة للبدء هي سير العمل الافتراضي من النص إلى الصورة: غيّر إعدادًا واحدًا في كل مرة ولاحظ أثره، ثم أضف تعديل الصور أو LoRA أو ControlNet خطوة بعد خطوة.

هل ترغب في تطبيق هذه الحلول في مشروعك؟

تواصل مع خبرائنا لمناقشة أفكارك وتحويلها إلى حلول رقمية ناجحة.

تواصل مع فريقنا الآن