What is Seamless Tile Inpainting? How it works

Matt Payne
August 3, 2023
example of the results of seamless tile pinpointing

In the realm of image processing and digital graphics, creating seamless textures is a crucial and often complex task. One recent solution to this problem is the Seamless Tile Inpainting extension. This extension, which is an addition to the automatic1111/stable-diffusion-webui repository, allows users to make image tiles seamless through a process known as inpainting. Inpainting is a popular technique in image processing that involves filling in missing data or gaps in images with plausible information. This is typically done by using information from the surrounding image data to predict the missing areas.

The Seamless Tile Inpainting extension is built to work with the Stable Diffusion's official inpainting model at a 512x512 resolution. Stable Diffusion is an advanced machine learning model trained for inpainting tasks. However, the extension should also function well with other inpainting models, providing users with flexibility in their choice of technology tools. The primary use case for the Seamless Tile Inpainting extension is in creating seamless textures for 3D models. Textures are often tiled across 3D surfaces to create the illusion of detail without requiring high-resolution images. However, if the tiles do not seamlessly connect with each other, the result can be a visible grid-like pattern that breaks the immersion. By using the Seamless Tile Inpainting extension, users can create textures that tile seamlessly, improving the aesthetic quality of their 3D models.

Installation of the Seamless Tile Inpainting Extension

Before using the Seamless Tile Inpainting extension, it must first be installed. This can be done in one of two ways.

**Option #1:** First, you can run the automatic1111 software. Once this is running, navigate to the Extensions tab and look for "Seamless Tile Inpainting". Install this extension and then reset the user interface (UI) for the changes to take effect.

**Option #2:** Alternatively, you can directly clone the Seamless Tile Inpainting repository into the "extensions" folder of the automatic1111 software. After cloning the repository, you may need to restart the automatic1111 software for the extension to be recognized and available for use.

Using the Seamless Tile Inpainting Extension

Once installed, using the Seamless Tile Inpainting extension is a straightforward process. Start by running automatic1111/stable-diffusion-webui and ensuring your selected model is 512-inpainting-ema.ckpt, which is the Stable Diffusion's official inpainting model. However, another inpainting model of your choice can also be used. After setting up the model, navigate to the "img2img" tab. Here, you can upload the image you want to make seamless. Following this, select "Seamless Tile Inpainting" from the script's dropdown menu. The extension comes with several settings that you can adjust to achieve the desired results. Among these is the 'Tiling Direction', which allows you to choose whether your tiles will be seamless along the x-axis, the y -axis, or both. This depends on the orientation of your tiles; for example, floor or ceiling tiles would typically be seamless along the x-axis, while wall or ladder tiles would be seamless along the y-axis. The 'Masked area width (px)' setting determines the size of the area modified by inpainting. For instance, on the edges of the final image, the size of the modified area will appear to be half of this value. This is because the number you input here represents the total size of the mask when both edges are placed next to each other.

Finally, the 'Split sides again after inpainting?' setting allows you to control where the modified seam appears on your final image. If checked, the center area of the final image will appear the same as before. If unchecked, the center area will be where the modified seam appears. Both options will result in a seamless tile image that you can use, but you might want to uncheck this if you want to easily confirm that the modification looks right.

Comparison with the "Asymmetric Tiling" Extension

To help understand the unique capabilities of the Seamless Tile Inpainting extension, it's insightful to compare it with another similar extension - the Asymmetric Tiling extension. While both extensions are designed with the same overall objective of creating seamless tiles, their methodologies, and resulting outputs differ significantly.

X axis tiling example of asymmetric-tiling-sd-webui
X axis tiling example of asymmetric-tiling-sd-webui

The Asymmetric Tiling extension works by transforming the entire image in a way that makes it possible for the image to be seamlessly tiled. This is different from the Seamless Tile Inpainting extension which focuses on inpainting the seams of an image to facilitate seamless tiling.

One key difference lies in the preservation of the original image. The Asymmetric Tiling extension doesn't preserve the original image in its operations. It's primarily used either for text-to-image generations or it modifies every part of the image in image-to-image generations. This makes it more suited for scenarios where the original image is not as critical, or where extensive modifications of the image are desirable.

On the other hand, the Seamless Tile Inpainting extension strives to retain as much of the original image as possible, only modifying the edges that will connect to other tiles. This ensures that the central theme or elements of the image remain unaltered, making it a better choice for situations where retaining the integrity of the original image is important.

Y axis tiling example of asymmetric-tiling-sd-webui
Y axis tiling example of asymmetric-tiling-sd-webui

Another major difference is in the way both extensions handle the image during the tiling process. The Seamless Tile Inpainting extension employs a process that involves splitting the original image into halves, switching the sides, and then inpainting along the seams in between. If the user chooses, it can optionally switch the halves back again afterwards. This method is unique and ensures that the process is flexible and adaptable to the user's needs. Meanwhile, the method employed by the Asymmetric Tiling extension is less transparent. While we know it doesn't yield the same results as the Seamless Tile Inpainting extension, its exact workings are unknown. This can make it less predictable and harder to control than the Seamless Tile Inpainting extension.

