Fix Image POC asset payloads

Amp-Thread-ID: https://ampcode.com/threads/T-019fd04c-a312-75c9-ac5f-a1de1a7d4c4e
Co-authored-by: Amp <amp@ampcode.com>
This commit is contained in:
Hunter Senft-Grupp
2026-08-05 05:34:47 +00:00
parent cd12eb4d23
commit 42233d148d
3 changed files with 27 additions and 4 deletions

View File

@@ -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(...)

View File

@@ -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,
)
)

View File

@@ -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}