I enjoy making things. Here are a selection of projects that I have worked on over the years.
napari is a Python viewer for multi-dimensional images. I joined CZI’s napari team in 2022, where I made code contributions and served as tech lead. I’ve been on napari’s steering council since 2023. napari has become central infrastructure in the scientific Python ecosystem for microscopy—used for everything from basic image visualization to interactive ML annotation workflows. My contributions have focused on large-data handling, ML integration, and helping coordinate the project’s technical direction.
copick is a cross-platform API for collaborative work on cryo-electron tomography datasets. It provides standardized access to tomograms, picks, and segmentations across different storage backends—whether your data is local, on S3, or from the CZ CryoET Data Portal. Built to support the CZII CryoET ML competition on Kaggle, copick enables you to write data handling code once and have it work across diverse storage systems. This makes it easier to share annotations and build ML pipelines that scale across distributed data sources. Code: github.com/copick/copick
The CZII CryoET Object Identification Challenge, hosted on Kaggle from November 2024 to February 2025, was a machine learning competition focused on automating the detection of protein complexes in cryo-electron tomography (cryoET) data. Published in Nature Methods (Peck et al., 2025), this competition addressed a critical bottleneck in structural biology research by developing algorithms to accurately identify and annotate multiple types of protein complexes in 3D tomographic volumes. More on the Kaggle page
CellCanvas is a software tool for creating and working with geometric models of cellular architectures.
SciView is an ImageJ/FIJI plugin for 3D visualization of images and meshes. It uses scenery as a rendering backend and supports rendering to VR headsets via OpenVR.
CryoLens is a pre-trained generative model for particle analysis in cryo-electron tomography. Given a single particle, it reconstructs the structure, embeds it, and estimates its pose. It is a variational autoencoder with a segmented Gaussian splat decoder. Rather than emitting a voxel grid, the decoder describes a particle as a set of 3D Gaussians and renders them into density, which is compared against the real subvolume. Rendering is differentiable, so the model trains end to end — and because density is represented continuously rather than per-voxel, reconstructions stay smooth at the resolutions where tomogram data is noisiest. It is trained on 5.8 million synthetic particles spanning 103 protein structures, so reconstruction is zero-shot: no per-dataset training is needed to get a structural estimate back, though fine-tuning on your own data helps. It is fast enough to give real-time feedback while picking particles. Install with pip install cryolens. The model is at czi-ai/cryolens (MIT), with a napari plugin for interactive picking, a REST server for pipelines, and a loader for copick projects. It is also published on the CZI Virtual Cell Platform, with an interactive demo.
Album is a software tool for sharing scientific code and software early in the development process. The goal is accelerating the iterative development of scientific software between developers and users. Check out the repository here.
Brevis is an open-source platform for agent-based biological modeling and synthetic biology simulation. Built with Clojure, it enables researchers to design and test complex multi-agent biological systems with interactive 3D visualization.