3D Printer World compares 3D printers, supplies, software and free model sites for 2026.

Home / STL Repair Software

PyMeshLab Review

Free software; setup, maintenance and output checking take time.

Our verdict

PyMeshLab makes sense when repeated mesh cleanup or simplification justifies maintaining a Python script. It can repeat a chosen process across files, but you must select the settings, diagnose failures and check each result.

Summary updated September 8, 2026

PyMeshLab

Best atRepeatable processing of scans or batches of 3D assets by people who already write Python.

Less suited toOccasional visual repairs or workflows where nobody wants to maintain and debug Python code.

The Key Specs

WorkflowPython access to MeshLab filtersTurn selected cleanup, simplification and measurement steps into repeatable scripts.
Computer supportWindows, macOS and Linux packagesMatch your Python version and processor to a supported package before adopting it.
Mesh exchangeSTL, OBJ and PLYChoose a format that preserves the data you need, then reopen the export in the next application.
Repair limitsSpecific cleanup operations, not automatic print validationCheck dimensions, surface integrity and wall thickness, then inspect the result in a slicer.
Batch processingA MeshSet is not thread-safeDo not run filters simultaneously on the same MeshSet.

Which Installation Should You Choose?

PyPI release 2025.7.post1
Choose this route to match the manuscript’s pinned installation in a Python virtual environment.
Conda-Forge package
Choose this route inside a Conda environment; check the version it resolves.

What Else Does the Workflow Require? Allow time for a compatible Python environment, script maintenance and checks on processed meshes. Keep original files and working settings, and use a visual mesh tool or slicer to inspect results before printing.

More Software And Compatibility Details
Reviewed release2025.7.post1
Python packagesCPython 3.10–3.14
Windows packagesx86-64
macOS packagesmacOS 11 or newer; Intel and Apple Silicon
Linux packagesx86-64 and ARM64; glibc 2.35 or newer
Source licenseGPL-3.0
PrecisionDouble precision; some filters can behave differently from a default MeshLab build.
Python data exchangeNumPy vertex and face arrays; adding a Mesh to a MeshSet copies it.

PyMeshLab is worth considering if you already write Python and keep repeating the same mesh cleanup or simplification steps. Its main benefit is turning those steps into a script you can apply to more files. Its main drawback is that you also take responsibility for the script: choosing settings, diagnosing errors and checking what changed in each model.

I’d recommend it for repeatable processing of scans, research data or batches of 3D assets. For an occasional repair that needs close visual judgment, start with MeshLab. If you don’t want to maintain Python code, PyMeshLab’s automation won’t be enough reason to adopt it.

Where PyMeshLab fits in your Python work

A triangle mesh describes an object’s surface using connected triangles. Each triangle is a face, and its corners are vertices. PyMeshLab gives Python access to MeshLab’s tools for processing these surfaces, including cleaning, simplification and measurements. MeshLab is the visual application; PyMeshLab is the library you call from code.

That distinction matters when you have many similar files. You can define a sequence once, supply each input and save the results. You still need to decide which operations make sense for the geometry. A script can repeat a poor choice just as consistently as a good one.

The project comes from the ISTI-CNR Visual Computing Lab, and its official GitHub repository is cnr-isti-vclab/PyMeshLab. It has named maintainers and GPL-3.0 source code. You can trace who makes it, although that isn’t a security audit. There’s no software purchase required, but check the license against your plans before distributing an application that includes it. Setup and maintenance also take time.

Getting from installation to a processed mesh

The current PyPI release is 2025.7.post1. Its ready-made packages cover CPython 3.10–3.14 on Windows x86-64, macOS 11 or newer on Intel and Apple Silicon, and Linux x86-64 and ARM64 with glibc 2.35 or newer. Match the package to your Python version, operating system and processor; don’t assume an older installation guide describes today’s requirements.

In a Python virtual environment, install this specific release with:

pip3 install pymeshlab==2025.7.post1

For a Conda environment, the project recommends conda install -c conda-forge pymeshlab. Check which version Conda resolves rather than assuming both routes install the same release.

Here’s a minimal load, simplify and save script using the documented API:

import pymeshlab

