Skip to main content

Seamlessly erase seams from your favorite 3D models.

Project description

Seam Erasure

Build Status

Seamlessly erase seams from your favorite 3D models.

Erases texture seams to prevent visible seams or tearing in various texture maps (color, normal, displacement, ambient occlusion, etc.).


Textures seams often produce errors when bi-linearly interpolated. This results in a visible seam line or other undesired artifacts. The goal of this project is to devise a numerical solution to this problem by minimizing the energy/error between interpolated values of edge pairs.


Install all required dependencies using: pip install -r requirements.txt

Dependencies include:

  • numpy: linear algebra
  • scipy: sparse matrix operations
  • recordclass: simple data objects
  • pillow: saving/loading texture image files



To use the seam eraser tool, first install the required packages, then enter the following into a command-line:

python path/to/input_model path/to/input_texture [-h] [-o path/to/output_texture] [-g] [--sv {none,texture,lerp}] [-d]

Positional arguments:

  • path/to/input_model: Path to input mesh file.
  • path/to/input_texture: Path to input texture image or directory to load all textures from.

Optional arguments:

  • -o path/to/output_texture, --output path/to/output_texture: Name of output texture or directory to save batch textures.
  • -g, --global: Should the minimization have global effects? (default: False)
    • This should be used if the texture has global discontinuities. This will propagate changes from the seam inward (see the teaser image for a example of global discontinties).
  • --sv {none,texture,lerp}: What method should be used to compute the seam value energy? (default: none)
    • none: do not use a seam value term
    • texture: use difference in original texture
    • lerp: use linearly interpolated values along the edge
      • Values are provided at the vertices in the .obj as additional entries after the xyz triplet (e.g. v <x> <y> <z> [<r>] [<g>] [<b>] [<a>] ... where the additional channels are optional and must match the number of channels in the texture image).
  • -d, --data: Should the input texture(s) be loaded as a .data files? (default: False)


  • seam_erasure/: Python package for Seam-Erasure
  • Command-line interface for seam erasure.
  • Flask based Python code for handling web inputs.
  • examples/: examples 3D model and texture files for testing
  • static/: Static web page content including style sheets
  • templates/: HTML template pages

Web Browser UI

This repository also includes a Flask based server implementation that can be run locally. This provides a simple webpage interface to provide model/texture input and select options. To get this user interface run:


This will start a server on the localhost. Navigate to the outputted address in your choice of web browser to view the interface.


Diffuse Textures

Before After

Normal Maps

Before After

Ambient Occlusion

Before After

Geometry Images

Before After

Project details

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

seam_erasure-1.0.0.tar.gz (27.4 kB view hashes)

Uploaded source

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page