xatlas 0.0.11


pip install xatlas

  Latest version

Released: Jul 04, 2025

Project Links

Meta
Author: Markus Worchel
Requires Python: >=3.8

Classifiers

Python bindings for xatlas

(Unofficial) Python bindings for xatlas, a library that generates texture coordinates for triangle meshes.

Installation

From source

git clone --recursive https://github.com/mworchel/xatlas-python.git
pip install ./xatlas-python

Using Pip

pip install xatlas

Usage

Parametrize a mesh and export it

import trimesh
import xatlas

# We use trimesh (https://github.com/mikedh/trimesh) to load a mesh but you can use any library.
mesh = trimesh.load_mesh("input.obj")

# The parametrization potentially duplicates vertices.
# `vmapping` contains the original vertex index for each new vertex (shape N, type uint32).
# `indices` contains the vertex indices of the new triangles (shape Fx3, type uint32)
# `uvs` contains texture coordinates of the new vertices (shape Nx2, type float32)
vmapping, indices, uvs = xatlas.parametrize(mesh.vertices, mesh.faces)

# Trimesh needs a material to export uv coordinates and always creates a *.mtl file.
# Alternatively, we can use the `export` helper function to export the mesh as obj.
xatlas.export("output.obj", mesh.vertices[vmapping], indices, uvs)

# Both `xatlas.parametrize` and `xatlas.export` also accept vertex normals

Parametrize multiple meshes using one atlas

mesh1 = trimesh.load_mesh("input1.obj")
mesh2 = trimesh.load_mesh("input2.obj")

atlas = xatlas.Atlas()

atlas.add_mesh(mesh1.vertices, mesh1.faces)
atlas.add_mesh(mesh2.vertices, mesh2.faces)

# Optionally parametrize the generation with
# `xatlas.ChartOptions` and `xatlas.PackOptions`.
atlas.generate()

vmapping1, indices1, uvs1 = atlas[0]
vmapping2, indices2, uvs2 = atlas[1]

Repack multiple parametrized meshes into one atlas

vertices1, indices1, uvs1 = load_mesh_with_uvs("input1.obj")
vertices2, indices2, uvs2 = load_mesh_with_uvs("input2.obj")

atlas = xatlas.Atlas()

atlas.add_uv_mesh(uvs1, indices1)
atlas.add_uv_mesh(uvs2, indices2)

atlas.generate()

vmapping1, indices1, uvs1 = atlas[0]
vmapping2, indices2, uvs2 = atlas[1]

Query the atlas

atlas.mesh_count  # Number of meshes
len(atlas)        # Convenience binding for `atlas.mesh_count`
atlas.get_mesh(i) # Data for the i-th mesh
atlas[i]          # Convenience binding for `atlas.get_mesh`

atlas.width       # Width of the atlas 
atlas.height      # Height of the atlas

atlas.utilization        # Utilization of the first atlas
atlas.get_utilization(i) # Utilization of i-th atlas

atlas.get_mesh_vertex_assignement(i) # Returns two arrays, with the atlas index and 
                                     # chart index of each vertex in the i-th mesh
atlas.get_mesh_chart_count(i) # Returns the number of charts of the i-th mesh
atlas.get_mesh_chart(i, j)    # Returns the j-th chart of the i-th mesh

# The image requires passing custom PackOptions:
#   pack_options = xatlas.PackOptions()
#   pack_options.create_image = True
#   atlas.generate(pack_options=pack_options)
atlas.chart_image        # Debug image of the first atlas
atlas.get_chart_image(i) # Debug image of the i-th atlas

...               # See xatlas documentation for all properties

License

The xatlas Python bindings are provided under a MIT license. By using, distributing, or contributing to this project, you agree to the terms and conditions of this license.

References

Test model taken from the ABC dataset

Wheel compatibility matrix

Platform CPython 3.8 CPython 3.9 CPython 3.10 CPython 3.11 CPython 3.12 CPython 3.13 PyPy 3.8 (pp73) PyPy 3.9 (pp73) PyPy 3.10 (pp73) PyPy 3.11 (pp73)
macosx_10_14_x86_64
macosx_10_15_x86_64
macosx_11_0_arm64
manylinux2014_i686
manylinux2014_x86_64
manylinux_2_17_i686
manylinux_2_17_x86_64
musllinux_1_2_i686
musllinux_1_2_x86_64
win32
win_amd64

Files in release

