From 799d10e35b7a86e2666ea7940e9ea66020806543 Mon Sep 17 00:00:00 2001 From: Luis Quesada Date: Mon, 13 May 2024 08:21:52 +0200 Subject: [PATCH] Enable rescaling down as well --- README.md | 3 ++- __pycache__/__init__.cpython-311.pyc | Bin 0 -> 519 bytes .../inpaint_cropandstitch.cpython-311.pyc | Bin 0 -> 15743 bytes inpaint_cropandstitch.py | 8 ++++---- 4 files changed, 6 insertions(+), 5 deletions(-) create mode 100644 __pycache__/__init__.cpython-311.pyc create mode 100644 __pycache__/inpaint_cropandstitch.cpython-311.pyc diff --git a/README.md b/README.md index eaf0716..a457cc2 100644 --- a/README.md +++ b/README.md @@ -18,8 +18,9 @@ Check ComfyUI here: https://github.com/comfyanonymous/ComfyUI - `fill_holes`: Whether to fully fill any holes (small or large) in the mask, that is, mark fully enclosed areas as part of the mask. - `blur_radius_pixels`: Whether to blur the mask, to be used in combination with `grow_mask_pixels`. Some models prefer blurred masks, some don't. - `adjust_to_preferred_sizes`: This will try to have width and/or height of the context area match any of the sizes in `preferred_sizes` by growing the context area (not upscaling), e.g. 512, 1024. Some models prefer this. +- `preferred_sizes`: Comma-separated list of preferred sizes, e.g. "512,1024". Default is 1024 because it fits most of the use cases of this feature. - `prefer_square_size`: This will try to have width=height (if possible). Some models prefer this. -- `internal_upscale_factor`: Upscale the image and mask between the crop and stitch phases. This means the sampling happens only around the context area but at a higher resolution (e.g. 2 for x2), then it is downsampled and merged with the original image. This in practice gets more details from models. If you want to obtain a higher resolution image, please upscale it before cropping/sampling/stitching. +- `internal_upscale_factor`: Upscale the image and mask between the crop and stitch phases. This means the sampling happens only around the context area but at a higher resolution (e.g. 2 for x2), then it is downsampled and merged with the original image. This in practice gets more details from models. If you want to obtain a higher resolution image, please upscale it before cropping/sampling/stitching. This can also be lower than 1 for the rare cases you need it, such as the original image too large and the model generating double heads. ## Simple example This example inpaints by sampling on a small section of the larger image. It runs ~20x faster than sampling on the whole image. diff --git a/__pycache__/__init__.cpython-311.pyc b/__pycache__/__init__.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..e73a11169935f7efa3d39283f734e151c6a179da GIT binary patch literal 519 zcmZWmziYxk6n>YOXsu2v1qW;00@ZXb#S&DCpjHSS>T-w|Yal-)KL$IM4xI`eOToSL zKj@#4Q8Knurv}`ddZ)2P`tJDn-go!jeRubo&8C6I;O8iO%YN4ds5rQ7;l>q%l*&^LbYi1r>@#9bTtv*8HLkVqj+VmveqjNf2MQ&@H6iEV1K zW@xvXHgp7?v^CE#1SoHl3|fXQoYjL#sO( z+MKHWBp%MxF0T%&<0CG_V^3tMkOvMrtOH?dIX~-M} Pm3ojqze}>=u>b!7%r=u4 literal 0 HcmV?d00001 diff --git a/__pycache__/inpaint_cropandstitch.cpython-311.pyc b/__pycache__/inpaint_cropandstitch.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..008e1d9e24ff651697f96d4ba3e92d353c69d4ad GIT binary patch literal 15743 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 1.001: + if internal_upscale_factor < 0.999 or internal_upscale_factor > 1.001: samples = image samples = samples.movedim(-1, 1) width = round(samples.shape[3] * internal_upscale_factor) @@ -272,7 +272,7 @@ class InpaintStitch: inpaint_height = inpainted_image.shape[1] # Downscale inpainted before stitching if we upscaled it before - if stitch['rescale_x'] > 1.001 or stitch['rescale_y'] > 1.001: + if stitch['rescale_x'] < 0.999 or stitch['rescale_x'] > 1.001 or stitch['rescale_y'] < 0.999 or stitch['rescale_y'] > 1.001: samples = inpainted_image.movedim(-1, 1) width = round(float(inpaint_width)/stitch['rescale_x']) height = round(float(inpaint_height)/stitch['rescale_y'])