هووورا

اکران رسمی نسخه جدید بیت گرف

۲ روز و ۰۷:۳۷
هوش مصنوعی

اتصال نودها در ComfyUI؛ آناتومی Data Flow و شناخت کامل انواع داده

در این مقاله با منطق اتصال نودها در ComfyUI و مفهوم Data Flow آشنا می‌شوید و یاد می‌گیرید هر نوع داده چه نقشی در ورک‌فلو دارد. همچنین ۸ نوع داده اصلی شامل MODEL، CLIP، VAE، LATENT، IMAGE، MASK، CONDI…

ارسطو اعتمادی
۳۱ اردیبهشت ۱۴۰۵ · 32 دقیقه مطالعه
اتصال نودها در ComfyUI؛ آناتومی Data Flow و شناخت کامل انواع داده

این مقاله بخش دوم از سری ۴ قسمتی آکادمی بیت گرف درباره‌ی ساخت ورک‌فلو در ComfyUI است:

در قسمت اول این سری، یاد گرفتیم که چطور با تفکر معکوس ورک‌فلو طراحی کنیم، از خروجی به ورودی فکر کنیم و یک نقشه‌ی ذهنی از نودهای لازم بسازیم. اما یک سؤال مهم باقی ماند: «چطور بفهمم کدام نود به کدام نود باید وصل بشه؟»

اگر تجربه‌ی کار با ComfyUI داشته باشید، حتماً این صحنه را دیده‌اید: یک کابل را از یک نود می‌کشید و سعی می‌کنید به نود دیگری وصل کنید، اما اتصال برقرار نمی‌شود. نود مقصد، پورت ورودی دارد اما اتصال شما را قبول نمی‌کند. چرا؟ این یک باگ نیست. این یک قاعده‌ی بنیادی در ComfyUI است که اکثر کاربران مبتدی آن را نمی‌شناسند.

راز این قاعده، در نوع داده‌ها (Data Types) نهفته است. هر پورت در ComfyUI، فقط یک نوع خاص از داده را می‌پذیرد. اگر سعی کنید نوع اشتباهی را وصل کنید، اتصال برقرار نمی‌شود. این محدودیت در واقع یک نعمت پنهان است، چون ComfyUI به‌جای اینکه به شما اجازه دهد یک ورک‌فلوی نادرست بسازید و بعد در زمان اجرا با خطای مرموز روبه‌رو شوید، از همان ابتدا جلوی اشتباه را می‌گیرد.

هدف این مقاله این است: در پایان، شما بتوانید فقط با نگاه به رنگ یک پورت، حدس بزنید چه نوع داده‌ای در آن جریان دارد، به کدام نود وصل می‌شود، و چرا این اتصال منطقی است. این مهارت، شما را از یک کاربر مبتدی به سطحی می‌رساند که می‌توانید به‌سرعت هر ورک‌فلوی ناآشنا را بفهمید، حتی workflowهایی که اولین‌بار است می‌بینید.

هوش مصنوعی فلاکس (FLUX) + آموزش نصب و استفاده به زبان ساده

در این مقاله هوش مصنوعی فلاکس (FLUX) را معرفی می کنیم و با نحوه نصب و استفاده از این هوش مصنوعی قدرتمند آشنا می شویم. همچنین سخت افزار لازم برای کار با آن را هم مورد بررسی قرار می دهیم.

چرا نوع داده در ComfyUI اهمیت بنیادی دارد؟

برای فهم اهمیت data types، بیایید یک تشبیه ساده بزنیم. تصور کنید آشپزخانه‌ای دارید با دستگاه‌های مختلف: یک آبمیوه‌گیری، یک قهوه‌ساز، یک توستر. هر کدام از این دستگاه‌ها، فقط یک نوع خاص از ورودی را می‌پذیرند: آبمیوه‌گیری میوه می‌خواهد، قهوه‌ساز پودر قهوه می‌خواهد، توستر نان می‌خواهد. اگر سعی کنید نان را در آبمیوه‌گیری بریزید، نتیجه یا فاجعه است یا اصلاً جواب نمی‌دهد.

اتصال نودها در ComfyUI
پرامپت تصویر
Imagine you have a kitchen with various appliances: a juicer, a coffee maker, a toaster. Each of these appliances accepts only one specific type of input: the juicer wants fruit, the coffee maker wants ground coffee, the toaster wants bread. If you try to put bread in the juicer, the result is either disaster or it doesn’t work at all..

ComfyUI همین منطق را برای نودها دارد. هر نود مثل یک «دستگاه» است که فقط نوع خاصی از ورودی را قبول می‌کند و یک نوع خاص از خروجی تولید می‌کند. در مستندات رسمی ComfyUI، این دسته‌بندی به‌صراحت تعریف شده: هر datatype یک امضای منحصربه‌فرد دارد که در سطح کد، یک کلاس Python خاص است.

