SpatialScribe
SpatialScribe is a self-serve copilot for imaging-based spatial transcriptomics (Xenium, CosMx, MERSCOPE, and whole-transcriptome Atera).
Core trick
Computes a 0-1 Annotation Quality Index and abstains on cell types the panel's gene count cannot resolve.
Description
SpatialScribe is a self-serve copilot for imaging-based spatial transcriptomics (Xenium, CosMx, MERSCOPE, and whole-transcriptome Atera). A wet-lab scientist points it at a raw run folder and gets back a QC'd, annotated, spatially-explored tissue map plus a re-runnable report - in plain language, with no terminal, no R, and no waiting for a bioinformatician. It's a React + FastAPI + deck.gl app over a single shared analysis engine of 40 capabilities, drivable four ways: guided rails, one click ("Run full analysis"), one headless command, or a grounded Claude copilot that runs the real analysis and can recolour the map, subcluster a population, or load a whole new section from plain English.
The thesis is honesty. Most tools label every cell. SpatialScribe refuses to: it abstains when the evidence isn't there, tells you up front which cell types your panel can and cannot resolve, and reports one 0-1 Annotation Quality Index.
Three findings I didn't expect:
A low "confidently typable" score is usually a DEPTH verdict, not a panel defect. On the bundled 5K-panel section, restricting to the panel's genes costs 1 of 10 cell types; thinning to the section's real ~50 counts/cell costs 5. Buying a bigger panel would not have helped.
Reference agreement is not annotation quality. Transferring a lab's own 28-type skin reference lifted agreement with their existing RCTD from 0.23 to 0.70 while the quality index collapsed from 0.22 to 0.01 - those fine types simply aren't separable on a 495-gene panel. Coarsening the reference first buys both (agreement 0.65-0.75, AQI 0.28).
Per-cell confidence heuristics barely rank correct cells (within-type AUC ~0.54, near a coin flip). Only cross-method ensemble agreement does (~0.77). So the app declares which regime it's in instead of pretending its greying is trustworthy.
Why it matters: spatial runs are piling up far faster than bioinformaticians can read them, and the failure mode that actually hurts a biologist is a confident wrong label. The quality index is validated against expert ground truth (Spearman ~0.78, 95% CI 0.66-0.86, across 11 sections and 5 tissues) - and it is an index, explicitly not a probability of being correct.
README excerpt
# SpatialScribe **A fast, self-serve spatial-transcriptomics analysis copilot for wet-lab scientists.** You ran a Xenium (or CosMx / MERSCOPE) experiment and got your data back. SpatialScribe takes you from raw output to annotated cell types, spatial insight, and a shareable report - in plain language, without a terminal or R, and without waiting for a bioinformatician. Built for the [Built with Claude: Life Sciences](https://cerebralvalley.ai/e/built-with-claude-life-sciences) hackathon. <p align="center"> <img src="docs/demo.gif" alt="SpatialScribe: load a section, cluster, annotate, and hover a cell type to light it up across the tissue" width="820"> </p> <p align="center"><em>Load a section, run the analysis, then hover a cell type - those cells light up across the tissue.</em></p> ## What it does A three-pane web app (React + FastAPI + deck.gl) over one shared analysis engine: - **Guided rails** - a wizard walks you through Load -> Panel check -> QC -> Cluster -> Annotate -> Spatial exploration -> Report, with smart defaults and a plain-language explanation (and the exact code) at every step. - **One-click full run** - or skip the wizard: **Run full analysis** runs the whole spine as one background job and opens a fully-analyzed section. - **Interactive spatial canvas** - box-select a region to QC it or exclude it; click a cell type to subcluster it into subtypes; **hover a cell type to highlight where it sits in the tissue**. - **Claude copilot** - ask