An open-source library for building real-time OCT engines in C++ or Python.


vortex is a high-performance C++ library with Python bindings for rapid development of real-time OCT engines.

vortex is developed and maintained by Mark Draelos of the Image-Guided Medical Robotics Lab at the University of Michigan to facilitate the prototyping of new application-specific optical coherence tomography (OCT) software. It is a general-purpose library for OCT software development that seeks to:

  • promote reproducibility in data acquisition and processing,
  • guarantee synchronization between data streams,
  • support on-the-fly changes for interactive use cases,
  • integrate cleanly with user interfaces,
  • facilitate rapid prototyping with high-level abstractions and sane defaults, and
  • minimize restrictions and assumptions.

vortex is released under the permissive BSD-3 license to facilitate its use in both research and commercial contexts.


Through its modular architecture, vortex encapsulates a complete OCT engine, including scan pattern generation, data acquisition and processing, synchronized I/O, and persistent storage.

Scan Pattern Generation

Generate common scan patterns with helper classes or design your own in C++ or Python. Interleave multiple scans and route to separate storage after processing. Queue scans to the engine for execution and interrupt as needed. Insert signaling events to synchronize scan pattern changes with post-processing code.

Real-Time OCT Processing

Use GPU or FPGA acceleration for real-time OCT processing. Spread large workloads across multiple GPUs. Tune block size and stream parallelism to your use case. Perform background subtraction, resampling, and filtering of raw spectra.

Extensive Python Bindings

Create real-time OCT engines exclusively using Python. Transparently share data with vortex using NumPy and CuPy. Lock shared memory for concurrent access from Python and C++. Asynchronously chain custom GPU processing onto the C++ OCT pipeline using CuPy.

pc = CUDAProcessorConfig()

# window + dispersion correction
window = np.hanning(pc.samples_per_ascan)
phasor = dispersion_phasor(len(window), \
pc.spectral_filter = window * phasor

# DC subtraction per block
pc.average_window = pc.ascans_per_block

p = CUDAProcessor()

Synchronized I/O

Drive external hardware with scan pattern waveforms. Compensate for I/O delays with scan pattern lookahead. Add additional channels for multi-scanner hardware. Generate scan-derived digital pulses to trigger other devices.

Flexible Data Storage

Stream spectra or processed data to disk in common or raw file formats. Buffer high-speed acquisitions in memory as needed. Reassemble out-of-order scan patterns transparently as they write to disk.

UI Interactivity

Create interactive applications using callbacks from vortex's multithreaded engine. Display live OCT data as it is acquired or modify an ongoing acquisition.


Both academic and industry entities use vortex due to its permissive BSD-3 license.

The following publications use vortex in their scanning, acquisition, and/or processing.


vortex is under active development with major releases and documentation listed below.

C++ users may download the source below and follow the Build Guide. Python users may install pre-built binary wheels for standard hardware configurations using the package installer for Python, taking care to choose the correct CUDA version. See Getting Started for more details.

pip install vortex-oct-cuda112 vortex-oct-tools -f https://www.vortex-oct.dev/
Version Status C++ Source Python Binary Wheels Links
CUDA 10.2 CUDA 11.2 CUDA 11.6
Release Notes
Release Notes
Release Notes

= latest release for starting new projects

= latest maintenance release to support existing projects


Please use the following citation for vortex if you found it useful in your research.

    author = {Mark Draelos},
    year   = {2022},
    url    = {https://www.vortex-oct.dev/},
    title  = {Vortex -- An open-source library for building real-time OCT engines in C++ or Python}

Download the citation in BibTex or RIS format. Check back later as this citation will likely change in the future.


Interested in learning more or have a question?

Complete the form below to send us a message.