سه نتیجه‌ی عملی این موضوع برای شما به‌عنوان کاربر:

اول، ComfyUI خودش از شما در برابر اشتباه محافظت می‌کند. اگر سعی کنید یک نود غلط را وصل کنید، اتصال برقرار نمی‌شود. این یعنی شما نمی‌توانید یک ورک‌فلوی نادرست بسازید (حداقل از نظر type-correctness). این ویژگی در زبان‌های برنامه‌نویسی، به‌نام strong typing شناخته می‌شود و در نرم‌افزارهای حرفه‌ای، استاندارد است.

اتصال نودها در ComfyUI
اتصال نود اشتباه

دوم، رنگ‌ها به شما یاد می‌دهند. هر نوع داده در ComfyUI یک رنگ منحصربه‌فرد دارد. وقتی به یک ورک‌فلو نگاه می‌کنید، حتی بدون خواندن نام نودها، می‌توانید با ردیابی رنگ‌ها، جریان داده را تشخیص دهید. این یک زبان بصری است که در همه‌ی ابزارهای node-based استاندارد (مثل Blender، Houdini، Nuke) هم وجود دارد.

اتصال نودها در ComfyUI
رنگ های نودها

سوم، می‌توانید نود مناسب را پیدا کنید. وقتی می‌دانید چه نوع داده‌ای دارید و چه نوع داده‌ای می‌خواهید، می‌توانید در منوی Add Node، شاخه‌ی مناسب را پیدا کنید. این کار، یافتن نودها را از «جستجوی کور» به «جستجوی هدفمند» تبدیل می‌کند.

اتصال نودها در ComfyUI
جستجوی هدفمند نودها

بینش کلیدی: یاد گرفتن انواع داده در ComfyUI، شبیه یاد گرفتن «الفبا» قبل از خواندن کتاب است. ممکن است ابتدا حوصله‌بر به نظر برسد، اما بدون آن، نمی‌توانید هیچ ورک‌فلوی پیچیده‌ای را به‌درستی بفهمید. این مقاله، الفبای ComfyUI را به شما یاد می‌دهد.

قاعده‌ی طلایی؛ همرنگ‌به‌همرنگ

اولین و مهم‌ترین قاعده‌ای که باید حفظ کنید، این است: هر پورت با رنگ X، فقط به پورت با رنگ X وصل می‌شود. این یک قاعده‌ی سفت‌وسخت است که هیچ استثنایی ندارد. اگر سعی کنید یک پورت بنفش را به یک پورت زرد وصل کنید، ComfyUI اتصال را قبول نمی‌کند.

این قاعده، در عمل به این صورت کار می‌کند:

اتصال نودها در ComfyUI

نکته‌ی مهم: گاهی ممکن است یک نود چند پورت ورودی از یک نوع داشته باشد. مثلاً KSampler دو پورت CONDITIONING دارد (positive و negative). در این موارد، شما باید با توجه به نام پورت تشخیص دهید کدام به کدام وصل می‌شود، نه فقط با رنگ.

نکته‌ی پیشرفته: بعضی custom nodeها رنگ پورت‌ها را تغییر می‌دهند یا نوع‌های جدید معرفی می‌کنند (مثلاً نودهای IP-Adapter یا AnimateDiff). اگر با ورک‌فلویی روبه‌رو شدید که رنگ‌های غیرعادی دارد، احتمالاً از custom node استفاده شده. در این موارد، با hover کردن (نگه داشتن کرسر ماوس) روی پورت، می‌توانید نام دقیق نوع داده را ببینید.


استثنای جالب، تبدیل widget به input

یک استثنای ظاهری از قاعده‌ی همرنگ وجود دارد: گاهی شما یک «widget» (مثل عدد یا متن داخل نود) را با راست‌کلیک به یک «input» تبدیل می‌کنید. در این حالت، یک پورت جدید پدیدار می‌شود که می‌تواند یک نوع primitive (INT، FLOAT، STRING) را بپذیرد. این پورت‌ها رنگ‌های متفاوتی دارند:

اتصال نودها در ComfyUI

این انواع، اغلب برای connect کردن نودها به یکدیگر در مواردی مثل seed sharing، prompt sharing، یا پارامترهای دینامیک استفاده می‌شوند. اما در ورک‌فلوهای پایه‌ای که در این مقاله بررسی می‌کنیم، نیازی به آن‌ها ندارید.

هشت نوع داده‌ی اصلی در ComfyUI

حالا که قاعده‌ی همرنگ را فهمیدیم، نوبت به شناخت خود رنگ‌ها می‌رسد. در این بخش، ۸ نوع داده‌ی اصلی ComfyUI را یکی‌یکی بررسی می‌کنیم. این ۸ نوع، حدود ۹۵ درصد همه‌ی ورک‌فلوهای رایج را پوشش می‌دهند. اگر این ۸ نوع را خوب بفهمید، می‌توانید با اطمینان وارد دنیای ComfyUI شوید.

