
🚀 為什麼要遠端操控 ComfyUI?
ComfyUI 預設只監聽 127.0.0.1,只有本機才能用。但只要加一個啟動參數,同一區網內任何設備都能呼叫你那台 RTX 5090 來生圖。
實戰環境是這樣搭的:
| 角色 | 設備 | IP |
|---|---|---|
| 🖥️ 生成端(負責繪圖) | Windows 桌上型,RTX 5090(34GB VRAM) | 192.168.0.101 |
| 📡 控制端(發送指令) | Linux 迷你主機(VivoMini),跑 Hermes Agent | 192.168.0.100 |
⚠️ 關鍵條件:兩台機器必須在同一個 LAN 區域網路內(接同一台路由器或交換器)。
📡 第一步:開啟 LAN 監聽模式
🎯 找到啟動腳本
ComfyUI Portable 版(Windows)的啟動腳本是 run_nvidia_gpu.bat,在 ComfyUI 根目錄下。
✏️ 修改內容
用記事本打開,原本長這樣:
.\python_embeded\python.exe -s ComfyUI\main.py --windows-standalone-build
在 main.py 前面加上 --listen 0.0.0.0:
.\python_embeded\python.exe -s ComfyUI\main.py --listen 0.0.0.0 --windows-standalone-build
💡 參數說明:
--listen 0.0.0.0讓 ComfyUI 綁定所有網路介面,不再只鎖127.0.0.1。同一 LAN 的其他設備就能透過http://<電腦IP>:8188訪問。
✅ 驗證啟動
儲存後雙擊執行,看到這個就成功了:
Starting server
To see the GUI go to http://localhost:8188
接著在其他機器的瀏覽器輸入 http://192.168.0.101:8188(換成你的 IP),就能看到 ComfyUI 網頁介面啦!🎉
🔌 第二步:確認網路暢通
從控制端(Linux)測試一下連線:
curl http://192.168.0.101:8188/system_stats
成功的話會回傳 GPU 資訊,像這樣:
{
"devices": [
{
"name": "NVIDIA GeForce RTX 5090",
"VRAM_total": 34.0,
"VRAM_free": 33.5,
"torch_version": "2.6.0+cu126"
}
]
}
33.5GB 空閒 VRAM — 準備好要幹活了!💪
📥 第三步:下載所需模型
🎨 主模型:hassaku XL Illustrious v3.3
| 項目 | 內容 |
|---|---|
| 📛 模型名稱 | hassaku XL Illustrious v3.3 |
| 🔗 下載網址 | CivitAI:hassaku-xl-illustrious |
| 👤 作者 | OnomaAI Research |
| 📂 放置路徑 | ComfyUI/models/checkpoints/hassakuXLIllustrious_v33.safetensors |
| 📦 檔案大小 | 約 3.5 GB |
直接下載放進 models/checkpoints/ 就好。
🧩 LoRA 模型(可選強化)
這套 Workflow 用了兩組 LoRA,讓風格更有層次感:
| LoRA 名稱 | 🎯 用途 | 🔗 下載 | 建議權重 |
|---|---|---|---|
| ppw_v8_Illuv2stable_128 | 提升寫實感與光影層次 | CivitAI | 0.5 |
| PetraStyle | 油畫質感+印象派筆觸 | CivitAI | 0.6 |
💡 放好後進 ComfyUI → Extra Networks(左側面板)點一下 Refresh,新模型就會出現了!
🔧 第四步:Workflow 結構拆解
完整的生圖流程長這樣,每個節點就是一個處理步驟:
┌─────────────────────────────────────────────────────────┐
│ 🎯 1. CheckpointLoaderSimple │
│ 模型:hassakuXLIllustrious_v33.safetensors │
│ ↓ │
│ ✏️ 2. CLIPTextEncode(正向提示詞) │
│ text: "masterpiece, best quality, impressionism..." │
│ ↓ │
│ ✏️ 3. CLIPTextEncode(負向提示詞) │
│ text:(留空) │
│ ↓ │
│ 🖼️ 4. EmptyLatentImage │
│ width: 1280, height: 1280, batch_size: 1 │
│ ↓ │
│ 🔄 5. KSampler(採樣器) │
│ sampler: dpmpp_2m, scheduler: karras │
│ steps: 35, cfg: 5, seed:(隨機) │
│ ↓ │
│ 🧬 6. VAEDecode │
│ 將潛空間向量解碼成實際像素 │
│ ↓ │
│ 💾 7. SaveImage → 輸出到 output/ 資料夾 │
└─────────────────────────────────────────────────────────┘
⚙️ 第五步:完整參數設定
📊 生圖參數一覽
| 參數 | 數值 | 備註 |
|---|---|---|
| 🧠 Checkpoint | hassakuXLIllustrious_v33 | 基礎模型 |
| ✍️ 正向提示詞 | masterpiece, best quality, very aesthetic, impressionism, slim 1girl, pink hair, lobster hat accessory, big sparkling eyes, soft pastel palette, kawaii aesthetic | 人物+風格描述 |
| 🚫 負向提示詞 | (留空) | 不特別排除元素 |
| 📐 解析度 | 1280 × 1280(半身)/ 896 × 1536(全身) | batch=1 |
| 🔄 Sampler | dpmpp_2m | DPM++ 2M,速度與品質最佳平衡 |
| 📅 Scheduler | karras | 前期快速收斂 |
| 🔢 Steps | 35 | 對這模型已足夠 |
| ⚖️ CFG Scale | 5 | 偏低偏創意,下文有說明 |
| 🔗 LoRA 1 | ppw_v8_Illuv2stable_128 @ 0.5 | 寫實光影增強 |
| 🔗 LoRA 2 | PetraStyle @ 0.6 | 油畫印象派質感 |
| 🧬 VAE | (內建) | hassaku XL 已有 |
⚠️ CFG Scale 不能設太低
有些文章說「CFG 越低越有創意」,但在 hassaku XL Illustrious 這模型上,CFG 建議設在 5~7。設到 1~2 的話,生出來的角色會變成一團雜訊。CFG 5 在這模型上剛好兼顧創意與穩定性 ✅
💻 第六步:完整 Python 程式碼
以下程式從控制端(Linux)發送 Request,就能叫 Windows 那台 RTX 5090 開始生圖 👇
import json
import urllib.request
import urllib.error
import time
import base64
import os
COMFYUI_HOST = "192.168.0.101"
COMFYUI_PORT = "8188"
BASE_URL = f"http://{COMFYUI_HOST}:{COMFYUI_PORT}"
WORKFLOW_FILE = "workflow.json" # 從 ComfyUI UI 匯出的 API workflow
OUTPUT_DIR = "./output/" # 圖片存放位置
# ─────────────────────────────────────────────
# Step 1:讀取 Workflow 並修改 Prompt
# ─────────────────────────────────────────────
with open(WORKFLOW_FILE, "r", encoding="utf-8") as f:
workflow = json.load(f)
# Node 3 = CLIPTextEncode(正向提示詞)
workflow["3"]["inputs"]["text"] = (
"masterpiece, best quality, cute anime girl, "
"pink hair with lobster hat accessory, "
"big sparkling eyes, soft pastel palette, "
"impressionist style, kawaii aesthetic"
)
# ─────────────────────────────────────────────
# Step 2:送出 Prompt 到佇列
# ─────────────────────────────────────────────
def queue_prompt(prompt_dict):
data = json.dumps({"prompt": prompt_dict}).encode("utf-8")
req = urllib.request.Request(
f"{BASE_URL}/api/prompt",
data=data,
headers={"Content-Type": "application/json"},
)
with urllib.request.urlopen(req) as resp:
result = json.loads(resp.read().decode("utf-8"))
return result["prompt_id"]
prompt_id = queue_prompt(workflow)
print(f"✅ 已送出 Prompt,ID:{prompt_id}")
# ─────────────────────────────────────────────
# Step 3:輪詢直到完成
# ─────────────────────────────────────────────
def wait_for_completion(prompt_id, poll_interval=2, timeout=300):
start = time.time()
while True:
if time.time() - start > timeout:
raise TimeoutError(f"⏰ 生圖超時({timeout}s)")
try:
with urllib.request.urlopen(f"{BASE_URL}/api/history/{prompt_id}") as resp:
history = json.loads(resp.read().decode("utf-8"))
if prompt_id in history:
print("🎉 完成!")
return history[prompt_id]
except urllib.error.HTTPError:
pass
time.sleep(poll_interval)
history = wait_for_completion(prompt_id)
# ─────────────────────────────────────────────
# Step 4:取出圖片並存檔
# ─────────────────────────────────────────────
os.makedirs(OUTPUT_DIR, exist_ok=True)
for node_id, node_data in history.get("outputs", {}).items():
images = node_data.get("images", [])
for img in images:
img_url = f"{BASE_URL}/view?filename={img['filename']}&type=output"
req = urllib.request.Request(img_url)
with urllib.request.urlopen(req) as resp:
img_data = resp.read()
out_path = os.path.join(OUTPUT_DIR, img["filename"])
with open(out_path, "wb") as f:
f.write(img_data)
print(f"💾 已存檔:{out_path}")
執行完成後,生成的圖片就會出現在 ./output/ 目錄裡 🖼️
📤 第七步:從 ComfyUI UI 匯出 Workflow
如果還沒有 workflow.json,在 ComfyUI 網頁介面中:
- 🎨 載入或建立你想要的 Pipeline
- 💾 點右側面板 Save → 選擇格式 API (.json)
- 📁 把下載的 JSON 放到控制端機器,餵給上面的 Python 程式
💡 Pro Tip:第一次先在 ComfyUI UI 直接執行一次,確認能正常產圖,再把 Workflow JSON 匯出搬到控制端。遠端操控的成功率會高很多!
🖼️ 成果展示

