From 0033eded3f183df3a3ff16d097602da3c8e985fc Mon Sep 17 00:00:00 2001 From: fkxianzhou <368684850@qq.com> Date: Thu, 4 Dec 2025 00:16:25 +0800 Subject: [PATCH] =?UTF-8?q?=E6=96=B0=E5=A2=9Edoubao-seedream-4.5=E6=A8=A1?= =?UTF-8?q?=E5=9E=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- example_workflows/Jimeng Seedream 4.json | 2 +- locales/zh/nodeDefs.json | 8 ++++++++ nodes_image.py | 14 +++++++++++--- pyproject.toml | 2 +- 4 files changed, 21 insertions(+), 5 deletions(-) diff --git a/example_workflows/Jimeng Seedream 4.json b/example_workflows/Jimeng Seedream 4.json index f078705..110c3b2 100644 --- a/example_workflows/Jimeng Seedream 4.json +++ b/example_workflows/Jimeng Seedream 4.json @@ -1 +1 @@ -{"id":"9cdfd6e3-7426-4a3a-88b1-b5866725d7e0","revision":0,"last_node_id":47,"last_link_id":49,"nodes":[{"id":45,"type":"SaveImage","pos":[1365.3018798828125,462.0129699707031],"size":[270,58],"flags":{},"order":2,"mode":0,"inputs":[{"localized_name":"图片","name":"images","type":"IMAGE","link":48},{"localized_name":"文件名前缀","name":"filename_prefix","type":"STRING","widget":{"name":"filename_prefix"},"link":null}],"outputs":[],"properties":{"cnr_id":"comfy-core","ver":"0.3.65","Node name for S&R":"SaveImage"},"widgets_values":["Jimeng/Image/Seedream4"]},{"id":46,"type":"JimengSeedream4","pos":[948.2438681698591,463.687838280146],"size":[400,300],"flags":{},"order":0,"mode":0,"inputs":[{"localized_name":"客户端","name":"client","type":"JIMENG_CLIENT","link":49},{"localized_name":"输入图像","name":"images","shape":7,"type":"IMAGE","link":null},{"localized_name":"提示词","name":"prompt","type":"STRING","widget":{"name":"prompt"},"link":null},{"localized_name":"生成模式","name":"generation_mode","type":"COMBO","widget":{"name":"generation_mode"},"link":null},{"localized_name":"最大图片数","name":"max_images","type":"INT","widget":{"name":"max_images"},"link":null},{"localized_name":"尺寸","name":"size","type":"COMBO","widget":{"name":"size"},"link":null},{"localized_name":"宽度","name":"width","type":"INT","widget":{"name":"width"},"link":null},{"localized_name":"高度","name":"height","type":"INT","widget":{"name":"height"},"link":null},{"localized_name":"种子","name":"seed","type":"INT","widget":{"name":"seed"},"link":null},{"localized_name":"水印","name":"watermark","type":"BOOLEAN","widget":{"name":"watermark"},"link":null}],"outputs":[{"localized_name":"图像","name":"images","type":"IMAGE","links":[48]},{"localized_name":"响应","name":"response","type":"STRING","links":null}],"properties":{"cnr_id":"ComfyUI-Jimeng-API","ver":"bc7215f572cf093ccf7e4ce142267352a60fb428","Node name for S&R":"JimengSeedream4"},"widgets_values":["","Single Image (disabled)",1,"Custom",2048,2048,-1,"randomize",false]},{"id":47,"type":"JimengAPIClient","pos":[659.3174882443304,464.525306048046],"size":[270,58],"flags":{},"order":1,"mode":0,"inputs":[{"localized_name":"密钥名称","name":"key_name","type":"COMBO","widget":{"name":"key_name"},"link":null}],"outputs":[{"localized_name":"客户端","name":"client","type":"JIMENG_CLIENT","links":[49]}],"properties":{"cnr_id":"ComfyUI-Jimeng-API","ver":"bc7215f572cf093ccf7e4ce142267352a60fb428","Node name for S&R":"JimengAPIClient"},"widgets_values":["未找到密钥 (请配置 api_keys.json)"]}],"links":[[48,46,0,45,0,"IMAGE"],[49,47,0,46,0,"JIMENG_CLIENT"]],"groups":[],"config":{},"extra":{"ds":{"scale":1.1940758060545524,"offset":[-394.67767358790354,-194.86068478421885]},"frontendVersion":"1.18.9","VHS_latentpreview":false,"VHS_latentpreviewrate":0,"VHS_MetadataImage":true,"VHS_KeepIntermediate":true},"version":0.4} \ No newline at end of file +{"id":"9cdfd6e3-7426-4a3a-88b1-b5866725d7e0","revision":0,"last_node_id":48,"last_link_id":51,"nodes":[{"id":47,"type":"JimengAPIClient","pos":[659.3174882443304,464.525306048046],"size":[270,58],"flags":{},"order":1,"mode":0,"inputs":[{"localized_name":"key_name","name":"key_name","type":"COMBO","widget":{"name":"key_name"},"link":null}],"outputs":[{"localized_name":"client","name":"client","type":"JIMENG_CLIENT","links":[50]}],"properties":{"cnr_id":"ComfyUI-Jimeng-API","ver":"bc7215f572cf093ccf7e4ce142267352a60fb428","Node name for S&R":"JimengAPIClient"},"widgets_values":["未找到密钥 (请配置 api_keys.json)"]},{"id":48,"type":"JimengSeedream4","pos":[949.1629520176931,463.793203747457],"size":[400,300],"flags":{},"order":2,"mode":0,"inputs":[{"localized_name":"client","name":"client","type":"JIMENG_CLIENT","link":50},{"localized_name":"images","name":"images","shape":7,"type":"IMAGE","link":null},{"localized_name":"model_version","name":"model_version","type":"COMBO","widget":{"name":"model_version"},"link":null},{"localized_name":"prompt","name":"prompt","type":"STRING","widget":{"name":"prompt"},"link":null},{"localized_name":"generation_mode","name":"generation_mode","type":"COMBO","widget":{"name":"generation_mode"},"link":null},{"localized_name":"max_images","name":"max_images","type":"INT","widget":{"name":"max_images"},"link":null},{"localized_name":"size","name":"size","type":"COMBO","widget":{"name":"size"},"link":null},{"localized_name":"width","name":"width","type":"INT","widget":{"name":"width"},"link":null},{"localized_name":"height","name":"height","type":"INT","widget":{"name":"height"},"link":null},{"localized_name":"seed","name":"seed","type":"INT","widget":{"name":"seed"},"link":null},{"localized_name":"watermark","name":"watermark","type":"BOOLEAN","widget":{"name":"watermark"},"link":null}],"outputs":[{"localized_name":"images","name":"images","type":"IMAGE","links":[51]},{"localized_name":"response","name":"response","type":"STRING","links":null}],"properties":{"cnr_id":"ComfyUI-Jimeng-API","ver":"c07c6b2ff122fcb0ebf9f345ef04b697d6e19b66","Node name for S&R":"JimengSeedream4"},"widgets_values":["doubao-seedream-4.0","","Single Image (disabled)",1,"Custom",2048,2048,-1,"randomize",false]},{"id":45,"type":"SaveImage","pos":[1366.2473373272921,464.2190469588465],"size":[270,58],"flags":{},"order":0,"mode":0,"inputs":[{"localized_name":"图片","name":"images","type":"IMAGE","link":51},{"localized_name":"文件名前缀","name":"filename_prefix","type":"STRING","widget":{"name":"filename_prefix"},"link":null}],"outputs":[],"properties":{"cnr_id":"comfy-core","ver":"0.3.65","Node name for S&R":"SaveImage"},"widgets_values":["Jimeng/Image/Seedream4"]}],"links":[[50,47,0,48,0,"JIMENG_CLIENT"],[51,48,0,45,0,"IMAGE"]],"groups":[],"config":{},"extra":{"ds":{"scale":2.11537812904981,"offset":[-565.3072584119454,-279.58656869694266]},"frontendVersion":"1.18.9","VHS_latentpreview":false,"VHS_latentpreviewrate":0,"VHS_MetadataImage":true,"VHS_KeepIntermediate":true,"workflowRendererVersion":"LG"},"version":0.4} \ No newline at end of file diff --git a/locales/zh/nodeDefs.json b/locales/zh/nodeDefs.json index 0f3ef79..1a99028 100644 --- a/locales/zh/nodeDefs.json +++ b/locales/zh/nodeDefs.json @@ -75,6 +75,14 @@ "name": "客户端", "tooltip": "即梦 API 客户端" }, + "model_version": { + "name": "模型版本", + "tooltip": "选择 Seedream 模型版本", + "options": { + "doubao-seedream-4.0": "Seedream 4.0", + "doubao-seedream-4.5": "Seedream 4.5" + } + }, "prompt": { "name": "提示词", "tooltip": "用于图像生成的文本提示词" diff --git a/nodes_image.py b/nodes_image.py index 84b90ba..2ce8f44 100644 --- a/nodes_image.py +++ b/nodes_image.py @@ -120,6 +120,7 @@ class JimengSeedream4: return { "required": { "client": ("JIMENG_CLIENT",), + "model_version": (["doubao-seedream-4.0", "doubao-seedream-4.5"],), "prompt": ("STRING", {"multiline": True, "default": ""}), "generation_mode": (["Single Image (disabled)", "Image Group (auto)"],), "max_images": ("INT", {"default": 1, "min": 1, "max": 15, "step": 1}), @@ -138,7 +139,7 @@ class JimengSeedream4: FUNCTION = "generate" CATEGORY = GLOBAL_CATEGORY - async def generate(self, client, prompt, generation_mode, max_images, size, width, height, seed, watermark, images=None): + async def generate(self, client, model_version, prompt, generation_mode, max_images, size, width, height, seed, watermark, images=None): # 节点的主要异步执行函数 sequential_image_generation = "disabled" if "disabled" in generation_mode else "auto" n_input_images = 0 @@ -150,6 +151,13 @@ class JimengSeedream4: actual_seed = random.randint(0, 2147483647) if seed == -1 else seed + # 映射模型版本到后端 ID + model_id_map = { + "doubao-seedream-4.0": "doubao-seedream-4-0-250828", + "doubao-seedream-4.5": "doubao-seedream-4-5-251128" + } + model_id = model_id_map.get(model_version, "doubao-seedream-4-0-250828") + # 处理分辨率 if size == "Custom": total_pixels = width * height @@ -186,7 +194,7 @@ class JimengSeedream4: comfy.model_management.throw_exception_if_processing_interrupted() # 调用 API - resp = await openai_client.images.generate(model="doubao-seedream-4-0-250828", prompt=prompt, size=size_str, response_format="url", extra_body=extra_body) + resp = await openai_client.images.generate(model=model_id, prompt=prompt, size=size_str, response_format="url", extra_body=extra_body) # 检查中断 comfy.model_management.throw_exception_if_processing_interrupted() @@ -216,7 +224,7 @@ class JimengSeedream4: except Exception as e: if isinstance(e, comfy.model_management.InterruptProcessingException): raise e - raise RuntimeError(get_text("err_gen_model").format(model="Seedream4", e=e)) + raise RuntimeError(get_text("err_gen_model").format(model=model_version, e=e)) # 节点类映射 NODE_CLASS_MAPPINGS = { diff --git a/pyproject.toml b/pyproject.toml index a7c9790..e41c43f 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,7 +1,7 @@ [project] name = "ComfyUI-Jimeng-API" description = "ComfyUI nodes for Volcano Ark (Jimeng) API" -version = "1.9.7" +version = "1.9.8" license = {file = "LICENSE"} dependencies = ["volcengine-python-sdk[ark]", "openai"]