From 42233d148d26c83d51e0a4957b3cbaae756efdd0 Mon Sep 17 00:00:00 2001 From: Hunter Senft-Grupp Date: Wed, 5 Aug 2026 05:34:47 +0000 Subject: [PATCH] Fix Image POC asset payloads Amp-Thread-ID: https://ampcode.com/threads/T-019fd04c-a312-75c9-ac5f-a1de1a7d4c4e Co-authored-by: Amp --- comfy_api_nodes/apis/comfy_cloud.py | 6 +++++ comfy_api_nodes/nodes_comfy_cloud.py | 22 ++++++++++++++++--- .../comfy_api_nodes_test/comfy_cloud_test.py | 3 ++- 3 files changed, 27 insertions(+), 4 deletions(-) diff --git a/comfy_api_nodes/apis/comfy_cloud.py b/comfy_api_nodes/apis/comfy_cloud.py index bc7bc417f..615740879 100644 --- a/comfy_api_nodes/apis/comfy_cloud.py +++ b/comfy_api_nodes/apis/comfy_cloud.py @@ -20,6 +20,7 @@ ComfyCloudWorkflow = Literal[ class ComfyCloudWorkflowInputs(BaseModel): prompt: str | None = Field(None) image_url: str | None = Field(None) + assets: dict[str, "ComfyCloudAssetInput"] | None = Field(None) instruction: str | None = Field(None) prompt_enhance: bool | None = Field(None) negative_prompt: str | None = Field(None) @@ -30,6 +31,11 @@ class ComfyCloudWorkflowInputs(BaseModel): scale: str | None = Field(None) +class ComfyCloudAssetInput(BaseModel): + type: Literal["IMAGE", "VIDEO", "AUDIO"] = Field(...) + url: str = Field(...) + + class ComfyCloudGenerateRequest(BaseModel): workflow: ComfyCloudWorkflow = Field(...) inputs: ComfyCloudWorkflowInputs = Field(...) diff --git a/comfy_api_nodes/nodes_comfy_cloud.py b/comfy_api_nodes/nodes_comfy_cloud.py index 6cfbb5abb..e82c1d854 100644 --- a/comfy_api_nodes/nodes_comfy_cloud.py +++ b/comfy_api_nodes/nodes_comfy_cloud.py @@ -4,6 +4,7 @@ from typing_extensions import override from comfy_api.latest import IO, ComfyExtension, Input from comfy_api_nodes.apis.comfy_cloud import ( + ComfyCloudAssetInput, ComfyCloudGenerateRequest, ComfyCloudGenerateResponse, ComfyCloudStatusResponse, @@ -311,7 +312,11 @@ class ComfyCloudFlux2ReferenceEditNode(_ComfyCloudWorkflowNode): validate_string(instruction, min_length=1, max_length=4096, field_name="instruction") return await cls._run( ComfyCloudWorkflowInputs( - image_url=await cls._upload_image(image, total_pixels=None), + assets={ + "image": ComfyCloudAssetInput( + type="IMAGE", url=await cls._upload_image(image, total_pixels=None) + ) + }, instruction=instruction, guidance=guidance, quality_mode=quality_mode, @@ -352,7 +357,11 @@ class ComfyCloudQwenImageEdit2511Node(_ComfyCloudWorkflowNode): validate_string(instruction, min_length=1, max_length=4096, field_name="instruction") return await cls._run( ComfyCloudWorkflowInputs( - image_url=await cls._upload_image(image, total_pixels=None), + assets={ + "image": ComfyCloudAssetInput( + type="IMAGE", url=await cls._upload_image(image, total_pixels=None) + ) + }, instruction=instruction, quality_mode=quality_mode, seed=seed, @@ -379,7 +388,14 @@ class ComfyCloudSeedVR2ImageUpscaleNode(_ComfyCloudWorkflowNode): @classmethod async def execute(cls, image: Input.Image, scale: str = "4x") -> IO.NodeOutput: return await cls._run( - ComfyCloudWorkflowInputs(image_url=await cls._upload_image(image, total_pixels=None), scale=scale) + ComfyCloudWorkflowInputs( + assets={ + "image": ComfyCloudAssetInput( + type="IMAGE", url=await cls._upload_image(image, total_pixels=None) + ) + }, + scale=scale, + ) ) diff --git a/tests-unit/comfy_api_nodes_test/comfy_cloud_test.py b/tests-unit/comfy_api_nodes_test/comfy_cloud_test.py index c7a9299a3..63e957451 100644 --- a/tests-unit/comfy_api_nodes_test/comfy_cloud_test.py +++ b/tests-unit/comfy_api_nodes_test/comfy_cloud_test.py @@ -190,11 +190,12 @@ def test_image_poc_node_schema_and_request_mapping(monkeypatch, node, workflow, request = sync.call_args.kwargs["data"] expected_inputs = {key: value for key, value in arguments.items() if key != "image"} if "image" in arguments: - expected_inputs["image_url"] = "/uploads/input.png" + expected_inputs["assets"] = {"image": {"type": "IMAGE", "url": "/uploads/input.png"}} assert request.workflow == workflow assert request.inputs.model_dump(exclude_none=True) == expected_inputs assert "asset_id" not in request.model_dump_json() + assert '"id"' not in request.model_dump_json() assert upload.await_count == int("image" in arguments) if "image" in arguments: assert upload.call_args.kwargs == {"total_pixels": None}