Cellina predicts how a cell's gene expression would change if its spatial neighborhood changed — tissue graph counterfactuals. It disentangles a cell's intrinsic state (z) from its spatial context (s), then answers two kinds of query on the tissue graph:
- Edge perturbation — swap a cell's neighbors (e.g. give healthy cells a tumor neighborhood).
- Node perturbation — change what the neighbors express (e.g. activate or knock out a pathway).
Method details are in the paper: Querying Counterfactuals on Tissue Graphs with Supervised Disentanglement.
| Class | Paper name | Spatial encoder |
|---|---|---|
Cellina |
Cellina | Pseudobulk of neighbor expression → MLP; fast, scales like non-spatial baselines |
CellinaGCN |
Cellina-GAT | GATv2 on the local subgraph; learns attention over neighbors |
Both perform on par.
pip install cellinaOr install with one of the shipped conda environments — environment.yml (GPU/CUDA) or env_minimal.yml (CPU) — via conda env create -f <file>. pip install cellina gives Cellina; CellinaGCN additionally needs PyG: install the torch-scatter/torch-sparse wheels for your torch/CUDA from data.pyg.org, then pip install "cellina[gat]".
Then follow the tutorials on colorectal cancer tissue: Cellina and Cellina-GAT (notebooks in docs/). Release notes are in the changelog.
@inproceedings{moeed2026querying,
title = {Querying Counterfactuals on Tissue Graphs with Supervised Disentanglement},
author = {Moeed, Abdul and Schrod, Stefan and Rohbeck, Martin and Bonder, Marc Jan and Lutsik, Pavlo and Stegle, Oliver and Dimitrov, Daniel},
booktitle = {The Fortieth Annual Conference on Neural Information Processing Systems},
year = {2026},
url = {https://arxiv.org/abs/2606.08493v2}
}Built on scvi-tools. Bugs and questions: issue tracker.