برای هر نوع داده، چهار چیز توضیح می‌دهیم: چیست، کجا تولید می‌شود، کجا مصرف می‌شود، و نکته‌ی مهم درباره‌اش. این چهار بخش، الگوی ذهنی شما را برای هر نوع داده می‌سازند.

اول : MODEL، قلب diffusion (بنفش)

MODEL یعنی شبکه‌ی عصبی اصلی که فرآیند denoising را انجام می‌دهد. این قلب تپنده‌ی هر ورک‌فلو است. مدل، چیزی است که «یاد گرفته» چطور از noise، یک تصویر منسجم بسازد. وقتی می‌گویید «SDXL» یا «FLUX» یا «Stable Diffusion 1.5»، در واقع به MODEL اشاره می‌کنید.

اتصال نودها در ComfyUI

یک نکته‌ی مهم: MODELها می‌توانند تغییر یافته باشند، مثلاً وقتی یک LoRA اعمال می‌کنید، MODEL اصلی به یک «MODEL جدید با ویژگی LoRA» تبدیل می‌شود. این یعنی اگر در ورک‌فلوی شما، بین Load Checkpoint و KSampler یک نود LoRA Loader قرار دارد، در واقع MODEL در حال «پاس‌کاری» است. هر نود MODEL را می‌گیرد، چیزی به آن اضافه می‌کند، و یک MODEL جدید را پاس می‌دهد.


دوم: CLIP، مترجم متن به vector (زرد)

CLIP یک شبکه‌ی عصبی جداگانه است که متن را به embedding (vector عددی) تبدیل می‌کند. وقتی شما یک پرامپت متنی می‌نویسید، آن متن باید به فرمی تبدیل شود که مدل diffusion بفهمد. CLIP این کار را می‌کند. در واقع، اسم آن سرنام «Contrastive Language-Image Pre-training» است. یعنی شبکه‌ای که یاد گرفته بین متن و تصویر، ارتباط برقرار کند.

اتصال نودها در ComfyUI

یک کشف مهم: شاید فکر کنید پرامپت متنی شما مستقیماً به KSampler می‌رود. اما در واقع، KSampler متن نمی‌فهمد. KSampler فقط CONDITIONING می‌فهمد (که در ادامه بررسی می‌کنیم). برای تبدیل متن به CONDITIONING، باید از CLIP به‌عنوان «مترجم» استفاده کنید. CLIP Text Encode نودی است که این تبدیل را انجام می‌دهد.

اتصال نودها در ComfyUI
KSampler

سوم: VAE، پل بین IMAGE و LATENT (قرمز)

VAE (Variational AutoEncoder) یک شبکه‌ی عصبی است که کارش تبدیل بین فضای پیکسلی و فضای latent است. این یک مفهوم مهم است: مدل‌های diffusion، روی تصاویر کامل (با ابعاد ۱۰۲۴×۱۰۲۴ مثلاً) کار نمی‌کنند. آن‌ها روی یک نسخه‌ی فشرده‌شده‌ی هشت‌برابر کوچک‌تر کار می‌کنند که به آن «latent» می‌گویند. VAE همان دستگاهی است که تصویر را به latent تبدیل می‌کند و برعکس.

اتصال نودها در ComfyUI

اگر مدل‌های زبانی مثل Claude را می‌شناسید، می‌توانید این تشبیه را بزنید: VAE شبیه «tokenizer» است. اما به‌جای تبدیل متن به token، تصویر را به latent تبدیل می‌کند. هر دو هدف یکی دارند: کوچک کردن داده‌ی ورودی به فرمی که مدل اصلی بتواند کارآمد روی آن کار کند.

چهارم: LATENT، فضای مخفی مدل (صورتی)

LATENT یک نمایش فشرده‌شده از یک تصویر است. به‌جای ۱۰۲۴×۱۰۲۴ پیکسل، یک latent معمولاً ۱۲۸×۱۲۸ بُعد دارد (یعنی هشت‌برابر کوچک‌تر در هر جهت). اما هر بُعد latent، اطلاعات معنایی غنی‌تری دارد. یعنی شامل ۴ کانال است (به‌جای ۳ کانال RGB).

اتصال نودها در ComfyUI

LATENT جایی است که سحر diffusion رخ می‌دهد. KSampler با latent کار می‌کند، نه با تصویر. اگر می‌خواهید روی یک تصویر کاری انجام دهید (مثل inpainting یا img2img)، اول باید آن تصویر را به latent تبدیل کنید (با VAE Encode)، سپس KSampler روی آن کار می‌کند، و در نهایت با VAE Decode به تصویر برمی‌گردد.

