A fully containerised, AI-powered workflow for automated RNA-seq analysis of public datasets from the Gene Expression Omnibus (GEO).
The following steps will be needed to set up UORCA:
# 1. Clone the repository
git clone https://github.com/Kevin-G-Chen/UORCA.git
cd UORCA
# 2. Set up the uv environment
uv venv
uv pip install -e .
# 3. Download Kallisto indices (required for RNA-seq quantification)
./download_kallisto_indices.sh # Downloads human, mouse, dog, monkey, zebrafish
# OR download specific species:
./download_kallisto_indices.sh human # Download only human index
# 4. (Optional) Pull the container for containerised execution
# For Singularity/Apptainer (recommended for HPC/SLURM):
singularity pull uorca_0.1.0.sif docker://kevingchen/uorca:0.1.0
# OR Apptainer (newer name, same command):
apptainer pull uorca_0.1.0.sif docker://kevingchen/uorca:0.1.0
# For Docker (local development only):
docker pull kevingchen/uorca:0.1.0UORCA requires API credentials for accessing biological databases and AI services.
ENTREZ_EMAIL- Your email address (required by NCBI guidelines)OPENAI_API_KEY- OpenAI API key (required for AI-powered dataset identification)
ENTREZ_API_KEY- NCBI API key (enables >3x faster processing - free from NCBI)
- Copy the template:
cp .env.example .env - Edit
.envwith your actual values:
ENTREZ_EMAIL=your.email@institution.edu # Required: Any valid email
OPENAI_API_KEY=sk-proj-your-key-here # Required: Get from https://platform.openai.com/api-keys
ENTREZ_API_KEY=your-ncbi-key # Optional: For faster processing- Missing variables: UORCA will show clear error messages with setup instructions
- Invalid OpenAI key: Check your key format (should start with
sk-proj-orsk-) - Rate limiting: Add
ENTREZ_API_KEYfor faster NCBI queries (3β10 requests/second)
UORCA follows a streamlined three-step workflow for comprehensive RNA-seq analysis:
Discover GEO datasets that match your research question using AI-powered search:
uv run uorca identify -q "cancer stem cell differentiation" -o identification_results
# Options:
# -q: Your research question (required)
# -o: Output directory name
# -m: Max results to fetch for each search term (default: 500)
# -r: Number of ranking iterations (default: 3)
# -t: Relevance threshold 1-10 (default: 7.0)
# --model: GPT model to use (default: gpt-5-mini)Output: Directory containing selected_datasets.csv with relevant GEO accessions and metadata about your search.
The query can be as detailed or broad as you like.
Execute the complete RNA-seq analysis pipeline on identified datasets:
# For HPC clusters with SLURM
uv run uorca run slurm --input identification_results/ --output_dir ../UORCA_results
# For local machines
uv run uorca run local --input identification_results/ --output_dir ../UORCA_results --max_workers 4
# Options:
# --input: Directory from identify step OR CSV file
# --output_dir: Where to save results
# --cleanup: Remove intermediate files after processing
# --max_workers: Number of parallel jobs (local only)Note: Inputting the directory rather than the CSV file is recommended, as this will ensure the research question is considered in the automated analyses. See sample_inputs for an example - feel free to test using this directory!
Output: Complete analysis results including differential expression and visualisations.
Launch the interactive web interface to explore and analyse results:
uv run uorca explore ../UORCA_results
# Options:
# --port: Web server port (default: 8501)
# --headless: Run without opening browser
# For remote access via SSH:
# 1. On HPC: uv run uorca explore ../UORCA_results --port 8501
# 2. On laptop: ssh -L 8000:127.0.0.1:8501 username@hpc_server
# 3. Open browser: http://127.0.0.1:8000Test Data: To try the interactive functionality without running the full pipeline, download sample results from Zenodo. After unzipping, run:
uv run uorca explore path/to/unzipped_folderFeatures: Interactive heatmaps, gene expression plots, and cross-dataset integration.
UORCA automates the entire RNA-seq analysis workflow:
- Dataset Discovery: AI-powered identification of relevant GEO datasets based on your research question
- Data Processing: Automated download, quality control, and RNA-seq quantification using Kallisto
- Statistical Analysis: Differential expression analysis with automatic experimental design
- Interactive Exploration: Web-based interface for visualising and analysing results across multiple datasets
- AI-Powered Insights: Intelligent analysis assistant for biological interpretation
- Python 3.10+ with
uvpackage manager - For HPC/SLURM:
- SLURM job scheduler
- Apptainer or Singularity (preferred over Docker for security)
- Note: Singularity/Apptainer runs containers without root privileges, making it ideal for multi-user HPC environments
- For local: Sufficient storage and compute resources
- API Keys: OpenAI and NCBI credentials (see Environment Setup)
UORCA automatically handles temporary files by writing them directly to your system's disk (not Docker's virtual disk). This means:
- Local execution: Requires free disk space on your machine (not Docker's allocation)
- Storage calculation: Based on your actual available disk space
- No Docker configuration needed: Default Docker Desktop settings (50GB) work fine
For large datasets, ensure you have adequate free space on your system. UORCA will by default automatically determine how much space can be used - it's designed to be a conservative calculation (and will skip datasets that do not fit), but do still exercise some level of caution.
Note: Temporary files are automatically cleaned up after processing. By default, FASTQ and associated intermediate files are removed after processing, though you can set --no-cleanup to retain these files.
UORCA generates organised results for each dataset:
UORCA_results/
βββ GSE123456/ # Individual dataset results
β βββ metadata/ # Sample and experimental information
β β βββ GSE123456_metadata.csv # Sample metadata
β β βββ analysis_info.json # Analysis parameters
β β βββ contrasts.csv # Experimental contrasts
β β βββ edger_analysis_samples.csv # Samples used in analysis
β βββ RNAseqAnalysis/ # Differential expression results
β β βββ CPM.csv # Counts per million
β β βββ DGE_norm.RDS # Normalised expression object
β β βββ MDS.png # Multidimensional scaling plot
β β βββ filtering_density.png # Expression filtering diagnostics
β β βββ normalization_boxplots.png # Normalization quality control
β β βββ sa_plot.png # Sample relationship plot
β β βββ voom_mean_variance.png # Mean-variance trend
β β βββ Contrast1_vs_Contrast2/ # Per-contrast results
β β βββ DEG.csv # Differentially expressed genes
β β βββ volcano_plot.png # Volcano plot
β β βββ ma_plot.png # MA plot
β β βββ heatmap_top50.png # Top 50 DEGs heatmap
β βββ logs/ # Processing logs
β βββ analysis_tool_logs_*.json # Tool execution logs
β βββ *.log # Timestamped process logs
βββ GSE789012/ # Another dataset...
βββ job_status/ # SLURM job tracking
β βββ GSE*_status.json # Individual job status files
βββ logs/ # Batch processing logs
βββ run_GSE*.out/.err # SLURM output/error logs
- Command help:
uv run uorca --helporuv run uorca COMMAND --help - Issues: Submit via GitHub Issues
If you use UORCA in your research, please cite our preprint:
Uncovering biological patterns across studies through automated large-scale reanalyses of public transcriptomic data Chen, K.G. et al. (2025) bioRxiv: 10.1101/2025.11.04.686647
This project is licensed under the MIT License - see the LICENSE file for details.