CyteArc is a Python framework for single-cell RNA, ATAC, protein, and matched multi-omic analysis. Its Zarr layout and read engine are designed together for efficient access by cell or gene, locally or directly from remote storage.
CyteArc analysed Tahoe-100M in under 20 hours on commodity hardware, from cell filtering through UMAP, clustering, and marker gene identification, without downsampling the dataset or using GPUs. The same workflow processed one million cells within 15 minutes.
Mount remote datasets, combine studies into virtual datasets, and run pipelines with provenance stored alongside the results.
Documentation · Quick start · Methods and validation
| Analysis | What you can do |
|---|---|
| Data access | Mount local or remote stores; combine cells across studies into virtual datasets without copying their counts |
| Cell calling and QC | EmptyDrops cell calling, ambient RNA correction, doublet detection within samples, cell-cycle scoring, and HTO demultiplexing |
| Cell populations | RNA, ATAC, and protein pipelines; batch-aware feature selection, PCA/LSI, UMAP, densMAP, t-SNE, Leiden/Paris clustering, and marker tests |
| Integration | Harmony2 batch correction, WNN/SNN integration of modalities measured in the same cells, and integration diagnostics |
| Reference mapping | Symphony-style mapping, label transfer, and diagnostics for projected cells |
| Condition comparisons | Sample-level and paired comparisons across donors, with pseudobulk export for downstream differential expression |
| Trajectories | Population Balance Analysis pseudotime, fate probabilities, lineage-specific gene dynamics, and fate-weighted curves |
| Gene activity and regulation | AUCell/WAGGR gene-set scores, SCENIC-style regulons, chromVAR motif activity, region-to-gene links, and gene programs |
| Import and export | Cell Ranger, Matrix Market, AnnData, and Seurat import; export counts and selected analysis results to AnnData |
pip install "cytearc[extra]"See installation for environment setup and platform requirements.
import cytearc
ds = cytearc.DataStore("cells.zarr")
run = ds.pipeline.rna(label="rna")
ds.plots.embedding(run=run, color_by="clusters")Pipelines cover QC through marker discovery, with over 100 stage settings across RNA, ATAC, protein, and multimodal workflows. See the RNA tutorial for details.
Read datasets from Amazon S3, Google Cloud Storage, Hugging Face, or Cloudflare R2, and save your analysis locally.
ds = cytearc.mount_datastore(
"hf://buckets/Nygen/cytebase-2610/datasets/mcglade_2021_scrna_data_human_fallopian_tube_30f5e171/data.zarr",
at="fallopian_tube.zarr",
storage_options={"token": False},
)
run = ds.pipeline.rna(label="rna")Find datasets in the companion CyteBase catalog. See remote access for connection options.
A virtual dataset combines cells from existing stores without copying their count matrices, saving the time and space of a physical merge. It works like a regular datastore.
from cytearc.composite import create_composite
sources = {
"study_a": cytearc.DataStore("study_a.zarr", zarr_mode="r"),
"study_b": cytearc.DataStore("study_b.zarr", zarr_mode="r"),
}
joint = create_composite(sources, at="joint.zarr", features="intersection")
joint_run = joint.pipeline.rna(label="joint_rna")See the joint-analysis tutorial for details.
CyteArc records pipeline provenance in the datastore, linking result artifacts to their exact inputs and parameters. You can trace results and check their status without rerunning the analysis or setting up a separate workflow system. Matching results are reused automatically.
ds.artifacts.lineage(run["markers"])See provenance and result reuse for details.
CyteArc is open source under the BSD 3-Clause License, maintained by Nygen. Third-party notices.