ms = pymeshlab.MeshSet()
ms.load_new_mesh(“input.ply”)
ms.meshing_decimation_quadric_edge_collapse(targetperc=0.75)
ms.save_current_mesh(“output.ply”)
“`

Supply your own triangle mesh as input.ply. The target is to retain 75% of its initial faces, not remove 75%. This is a starting setting to evaluate, not a quality guarantee.

MeshSet holds meshes as separate layers, each with an ID. Loading a mesh makes it current, and saving exports the current mesh. With several layers, use ms.set_current_mesh(mesh_id) to select the intended one. Some filters create an output layer and change that selection.

STL, OBJ and PLY are supported exchange formats. Choose one that carries the information you need, then reopen the export in your next application.

Getting Started page showing a MeshSet, an OBJ input, a convex-hull filter and a PLY save call.
The documented workflow loads a mesh, applies a filter and saves the current result.

What cleanup and simplification can do for your mesh

PyMeshLab can merge vertices with identical coordinates, remove duplicate faces and delete faces with zero area. These address specific defects. They don’t reconstruct missing detail or decide whether a small detached piece belongs to your model.

Look more closely at repairs that change how faces connect. Non-manifold geometry includes problems such as three faces sharing one edge. PyMeshLab’s edge-repair filter can delete faces or split vertices, potentially leaving open borders. Hole filling also changes the surface, so check that it fills damage without covering an opening you meant to keep.

Simplification, also called decimation, reduces the number of faces. The example’s quadric edge-collapse method collapses edges to single points while trying to limit shape changes. Fewer triangles can make an asset easier to handle, but check what survives: rounded edges, lettering, thin features and the outline all deserve attention.

For a printed part, compare overall size and important dimensions before and after processing. Check that the surface encloses the intended solid, doesn’t cross through itself and has enough wall thickness for your printing process. Then inspect it in a slicer—the software that turns a model into printer instructions. Saving an STL successfully doesn’t establish printability.

A 2023 paper compares PyMeshLab’s quadric method with Blender’s planar decimation on a car model and an alloy wheel. Those different methods don’t establish a general speed or accuracy winner. If performance determines your choice, compare representative files at similar output quality, including processing time and measured changes to the surface.

Where PyMeshLab scripts can run into trouble

Old examples can mean extra work. Filter names changed starting with version 2022.2. Version 2025.7.post1 still includes the replace_pymeshlab_filter_names helper for updating names in older scripts. Use it on copies and review the edits. Renaming calls doesn’t tell you whether their settings or results are right.

Keep that migration separate from the project’s January 2021 software citation. The citation tells you how to credit PyMeshLab; it isn’t a 2021 review or evidence that an old example works with a newer package.

When a call fails, first identify the installed version with pymeshlab.print_pymeshlab_version(). Use pymeshlab.print_filter_list() to see loaded filters and pymeshlab.print_filter_parameter_list("meshing_decimation_quadric_edge_collapse") to inspect that operation’s parameters. If import reports a plugin-loading warning, investigate it: the filters you need may be missing even though Python continues running.

Parameter types need attention too. The example’s targetperc takes a plain fraction. Other filters use PercentageValue for a relative size or PureValue for an absolute value. Read what each setting measures before copying a number between operations. Some defaults depend on the input mesh.

PyMeshLab uses double-precision numbers, which store more significant digits than single-precision numbers. Filters affected by that precision can behave differently from a default MeshLab build, even with matching settings. Record versions and parameters alongside your input files, and compare outputs before upgrading.

For a repeatable failure, reduce the script to one mesh and one operation, then include the environment and error in a repository issue. Don’t run filters at the same time on the same MeshSet: it isn’t thread-safe. Keep that limit in mind when planning batch processing.

How PyMeshLab fits alongside visual mesh tools

MeshLab is the closest alternative when you want to inspect a surface and choose filters visually. It also makes a useful companion: explore a repair there, then build and check the corresponding Python sequence. Keep the precision difference in mind.

Choose Blender when the job includes modeling, sculpting, materials or animation alongside mesh processing. Blender has its own Python API, so needing automation doesn’t automatically mean you need PyMeshLab. Choose around the tasks you do most often.

Meshmixer offers visual mesh editing, but Autodesk says it’s no longer developed or supported. That makes it a less attractive foundation for a new workflow you expect to maintain.

For Python integration, PyMeshLab accepts NumPy arrays of vertex coordinates and face indices and can return mesh data as arrays. Adding a Mesh to a MeshSet copies it, so edit the stored mesh rather than expecting the original object to track later processing. Array exchange is useful, but it doesn’t establish compatibility with every Blender or PyVista environment. Check the specific versions and the data you need to preserve.

Get Mesh Values tutorial showing PyMeshLab code, mesh processing and the start of NumPy vertex-array extraction.
The mesh-data tutorial connects processing and OBJ export with access to mesh values through NumPy arrays.

Is PyMeshLab worth adopting for your workflow?

Choose PyMeshLab if repeated mesh work justifies maintaining a Python script and you can define what an acceptable result looks like. Start with a representative mesh, keep the original, and check one operation before expanding the sequence. Save the working package version and settings with it.

Choose MeshLab for occasional visual cleanup, or Blender when broader modeling work is central. An environment without a suitable package, unacceptable shape changes or unwillingness to debug code can each rule PyMeshLab out. Its strongest reason for adoption is a repeatable process you can verify on your own files.

← Best STL Repair Software, ranked