نکته‌ی پیشرفته: بعضی operationها (مثل rotate یا crop) را می‌توان مستقیم روی latent انجام داد، بدون تبدیل به تصویر. این کار سریع‌تر است و کیفیت را حفظ می‌کند. نودهایی مثل LatentRotate و LatentCrop این کار را انجام می‌دهند.


پنجم: IMAGE، تصویر RGB (آبی)

IMAGE همان چیزی است که فکر می‌کنید: یک تصویر RGB با ابعاد مشخص. این نوع داده، ساده‌ترین و قابل‌فهم‌ترین نوع در ComfyUI است. وقتی یک عکس را Load می‌کنید، یا یک نتیجه‌ی نهایی را Save می‌کنید، با IMAGE سروکار دارید.

اتصال نودها در ComfyUI

نکته‌ی فنی مهم: در ComfyUI،  نود IMAGE همیشه به‌صورت batch پردازش می‌شود. یعنی حتی یک تصویر تنها، در واقع یک batch با اندازه‌ی ۱ است. این موضوع زمانی مهم می‌شود که می‌خواهید چند تصویر را همزمان پردازش کنید. نود Image Batch چندین IMAGE را به یک batch تبدیل می‌کند.

اتصال نودها در ComfyUI
Image Batch

ششم: MASK، انتخاب نواحی (خاکستری)

MASK یک تصویر تک‌کاناله است که مشخص می‌کند کدام نواحی از یک تصویر مهم هستند و کدام نواحی نباید تغییر کنند. هر پیکسل ماسک، یک مقدار بین ۰ (سیاه = نادیده بگیر) تا ۱ (سفید = این ناحیه را پردازش کن) دارد. ماسک کلید فهم inpainting، outpainting و selective editing است.

اتصال نودها در ComfyUI

نکته‌ی کاربردی: یک ماسک می‌تواند soft یا hard باشد. ماسک hard، فقط ۰ و ۱ دارد (یا کاملاً سیاه یا کاملاً سفید). ماسک soft، می‌تواند مقادیر میانی هم داشته باشد، که به آن «feathered mask» می‌گویند. ماسک‌های soft، در ترکیب لبه‌های inpaint با باقی تصویر، نتایج طبیعی‌تری می‌دهند.

کدام نواحی از یک تصویر مهم هستند
یک ماسک می‌تواند soft یا hard باشد

هفتم: CONDITIONING، راهنمای KSampler (نارنجی)

CONDITIONING شاید مهم‌ترین مفهوم در فهم ComfyUI باشد و در عین حال، یکی از کمتر توضیح‌داده‌شده‌ها. CONDITIONING یعنی «شرایط» مجموعه‌ای از اطلاعات که به KSampler می‌گوید «این چیزی است که می‌خواهم تولید کنی». این اطلاعات می‌توانند از منابع مختلفی بیایند: پرامپت متنی، تصویر مرجع، یک ControlNet، یا حتی یک ماسک منطقه‌ای.

اتصال نودها در ComfyUI

یک کشف کلیدی: KSampler همیشه دو CONDITIONING می‌گیرد. یک positive (آنچه می‌خواهید) و یک negative (آنچه نمی‌خواهید). هر دو از طریق همان CLIP Text Encode تولید می‌شوند، فقط متن پرامپت متفاوت است. این یعنی در ورک‌فلوی شما، حداقل دو نود CLIP Text Encode دارید. یکی برای positive، یکی برای negative. این یک الگوی استاندارد است که در ۹۹ درصد ورک‌فلوها تکرار می‌شود.

بینش پیشرفته: CONDITIONING در ComfyUI، شبیه «layered prompt» است. هر بار که می‌خواهید یک شرط جدید اضافه کنید (مثل ControlNet، style، یا منطقه‌ی خاص)، آن شرط را به‌صورت یک تبدیل CONDITIONING اضافه می‌کنید. این انعطاف، یکی از دلایلی است که ComfyUI به‌مراتب قوی‌تر از ابزارهای ساده‌تر مثل Automatic1111 است.

اتصال نودها در ComfyUI
KSampler همیشه دو CONDITIONING می‌گیرد

هشتم: CONTROLNET، کنترل دقیق ساختار (سبز روشن)

CONTROLNET یک شبکه‌ی عصبی کمکی است که به مدل diffusion اجازه می‌دهد از یک ورودی ساختاری (مثل depth map، edge map، یا pose skeleton) راهنمایی بگیرد. ControlNet اولین بار در ۲۰۲۳ معرفی شد و انقلابی در کنترل دقیق تولید تصویر AI بود. در راهنمای رسمی ComfyUI Wiki، ControlNet به‌عنوان «دستیار مترجم» توصیف شده، کسی که reference image را به دستوراتی تبدیل می‌کند که مدل بفهمد.

