استخدام واجهة برمجة التطبيقات لاستدعاء ComfyUI

1. تقديم مهام الرسم

لتقديم مهمة رسم، تحتاج إلى استخدام طلب POST التالي:

POST /prompt

معلمات الطلب:

  • client_id string معرف مهمة تم إنشاؤه بواسطة العميل لتحديد مُبادر المهمة
  • prompt json بيانات JSON تحتوي على معلمات الرسم

مثال

{
  "client_id": "معرف_عميل_فريد",
  "prompt": {
    "width": 768,
    "height": 512,
    "text": "منظر طبيعي جميل"
  }
}

2. استخدام WebSocket لاستقبال حالة المهمة

بعد تقديم المهمة، يمكنك تلقي تحديثات في الوقت الحقيقي عبر WebSocket. اتصل بالعنوان التالي:

ws://<خادمك>:<المنفذ>/ws?client_id=معرف_عميل_فريد

بمجرد الاتصال، ستتلقى معلومات حول حالة تنفيذ المهمة، والتقدم، وما إلى ذلك.

تنسيق البيانات

  • بيانات نصية: تستخدم لإعلام تغييرات المهمة، والخطوات الحالية في التنفيذ، والتقدم.
  • بيانات ثنائية: تستخدم لنقل معاينات الصور التي تم إنشاؤها.

مثال على كود بايثون

فيما يلي مثال على كود باستخدام بايثون ومكتبة عميل WebSocket لتقديم طلب رسم واستقبال النتائج:

import websocket
import json
import uuid

server_address = "127.0.0.1:8188"
client_id = str(uuid.uuid4())

def queue_prompt(prompt):
    p = {"client_id": client_id, "prompt": prompt}
    data = json.dumps(p).encode('utf-8')
    req = urllib.request.Request(f"http://{server_address}/prompt", data=data)
    response = urllib.request.urlopen(req)
    return json.loads(response.read())

def on_message(ws, message):
    print(f"Received: {message}")

ws = websocket.WebSocketApp(f"ws://{server_address}/ws?client_id={client_id}",
                            on_message=on_message)
ws.run_forever()

# تقديم طلب رسم
prompt_data = {
    "width": 768,
    "height": 512,
    "text": "منظر طبيعي جميل"
}
queue_prompt(prompt_data)