Inviwo
Inviwo - Interactive Visualization Workshop
Install / Use
/learn @inviwo/InviwoREADME
Inviwo - Interactive Visualization Workshop

Introduction
Inviwo is a powerful visualization framework designed for scientists, researchers, and developers who need to transform complex data into meaningful visual representations. Whether you're working with medical imaging, scientific simulations, or data analysis, Inviwo provides an intuitive platform for building customized visualization solutions.
With its visual programming interface, you can rapidly prototype complex data processing workflows by connecting components in a visual graph. The framework is designed to be flexible, allowing you to add new functionality with both Python and C++ depending on your preference and needs. More information is available at www.inviwo.org.
Why you might want to use Inviwo:
✅ Freely available for commercial use under the Simplified BSD License.<br> ✅ Cross-platform and runs on Windows, Linux and Mac OS X.<br> ✅ Easily extendable through inclusion of external modules and applications.<br> ✅ Integrated with a GUI for rapid prototyping of data processing pipelines.<br> ✅ Develop in Python or C++, whichever you prefer.
Main Ideas
- Visual Programming - Build complex data processing pipelines through an intuitive drag-and-drop interface without writing code.
- Interactive Visualization - Explore your data dynamically with real-time interaction and immediate visual feedback.
- Multi-language Support - Develop processors in Python for rapid prototyping or C++ for performance-critical tasks.
- Extensible Architecture - Easily extend functionality through modules for specialized domains like medical imaging or molecular visualization.
- Visual Debugging - Inspect intermediate results by hovering over data ports, simplifying the debugging process.
- Data Format Versatility - Support for numerous data formats including HDF5, DICOM, NIfTI, RAW volumes, and common image formats.
- Easy Parallel Computing - Leverage parallel processing on CPUs and GPUs with simplified abstractions to boost performance.
- Cross-platform Compatibility - Develop on your platform of choice with full support for Windows, Linux, and macOS.
Quickstart
There are two main ways to get started with Inviwo. You can either install the latest version or build it from source.
Installing Inviwo
Using the precompiled version is the easiest way to get started. It allows you to use the visual interface and develop new functionality using Python.
- Download the latest precompiled version for your platform
- Extract the archive and run the Inviwo application
- Use the Getting started window to browse examples, for instance the Mandelbrot set showcasing a processor built using python.

Build from source
Building Inviwo from source code is the most flexible and allows you to develop new functionality and applications in both C++ and Python.
- See the build instructions.
Documentation
Inviwo uses a data processing pipeline where multiple processors are connected through ports to form a pipeline, see the Inviwo network. For example, you might have a data reader processor that loads a volume dataset through its outport, which connects to the inport of a visualization processor that renders the volume, and finally connects to a canvas processor that displays the result. These processors could come from different modules - like the base module for data I/O, the OpenGL module for rendering, and perhaps a specialized module for particular visualization techniques. The visual programming interface makes it easy to construct these pipelines by dragging and connecting processors, while the modular architecture allows you to extend the system with new processors and capabilities through additional modules.
- A processor is a fundamental building block in Inviwo that performs a specific data processing or visualization task.
- A property is a configurable parameter of a processor that allows users to control its behavior, such as adjusting visualization parameters, numerical values, or algorithm settings.
- A port is a connection point on a processor that allows data to flow in (inport) or out (outport) of the processor.
- A module is a collection of related processors, data structures, and utilities that extends Inviwo's functionality for a specific domain or purpose.
Detailed descriptions of how to use and develop new functionality can be found in:
- Getting started contains videos and high-level descriptions of the user interface and core concepts in Inviwo.
- Create Python processors is perhaps the quickest way of extending the Inviwo functionality.
- Create C++ processors is the most flexible way of extending the Inviwo functionality.
- Create modules to organize your new functionality.
- Build instructions details how to setup your environment.
- API details all classes and functions in Inviwo.
- Changelog contains info about new key functionalities and breaking changes.
For help and general discussion join us on our Slack server
Applications built with Inviwo
The Inviwo framework and data processing pipelines built using the Inviwo network editor can be integrated into your application. Here are two examples that uses the Inviwo framework under the hood:
- Visual Neuro is a visual analysis tool understanding cohorts of brain imaging and clinical data.
- ENVISIoN visualizes electronic structure quantities from ab-initio calculations.
Use already implemented techniques from the community
There are a large number of modules developed and maintained in other repositories.
These can be added through the CMake option IVW_EXTERNAL_MODULES, see Inviwo modules for more details.
The following modules add a variety of functionalities to Inviwo. Please refer to the respective repository for possible issues related to them.
- Dicom reader Adds support for reading DICOM image/volume files (.dcm file ending)
- Molecular visualization Adds support for molecular data structures along with reading PDB and mmCIF files. Molecules are rendered in van-der-Waals, Licorice, and Ball and Stick representations.
- Tensor visualization Adds support for reading/writing tensor fields. Includes algorithms such as HyperLIC and Anisotropy raycasting.
- Topology visualization Integrates the Topology Toolkit into Inviwo. Includes algorithms for critical points, integral lines, persistence diagrams, persistence curves, merge trees, contour trees, Reeb graphs, Morse-Smale complexes, topological simplification, topology-aware compression, harmonic design, fiber surfaces, continuous scatterplots, Jacobi sets, Reeb spaces, bottleneck and Wasserstein distances between persistence diagrams etc.
- Clustering Cluster rows of a DataFrame. Supported clustering methods are k-means, DBSCAN, agglomerative, and spectral clustering
- Vector Graphics Integrates NanoVG, which is a small antialiased vector graphics rendering library for OpenGL.
- NetCDF Adds support for reading NetCDF files
- OpenMesh Integrats the OpenMesh library, which is a data structure for polygonal meshes. Includes for example mesh decimation and vertex normal generation.
- Spring-mass system Simulation of spring-mass system.
- Visualization Toolkit Integrates support for VTK, which has algorithms for surface reconstruction, implicit modeling, decimation and much more.
- Photon mapping Volume illumination algorithm for time-varying h