اتصال نودها در ComfyUI

نحوه‌ی کار ControlNet در ورک‌فلو: شما یک reference image به نود Apply ControlNet می‌دهید، که این تصویر را با کمک مدل ControlNet، به یک CONDITIONING تقویت‌شده تبدیل می‌کند. این CONDITIONING سپس به KSampler می‌رود. نکته‌ی مهم: ControlNet خروجی نهایی نیست، یک تقویت‌کننده‌ی CONDITIONING است. وقتی این نکته را بفهمید، جایگاه ControlNet در ورک‌فلو روشن می‌شود.

نکته‌ی پایانی: این ۸ نوع، فقط نوع‌های اصلی هستند. در ComfyUI، انواع دیگری هم وجود دارند (SAMPLER، SIGMAS، NOISE، GUIDER) که برای ورک‌فلوهای پیشرفته استفاده می‌شوند. اما برای ۹۵ درصد کارهای روزمره، همین ۸ نوع کافی است. وقتی این ۸ نوع را مسلط شدید، بقیه‌ی نوع‌ها را به‌راحتی یاد می‌گیرید چون منطق یکسانی دارند.

اتصال نودها در ComfyUI

یافتن نود مناسب؛ راهنمای استفاده از منوی Add Node

حالا که می‌دانید چه نوع داده‌ای دارید و چه نوعی می‌خواهید، نوبت پیدا کردن نود مناسب برای این تبدیل می‌رسد. منوی Add Node در ComfyUI (با راست‌کلیک در فضای خالی) به‌صورت سلسله‌مراتبی سازماندهی شده. اگر این ساختار را بفهمید، در چند ثانیه می‌توانید هر نودی که نیاز دارید را پیدا کنید.

اتصال نودها در ComfyUI
راهنمای استفاده از منوی Add Node

ساختار منوی Add Node

منوی Add Node در ComfyUI، نودها را براساس نوع داده‌ای که تولید/مصرف می‌کنند دسته‌بندی می‌کند. در سطح اول، شاخه‌های اصلی این‌گونه‌اند:

اتصال نودها در ComfyUI

نکته‌ی کلیدی: اگر می‌دانید چه نوع خروجی می‌خواهید، به شاخه‌ی متناظر بروید. مثلاً اگر می‌خواهید با LATENT کار کنید (مثلاً ابعادش را تغییر دهید)، به شاخه‌ی latent بروید. اگر می‌خواهید روی ماسک کار کنید، به شاخه‌ی mask بروید. این منطق ساده، ۸۰ درصد جستجوهای شما را هدفمند می‌کند.

راه میانبر: نوار جستجو

اگر می‌دانید نام دقیق نود را می‌دانید، استفاده از نوار جستجوی بالای منوی Add Node یا دابل کلیک در صفحه کامفی یوآی، سریع‌ترین راه است. مثلاً تایپ کنید «encode» تا همه‌ی نودهایی که encode می‌کنند (VAE Encode، VAE Encode for Inpaint، CLIP Text Encode، EncodeAudio و...) را ببینید. این روش، به‌خصوص برای کاربران باتجربه، بهره‌وری بالایی دارد.

کشف نودهای ناآشنا

یک تکنیک عالی برای یاد گرفتن نودهای جدید: روی هر پورت در ComfyUI، با راست‌کلیک و انتخاب «Suggestions»، می‌توانید فهرستی از همه‌ی نودهایی را ببینید که این نوع را به‌عنوان ورودی می‌پذیرند یا تولید می‌کنند. این ویژگی در نسخه‌های جدید ComfyUI اضافه شده و یکی از کم‌شناس‌ترین قابلیت‌هاست. به‌جای جستجوی کور در منو، ComfyUI خودش به شما می‌گوید چه گزینه‌هایی دارید.

نکته‌ی حرفه‌ای: اگر در ComfyUI با نوع داده‌ی عجیبی روبه‌رو شدید که نمی‌شناسید (مثل GUIDER، NOISE، یا یک نوع custom)، روی پورت hover کنید تا نام دقیق نوع را ببینید. سپس در Google جستجو کنید «{type name} ComfyUI». اکثر اوقات، یک مستند یا مثال کاربردی پیدا می‌کنید. این عادت ساده، در طول زمان دانش شما را گسترش می‌دهد.


Converterها؛ پل‌های بین انواع داده

گاهی یک نود، نوعی از داده تولید می‌کند که نود مقصد آن را قبول نمی‌کند، اما این دو نوع ذاتاً قابل تبدیل هستند. در این موارد، شما نیاز به یک «converter» دارید. یک نود واسط که داده را از نوع A به نوع B تبدیل می‌کند. شناخت converterهای رایج، یکی از مهارت‌های کلیدی در ساخت ورک‌فلوهای پیچیده است.

