Skip to main content

Python tools for CVN-style cortical flatmap and inflated-surface visualizations

Project description

cvnpy

Python port of key CVN visualization workflows from cvncode (MATLAB), focused on production-quality:

  • flatmap rendering (including Kendrick-style fsaverage cuts)
  • inflated-surface rendering
  • sphere/surface lookup compatibility
  • layered SVG export for downstream overlays (ROIs/labels)

Documentation: https://cvnpy.readthedocs.io/

Current Status

cvnpy is now functional for the visualization path and includes:

  • lookup generation + caching
  • flat/inflated demos
  • stat-map overlays with thresholding
  • symmetric color limits
  • optional colorbar
  • optional bilateral inflated insets
  • layered SVG output with stable object IDs

Repository Layout

  • src/cvnpy/core/lookup_images.py: main rendering engine (lookup_images)
  • src/cvnpy/io/surfaces.py: surface + patch loading
  • src/cvnpy/io/metrics.py: per-vertex metric loading
  • src/cvnpy/view/viewpoints.py: named viewpoints (sphere/non-sphere/flat)
  • src/cvnpy/render/colormap.py: MATLAB-like colormap conversion (cmapsign4)
  • examples/flatmap_demo.py: full flatmap pipeline (PNG + layered SVG)
  • examples/inflated_demo.py: inflated-surface rendering demo
  • tests/: unit tests for scaffold milestones and colormap behavior

Install

From PyPI, once the first release is published:

python -m pip install cvnpy

For local development:

cd /Users/iancharest/Documents/codex/cvncode/cvnpy
python3 -m venv .venv
.venv/bin/python -m pip install --upgrade pip setuptools wheel
.venv/bin/python -m pip install -e '.[dev]'

Run tests:

.venv/bin/python -m pytest -q

Data Setup

cvnpy needs a FreeSurfer-style subject surf/ directory.

Option A: Use SUBJECTS_DIR

export SUBJECTS_DIR=/Applications/freesurfer/8.2.0/subjects

Then pass --subject fsaverage (or your subject name).

Option B: Use explicit subject directory

--subject-dir /Users/iancharest/data/nsd_fsaverage

This expects:

/Users/iancharest/data/nsd_fsaverage/
  surf/
    lh.full.flat.patch.3d
    rh.full.flat.patch.3d
    lh.inflated
    rh.inflated
    lh.curv
    rh.curv
    ...

Quick Start

1) Flatmap (single hemi)

.venv/bin/python examples/flatmap_demo.py \
  --subject-dir /Users/iancharest/data/nsd_fsaverage \
  --hemi lh \
  --surftype full.flat.patch.3d \
  --view 0,0,0 \
  --cache-dir /tmp/cvnpy_cache \
  --out out/nsd_lh_flat.png

2) Flatmap (both hemispheres, production defaults)

.venv/bin/python examples/flatmap_demo.py \
  --subject-dir /Users/iancharest/data/nsd_fsaverage \
  --hemi both \
  --surftype full.flat.patch.3d \
  --view 0,0,0 \
  --cache-dir /tmp/cvnpy_cache \
  --out out/nsd_bihemi_flat.png

3) Stat-map overlay from .npy

.venv/bin/python examples/flatmap_demo.py \
  --subject-dir /Users/iancharest/data/nsd_fsaverage \
  --hemi both \
  --surftype full.flat.patch.3d \
  --stat-file /Users/iancharest/Downloads/rcnn-mpnet/encoding/subj01/shared_pred/test_corr.npy \
  --symmetric-clim \
  --absthreshold 0.05 \
  --show-colorbar \
  --cache-dir /tmp/cvnpy_cache \
  --out out/subj01_corr_bihemi.png

4) Add inflated insets

.venv/bin/python examples/flatmap_demo.py \
  --subject-dir /Users/iancharest/data/nsd_fsaverage \
  --hemi both \
  --stat-file /Users/iancharest/Downloads/rcnn-mpnet/encoding/subj01/shared_pred/test_corr.npy \
  --absthreshold 0.05 \
  --show-colorbar \
  --show-insets \
  --inset-viewname lateral \
  --out out/subj01_corr_bihemi_insets.png

5) Layered SVG export

.venv/bin/python examples/flatmap_demo.py \
  --subject-dir /Users/iancharest/data/nsd_fsaverage \
  --hemi both \
  --stat-file /Users/iancharest/Downloads/rcnn-mpnet/encoding/subj01/shared_pred/test_corr.npy \
  --show-colorbar \
  --out out/subj01_corr_bihemi.png \
  --out-svg out/subj01_corr_bihemi.svg

Layered SVG IDs

The SVG contains stable IDs for overlay workflows:

  • layers
  • curv
  • stat
  • labels_lh
  • labels_rh
  • colorbar
  • inset_lh and inset_rh (when enabled)

This is designed to support Kendrick-style post-hoc SVG overlays.

Default Colormap

The default data colormap is cmapsign4, ported from:

  • knkutils/colormap/cmapsign4.m

You can override with --cmap.

Full Documentation

Known Limitations

  • Exact pixel-perfect parity with MATLAB outputs is still in progress.
  • Some edge/cut configurations may require tuning flatmap options for a given subject.
  • Public release requires final confirmation of GitHub organization, PyPI Trusted Publishing setup, and upstream license compatibility.

Citation / Attribution

This project ports concepts and workflows from cvncode and related CVN tooling by Kendrick Kay and collaborators.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

cvnpy-0.1.0.tar.gz (31.3 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

cvnpy-0.1.0-py3-none-any.whl (34.7 kB view details)

Uploaded Python 3

File details

Details for the file cvnpy-0.1.0.tar.gz.

File metadata

  • Download URL: cvnpy-0.1.0.tar.gz
  • Upload date:
  • Size: 31.3 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.14.5

File hashes

Hashes for cvnpy-0.1.0.tar.gz
Algorithm Hash digest
SHA256 71cbabbd99050cfe1d6f9c6d38afc790f4de508804d49e4cfcb24c1808dbf874
MD5 7e4c6c6645e17635fa1a53ed0ed597bb
BLAKE2b-256 9e58da60b4c3845f8d4c938dfc97711c28ac739fff1b0fbccff9a04d4e1fa1ba

See more details on using hashes here.

File details

Details for the file cvnpy-0.1.0-py3-none-any.whl.

File metadata

  • Download URL: cvnpy-0.1.0-py3-none-any.whl
  • Upload date:
  • Size: 34.7 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.14.5

File hashes

Hashes for cvnpy-0.1.0-py3-none-any.whl
Algorithm Hash digest
SHA256 e4f1a8426f5b538dd6111311cd945880a998113a99dc6a75a0a631e428b79c8f
MD5 1e46e6f4125ba1b5be1e56c9f4588a28
BLAKE2b-256 7800b426ad78fe240c75a782e519d0ecea6d174a924c30a77bab2ae6445eca1a

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page