Library / SDK
marcomusy/vedo avatar
marcomusy/vedo

vedo: 3D scientific visualization and mesh analysis built on VTK and Numpy

A python module for scientific analysis of 3D data based on VTK and Numpy

2,270 stars276 forksPythonMIT

At a glance

What is it?
vedo is a Python module for scientific analysis and visualization of 3D objects, using VTK for rendering and Numpy for data operations. It covers polygonal meshes, point clouds and volumetric data, and ships a command-line interface for opening meshes and volumes directly.
Who is it for?
vedo suits researchers who need to visualize and analyze 3D meshes, point clouds or volumetric data in Python without writing VTK code directly. The CLI makes it straightforward to inspect DICOM or TIFF stacks with three viewing modes.
Can I use it commercially?
Yes. MIT is a permissive licence: you can use, modify and sell software built on it, as long as you keep its copyright and licence notices.
Is it still maintained?
Yes. The repository last received commits 68 days ago.
What is it written in?
Mainly Python, according to GitHub's language statistics.

Answers come from the project's GitHub data, last synced on September 28, 2026, and from our analysis. They are not legal advice.

Editorial analysis

VTK as the rendering engine, Numpy as the data layer

vedo is a Python module for scientific analysis and visualization of 3D objects. VTK, the Visualization Toolkit, handles 3D scene management, pipeline processing and window output. Numpy provides the array representations that feed those pipelines. Neither is optional: pyproject.toml lists both vtk and numpy as core dependencies, alongside matplotlib, rich, Pygments and typing-extensions.

That dependency list is worth reading before installing. matplotlib ships alongside VTK in the base install, even though matplotlib serves 2D charting while VTK serves 3D rendering. Both pull in their own large native components, so the installed footprint reflects two separate visualization engines.

The library covers three main data categories: polygonal meshes, point clouds and volumetric data. Each has its own API surface, and the package layout mirrors that split with separate submodules for mesh, pointcloud, plotter and pyplot, plus additional modules for grids, applications and file I/O.

pip install vedo, then a Sphere in four lines and an interactive 3D window

The stable package is on PyPI. This command adds vedo to a Python 3.10 or newer environment:

bash
pip install vedo

The dev build from master installs with:

bash
pip install -U git+https://github.com/marcomusy/vedo.git

A conda-forge package is also available:

bash
conda install -c conda-forge vedo

The README's quick-start example requires two imports. A Sphere object gets a color assigned by calling .c("tomato"), then show() opens a 3D window with axes enabled. Calling .close() shuts it down.

python
from vedo import Sphere, show

sphere = Sphere().c("tomato")
show(sphere, axes=1).close()

The README says this opens an interactive 3D window with a simple object and axes, without documenting what mouse controls or keyboard shortcuts the window offers. Full API documentation is at vedo.embl.es, and hundreds of working examples are in the examples/ directory, organized into basic, advanced, volumetric, pyplot and animation subfolders.

The file format list identifies three distinct user communities

Reading the mesh import list as a community signal is more useful than reading it as a feature count. VTK, GMSH and Dolfin-XML are formats produced by simulation and finite element toolchains. STL, OBJ, 3DS and PLY come from 3D printing and computer graphics, while PCD is the point cloud format most commonly associated with the PCL library. OFF and Neutral are less common formats that appear in academic mesh datasets. Exports cover VTK, STL, OBJ and PLY.

The mesh operation set goes well past what a rendering library typically provides. Normal and curvature computation, hole filling and mesh morphing belong to the geometry repair and analysis side. Mesh simplification, face subdivision, Delaunay triangulation and Radial Basis Function interpolation for scalar and vectorial fields are all in the documented feature set alongside display operations.

One operation is unusual for this category: the library finds the closest path between two points by traveling along the edges of a mesh. That is graph traversal over the mesh topology, not a spatial raycast. It appears in surface parameterization and robotics path planning problems. Registration, described in the README as alignment, is listed as supporting different techniques without naming them, so the actual algorithms are only visible in the API documentation.

Volume operations cover DICOM and TIFF stacks; Dolfin-XML import has no documented prerequisite

The volume layer accepts formats from two distinct fields. DICOM and TIFF stacks are the standard in biomedical imaging. VTK format, SLC and MHD come from simulation and physics workflows. The README also lists PNG, JPEG and BMP as inputs, processed as 2D image slices.

Isosurfacing converts a volume to a polygon mesh at a given threshold. Beyond that, the library generates signed-distance volumes from an input surface, probes volumes with lines and planes, generates stream-lines and stream-tubes from vectorial fields, and slices or crops volumes in place. Structured and grid data have their own support path.

Dolfin-XML is worth flagging separately. It is the mesh format produced by the FEniCS finite element framework and appears in the import list alongside VTK and STL. The README lists it without any note about prerequisites. Neither the core dependency list in pyproject.toml nor any extras group includes FEniCS or Dolfin. The project documentation does not state whether FEniCS must be installed separately for that import format to function.

