Skip to main content

Connectomics Lab Toolkit

clabtoolkit logo PyPI version Python versions License: Apache 2.0 CI status Code coverage Documentation Status arXiv Zenodo DOI

clabtoolkit (Connectomics Lab Toolkit) is a Python toolkit for neuroimaging data processing and analysis, with a focus on brain connectivity, BIDS datasets and common neuroimaging formats.

It is built around a small set of objects (Surface, Parcellation, Tractogram and Connectome) that share a common plotting layer (BrainPlotter), so surfaces, parcellations, streamlines and connectivity matrices can be loaded, processed and visualized with a consistent API. It is designed to work alongside libraries such as nibabel, nilearn and DIPY.

Installation

Install from PyPI:

pip install clabtoolkit

For a development installation:

git clone https://github.com/connectomicslab/clabtoolkit.git
cd clabtoolkit
pip install -e ".[dev]"

Requirements and optional dependencies:

  • Python 3.11 or newer.

  • 3D plotting (visualizationtools) uses PyVista and needs either a display or off-screen rendering (for example PYVISTA_OFF_SCREEN=true on a server).

  • FreeSurfer is not required. If it is installed and FREESURFER_HOME is set, the example notebooks use its sample subjects; otherwise they run on simulated data.

Features

clabtoolkit ecosystem

Every module has a notebook with runnable examples in the usage_examples folder (examples-<module>-methods.ipynb), and clabtoolkit_examples.ipynb gives an overview of the whole toolkit.

Data organization

  • BIDS Tools (clabtoolkit.bidstools): entity extraction and editing in BIDS filenames, BIDS tree generation and validation, derivatives discovery.

  • DICOM Tools (clabtoolkit.dicomtools): DICOM organization, compression and metadata extraction.

  • Pipeline Tools (clabtoolkit.pipelinetools): processing-status tables and inventories of derivatives, with JSON and SQLite export.

Images and diffusion

  • Image Tools (clabtoolkit.imagetools): voxel/world conversions, cropping, morphology, interpolation, 4D volume handling and image simulation.

  • DWI Tools (clabtoolkit.dwitools): volume removal by index or b-value, B0 extraction, acquisition schemes from bvec/bval files, q-space visualization and tensor-derived maps (FA, MD, AD, RD).

  • Tract Tools (clabtoolkit.tracttools): the Tractogram class, with streamline filtering, resampling, image interpolation along streamlines, merging and TRK/TCK conversion.

  • Segmentation Tools (clabtoolkit.segmentationtools): atlas-based parcellation and tissue segmentation tables.

Surfaces and parcellations

  • Surface Tools (clabtoolkit.surfacetools): the Surface class, with scalar maps, annotations, volume-to-surface mapping, smoothing and export.

  • Parcellation Tools (clabtoolkit.parcellationtools): the Parcellation class, with region selection by name or code, centroids, volumes, region-wise time series and functional connectivity.

  • FreeSurfer Tools (clabtoolkit.freesurfertools): FreeSurfer subjects, annotations, statistics tables and transforms.

  • Morphometry Tools (clabtoolkit.morphometrytools): region-wise area, volume and Euler number, and parsing of FreeSurfer statistics.

  • Point Tools (clabtoolkit.pointstools): point clouds, merging and curve smoothing.

Connectivity and networks

  • Connectivity Tools (clabtoolkit.connectivitytools): the Connectome class, with thresholding, graph metrics, matrix plotting, 3D visualization and CSV/HDF5 I/O.

  • Network Tools (clabtoolkit.networktools): sparse-matrix conversion and connected components.

Visualization and utilities

  • Visualization Tools (clabtoolkit.visualizationtools): BrainPlotter for surfaces, tractograms and volumes, multi-view layouts and carpet plots.

  • Plot Tools (clabtoolkit.plottools): figure layout and font helpers for the plotting classes.

  • Colors Tools (clabtoolkit.colorstools): color validation, RGB/hex conversion and color tables.

  • Quality Control Tools (clabtoolkit.qcqatools): slice generation and HTML pages for visual quality control.

  • Misc Tools (clabtoolkit.misctools): condition-based selection and general-purpose helpers.

Quick Start

The examples below are self-contained: they use simulated data, so you can run them as they are.

Filter a parcellation by region name (keep_by_name)

import clabtoolkit.parcellationtools as cltparc

# Simulate a parcellation with 10 regions and name them
parc = cltparc.Parcellation.simulate_parcellation(n_regions=10, seed=42)
parc.set_names(['ctx-rh-precentral', 'ctx-lh-precentral', 'ctx-rh-postcentral', 'ctx-lh-postcentral',
                'ctx-rh-superiorfrontal', 'ctx-lh-superiorfrontal', 'ctx-rh-supramarginal',
                'ctx-lh-supramarginal', 'subc-rh-amygdala', 'subc-lh-amygdala'])

# Keep only the precentral regions (the object is modified in place)
parc.keep_by_name(['ctx-rh-precentral', 'ctx-lh-precentral'])
print(parc.name)  # ['ctx-rh-precentral', 'ctx-lh-precentral']

To load your own parcellation, use cltparc.Parcellation("parc.nii.gz", color_table="lut.txt").

