Skip to content

Latest commit

 

History

167 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 
 
 
 
 

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 client can be used search across all the databases, resolve an accession to its records in every archive, access harmonised sample metadata and read GEO supplementary files as counts matrices.

CLI

Seqout can be used as a standalone CLI tool.

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"

The CLI can be used for searching, inspecting metadata and downloading associated files.

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

Seqout library (both python and R) can be used to directly fetch counts, cell-level and sample-level metadata at once, i.e., you do not need to leave your programming environment.

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 SeqoutCounts

counts = SeqoutCounts("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 <- SeqoutCounts("GSE297547")
SeqoutUnits(counts)                       # units found, nothing downloaded yet
m <- SeqoutMatrix(counts, sample = "GSM8994520")
obj <- Seqout2Seurat(m)                   # Seurat object, obs as meta.data
CountsSamples(counts, min_cell_count = 1000)

Issues & support

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

License

BSD-3-Clause license

Citation

If you have found Seqout helpful for your research, please cite us with the following:

@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

5 stars

Watchers

2 watching

Forks

Contributors

Languages