┌────────────────────┐ ┌─────────────────┐ ┌──────────────────┐ ┌───────────────────┐
│ RH_APICall (GET) │──▶──▶│ JSON Parse │──▶──▶│ Graph Merge/Bind │──▶──▶│ QueuePrompt/Execute│
│ endpoint: /api/wf │ │ (取出nodes等) │ │ 注入自定义参数 │ │ SaveImage │
└────────────────────┘ └─────────────────┘ └──────────────────┘ └───────────────────┘
不同扩展会提供不同名称的节点,但思路通用:“拉取→解析→注入→执行”。
如果扩展同时提供 Python 接口,可用如下伪代码(放在 custom_nodes
的脚本或外部控制脚本里):
import os, json, requests
BASE = "https://www.runninghub.ai"
KEY = os.getenv("RUNNINGHUB_API_KEY")
WFID = "rh_wf_123456"
# 1) 拉取工作流
resp = requests.get(f"{BASE}/api/workflows/{WFID}",
headers={"Authorization": f"Bearer {KEY}"}, timeout=60)
resp.raise_for_status()
wf = resp.json() # 约定字段:nodes, links, meta ...
# 2) 路径映射(示例)
PATH_MAP = {
"models/checkpoints": r"G:/DiskC/Documents/ComfyUI/models/checkpoints",
"models/loras": r"G:/DiskC/Documents/ComfyUI/models/loras",
"models/vae": r"G:/DiskC/Documents/ComfyUI/models/vae"
}
def remap_path(p):
for k,v in PATH_MAP.items():
if p.startswith(k):
return p.replace(k, v, 1)
return p
for n in wf.get("nodes", []):
for k,val in list(n.get("properties", {}).items()):
if isinstance(val, str) and ("models/" in val):
n["properties"][k] = remap_path(val)
# 3) 注入参数(prompt/seed/size)
PARAMS = {
"positive_prompt": "a natural portrait, soft daylight, 85mm look",
"negative_prompt": "low quality, artifacts",
"seed": 123456789,
"width": 768, "height": 1024
}
# 假设有统一参数节点的命名/ID:
for n in wf["nodes"]:
if n["type"] == "CLIPTextEncode" and "positive" in n.get("label","").lower():
n["properties"]["text"] = PARAMS["positive_prompt"]
if n["type"] == "CLIPTextEncode" and "negative" in n.get("label","").lower():
n["properties"]["text"] = PARAMS["negative_prompt"]
if n["type"] == "KSampler":
n["properties"]["seed"] = PARAMS["seed"]
if n["type"] == "EmptyLatentImage":
n["properties"]["width"] = PARAMS["width"]
n["properties"]["height"]= PARAMS["height"]
# 4) 提交给本地 ComfyUI(HTTP API)
# 你的 ComfyUI 必须开启 API(通常启动即开放)
COMFY = "http://127.0.0.1:8188"
submit = requests.post(f"{COMFY}/prompt", json=wf, timeout=60)
submit.raise_for_status()
print("submitted:", submit.json())
不同版本 ComfyUI 的 HTTP API 格式略有差异,请根据本地版本调整字段。