Comfy-Org/ComfyUI · error · ValueError

The new shape must have the same number of dimensions as the

Error message

The new shape must have the same number of dimensions as the original tensor

What it means

pad_tensor requires new_shape to have the same number of dimensions as the input tensor; a rank mismatch raises ValueError before any allocation. Padding is elementwise-per-dimension, so a 3-element shape for a 4-D tensor is meaningless.

Source

Thrown at comfy/lora.py:399

    """
    Pad a tensor to a new shape with zeros.

    Args:
        tensor (torch.Tensor): The original tensor to be padded.
        new_shape (List[int]): The desired shape of the padded tensor.

    Returns:
        torch.Tensor: A new tensor padded with zeros to the specified shape.

    Note:
        If the new shape is smaller than the original tensor in any dimension,
        the original tensor will be truncated in that dimension.
    """
    if any([new_shape[i] < tensor.shape[i] for i in range(len(new_shape))]):
        raise ValueError("The new shape must be larger than the original tensor in all dimensions")

    if len(new_shape) != len(tensor.shape):
        raise ValueError("The new shape must have the same number of dimensions as the original tensor")

    # Create a new tensor filled with zeros
    padded_tensor = torch.zeros(new_shape, dtype=tensor.dtype, device=tensor.device)

    # Create slicing tuples for both tensors
    orig_slices = tuple(slice(0, dim) for dim in tensor.shape)
    new_slices = tuple(slice(0, dim) for dim in tensor.shape)

    # Copy the original tensor into the new tensor
    padded_tensor[new_slices] = tensor[orig_slices]

    return padded_tensor

def calculate_shape(patches, weight, key, original_weights=None):
    current_shape = weight.shape

    for p in patches:
        v = p[1]

View on GitHub (pinned to 1c6d8d45b3)

Solutions

  1. Build new_shape as list(tensor.shape) with only the padded dims increased: shape = list(t.shape); shape[-1] += extra.
  2. Validate len(new_shape) == tensor.dim() before calling.
  3. Double-check which weight (bias vs weight) you are padding.

Example fix

# before
new_shape = [1, 128, 128]  # for a 4-D conv weight
padded = pad_tensor(w, new_shape)
# after
new_shape = list(w.shape); new_shape[1] = 128; new_shape[2] = 128; new_shape[3] = 128
padded = pad_tensor(w, new_shape)
Defensive patterns

Strategy: validation

Validate before calling

if len(new_shape) != tensor.dim():
    raise ValueError(f"new_shape has {len(new_shape)} dims, tensor has {tensor.dim()}")
out = pad_tensor(tensor, new_shape)

Type guard

def same_rank(tensor, new_shape) -> bool:
    return len(new_shape) == tensor.dim()

Prevention

When it happens

Trigger: pad_tensor(torch.zeros(1,64,64), [1,64,64,64]) or any call where len(new_shape) != tensor.ndim.

Common situations: Hardcoding a target shape that assumes a different rank (image vs video tensors, conv1d vs conv2d weights); passing a full weight shape to pad a bias vector.

Related errors


AI-assisted analysis of Comfy-Org/ComfyUI@1c6d8d45b3 (2026-08-14). Data as JSON: /api/errors/05c586a8efc71d83. Report an issue: GitHub.