lllyasviel/Fooocus · error · FaceWarpException

No paddings to do, output_size must be None or {}

Error message

No paddings to do, output_size must be None or {}

What it means

In get_reference_facial_points, when inner_padding_factor is 0 and outer_padding is (0,0) there is no padding to compute, so the function can only return the un-padded 5-point layout; if the caller additionally demands a specific output_size different from the natural crop size, it raises FaceWarpException telling you output_size must be None or exactly tmp_crop_size.

Source

Thrown at extras/facexlib/detection/align_trans.py:73

    tmp_5pts = np.array(REFERENCE_FACIAL_POINTS)
    tmp_crop_size = np.array(DEFAULT_CROP_SIZE)

    # 0) make the inner region a square
    if default_square:
        size_diff = max(tmp_crop_size) - tmp_crop_size
        tmp_5pts += size_diff / 2
        tmp_crop_size += size_diff

    if (output_size and output_size[0] == tmp_crop_size[0] and output_size[1] == tmp_crop_size[1]):

        return tmp_5pts

    if (inner_padding_factor == 0 and outer_padding == (0, 0)):
        if output_size is None:
            return tmp_5pts
        else:
            raise FaceWarpException('No paddings to do, output_size must be None or {}'.format(tmp_crop_size))

    # check output size
    if not (0 <= inner_padding_factor <= 1.0):
        raise FaceWarpException('Not (0 <= inner_padding_factor <= 1.0)')

    if ((inner_padding_factor > 0 or outer_padding[0] > 0 or outer_padding[1] > 0) and output_size is None):
        output_size = tmp_crop_size * \
            (1 + inner_padding_factor * 2).astype(np.int32)
        output_size += np.array(outer_padding)
    if not (outer_padding[0] < output_size[0] and outer_padding[1] < output_size[1]):
        raise FaceWarpException('Not (outer_padding[0] < output_size[0] and outer_padding[1] < output_size[1])')

    # 1) pad the inner region according inner_padding_factor
    if inner_padding_factor > 0:
        size_diff = tmp_crop_size * inner_padding_factor * 2
        tmp_5pts += size_diff / 2
        tmp_crop_size += np.round(size_diff).astype(np.int32)

View on GitHub (pinned to ae05379cc9)

Solutions

  1. Pass output_size=None when both paddings are zero
  2. Or set output_size equal to the (possibly squared) crop_size
  3. If you need a different output size, use a nonzero inner_padding_factor or outer_padding instead

Example fix

// before
pts = get_reference_facial_points((256,256), 0, (0,0), False, output_size=(512,512))

// after
pts = get_reference_facial_points((256,256), 0, (0,0), False, output_size=None)
Defensive patterns

Strategy: validation

Validate before calling

if inner_padding_factor == 0 and outer_padding == (0, 0):
    output_size = None  # or exactly crop_size

Prevention

When it happens

Trigger: Calling get_reference_facial_points(crop_size, inner_padding_factor=0, outer_padding=(0,0), output_size=some_other_size) where output_size != crop_size (after the square-crop adjustment).

Common situations: Custom alignment code copied from GFPGAN/face-restoration pipelines that hardcodes an output_size while zeroing padding factors; passing (0,0) padding from a config that also sets a fixed output resolution.

Related errors


AI-assisted analysis of lllyasviel/Fooocus@ae05379cc9 (2026-08-15). Data as JSON: /api/errors/47e3e9ba07a453f4. Report an issue: GitHub.