V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
• 请不要在回答技术问题时复制粘贴 AI 生成的内容
WolverineL
V2EX  ›  程序员

ComfyUI 部署服务,发起 API 请求

  •  
  •   WolverineL · 10 天前 · 1607 次点击

    我在尝试部署 ComfyUI ,尝试启动后通过 API 调用 comfyui 的接口

    前置:我在 comfyui 页面编辑后可成功运行并生图

    但是通过 API 调用,在第一步就倒下了,调/prompt 接口 prompt 参数是 workflow.json ,代码如下:

    # 读取 workflow.json
    with open(workflow_path, "r", encoding="utf-8") as f:
      workflow = json.load(f)
    
      # 如果有输入图片,上传并替换 workflow 参数
      if input_image:
        uploaded_filename = self.upload_image(input_image)
        # 注意:具体替换哪个节点要看你 workflow.json 的结构
        # 这里假设 workflow 里有一个节点的输入是 "image"
        for node in workflow:
          # 确保 node 是 dict
          if isinstance(node, dict) and node.get("type") == "LoadImage":
            # 替换 widgets_values[0] 为上传后的文件名
            if "widgets_values" in node and len(node["widgets_values"]) > 0:
              node["widgets_values"][0] = uploaded_filename
              print(f"[INFO] 已替换 workflow 输入图: 节点 {node.get('id')}")
              break
    
              # 给任务分配唯一 ID
              prompt_id = str(uuid.uuid4())
              payload = {"prompt": workflow}
    
              # 提交任务
              url = f"{self.api_base}/prompt"
              resp = requests.post(url, json=payload)
              print("URL:", url)
              print("请求 payload:", payload)
              print("HTTP 状态码:", resp.status_code)
              print("响应内容:", resp.text)
              resp.raise_for_status()
              self.log(f"[INFO] 任务提交成功, prompt_id={prompt_id}")
    

    一请求就报错

    HTTP 状态码: 400
    响应内容: {"error": {"type": "invalid_prompt", "message": "Cannot execute because a node is missing the class_type property.", "details": "Node ID '#id'", "extra_info": {}}, "node_errors": {}}
    

    实在不知道是什么原因,令人头大,希望有经验的大佬分享一下🫡

    第 1 条附言  ·  10 天前
    感谢各位带佬!
    成了!昨晚搞到两点多… 原来是我用错了 json😓 得使用导出 api 的 workflow.json
    4 条回复    2025-08-23 10:54:23 +08:00
    Parva
        1
    Parva  
       10 天前
    抓包正常 ComfyUI 页面发起的/prompt 请求,看看请求体是什么数据结构就知道了
    supersadmin
        2
    supersadmin  
       10 天前
    可以试试创建一个 websocket:ws://{host}/ws?clientId={client_id},
    再调用 http://{host}/api/prompt ,参数:{"prompt": prompt, "client_id": client_id},
    其中 prompt 是使用的 ComfyUI 上的 workflow 导出的 API 文件内容,
    后续生成的进度、结果就都在 websocket 里面接受处理。
    lijunjieone
        3
    lijunjieone  
       10 天前
    demo 中 json 有问题,是旧版本的,你用最新版本导出一个最新的 json,复制进去就可以用了
    lijunjieone
        4
    lijunjieone  
       10 天前
    我基于 comfyui 的 api 搞了一个网站 https://www.hubinnovation.tech/
    关于   ·   帮助文档   ·   自助推广系统   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   3198 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 24ms · UTC 11:46 · PVG 19:46 · LAX 04:46 · JFK 07:46
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.