{"record":{"id":"27202e20caeda4b4","repo":"lllyasviel/Fooocus","slug":"not-outer-padding-0-output-size-0-and-outer-p","errorCode":null,"errorMessage":"Not (outer_padding[0] < output_size[0] and outer_padding[1] < output_size[1])","messagePattern":"Not \\(outer_padding\\[0\\] < output_size\\[0\\] and outer_padding\\[1\\] < output_size\\[1\\]\\)","errorType":"validation","errorClass":"FaceWarpException","httpStatus":null,"severity":"error","filePath":"extras/facexlib/detection/align_trans.py","lineNumber":84,"sourceCode":"\n        return tmp_5pts\n\n    if (inner_padding_factor == 0 and outer_padding == (0, 0)):\n        if output_size is None:\n            return tmp_5pts\n        else:\n            raise FaceWarpException('No paddings to do, output_size must be None or {}'.format(tmp_crop_size))\n\n    # check output size\n    if not (0 <= inner_padding_factor <= 1.0):\n        raise FaceWarpException('Not (0 <= inner_padding_factor <= 1.0)')\n\n    if ((inner_padding_factor > 0 or outer_padding[0] > 0 or outer_padding[1] > 0) and output_size is None):\n        output_size = tmp_crop_size * \\\n            (1 + inner_padding_factor * 2).astype(np.int32)\n        output_size += np.array(outer_padding)\n    if not (outer_padding[0] < output_size[0] and outer_padding[1] < output_size[1]):\n        raise FaceWarpException('Not (outer_padding[0] < output_size[0] and outer_padding[1] < output_size[1])')\n\n    # 1) pad the inner region according inner_padding_factor\n    if inner_padding_factor > 0:\n        size_diff = tmp_crop_size * inner_padding_factor * 2\n        tmp_5pts += size_diff / 2\n        tmp_crop_size += np.round(size_diff).astype(np.int32)\n\n    # 2) resize the padded inner region\n    size_bf_outer_pad = np.array(output_size) - np.array(outer_padding) * 2\n\n    if size_bf_outer_pad[0] * tmp_crop_size[1] != size_bf_outer_pad[1] * tmp_crop_size[0]:\n        raise FaceWarpException('Must have (output_size - outer_padding)'\n                                '= some_scale * (crop_size * (1.0 + inner_padding_factor)')\n\n    scale_factor = size_bf_outer_pad[0].astype(np.float32) / tmp_crop_size[0]\n    tmp_5pts = tmp_5pts * scale_factor\n    #    size_diff = tmp_crop_size * (scale_factor - min(scale_factor))\n    #    tmp_5pts = tmp_5pts + size_diff / 2","sourceCodeStart":66,"sourceCodeEnd":102,"githubUrl":"https://github.com/lllyasviel/Fooocus/blob/ae05379cc97bc4361ec8b4ec90193dab21be763f/extras/facexlib/detection/align_trans.py#L66-L102","documentation":"After optional auto-computation of output_size, get_reference_facial_points requires each outer_padding component to be strictly smaller than the corresponding output_size component, otherwise the crop region would be empty or negative. Violating this raises FaceWarpException.","triggerScenarios":"Calling with outer_padding=(400,400) and output_size=(512,512) — padding is not less than the size; or a small crop_size with zero inner padding that auto-computes an output_size smaller than the requested outer padding.","commonSituations":"Scaling alignment parameters from a 512-crop pipeline down to smaller crops (e.g. 256) without scaling the outer padding; typo'd padding values; mixing up (x,y) vs (y,x) conventions leading to oversized padding.","solutions":["Reduce outer_padding so each component is strictly less than the corresponding output_size component","Scale padding proportionally when changing crop/output size","Or set output_size explicitly large enough: output_size > 2*outer_padding + padded crop"],"exampleFix":"// before\nget_reference_facial_points((256,256), 0.25, (200,200), False, output_size=(256,256))\n\n// after\nget_reference_facial_points((256,256), 0.25, (16,16), False, output_size=(320,320))","handlingStrategy":"validation","validationCode":"assert outer_padding[0] < output_size[0] and outer_padding[1] < output_size[1], \\\n    'outer_padding must be strictly smaller than output_size'","typeGuard":null,"tryCatchPattern":null,"preventionTips":["Scale padding when changing crop/output sizes","Keep outer padding small relative to output (e.g. < 10%)","Leave output_size None to auto-derive a consistent value"],"tags":["facexlib","face-alignment","padding","argument-validation"],"backgroundTag":null,"analyzedSha":"ae05379cc97bc4361ec8b4ec90193dab21be763f","analyzedAt":"2026-08-15T04:23:59.533Z","schemaVersion":2},"datasetVersion":"2026-08-15T22:17:37.221Z"}