تعيش الحزم تحت دليل مستخدم ComfyUI على
<user>/comfyui-mcp-panel/apps/<app-id>/ — عمدًا ليس دليل مسارات سير العمل،
فلا يظهر تطبيق مخفي أبدًا في متصفّح مسارات سير العمل.
هناك تنفيذ تخزين وتشغيل واحد — مسارات HTTP الخاصة بحزمة اللوحة
(
/comfyui_mcp_panel/apps/*). ولوحة سطح المكتب، وتبويب التطبيقات في الجوّال،
وأدوات MCP المسمّاة apps_* كلها عملاء له، فيتصرّف التطبيق بالطريقة نفسها أينما
أطلقته منه.المتطلبات
تخدم التطبيقات حزمة اللوحة (comfyui-mcp-panel)، لا خادم MCP وحده. إن سبقت
الحزمة على ComfyUI لديك الميزة، يفشل apps مع action:"list" برسالة صريحة
«حزمة اللوحة على ComfyUI هذا أقدم من ميزة التطبيقات» — حدّث الحزمة وأعد تشغيل
ComfyUI.
تحويل سير عمل إلى تطبيق
في اللوحة، يفتح زر شريط الأدوات التطبيقات (بجانب Civitai) شبكة التطبيقات. وتحويل سير العمل المفتوح يفعل ثلاثة أشياء:- يستورد إعداد وضع APP في ComfyUI إن كان سير العمل يحمله أصلًا، وإلا يختار
المدخلات والمخرجات استدلاليًا (عناصر تحكّم الموجّه، والبذور، وإعدادات
العيّنة؛ وعقد فئة
SaveImageكمخرجات). وتُحترَم مدخلات وضع APP المستوردة على أي نوع عقدة، فتنجو نقاط وصول العقد المخصّصة من التحويل. - يمسح الاعتماديات — النماذج وحزم العقد المخصّصة التي يحتاجها المخطط —
في
manifest.deps. - يلتقط لقطة الموجّه بصيغة API. وتصير قيم عناصر التحكّم وقت التحويل
defaultالنموذج لكل مدخل.
appMode.inputs قيم nodeId وwidget وlabel وkind من
text أو number أو combo أو toggle أو image أو model؛ وتحمل القوائم
أيضًا choices. وهذا ما يعرض منه نموذج التشغيل — على سطح المكتب وعلى الجوّال.
إخفاء سير العمل
يسقطhideWorkflow ملف workflow.json من الحزمة بالكامل، فلا يُسلَّم المخطط
لمن يشغّل التطبيق أو يثبّته.
تشغيل تطبيق
يرقّع التشغيل قيم نموذجك في اللقطة المخزَّنة ويدرج النتيجة في قائمة الانتظار. ومفاتيح الترقيع هي"<nodeId>.<widget>" — مثلًا {"6.text": "a cat", "3.seed": 42}. ينقسم المفتاح عند أول نقطة فقط، فتبقى أسماء عناصر التحكّم
التي تحتوي نقاطًا (مكدّسات LoRA، lora_1.model) سليمة.
والترقيع صارم: مفتاح يخاطب عقدة أو مدخلًا غير موجود في اللقطة خطأ قاطع، لا
تخطي صامت. والخطأ يعني أن البيان انحرف عن اللقطة، والفشل بصوت أعلى خير من التشغيل
بقيم بالية. والمدخلات التي تحذفها تحتفظ بافتراضيات وقت التحويل.
يُرجع التشغيل prompt_id؛ استطلعه للحالة (pending → running → done، أو
unknown إن لم يسمع ComfyUI عنه قط) وللمخرجات المجمَّعة تحت كل عقدة مخرجات.
التشغيل على Pod في RunPod
يعيد مسار التشغيل على RunPod في اللوحة استخدام محرّك الترقيع نفسه في الوضع الجاف: تطلب اللوحة الموجّه المرقَّع دون إدراجه محليًا، وتدفع أي اعتماديات مثبَّتة الإصدار إلى الـ Pod، وتدرج الموجّه هناك بدلًا من ذلك.النشر والاستكشاف
تبويب الاستكشاف في اللوحة سجل عام (عامل Cloudflare مدعوم بـ D1 + R2) بقوائم الرائج / الجديد / الأكثر نجومًا وبحث. والرائج هوstars * 3 + runs لسبعة أيام.
ويرفع النشر الحزمة — البيان، والموجّه، وسير العمل ما لم يكن مخفيًا، والصورة
المصغّرة — تحت هوية منشئ مفتاحها sha256.
ويعرض التثبيت من الاستكشاف مربع موافقة على الاعتماديات أولًا: تُبلَّغ
deps التطبيق، ولا تُثبَّت بصمت أبدًا. ولا يثبّت شيء نموذجًا أو حزمة عقد مخصّصة
على جهازك لأنك ضغطت بطاقة.
يوجد
pricing_json وhosted_only في مخطط البيان ويُمرَّران دون تغيير، لكن لا
شيء يقرأهما. يحجزان مساحة لمرحلة تحقيق دخل تصميمية فقط — ولا يوجد سلوك تطبيق
مدفوع اليوم.أداة MCP المسمّاة apps
أداة واحدة بخمسة إجراءات، كلها وكلاء رقيقة فوق واجهة التطبيقات في اللوحة. وهي
السطح بلا لوحة رسم: ما يستخدمه تطبيق الجوّال ووكيل يُقاد مباشرة. وهي على
قائمة السماح لـ call_tool لدى المنسّق — list/get/run_status للقراءة فقط،
ويحمل run وضع المخاطر نفسه الذي يحمله enqueue_workflow (يدرج مهمة ضغطها
المستخدم صراحة).
المعاملات
action هو المعامل الوحيد المطلوب في المخطط — يحتاج كل إجراء إلى مجموعة فرعية
مختلفة، لذا فالبقية اختيارية في المخطط ويُفرَض حضورها في المعالج، الذي يسمّي
الحقل الناقص.
يُفرَض قيد شكل
prompt_id مرتين — عند حدود المخطط ومرة أخرى داخل المعالج —
لأن المعرّف يُدرَج في مسار رابط. ويجب ألا يصل «معرّف موجّه» بشكل اجتياز إلى باني
الرابط حتى لو تجاوز مستدعٍ المخطط.
للمرجع المولَّد لمخطط كل أداة، راجع
أدوات التطبيقات.
الاستيراد من السجل
يجلبaction:"import" حزمة السجل من جانب الخادم وينشئها تطبيقًا محليًا. ويصير
معرّف السجل هو المعرّف المحلي، فإعادة استيراد تطبيق لديك أصلًا تبلّغ عن تعارض
معرّف بدل نسخه. وتعيش الصورة المصغّرة على نقطة نهاية سجل منفصلة وتُجلَب وتُمرَّر
منفصلة، فيحتفظ تطبيق مثبَّت بفن بطاقته.
لا تُثبَّت الاعتماديات. تُرجع الأداة deps البيان حتى يستطيع المستدعي
الإبلاغ عنها ويدع المستخدم يثبّتها عمدًا.
الحدود والتحقّق
أشياء يمكنك الاصطدام بها فعلًا:
تحقّق ستلاحظه:
- يجب أن تكون معرّفات التطبيقات معرفات uuid. أي شيء آخر يُرفَض قبل بناء مسار، ويُعاد فحص مسار الحزمة المحلول للاحتواء تحت جذر التطبيقات.
- يجب أن يكون الموجّه بصيغة API — مفاتيح معرّفات عقد رقمية، وكل عقدة كائن
{class_type, inputs}. وتُرفَض مخططات صيغة الواجهة. - سير عمل واجهة مطلوب ما لم يُضبَط
hideWorkflow. - إنشاء تطبيق موجود أصلًا تعارض، لا استبدال.
- تحديثات البيان الجزئية جزئية حقًا. نشر تطبيق أو إخفاؤه يرسل حقوله فقط ولن
يمسح اسمك أو وصفك أو
appMode. - تُسقَط مفاتيح البيان المجهولة، ما عدا حقول التمرير المحجوزة، فيتجاهل جهاز أقدم حقولًا لا يفهمها بدل الفشل.
COMFYUI_MCP_APPS_DIR (أساسًا للاختبارات)؛
وافتراضيًا يُشتَق من دليل مستخدم ComfyUI نفسه، فينجو من التثبيتات المحمولة.
على الهاتف
يشحن تطبيق الجوّال تبويب التطبيقات حقيقيًا — لا معاينة. وله نصفان:- تطبيقاتي — التطبيقات المثبَّتة على جهازك، مسرودة عبر الجسر بواسطة
action:"list". والضغط على واحد يفتح نموذج تشغيل مولَّد، ويدرجها بـaction:"run"، ويستطلعaction:"run_status"كل ثانيتين (محدود بـ 30 دقيقة) حتى تُعرض المخرجات. - الاستكشاف — السجل العام، يُضرَب مباشرة عبر HTTPS من الهاتف (بلا قفزة
جسر، فيعمل التصفّح قبل أن تقترن). والتثبيت يذهب الاتجاه الآخر: يجلب الجهاز
الحزمة نفسه عبر
action:"import".
اطّلع أيضًا
- أدوات التطبيقات — المرجع المولَّد لمخطط كل أداة
- اللوحة الجانبية — حيث تُحوَّل التطبيقات وتُنشَر وتُستكشَف
- تطبيق الجوّال — تبويب التطبيقات في سياقه
- وحدات Pod في RunPod — الـ Pod الذي يستهدفه مسار «التشغيل على RunPod»
- خارطة الطريق