From 5fee351bbd81fc82138bd7c519aa781c62e12cc7 Mon Sep 17 00:00:00 2001 From: "kyj@bowong.ai" Date: Wed, 16 Jul 2025 17:51:37 +0800 Subject: [PATCH] =?UTF-8?q?FIX=20midjourney=E4=BF=AE=E5=9B=BE=E6=94=B9?= =?UTF-8?q?=E4=B8=BA=E5=BC=82=E6=AD=A5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- nodes/image_modal_nodes.py | 30 ++++++++++++++++++++---------- 1 file changed, 20 insertions(+), 10 deletions(-) diff --git a/nodes/image_modal_nodes.py b/nodes/image_modal_nodes.py index 7984a35..fefc3df 100644 --- a/nodes/image_modal_nodes.py +++ b/nodes/image_modal_nodes.py @@ -203,7 +203,8 @@ class ModalMidJourneyGenerateImage: "required": { "prompt": ("STRING", {"default": "一幅宏大壮美的山川画卷", "multiline": True}), "image": ("IMAGE",), - "endpoint": ("STRING", {"default": "bowongai-dev--bowong-ai-video-gemini-fastapi-webapp.modal.run"}), + "endpoint": ("STRING", {"default": "bowongai-dev--text-video-agent-fastapi-app.modal.run"}), + "timeout": ("INT", {"default": 120, "min": 10, "max": 600}), }, } @@ -213,15 +214,13 @@ class ModalMidJourneyGenerateImage: OUTPUT_NODE = False CATEGORY = "不忘科技-自定义节点🚩/图片/Midjourney" - def process(self, prompt: str, image:torch.Tensor, endpoint: str): + def process(self, prompt: str, image:torch.Tensor, endpoint: str, timeout: int): try: - logger.info("请求同步接口") + logger.info("请求异步接口") + interval = 2 format = "PNG" - job_resp = send_request("post", f"https://{endpoint}/mj_router/sync/generate/image", + job_resp = send_request("post", f"https://{endpoint}/api/mj/async/generate/image?prompt={prompt}", headers={'Authorization': 'Bearer bowong7777'}, - data={ - "prompt": prompt, - }, files={"img_file": ( 'image.' + format.lower(), tensor_to_image_bytes(image, format), f'image/{format.lower()}')}, @@ -230,9 +229,20 @@ class ModalMidJourneyGenerateImage: job_resp = job_resp.json() if "失败" in job_resp["msg"] or "fail" in job_resp["msg"] or "error" in job_resp["msg"]: raise Exception("生成失败") - result_url = job_resp["data"] - logger.success("img_url: "+result_url) - return (url_to_tensor(result_url),) + job_id = job_resp["data"] + for _ in range(0, timeout//interval, interval): + logger.info("查询结果") + resp = send_request("get", f"https://{endpoint}/api/mj/async/query/status?task_id={job_id}", + headers={'Authorization': 'Bearer bowong7777'}, timeout=30) + resp.raise_for_status() + if resp.json()["status"]: + if "fail" in resp.json()["msg"]: + raise Exception("生成失败,可能因为风控") + result_url = resp.json()["data"] + logger.success("img_url: "+result_url) + return (url_to_tensor(result_url),) + sleep(interval) + raise Exception("等待超时") except Exception as e: raise e