هفت converter پراستفاده در ComfyUI:

اتصال نودها در ComfyUI

VAE Encode (for Inpaint)، یک converter ویژه

یک converter که سزاوار توجه ویژه است، VAE Encode (for Inpaint) می‌باشد. این نود سه ورودی می‌گیرد (IMAGE، MASK، VAE) و یک LATENT تولید می‌کند که اطلاعات ماسک هم در آن embed شده. این یعنی KSampler می‌فهمد فقط ناحیه‌ی ماسک‌شده باید تغییر کند و باقی LATENT حفظ شود. این یک تفاوت ظریف اما کلیدی بین Inpainting و img2img معمولی است.

درس فلسفی: هر زمان که دیدید بین دو نود نمی‌توانید مستقیم اتصال برقرار کنید، به‌جای تسلیم شدن، فکر کنید: «آیا یک converter بین این دو نوع وجود دارد؟» اغلب اوقات، یک نود واسط وجود دارد که این کار را انجام می‌دهد. کاوش در این فضای واسط، یکی از لذت‌های کار با ComfyUI است.


Debug کردن خطاهای اتصال در ComfyUI

حتی با شناخت کامل data types، گاهی با خطا روبه‌رو می‌شوید. در این بخش، رایج‌ترین خطاهای اتصال و راه‌حل آن‌ها را بررسی می‌کنیم. این بخش، شما را از سرگردانی در forumها نجات می‌دهد.

خطای ۱: «can't connect ports of different types»

این رایج‌ترین خطاست. ComfyUI به شما می‌گوید سعی می‌کنید دو نوع متفاوت را به هم وصل کنید. راه‌حل: یک converter پیدا کنید. به جدول بخش قبلی نگاه کنید، یا روی پورت راست‌کلیک کنید و Suggestions را ببینید.

خطای ۲: «Error occurred when executing X, expected Y but got Z»

این خطا در زمان اجرا (نه طراحی) رخ می‌دهد. ComfyUI اجازه‌ی اتصال داده، اما در اجرا متوجه شده که داده‌ی پاس‌شده، با انتظار نود مقصد سازگار نیست. اغلب این خطا به‌خاطر ناسازگاری نسخه‌ی مدل است. مثلاً سعی می‌کنید یک ControlNet مخصوص SD1.5 را با مدل SDXL استفاده کنید. راه‌حل: مطمئن شوید همه‌ی مدل‌های شما هم‌خانواده باشند (همه SD1.5، یا همه SDXL، یا همه FLUX).

خطای ۳: «CUDA out of memory»

این خطا فنی نیست، اما رایج است. به این معنی که VRAM کارت گرافیک شما پر شده. در ورک‌فلوهای پیچیده، چندین مدل همزمان load می‌شوند و حافظه را پر می‌کنند. راه‌حل‌ها:

اول، کاهش Batch Size در Empty Latent Image به ۱. دوم، استفاده از نود PurgeVRAM بین مراحل سنگین. سوم، استفاده از مدل‌های کوانتایز شده (GGUF) به‌جای مدل‌های اصلی FP16. چهارم، اضافه کردن flag lowvram در زمان اجرای ComfyUI.

خطای ۴: ورک‌فلو اجرا می‌شود اما خروجی غلط است

این بدترین نوع خطا چون ComfyUI به شما هیچ پیامی نمی‌دهد. ورک‌فلو اجرا می‌شود، تصویری تولید می‌شود، اما تصویر آن چیزی نیست که می‌خواستید. در این موارد، احتمالاً یک اتصال منطقی غلط دارید. یعنی نوع‌ها درست هستند، اما داده‌ی غلط به مکان غلط رفته. مثال‌های رایج:

  • Negative و Positive قاطی شده‌اند. پرامپت مثبت به ورودی negative متصل شده.
  • VAE اشتباه استفاده شده VAE برای SDXL، با مدل SD1.5 استفاده شده.
  • Seed همیشه ثابت KSampler با seed ثابت اجرا می‌شود، پس همیشه همان خروجی تولید می‌کند.
  • Denoise روی ۰ یا ۱ گیر کرده در img2img، denoise=1 یعنی شروع از صفر، denoise=0 یعنی هیچ تغییری نکن.

روش طلایی debug: وقتی خروجی عجیب می‌گیرید، یک نود Preview Image یا Save Image بین مراحل بگذارید تا ببینید در هر گام، تصویر چه شکلی است. این تکنیک شبیه «print debugging» در برنامه‌نویسی است و به شما می‌گوید دقیقاً کجا، تصویر از مسیر خارج شده.

اتصال نودها در ComfyUI
خطاهای اتصال در ComfyUI

سؤالات متداول

اگر یک پورت رنگ خاصی دارد که در ۸ نوع اصلی نیست، چه کار کنم؟