In summary, while both extensions serve the purpose of creating seamless tiles, they do so in different ways and are better suited for different scenarios. The Seamless Tile Inpainting extension, with its focus on maintaining the integrity of the original image and providing a flexible and adaptable process, is a powerful tool for anyone looking to create high-quality seamless tiles without losing the essence of the original image.

Walkthrough of the seamless-tile-inpainting.py Script

The seamless-tile-inpainting.py script serves as the heart of the Seamless Tile Inpainting extension. A high-level understanding of this script can provide insights into how the extension works and how it can be tailored to suit specific use cases. The script is structured into several key functions, each contributing to the overall process of creating seamless tiles.

The `title()` function defines the title of the script as it appears in the dropdown menu. This is set to "Seamless Tile Inpainting".

The `show()` function determines when the script should appear in the dropdown menu. For instance, in this case, the script should only appear when the img2img tab is active, hence it returns `is_img2img`.

The `ui()` function controls how the script's UI is displayed. It defines the different settings that the user can adjust, such as the tiling direction, the masked area width, and the option to split sides again after inpainting.

screenshot of the ui function

The main processing happens in the `run()` function. This function uses the settings from the UI to perform the inpainting on the image. It first splits the image, then merges the halves in reverse order, applies the inpainting model with the image mask, and merges the halves back in their original order if the 'Split sides again after inpainting?' option was selected. The script ends by returning a Processed object, which represents the final result of the script's processing. This object includes the processed images which are the seamless tiles created by the script. The above functions provide the backbone of the seamless-tile-inpainting.py script, enabling it to perform the complex task of creating seamless tiles from an input image. By understanding these functions, users can gain a deeper insight into how the Seamless Tile Inpainting extension works, which can be invaluable in effectively utilizing and customizing the tool for their specific needs. For instance, the `run()` function could be modified to use a different inpainting model, or to adjust the way the image is split and merged. Similarly, the UI components created in the `ui()` function could be extended with additional options, providing the user with even more control over the inpainting process.

In the end, the seamless-tile-inpainting.py script is a powerful tool for creating seamless tiles. By understanding its structure and functionality, users can harness its full potential and adapt it to a wide range of applications in image processing and 3D modeling.

Key ideas around the inpainting process

Inpainting is a critical part of the seamless tile creation process. The inpainting model used in the Seamless Tile Inpainting extension works by predicting the missing areas in an image, using the surrounding data as a reference. In the context of the Seamless Tile Inpainting extension, the 'missing areas' are the seams that are created when the image is split and swapped. The seamless-tile-inpainting.py script employs the Stable Diffusion's official inpainting model, but it's flexible enough to work with other models as well. This allows users to choose a model that best fits their specific requirements or preferences.

Understanding Image Splitting and Merging

One of the key steps in the creation of seamless tiles is the process of splitting and merging images. The `split_image()` and `merge_images()` functions in the seamless-tile-inpainting.py script handle this. The script first splits the image into two halves based on the chosen tiling direction. It then swaps these halves and merges them back together to create seams in the middle of the image. The `merge_images()` function also allows for the optional resplitting of the halves after the inpainting process. If the 'Split sides again after inpainting?' option is selected, the processed image is split again and the sides are swapped back to their original positions. This step can help users visually confirm that the modifications look correct.

The Role of the Image Mask

The image mask is another crucial element in the seamless tile creation process. The mask determines the area of the image that the inpainting model should focus on. In the context of the Seamless Tile Inpainting extension, the mask is applied to the seams created by the image splitting and merging process. The width of the mask can be adjusted via the UI settings, allowing users to control the size of the area modified by the inpainting process. This flexibility in determining the masked area width allows users to fine-tune the seamless tile creation process based on their specific needs or preferences.

Potential Challenges and Troubleshooting

Like any technical process, there might be some challenges or issues that users could encounter when using the Seamless Tile Inpainting extension. One common issue could be choosing the wrong tiling direction or masked area width, which could result in less than optimal results. Users are encouraged to experiment with different settings to understand their effects and find the optimal configuration for their specific use case. Furthermore, it's important to remember that the extension is designed to work with the Stable Diffusion's official inpainting model. Using a different model may result in unexpected results or errors. If such issues arise, users could try switching back to the official model or check if the alternative model they're using is compatible with the seamless-tile-inpainting.py script. By understanding the details of the inpainting process and potential challenges, users can utilize the Seamless Tile Inpainting extension more effectively and troubleshoot any issues that may arise. This deeper comprehension not only enhances users' mastery of the tool but also empowers them to further modify and adapt the tool to more accurately fit their specific requirements.

Looking to get started with inpainting?

We’ve helped companies build a ton of inpainting models and can help fine-tune these models on specific datasets to reach extremely high in-domain accuracy. Contact us today to talk to an inpainting expert about how we can help you build your own model!