The vedo CLI fetches remote files and opens volumetric data with three distinct modes

vedo ships a command-line interface that accepts a file path or a URL. The README shows opening a remote TIFF as the example:

bash
vedo https://vedo.embl.es/examples/data/embryo.tif

For volumetric files, three viewing modes are shown in a table in the README. The 3D slicer mode:

bash
vedo --slicer embryo.slc

Ray-casting mode:

bash
vedo -g

And 2D slicing:

bash
vedo --slicer2d

The README says to type vedo -h for the complete list of options. It does not document what happens when a polygon mesh file is opened without a mode flag; those three modes apply specifically to volumetric input, and the default behavior for other file types is not described.

trimesh, pyvista, pymeshlab and Qt5 integration is documented but nothing in the extras installs them

The README describes interoperability with trimesh, pyvista and pymeshlab, and integration with the Qt5 framework. None of those packages appear in pyproject.toml's core dependency list or in any declared optional extras.

The declared extras are two groups. The all group contains one entry: scipy. The trame group contains trame, trame-vtk and trame-vuetify, enabling web-based visualization with the trame framework. Running pip install vedo[all] installs scipy. Running pip install vedo[trame] installs the three trame packages. There is no extras group for Qt5, trimesh, pyvista or pymeshlab.

A script that uses the trimesh interoperability described in the README will fail at import if trimesh is not already present. The same applies to Qt5 embedding. There is no install shortcut, and the README does not document the step. That distinction between a defined extras group (trame) and an undocumented integration (trimesh, Qt5) is not called out anywhere in the project.

K3D for Jupyter is documented in the README but absent from every declared extras group

The README describes embedding interactive 3D scenes in Jupyter notebooks using K3D-jupyter and links a working example. K3D does not appear in pyproject.toml at all: not in core dependencies, not in the all group, not in the trame group. This is different from the trame case, which has a defined extras group. For K3D, there is no pip install shorthand and no documentation of how to enable the feature.

A user who reads the README section on Jupyter support will need to install K3D through a separate step the project does not document.

On version state: the last push was on 2026-08-04, the latest tagged release is v2026.6.1 from 2026-02-17, and pyproject.toml carries a dev build numbered 2026.6.2.dev08 ahead of it. The MIT licence covers the core code while FONT.LICENSE at the repository root covers the bundled font files separately. The package classifiers list Development Status 5 - Production/Stable, and Python 3.10, 3.11 and 3.12 are the declared supported targets.

Editorial conclusion

vedo suits researchers who need to visualize and analyze 3D meshes, point clouds or volumetric data in Python without writing VTK code directly. The CLI makes it straightforward to inspect DICOM or TIFF stacks with three viewing modes. Skip it if your work is purely 2D; matplotlib covers that without the VTK dependency. Before committing to vedo, install it with pip install vedo, try the quick-start Sphere example from the README, and check whether integrations you need (Qt5, K3D for Jupyter, trimesh, pyvista, pymeshlab) require separate installs, because none are included in the core or all extras.

Frequently asked questions

What is vedo?

A Python module for scientific visualization and analysis of 3D objects, built on VTK for rendering and Numpy for data operations. It covers polygonal meshes, point clouds and volumetric data including DICOM, TIFF stacks and SLC files.

How do I install vedo?

The stable release installs with pip install vedo. A conda-forge package installs with conda install -c conda-forge vedo. The dev version from the master branch installs via pip with a git URL pointing to the GitHub repository.

What file formats does vedo support?

For import, the README lists VTK, STL, OBJ, 3DS, Dolfin-XML, Neutral, GMSH, OFF, PCD, DICOM, TIFF stacks, SLC, MHD, PNG, JPEG and BMP. For export, VTK, STL, OBJ and PLY are documented.

Does vedo work in Jupyter notebooks?

The README documents embedding interactive 3D scenes in Jupyter notebooks using K3D. K3D is not in vedo's core or optional dependencies and must be installed separately; the project documentation does not describe the install step.

What Python version does vedo require?

The pyproject.toml file specifies Python 3.10 or newer. The classifier list includes entries for Python 3.10, 3.11 and 3.12.

Official sources

  1. License: MIT
  2. marcomusy/vedo on GitHub
  3. Project website
  4. README
  5. Releases
Add this badge to your README

If you maintain this project, the badge below links readers to this analysis and shows its maintenance status from the daily GitHub snapshot. Paste the markdown into your README; add ?metric=license or ?metric=stars to the image URL for a different field.

Add this badge to your README

markdown
[![Hysen Labs](https://hysenlabs.com/badge/marcomusy-vedo.svg)](https://hysenlabs.com/projects/marcomusy-vedo)