Skip to content
saketlabPublic

About

Resources

Stars

11 stars

Watchers

2 watching

Forks

Latest commit

 

History

185 Commits

Folders and files

Repository files navigation

Seqout

License Build Status Last Commit

seqout.org R package Python client CLI MCP

Clients for seqout.org, which aggregates study metadata from GEO, SRA, ENA, DDBJ, ArrayExpress, GEA and GSA.

Seqout searches every database, resolves an accession to its records in every archive, accesses harmonised sample metadata, and reads GEO supplementary files as counts matrices.

CLI

The CLI searches metadata and downloads data files.

Install using uv:

uv tool install "seqout @ git+https://github.com/saketlab/seqout.git#subdirectory=python"

or using pip:

pip install "git+https://github.com/saketlab/seqout.git#subdirectory=python"
seqout search "liver cancer scRNA" --organism "Homo sapiens"
seqout show GSE151530
seqout download GSE151530

Learn more about the CLI here: https://seqout.org/cli/python/cli

Python client

Install using uv:

uv add "seqout @ git+https://github.com/saketlab/seqout.git#subdirectory=python"

or using pip:

pip install "git+https://github.com/saketlab/seqout.git#subdirectory=python"

and use in your scripts:

from seqout import connect

sq = connect()
sq.seqout_search("liver cancer scRNA", organism="Homo sapiens")
sq.seqout_get("GSE151530").samples

Learn more here: seqout.org/cli/python

R package

Install using pak:

pak::pak("saketlab/seqout/R")

or via r-universe

library(seqout)

dataset <- SeqoutGet("GSE151530")
samples <- dataset$samples

results <- SeqoutSearch("liver cancer scRNA", organism = "Homo sapiens")

# Opt in to Parquet for SQL over the whole database
con <- SeqoutConnect("parquet")
Query("SELECT count(*) FROM unified_metadata WHERE n_samples >= 10", con = con)

Learn more here: seqout.org/cli/R

From a GEO accession to a single-cell matrix

The Python and R clients fetch counts, cell-level metadata, and sample-level metadata from one accession.

Supplementary files are grouped into units that read as one matrix: a 10x triplet, a CellRanger .h5, an .h5ad, an .rds or a table. The manifest resolves them without downloading anything, and the donor covariates come from the same accession.

from seqout import SeqoutListCounts

counts = SeqoutListCounts("GSE297547")
counts.manifest()                        # units found, nothing downloaded yet
m = counts.matrix(sample="GSM8994520")   # genes x cells, obs carries the donor
adata = counts.anndata()                 # every sample, concatenated
counts.design                            # sample-level covariates
counts <- SeqoutListCounts("GSE297547")
SeqoutUnits(counts)                       # units found, nothing downloaded yet
obj <- Seqout2Seurat(counts, sample = "GSM8994520") # Seurat object, obs as meta.data
CountsSamples(counts, min_cell_count = 1000)

Issues and Support

Found a bug or have a feature request? Please use GitHub Issues.

License

BSD-3-Clause license

Citation

If Seqout helped your research, cite:

@misc{seqout,
  author = {Mukherjee, Aniruddha and Reddy, Mukesh and Choudhary, Saket},
  title  = {Seqout: metadata harmonisation for genomics dataset discovery},
  year   = {2026},
  url    = {https://seqout.org},
}

About

Resources

Stars

11 stars

Watchers

2 watching

Forks

Contributors

Languages