| 尺寸 | ⏱ 耗時 | 💾 VRAM |
|---|---|---|
| 1280 × 1280(半身) | 約 10 秒 | 約 12 GB |
| 896 × 1536(全身) | 約 30 秒 | 約 18 GB |
RTX 5090 的 34GB VRAM 在整個過程閒置率還很高,未來可以一次排多張 Batch 或疊加更多 LoRA 來壓榨效能 🔥
🏗️ 架構總覽
┌──────────────────────────────────┐
│ 📡 控制端:Linux VivoMini │
│ Hermes Agent 發送指令 │
│ │
│ ➊ POST /api/prompt 送出任務 │
│ ➋ GET /api/history 輪詢結果 │
│ ➌ 接收生成好的圖片 │
└──────────────┬───────────────────┘
│ http://192.168.0.101:8188
│ (LAN 區域網路,免公網 IP)
▼
┌──────────────────────────────────┐
│ 🖥️ 生成端:Windows 桌上型 │
│ GPU: RTX 5090(34GB VRAM) │
│ ComfyUI Portable │
│ 啟動參數: --listen 0.0.0.0 │
│ Port: 8188 │
│ │
│ 📂 models/checkpoints/ │
│ hassakuXLIllustrious_v33 │
│ 📂 models/loras/ │
│ ppw_v8_Illuv2stable_128 │
│ PetraStyle │
└──────────────────────────────────┘
✅ 快速檢查清單
-
run_nvidia_gpu.bat已加入--listen 0.0.0.0 - 兩台機器連上同一個 LAN
-
curl http://<WIN_IP>:8188/system_stats有回應 - hassakuXLIllustrious_v33 已放入
models/checkpoints/ - 兩組 LoRA 已放入
models/loras/ - ComfyUI UI 直接生圖驗證正常
- Workflow JSON 已匯出到控制端
- Python 程式碼中的 IP 與路徑已替換
❓ 常見問題
Q:其他機器打不開 http://192.168.0.101:8188?
→ 檢查 Windows 防火牆有沒有擋 8188 埠。去「Windows 安全性 → 防火牆與網路保護 → 新增連接埠規則」開放 8188 TCP。
Q:出現 401 Unauthorized?
→ 預設 ComfyUI 不需要認證。但有設 API Key 的話,請在 Header 加上 Authorization: Bearer <你的KEY>。
Q:VRAM 不夠怎麼辦?
→ 降低解析度,或把 batch_size 從 1 改為 2(但記得 VRAM 要夠)。RTX 5090 34GB 完全沒在怕這套 Workflow。
🎯 總結
只要在啟動時加上 --listen 0.0.0.0,ComfyUI 立刻變身一台區網共享的 AI 生圖伺服器。一台高階 GPU、多人同時使用 — 非常適合工作室或家庭成員共享同一台高效能機器 💪
需要圖的時候,躺在沙發上用手機發個 Request 就好,何樂而不為呢?😎