Automation & API — เครื่องผลิตภาพอัตโนมัติ
สั่งงานผ่าน API · ทำ batch หลายร้อยภาพ · เชื่อมเข้าระบบงานของทีม — ต้องอ่าน Python ออก รู้จัก JSON และเคยใช้ command line
6.1
ComfyUI เป็น “เซิร์ฟเวอร์” อยู่แล้ว
จุดที่ทำให้มันทรงพลังเรื่อง automation: ตัวมันคือ HTTP server ที่มี API ในตัว — หน้าจอ node ที่เราใช้มาตลอดเป็นแค่ client หนึ่งเท่านั้น
หน้าจอ node (เบราว์เซอร์)
client ที่เราใช้มาตลอดบท 1–5
Python script ของเรา
batch / automation (บทนี้)
n8n / Make / ระบบบริษัท
เรียกผ่าน HTTP เหมือนกันเป๊ะ
🏭
ComfyUI Server
HTTP server (Python) + คิวงาน + GPU — มี API ในตัวตั้งแต่แรก
$ python main.py --listen 0.0.0.0
· เขียนสคริปต์คุยกับ API ได้โดยตรง
· ไม่ต้องเปิดเบราว์เซอร์/คลิกเอง — สั่งจากโค้ดได้หมด
· รันแบบ headless บนเซิร์ฟเวอร์ได้
⚠️ --listen 0.0.0.0 เปิดให้เครื่องอื่นเข้าถึง — ใช้เฉพาะวงเครือข่ายที่ไว้ใจได้ + มี firewall
6.2 · ต้องแยกให้ออก
Workflow format vs API format
ComfyUI มี JSON 2 แบบ — งานเดียวกันแต่คนละหน้าที่ กดสลับดูความต่าง
{"4": { "class_type": "CheckpointLoaderSimple","inputs": { "ckpt_name": "sd_xl_base_1.0.safetensors" } },"6": { "class_type": "CLIPTextEncode","inputs": { "text": "a red sports car","clip": ["4", 1] } },"3": { "class_type": "KSampler","inputs": { "seed": 12345, "steps": 25, "cfg": 7,"model": ["4", 0], "positive": ["6", 0],"latent_image": ["5", 0] } },"9": { "class_type": "SaveImage","inputs": { "filename_prefix": "batch_","images": ["8", 0] } }}
สีชมพู = ค่าที่เราแก้จากโค้ดได้ตรง ๆ — นี่คือวิธี “ป้อน prompt/seed ต่างกัน” ให้ทุกภาพใน batch
สีฟ้า = การเชื่อม node: ["4", 1] อ่านว่า “เอา output ช่องที่ 1 ของ node หมายเลข 4” — เส้นในกราฟกลายเป็นแค่ตัวเลขอ้างอิง
🔓 วิธีเปิดปุ่ม: Settings (เฟือง) → เปิด “Enable Dev mode options” → จะมีเมนู Save (API Format) เพิ่มขึ้นมา → ได้ไฟล์ workflow_api.json
6.3
Endpoints หลักที่ต้องรู้
คลิกแต่ละ endpoint เพื่อดูหน้าที่ + ตัวอย่าง request/response
ส่ง workflow (API format) เข้าคิวประมวลผล → คืน prompt_id
POST /prompt
{ "prompt": { ...workflow_api... },
"client_id": "a1b2c3" }
→ { "prompt_id": "d4e5f6-..." }6.4 · หัวใจของบท
วงจรชีวิตของงาน 1 ภาพ — กด Run ดูเอง
flow มาตรฐาน: POST /prompt → ฟัง WebSocket จนเสร็จ → GET /history → GET /view ดึงภาพ
client_id = a1b2c3 · server = 127.0.0.1:8188
① POST /prompt
② ฟัง WebSocket
③ GET /history
④ GET /view
ภาพจะมาปรากฏที่นี่ — โดยไม่ต้องเปิดหน้าจอ ComfyUI เลย
💡 ไม่อยากจัดการ WebSocket เอง? poll /history/{prompt_id} เป็นระยะจนมีผลลัพธ์ก็ได้ (ง่ายกว่า แต่เนียนน้อยกว่า) · หรือใช้ CLI: comfy run --workflow workflow_api.json --wait
🐍 ดูโค้ด Python เต็ม ๆ ของ flow นี้ (คลิกกาง)
import json, urllib.request, uuid, websocket
SERVER = "127.0.0.1:8188"
client_id = str(uuid.uuid4())
def queue_prompt(workflow):
payload = {"prompt": workflow, "client_id": client_id}
req = urllib.request.Request(f"http://{SERVER}/prompt",
data=json.dumps(payload).encode())
return json.loads(urllib.request.urlopen(req).read())["prompt_id"]
def wait_until_done(prompt_id): # ฟัง WebSocket จนงานเสร็จ
ws = websocket.WebSocket()
ws.connect(f"ws://{SERVER}/ws?clientId={client_id}")
while True:
m = json.loads(ws.recv())
if m["type"] == "executing" and m["data"]["node"] is None \
and m["data"]["prompt_id"] == prompt_id:
break
ws.close()
# ---------- ใช้งานจริง ----------
workflow = json.load(open("workflow_api.json", encoding="utf-8"))
workflow["6"]["inputs"]["text"] = "a cozy coffee shop, photorealistic"
workflow["3"]["inputs"]["seed"] = 42 # แก้ค่าจากโค้ดได้ตรง ๆ
pid = queue_prompt(workflow)
wait_until_done(pid) # → แล้วไปดึงภาพจาก /history + /view6.5
Batch Processing — ผลิตทีละหลายร้อยภาพ
แนวคิด: อ่านรายการงานจาก CSV → วน loop แก้ค่าใน workflow → ส่งเข้าคิว → เก็บผล — ลองรันดู (มีงานที่ล้มให้เห็น retry จริง)
jobs.csv — 4 งาน (สังเกต SKU-003 จะล้มแล้ว retry)
batch.log
6.6
รูปแบบการเชื่อมต่อเข้าระบบ
จาก script ง่าย ๆ จนถึงระบบ production เต็มรูปแบบ — เลือกตามขนาดงาน
Script ภายใน
Python อ่าน CSV → ยิง API → เซฟไฟล์
เหมาะกับ: งาน batch เป็นรอบ ๆ
Microservice / REST wrapper
ครอบ ComfyUI ด้วย API ของเราเอง (เช่น FastAPI)
เหมาะกับ: ให้ระบบอื่นในบริษัทเรียกใช้
Queue worker
งานเข้า message queue → worker ดึงไปยิง ComfyUI
เหมาะกับ: งานเยอะ, scale หลาย GPU
Webhook / automation tool
n8n / Make / Zapier เรียก HTTP /prompt
เหมาะกับ: ต่อกับ flow อัตโนมัติอื่น ๆ
HTTP Request node ในตัว
ให้ workflow เรียก API ภายนอกเอง (ดึงข้อมูล/ส่งผลออก)
เหมาะกับ: pipeline ที่ต้องคุยกับบริการอื่น
App Mode + แชร์ลิงก์
เปลี่ยน workflow เป็นแอปหน้าเดียว แชร์ให้ทีมใช้
เหมาะกับ: ให้คน non-technical ใช้ (บทที่ 7)
6.7
ข้อควรระวังเรื่อง Production
ก่อนเอาเข้าระบบจริง เช็ก 4 เรื่องนี้ให้ครบ
VRAM / คิว
1 instance รันทีละงาน — วางแผน throughput และ timeout · ต้องการเร็วขึ้น = หลาย instance / หลาย GPU แล้วกระจายงาน
ล็อกเวอร์ชัน
อย่าให้ production พึ่ง custom node ที่ไม่เสถียร — ล็อกเวอร์ชัน node/โมเดล และเก็บ workflow_api.json ใน git กันผลลัพธ์เปลี่ยนเงียบ ๆ
ความปลอดภัย
อย่าเปิดพอร์ต ComfyUI ออกอินเทอร์เน็ตตรง ๆ — ครอบด้วย auth/reverse proxy · --listen 0.0.0.0 เฉพาะวงที่ไว้ใจได้
ลิขสิทธิ์
ตรวจ license ของโมเดล/LoRA ก่อนใช้เชิงพาณิชย์
✅ สรุปบทที่ 6
- • ComfyUI เป็น HTTP server + API ในตัว — หน้าจอ node เป็นแค่ client หนึ่ง
- • ต้อง export เป็น API format (เปิด Dev Mode) ก่อนสั่งผ่าน
/prompt - • flow มาตรฐาน: POST /prompt → ฟัง ws จนเสร็จ → GET /history → GET /view
- • Batch = วน loop แก้ค่าต่อ job + error handling/retry/logging/ชื่อไฟล์เป็นระบบ
- • เชื่อมระบบได้ตั้งแต่ script จนถึง microservice/queue/App Mode