احتمالاً یک نوع از custom node است. روی پورت hover کنید تا نام دقیق نوع را ببینید. سپس در Google جستجو کنید. اکثر custom nodeها مستندات GitHub خود را دارند که نوع‌های جدید را توضیح می‌دهند. نکته‌ی مهم: هر بسته‌ی custom node معمولاً نوع‌های خاص خودش را معرفی می‌کند که فقط درون همان بسته معنا دارند (مثل IPAdapterModel در بسته‌ی IP-Adapter).

می‌توانم یک نوع را به نوع دیگر «اجبار» کنم؟

به‌صورت مستقیم نه. ComfyUI به این دلیل type-safe طراحی شده که از اشتباه جلوگیری کند. اما می‌توانید از converterها استفاده کنید. اگر converter استانداردی وجود ندارد، احتمالاً این دو نوع به‌طور بنیادی ناسازگار هستند و باید رویکرد ورک‌فلوی خود را تغییر دهید. در موارد نادر، می‌توانید با Primitive nodeها یا custom convertersها این کار را انجام دهید، اما این به‌ندرت لازم می‌شود.

چرا KSampler دو ورودی CONDITIONING دارد؟

یکی برای positive (آنچه می‌خواهید مدل تولید کند) و یکی برای negative (آنچه نمی‌خواهید). در عمل، مدل از این دو CONDITIONING برای تولید استفاده می‌کند. یعنی مدل را از negative دور می‌کند و به positive نزدیک می‌کند. شدت این کشش با پارامتر CFG (Classifier-Free Guidance) کنترل می‌شود. اگر فقط یک پرامپت دارید، می‌توانید negative را خالی بگذارید یا با کلمات عمومی نامطلوب (مثل «blurry, low quality») پر کنید.

چه فرقی بین VAE Encode و VAE Encode for Inpaint وجود دارد؟

VAE Encode عادی، فقط یک IMAGE می‌گیرد و یک LATENT می‌دهد. برای استفاده در img2img معمولی. VAE Encode for Inpaint، علاوه بر IMAGE، یک MASK هم می‌گیرد. این نود LATENTی تولید می‌کند که اطلاعات ماسک در آن embed شده. وقتی این LATENT به KSampler می‌رود، KSampler فقط در نواحی ماسک‌شده تغییر ایجاد می‌کند و باقی LATENT را دست‌نخورده نگه می‌دارد. این کلید فهم inpainting در ComfyUI است.

آیا می‌توانم چندین CONDITIONING را با هم ترکیب کنم؟

بله، و این یکی از قوی‌ترین قابلیت‌های ComfyUI است. نودهایی مثل Conditioning Combine، Conditioning Average، و Conditioning Concat، به شما اجازه می‌دهند چند CONDITIONING را ادغام کنید. این تکنیک، به‌خصوص برای ساختن پرامپت‌های لایه‌ای (مثل «یک منظره با سبک Van Gogh + در حال غروب آفتاب») فوق‌العاده مؤثر است. علاوه بر این، Conditioning (Set Area) به شما اجازه می‌دهد یک CONDITIONING را فقط به منطقه‌ی خاصی از تصویر اعمال کنید. تکنیکی به‌نام regional prompting.

چرا گاهی یک نود چند پورت ورودی از یک نوع دارد؟

به این خاطر که آن نود می‌تواند چندین ورودی هم‌نوع را به‌صورت جداگانه پردازش کند. مثلاً KSampler دو پورت CONDITIONING دارد (positive و negative). Apply ControlNet هم می‌تواند چند مدل ControlNet را روی یک تصویر اعمال کند. در این موارد، باید با نام پورت (نه فقط رنگ) تشخیص دهید کدام به کدام وصل می‌شود. ComfyUI نام هر پورت را کنار آن نمایش می‌دهد.


جمع‌بندی؛ از اتصال‌ها به الگوها

در این مقاله، یاد گرفتیم که اتصال نودها در ComfyUI تصادفی نیست. یک منطق دقیق و قابل‌پیش‌بینی دارد که حول قاعده‌ی همرنگ‌به‌همرنگ می‌چرخد. ۸ نوع داده‌ی اصلی (MODEL، CLIP، VAE، LATENT، IMAGE، MASK، CONDITIONING، CONTROL_NET) را با نقش و رنگ آن‌ها شناختیم. یاد گرفتیم چطور در منوی Add Node نود مناسب را پیدا کنیم و چطور با converterها بین انواع داده پل بسازیم.

اگر یک پیام کلیدی از این مقاله باید با خود ببرید، این است: ComfyUI یک زبان بصری دارد، و رنگ‌ها الفبای آن هستند. وقتی این الفبا را بشناسید، می‌توانید هر ورک‌فلوی ناآشنا را در عرض چند ثانیه بخوانید. فقط با نگاه کردن به رنگ‌ها و دنبال کردن جریان داده. این مهارت، شما را از یک کاربر مبتدی به سطحی می‌رساند که می‌توانید با اعتماد به نفس وارد هر ورک‌فلوی پیچیده‌ای شوید.