Sample an image along the streamlines of a tractogram (interpolate_on_tractogram)

import os
import tempfile

import clabtoolkit.imagetools as cltimg
import clabtoolkit.tracttools as clttract

image_path = os.path.join(tempfile.gettempdir(), "image.nii.gz")

# Simulate a reference image and a tractogram with 5 bundles
cltimg.simulate_image(reference=(100, 100, 70), simulated_image=image_path)
tract = clttract.Tractogram.simulate_tractogram(ref_image=image_path)

# Sample the image at every point of every streamline
tract.interpolate_on_tractogram(image_path, map_name="fa",
                                storage_mode="data_per_point", interp_method="linear")

print(tract.list_maps()["maps_per_point"])  # ['fa']
print(tract.data_per_point["fa"][0][:5])    # values along the first streamline

Use storage_mode="data_per_streamline" with reduction="mean" to store a single value per streamline.

Plot a surface with a scalar map (BrainPlotter)

import clabtoolkit.surfacetools as cltsurf
import clabtoolkit.visualizationtools as cltvis

# On a server without a display, set PYVISTA_OFF_SCREEN=true before running

# Simulate a surface and a thickness map
surf = cltsurf.Surface.simulate_surface(seed=42, shape="sphere")
surf.simulate_map(map_name="thickness")

# Option 1 (Surface object): plot the lateral and medial views of the map
surf.plot(views=["lateral", "medial"],
          maps="thickness",
          colorbar_title="Thickness (mm)")

# Option 2 (BrainPlotter): the same plot, with more control over colormaps and colorbars
plotter = cltvis.BrainPlotter()
plotter.plot(objs2plot=surf,
             views=["lateral", "medial"],
             map_names="thickness",
             colormaps="hot",
             colorbar=True,
             colorbar_titles="Thickness (mm)")

To plot your own data, load a surface with cltsurf.Surface("lh.pial") and its map with surf.load_scalar_maps("lh.thickness", maps_names="thickness").

Citing

If you use clabtoolkit in your work, please cite the toolkit paper:

Alemán-Gómez, Y., et al. CLABTOOLKIT: An Open-Source Toolkit for Routine Processing, Manipulation, and Visualization of Neuroimaging Data. arXiv:2607.02638. https://arxiv.org/abs/2607.02638

@article{aleman2026clabtoolkit,
  title   = {CLABTOOLKIT: An Open-Source Toolkit for Routine Processing, Manipulation, and Visualization of Neuroimaging Data},
  author  = {Alem{\'a}n-G{\'o}mez, Yasser and Herv{\'e} Nino and Hagmann, Patric},
  journal = {arXiv preprint arXiv:2607.02638},
  year    = {2026},
  url     = {https://arxiv.org/abs/2607.02638}
}

The repository includes a CITATION.cff file, and every release is archived in Zenodo: the DOI 10.5281/zenodo.23540587 always points to the latest version, and each version has its own DOI listed on that page.

Contributing

Contributions are welcome! Please open an issue first to discuss major changes. See CONTRIBUTING.rst for the guidelines, including how to run the test suite.

Changelog

See HISTORY.rst for a detailed changelog.

Credits

Developed by Yasser Alemán-Gómez and collaborators at the Connectomics Lab (Lausanne University Hospital, CHUV). See AUTHORS.rst for the full list.

Metadata

Release files for clabtoolkit 0.5.3

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for clabtoolkit 0.5.3
File Size Uploaded Provenance Actions
clabtoolkit-0.5.3.tar.gz 5.9 MB Without provenance Details for clabtoolkit-0.5.3.tar.gz

Built distribution (wheel)

Table of built distributions (wheels) for clabtoolkit 0.5.3
File Interpreter ABI Platform Actions
clabtoolkit-0.5.3-py3-none-any.whl Python 3 none any Details for clabtoolkit-0.5.3-py3-none-any.whl

Total release size: 8.6 MB

Release files / clabtoolkit-0.5.3.tar.gz

Download URL clabtoolkit-0.5.3.tar.gz
Size 5.9 MB
Tags Source
SHA-256 checksum
How to use checksums
24fce7256f130aa07d6233da9e60631bde797a93096c8784e102ec6b4f6d1cce
BLAKE2b-256 checksum
How to use checksums
61ddff9c7f8fbfb1077d8f8470fde6498c3af3f73a8b93f00c2747c8088aa48f
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.13.16

Release files / clabtoolkit-0.5.3-py3-none-any.whl

Download URL clabtoolkit-0.5.3-py3-none-any.whl
Size 2.7 MB
Tags Python 3
SHA-256 checksum
How to use checksums
216b13d895cdec95dbc037c82cba13e2f2ffa4988b85fdc1578b4bc2cad8c229
BLAKE2b-256 checksum
How to use checksums
47d01a1296b42b8812ef4284796dbb9ad5b1541da00f360e6c5cd32021a5c490
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.13.16

Security for clabtoolkit 0.5.3

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

No provenance found

None of the files in this release were uploaded with provenance metadata.

A note on package security

PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.

To learn more about protecting yourself from malicious actors, visit our package security documentation.

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page