| name | pyvista-3d |
| description | AI interface skill for PyVista 3D visualization --- VTK wrapper for mesh rendering, STL/OBJ/VTK I/O, scalar coloring, offscreen rendering, and engineering analysis post-processing. |
| type | reference |
| version | 1.0.0 |
| updated | "2026-03-31T00:00:00.000Z" |
| category | engineering |
| triggers | ["PyVista","pyvista","3D mesh visualization","VTK visualization Python","offscreen 3D rendering","mesh quality visualization","point cloud rendering","STL visualization"] |
| capabilities | ["input_generation","execution","output_parsing","failure_diagnosis","validation"] |
| requires | [] |
| see_also | ["blender-interface","paraview-interface","gmsh-meshing"] |
| tags | ["pyvista","vtk","3d","mesh","visualization"] |
| scripts_exempt | true |
PyVista 3D Visualization
Overview
PyVista (MIT, 3.6k stars) is a Pythonic wrapper around VTK for 3D spatial data visualization. It provides a streamlined API for rendering meshes, point clouds, STL/OBJ geometry, and scalar fields without low-level VTK boilerplate.
Key Capabilities
| Feature | Details |
|---|
| Mesh rendering | Surface, wireframe, point cloud, volume rendering |
| Scalar coloring | Map data arrays to colormaps (coolwarm, viridis, plasma, etc.) |
| File I/O | STL, OBJ, PLY, VTK, VTP --- plus all meshio-supported formats |
| Offscreen rendering | off_screen=True for headless/CI environments |
| GPU acceleration | Uses OpenGL via VTK; works with NVIDIA GPUs |
| Jupyter integration | Interactive 3D in notebooks via trame |
| Mesh quality | Built-in quality metrics (scaled Jacobian, aspect ratio, etc.) |
| Engineering use | Pipe geometry, FEA results, terrain, bathymetry, point clouds |
Quick Start
import pyvista as pv
mesh = pv.read("geometry.stl")
mesh.plot(scalars="pressure", cmap="coolwarm")
plotter = pv.Plotter(off_screen=True, window_size=(1280, 720))
plotter.add_mesh(mesh, scalars="depth", cmap="viridis")
plotter.screenshot("output.png")
plotter.close()
import numpy as np
t = np.linspace(0, 10, 50)
points = np.column_stack((t, np.zeros_like(t), np.cosh((t-5)/5)))
spline = pv.Spline(points, n_points=200)
pipe = spline.tube(radius=, n_sides=)
pipe.plot()