توصیه‌ی نهایی: همین امروز، یک ورک‌فلوی نمونه را در ComfyUI باز کنید و سعی کنید بدون خواندن نام نودها، فقط با ردیابی رنگ‌ها، جریان داده را تشخیص دهید. این تمرین، در عرض چند روز، چشمان شما را آموزش می‌دهد. وقتی این مرحله را گذراندید، آماده‌اید برای قسمت بعدی سری: کتابخانه‌ی الگوهای استاندارد ورک‌فلو.

در قسمت بعدی این سری: «کتابخانه‌ی الگوهای استاندارد ورک‌فلو در ComfyUI»  در قسمت ۳، با ۸ الگوی استاندارد آشنا می‌شوید که در ۹۰ درصد پروژه‌های واقعی استفاده می‌شوند: Basic Generation، Image-to-Image، Inpainting، ControlNet، Style Transfer، Upscaling، Multi-Stage Refinement، و Batch Processing. هر الگو با مثال عملی ارائه می‌شود.

۱۱۸ آتیش۱ دیدگاه1328 بازدید
ارسطو اعتمادی
۶۹۳ مقاله۱۲ دنبال‌کننده

کارشناس ارشد مهندسی مواد از دانشگاه تبریز. از ۱۳۹۰ در حوزه عکاسی و گرافیک‌ام؛ آنچه دلبستگی بود، حرفه شد. بیت گرف را ساختم، از دستش دادم و دوباره ( این‌بار استوارتر) از نو بنا کردم. مقصد روشن است: مرجعی جامع برای آموزش گرافیک، هوش مصنوعی و کد.

گفتگو و سوالات شما

۱

در این قسمت می‌توانید سوال یا نظر خود در مورد مقاله را مطرح کنید.

برای ثبت دیدگاه ابتدا وارد شوید

ورود به حساب
  • م
    مهمان۱ خرداد ۱۴۰۵

    خیلی ممنون از شما، خسته نباشید. اگه بشه آموزش درمورد نحوه "آموزش دادن" مدل هارم یاد بدین مثل loRa برای flux یا مدل های متنی, یک دنیا ممنون.

مقالات مرتبط

اگر این را دوست داشتید، ترتیب خواندن بعدی این است

این مقاله‌ها روی «ابزارهای هوش مصنوعی» هم‌پوشانی دارند، مجموع زمان مطالعه ۴۳ دقیقه

مشاهده همه
  1. ابزارهای هوش مصنوعی و ۱ برچسب دیگر

    آموزش هوش مصنوعی استیبل دیفیوژن و نصب آن در 7 مرحله

    در این مقاله آموزشی به معرفی و تعریف هوش مصنوعی استیبل دیفیوژن پرداخته و نصب آن را مرحله به مرحله به صورت تصویری پیش می‌بریم، همچنین لینک دانلود تمام چیزهایی که برای نصب استیبل دیفیوژن نیاز دارید را…

    بیت هاب۶ دی۱۸ دقیقه
  2. ابزارهای هوش مصنوعی و ۱ برچسب دیگر

    میدجورنی رایگان و نحوه استفاده از آن

    در این مقاله با استفاده از پلتفرم ChatGot به استفاده رایگان از میدجورنی می‌پردازیم. در ابتدا نحوه ورود و ثبت‌نام در این پلتفرم را بررسی کرده و بعد روش استفاده از آن و همچنین محدودیت‌هایی که در این پل…

    بیت هاب۱۲ دی۶ دقیقه
  3. ابزارهای هوش مصنوعی و ۱ برچسب دیگر

    هوش مصنوعی فلاکس (FLUX) + آموزش نصب و استفاده به زبان ساده

    در این مقاله هوش مصنوعی فلاکس (FLUX) را معرفی می کنیم و با نحوه نصب و استفاده از این هوش مصنوعی قدرتمند آشنا می شویم. همچنین سخت افزار لازم برای کار با آن را هم مورد بررسی قرار می دهیم.

    ارسطو اعتمادی۲۲ مرداد۱۲ دقیقه
  4. ابزارهای هوش مصنوعی و ۱ برچسب دیگر

    آموزش نصب هوش مصنوعی ComfyUI

    در این مقاله آموزشی به آموزش نصب هوش مصنوعی ComfyUI می پردازیم. ما در چند مرحله ساده روش نصب را توضیح دادیم تا بتوانید به آسانی این هوش مصنوعی قدرتمند را نصب کنید.

    مهدی فریدونی۲۴ مرداد۷ دقیقه
۱

دوره به سبد ثبت‌نام اضافه شد

رفتن به سبد