Software
Software Development
Open-source packages I have written or co-written.
paperpush
Automates manuscript submission. Point it at a manuscript directory and a target venue and it generates a submission file, validates it against the venue's pre-submission checks, and fills out the submission portal for you — stopping short of clicking submit. Supports arXiv, bioRxiv, and medRxiv along with a growing list of journals.
fastQpick
Fast, memory-efficient sampling of FASTQ reads with or without replacement — for generating bootstrap replicates that quantify technical variance at the level of raw reads, and for subsampling large libraries for testing and benchmarking. Streaming I/O and ISA-L-accelerated gzip bootstrap a 500-million-read library in roughly 26 minutes.
Manuscript (bioRxiv): doi.org/10.64898/2026.06.23.734068
wompwomp
R package (on CRAN) that untangles k-partite graphs by heuristically optimizing node order, layer order, and node grouping to nearly minimize edge crossings. Its main use is making alluvial plots legible when the raw category ordering leaves the flows in a knot.
Manuscript (arXiv): doi.org/10.48550/arXiv.2509.03761
cellsweep
Python package and CLI that sweeps noisy, ambient counts out of single-cell RNA-seq data. A single call to denoise_count_matrix takes a raw AnnData count matrix with cell-type labels and returns a denoised one, plus utilities for the downstream processing, plotting, and analysis.
Manuscript (bioRxiv): doi.org/10.64898/2026.03.04.709349
varseek
Command-line tool and Python package for variant screening of DNA-seq, bulk RNA-seq, and single-cell RNA-seq data. vk ref turns a variant database (COSMIC, ClinVar, dbSNP, or custom) plus its reference genome/transcriptome into a variant-containing reference sequence (VCRS) index; vk count pseudoaligns reads against that index and returns a samples × variants count matrix in AnnData format, ready for clustering, differential expression, or pathway analysis.
Manuscript (bioRxiv): doi.org/10.1101/2025.09.03.674039
Conference Agent
AI agent that compiles major conferences across medicine, genomics/bioinformatics, and data science into one searchable table, with website links and color-coded submission deadlines and meeting dates, refreshed biweekly. Any row can be exported as a subscribable calendar feed (.ics).
Manimble
Co-developed macOS app that gives Manim animations a graphical slideshow editor: a deck is a folder of Manim scene classes, played back as slides, with Keynote import/export, BioCartoon icon search, and a manimbler CLI that converts portable .manimble projects to MP4 or PDF.
BioCartoon
Free, open-source tool for making biology figures: a searchable database of 15,000+ open-licensed scientific illustrations with a web and desktop figure editor, plus a CLI and MCP server.
biocartoon.com · Web app · GitHub (database, CLI, MCP) · GitHub (editor and website)
probability_distributions
Python package for visualizing and learning probability distributions. A single Distribution object covers 29 discrete, continuous, and multivariate distributions and carries everything you need to know about each one: its story, parameter space, support, PMF/PDF, CDF, mean, variance, MGF, use cases, and special facts. It also draws PMF/PDF/CDF plots, with sliders for the parameters in Jupyter, and samples from the distribution.
ctkit
Protocol and Python package for turning TCGA/TCIA radiology studies into AI-ready arrays: download and filtering, DICOM → NIfTI conversion, reorientation, segmentation, Hounsfield-unit clipping, resampling, mask-and-crop, and intensity normalization, with Jupyter notebooks walking through each step.
Manuscript (medRxiv): doi.org/10.64898/2026.06.15.26354651
Software Contributions
Established open-source packages I have contributed to.
gget
Command-line tool and Python package for efficient querying of genomic reference databases (Ensembl, UniProt, NCBI, PDB, cBioPortal, COSMIC, and more), where each module answers a single question in a single line of code.
Contributions:
gget mutate: builds mutated sequences from a reference genome or transcriptome and a list of mutations.gget cbio: queries cBioPortal and plots cancer genomics heatmaps for a set of genes.gget cosmic: searches and downloads the COSMIC (Catalogue of Somatic Mutations in Cancer) databases.gget opentargets: queries Open Targets for the diseases, drugs, and other annotations associated with a gene.
kb-python
Python wrapper around the kallisto | bustools workflow that preprocesses single-cell RNA-seq data, going from raw FASTQ files to a count matrix in a single command across a wide range of technologies.
Contributions:
- Reduced peak memory usage when writing count matrices to AnnData (
.h5ad), removing the RAM spike on datasets with a large number of genes. - Added the new
kb sweepmodule, which runs cellsweep ambient-RNA denoising onkb countoutput.
Voyager (Python)
Python implementation of Voyager, a package for exploratory spatial data analysis of spatial transcriptomics data: univariate and bivariate spatial statistics (such as Moran's I and Geary's C) computed over spatial neighborhood graphs, built on AnnData and scanpy.
Contributions:
- Visium tutorials: Python vignettes for analyzing 10x Genomics Visium spatial gene expression data.
- Xenium tutorials: Python vignettes for analyzing 10x Genomics Xenium single-cell-resolution in situ data.







