[Partner Nodes] fix(GPT Image): handle mismatched image sizes returned when size="auto"

Signed-off-by: bigcat88 <bigcat88@icloud.com>
This commit is contained in:
bigcat88 2026-06-11 10:49:48 +03:00
parent 91187c58d9
commit b71bf13bf1
No known key found for this signature in database
GPG Key ID: 1F0BF0EC3CF22721

View File

@ -9,6 +9,7 @@ from PIL import Image
from typing_extensions import override from typing_extensions import override
import folder_paths import folder_paths
from comfy.utils import common_upscale
from comfy_api.latest import IO, ComfyExtension, Input from comfy_api.latest import IO, ComfyExtension, Input
from comfy_api_nodes.apis.openai import ( from comfy_api_nodes.apis.openai import (
InputFileContent, InputFileContent,
@ -62,7 +63,8 @@ async def validate_and_cast_response(response, timeout: int = None) -> torch.Ten
timeout: Request timeout in seconds. Defaults to None (no timeout). timeout: Request timeout in seconds. Defaults to None (no timeout).
Returns: Returns:
A torch.Tensor representing the image (1, H, W, C). A torch.Tensor of shape (N, H, W, C) with all returned images; images whose
dimensions differ from the first image's are resized to match it.
Raises: Raises:
ValueError: If the response is not valid. ValueError: If the response is not valid.
@ -89,6 +91,14 @@ async def validate_and_cast_response(response, timeout: int = None) -> torch.Ten
arr = np.asarray(pil_img).astype(np.float32) / 255.0 arr = np.asarray(pil_img).astype(np.float32) / 255.0
image_tensors.append(torch.from_numpy(arr)) image_tensors.append(torch.from_numpy(arr))
# With size="auto" the API can return images whose dimensions differ by a few pixels within a single response
# resize them to the first image's dimensions so they can be stacked into one batch.
ref_h, ref_w = image_tensors[0].shape[:2]
for i, t in enumerate(image_tensors):
if t.shape[:2] != (ref_h, ref_w):
samples = t.unsqueeze(0).movedim(-1, 1)
samples = common_upscale(samples, ref_w, ref_h, "bilinear", "center")
image_tensors[i] = samples.movedim(1, -1).squeeze(0)
return torch.stack(image_tensors, dim=0) return torch.stack(image_tensors, dim=0)