Comfy-Org/ComfyUI · error · ValueError
Invalid image dimensions: {w}x{h}
Error message
Invalid image dimensions: {w}x{h} What it means
ValueError from validate_image_aspect_ratio when either dimension of the image is <= 0. After get_image_dimensions returns (w, h), a non-positive width or height means the tensor is degenerate (empty batch slice, zero-size dim) and the ratio computation w/h would divide by zero or be meaningless, so it refuses to compute an aspect ratio.
Source
Thrown at comfy_api_nodes/util/validation_utils.py:46
if max_width is not None and width > max_width:
raise ValueError(f"Image width must be at most {max_width}px, got {width}px")
if min_height is not None and height < min_height:
raise ValueError(f"Image height must be at least {min_height}px, got {height}px")
if max_height is not None and height > max_height:
raise ValueError(f"Image height must be at most {max_height}px, got {height}px")
def validate_image_aspect_ratio(
image: torch.Tensor,
min_ratio: tuple[float, float] | None = None, # e.g. (1, 4)
max_ratio: tuple[float, float] | None = None, # e.g. (4, 1)
*,
strict: bool = True, # True -> (min, max); False -> [min, max]
) -> float:
"""Validates that image aspect ratio is within min and max. If a bound is None, that side is not checked."""
w, h = get_image_dimensions(image)
if w <= 0 or h <= 0:
raise ValueError(f"Invalid image dimensions: {w}x{h}")
ar = w / h
_assert_ratio_bounds(ar, min_ratio=min_ratio, max_ratio=max_ratio, strict=strict)
return ar
def validate_images_aspect_ratio_closeness(
first_image: torch.Tensor,
second_image: torch.Tensor,
min_rel: float, # e.g. 0.8
max_rel: float, # e.g. 1.25
*,
strict: bool = False, # True -> (min, max); False -> [min, max]
) -> float:
"""
Validates that the two images' aspect ratios are 'close'.
The closeness factor is C = max(ar1, ar2) / min(ar1, ar2) (C >= 1).
We require C <= limit, where limit = max(max_rel, 1.0 / min_rel).
View on GitHub (pinned to 1c6d8d45b3)
Solutions
- Check tensor.shape for zero dims before calling the validator.
- Fix the upstream crop/slice logic that produced a zero-sized dimension.
- Guard custom nodes: skip or error clearly when any dim is 0 instead of passing the tensor on.
Example fix
# before validate_image_aspect_ratio(image, min_ratio=(1, 4)) # after assert image.shape[-2] > 0 and image.shape[-3] > 0, "empty image" validate_image_aspect_ratio(image, min_ratio=(1, 4))
Defensive patterns
Strategy: validation
Validate before calling
def has_positive_dims(image: torch.Tensor) -> bool:
h = image.shape[1] if image.dim() == 4 else image.shape[0]
w = image.shape[2] if image.dim() == 4 else image.shape[1]
return h > 0 and w > 0 Type guard
def is_usable_image(t: torch.Tensor) -> bool:
return isinstance(t, torch.Tensor) and t.dim() in (3, 4) and min(t.shape[-2], t.shape[-3]) > 0 Prevention
- Assert non-zero dimensions after crops/slices
- Guard against empty batch indexing in custom nodes
When it happens
Trigger: Passing a tensor with a 0-sized dimension (e.g., image[:, :, :0, :] after a bad crop, or an empty batch indexed as image[i] on a 0-batch tensor) to validate_image_aspect_ratio.
Common situations: Bad crop/slice parameters producing zero-size dimensions; empty tensors from a failed upstream generation; off-by-one slicing bugs in custom nodes.
Related errors
- Invalid image tensor shape.
- Invalid image dimensions
- JoyImage reference inputs must contain one image each
- The maximum number of reference images is 10.
- sync.so rejects images above 4K (4096x2160); got {width}x{he
AI-assisted analysis of Comfy-Org/ComfyUI@1c6d8d45b3 (2026-08-14).
Data as JSON: /api/errors/1949289aee438aa0.
Report an issue: GitHub.