xatlas-0.0.11-cp310-cp310-macosx_10_14_x86_64.whl (217.2KiB)
xatlas-0.0.11-cp310-cp310-macosx_11_0_arm64.whl (195.1KiB)
xatlas-0.0.11-cp310-cp310-manylinux_2_17_i686.manylinux2014_i686.whl (261.7KiB)
xatlas-0.0.11-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (255.5KiB)
xatlas-0.0.11-cp310-cp310-musllinux_1_2_i686.whl (1.3MiB)
xatlas-0.0.11-cp310-cp310-musllinux_1_2_x86_64.whl (1.2MiB)
xatlas-0.0.11-cp310-cp310-win32.whl (180.3KiB)
xatlas-0.0.11-cp310-cp310-win_amd64.whl (201.4KiB)
xatlas-0.0.11-cp311-cp311-macosx_10_14_x86_64.whl (218.2KiB)
xatlas-0.0.11-cp311-cp311-macosx_11_0_arm64.whl (196.3KiB)
xatlas-0.0.11-cp311-cp311-manylinux_2_17_i686.manylinux2014_i686.whl (262.3KiB)
xatlas-0.0.11-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (256.1KiB)
xatlas-0.0.11-cp311-cp311-musllinux_1_2_i686.whl (1.3MiB)
xatlas-0.0.11-cp311-cp311-musllinux_1_2_x86_64.whl (1.2MiB)
xatlas-0.0.11-cp311-cp311-win32.whl (181.3KiB)
xatlas-0.0.11-cp311-cp311-win_amd64.whl (201.9KiB)
xatlas-0.0.11-cp312-cp312-macosx_10_14_x86_64.whl (218.2KiB)
xatlas-0.0.11-cp312-cp312-macosx_11_0_arm64.whl (196.3KiB)
xatlas-0.0.11-cp312-cp312-manylinux_2_17_i686.manylinux2014_i686.whl (262.1KiB)
xatlas-0.0.11-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (254.9KiB)
xatlas-0.0.11-cp312-cp312-musllinux_1_2_i686.whl (1.3MiB)
xatlas-0.0.11-cp312-cp312-musllinux_1_2_x86_64.whl (1.2MiB)
xatlas-0.0.11-cp312-cp312-win32.whl (181.5KiB)
xatlas-0.0.11-cp312-cp312-win_amd64.whl (203.0KiB)
xatlas-0.0.11-cp313-cp313-macosx_10_14_x86_64.whl (218.3KiB)
xatlas-0.0.11-cp313-cp313-macosx_11_0_arm64.whl (196.4KiB)
xatlas-0.0.11-cp313-cp313-manylinux_2_17_i686.manylinux2014_i686.whl (261.9KiB)
xatlas-0.0.11-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (254.7KiB)
xatlas-0.0.11-cp313-cp313-musllinux_1_2_i686.whl (1.3MiB)
xatlas-0.0.11-cp313-cp313-musllinux_1_2_x86_64.whl (1.2MiB)
xatlas-0.0.11-cp313-cp313-win32.whl (181.5KiB)
xatlas-0.0.11-cp313-cp313-win_amd64.whl (203.0KiB)
xatlas-0.0.11-cp38-cp38-macosx_10_14_x86_64.whl (217.0KiB)
xatlas-0.0.11-cp38-cp38-macosx_11_0_arm64.whl (195.0KiB)
xatlas-0.0.11-cp38-cp38-manylinux_2_17_i686.manylinux2014_i686.whl (261.4KiB)
xatlas-0.0.11-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (255.5KiB)
xatlas-0.0.11-cp38-cp38-musllinux_1_2_i686.whl (1.3MiB)
xatlas-0.0.11-cp38-cp38-musllinux_1_2_x86_64.whl (1.2MiB)
xatlas-0.0.11-cp38-cp38-win32.whl (180.2KiB)
xatlas-0.0.11-cp38-cp38-win_amd64.whl (201.0KiB)
xatlas-0.0.11-cp39-cp39-macosx_10_14_x86_64.whl (217.2KiB)
xatlas-0.0.11-cp39-cp39-macosx_11_0_arm64.whl (195.3KiB)
xatlas-0.0.11-cp39-cp39-manylinux_2_17_i686.manylinux2014_i686.whl (261.9KiB)
xatlas-0.0.11-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (255.7KiB)
xatlas-0.0.11-cp39-cp39-musllinux_1_2_i686.whl (1.3MiB)
xatlas-0.0.11-cp39-cp39-musllinux_1_2_x86_64.whl (1.2MiB)
xatlas-0.0.11-cp39-cp39-win32.whl (180.5KiB)
xatlas-0.0.11-cp39-cp39-win_amd64.whl (208.2KiB)
xatlas-0.0.11-pp310-pypy310_pp73-macosx_10_15_x86_64.whl (217.3KiB)
xatlas-0.0.11-pp310-pypy310_pp73-macosx_11_0_arm64.whl (195.0KiB)
xatlas-0.0.11-pp310-pypy310_pp73-manylinux_2_17_i686.manylinux2014_i686.whl (261.6KiB)
xatlas-0.0.11-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (255.9KiB)
xatlas-0.0.11-pp310-pypy310_pp73-win_amd64.whl (200.9KiB)
xatlas-0.0.11-pp311-pypy311_pp73-macosx_10_15_x86_64.whl (218.5KiB)
xatlas-0.0.11-pp311-pypy311_pp73-macosx_11_0_arm64.whl (196.3KiB)
xatlas-0.0.11-pp311-pypy311_pp73-manylinux_2_17_i686.manylinux2014_i686.whl (262.5KiB)
xatlas-0.0.11-pp311-pypy311_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (257.3KiB)
xatlas-0.0.11-pp311-pypy311_pp73-win_amd64.whl (201.6KiB)
xatlas-0.0.11-pp38-pypy38_pp73-macosx_10_14_x86_64.whl (216.9KiB)
xatlas-0.0.11-pp38-pypy38_pp73-macosx_11_0_arm64.whl (195.0KiB)
xatlas-0.0.11-pp38-pypy38_pp73-manylinux_2_17_i686.manylinux2014_i686.whl (261.7KiB)
xatlas-0.0.11-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (255.8KiB)
xatlas-0.0.11-pp38-pypy38_pp73-win_amd64.whl (200.8KiB)
xatlas-0.0.11-pp39-pypy39_pp73-macosx_10_15_x86_64.whl (217.2KiB)
xatlas-0.0.11-pp39-pypy39_pp73-macosx_11_0_arm64.whl (195.0KiB)
xatlas-0.0.11-pp39-pypy39_pp73-manylinux_2_17_i686.manylinux2014_i686.whl (261.5KiB)
xatlas-0.0.11-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (255.8KiB)
xatlas-0.0.11-pp39-pypy39_pp73-win_amd64.whl (200.8KiB)
xatlas-0.0.11.tar.gz (7.4MiB)
Extras:
Dependencies: