Patchmatch
PatchMatch is an algorithm used to infill images. It can greatly improve outpainting results. PyPatchMatch is a python wrapper around a C++ implementation of the algorithm.
It uses the image data around the target area as a reference to generate new image data of a similar character and quality.
Why Use PatchMatch
Section titled “Why Use PatchMatch”In the context of image generation, “outpainting” refers to filling in a transparent area using AI-generated image data. But the AI can’t generate without some initial data. We need to first fill in the transparent area with something.
The first step in “outpainting” then, is to fill in the transparent area with something. Generally, you get better results when that initial infill resembles the rest of the image.
Because PatchMatch generates image data so similar to the rest of the image, it works very well as the first step in outpainting, typically producing better results than other infill methods supported by Invoke (e.g. LaMA, cv2 infill, random tiles).
Performance Caveat
Section titled “Performance Caveat”PatchMatch is CPU-bound, and the amount of time it takes increases proportionally as the infill area increases. While the numbers certainly vary depending on system specs, you can expect a noticeable slowdown once you start infilling areas around 512x512 pixels. 1024x1024 pixels can take several seconds to infill.
Installation
Section titled “Installation”Unfortunately, installation can be somewhat challenging, as it requires some things that pip cannot install for you.
-
Ensure you have the necessary dependencies installed for your system (see below).
You’re in luck! On Windows platforms PyPatchMatch will install automatically on Windows systems with no extra intervention.
You need to have opencv installed so that pypatchmatch can be built:
Terminal window brew install opencvThe next time you start
invoke, after successfully installing opencv, pypatchmatch will be built.Prior to installing PyPatchMatch, you need to take the following steps:
-
Install the
build-essentialtools:Terminal window sudo apt update # Update package listssudo apt install build-essential -
Install
opencv:Terminal window sudo apt install python3-opencv libopencv-dev -
Activate the environment you use for invokeai, either with
condaor with a virtual environment.
-
Install the
base-develpackage:Terminal window sudo pacman -Syusudo pacman -S --needed base-devel -
Install
opencv,blas, and required dependencies:Terminal window sudo pacman -S opencv blas fmt glew vtk hdf5or for CUDA support
Terminal window sudo pacman -S opencv-cuda blas fmt glew vtk hdf5 -
Fix the naming of the
opencvpackage configuration file:Terminal window cd /usr/lib/pkgconfig/ln -sf opencv4.pc opencv.pc
-
-
Install pypatchmatch:
Terminal window pip install pypatchmatch -
Confirm that pypatchmatch is installed. At the command-line prompt enter
python, and then at the>>>line typefrom patchmatch import patch_match: It should look like the following:Python 3.12.3 (main, Aug 14 2025, 17:47:21) [GCC 13.3.0] on linuxType "help", "copyright", "credits" or "license" for more information.>>> from patchmatch import patch_matchCompiling and loading c extensions from "/home/lstein/Projects/InvokeAI/.invokeai-env/src/pypatchmatch/patchmatch".rm -rf build/obj libpatchmatch.somkdir: created directory 'build/obj'mkdir: created directory 'build/obj/csrc/'[dep] csrc/masked_image.cpp ...[dep] csrc/nnf.cpp ...[dep] csrc/inpaint.cpp ...[dep] csrc/pyinterface.cpp ...[CC] csrc/pyinterface.cpp ...[CC] csrc/inpaint.cpp ...[CC] csrc/nnf.cpp ...[CC] csrc/masked_image.cpp ...[link] libpatchmatch.so ...If you’re not seeing any errors, you’re ready to go!