Skip to content

Latest commit

 

History

67 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

OmniBioAI Tool Images

ARM64-compatible Docker/Singularity images for bioinformatics and ML tools running on DGX Spark via Slurm.

1,000 SIF images built locally · 1,249 Dockerfiles defined · ARM64 (aarch64) (verified 2026-08-07 by direct file count; SIF count reflects this machine's local sif/ state, not a fixed platform-wide total)

Structure

omnibioai-tool-images/
├── dockerfiles/          ← 1,249 Dockerfiles, one per tool
├── api/
│   └── server.py         ← Build/status API — see "API" below
├── frontend/tool-images-ui/  ← React + TypeScript UI (Vite) — see "Frontend" below
├── sif/                  ← built Singularity SIF images (gitignored)
├── build_logs/           ← build output logs (gitignored)
├── tests/                ← pytest test suite (coverage configured at 95% minimum)
├── build_all.sh          ← build all images
└── build_missing_sifs.sh ← rebuild only missing/failed SIFs

Quick Start

# Build a single tool
bash build_all.sh fastqc

# Build all tools
bash build_all.sh

# Build selected missing tools with the fallback builder
bash build_new_tools.sh tool_a tool_b

# Run tests
pytest tests/ -v -k "not test_tool_runs_in_sif"

Add a New Tool

  1. Write dockerfiles/Dockerfile.toolname
  2. Run bash build_all.sh toolname
  3. Add tool entry to omnibioai-tes/configs/tools/<domain>.yaml (edit the appropriate category file)
  4. Run make restart in omnibioai-tes — done!

Tools Available (29 domains)

Tool configurations live in omnibioai-tes/configs/tools/ — one YAML file per domain. Per-domain counts below sum to 1,007 and were not independently re-verified in this pass — they may lag the 1,249 real Dockerfiles and 1,000 built SIFs above; treat the per-domain breakdown as directional, not exact.

# Domain Config file Tools Examples
01 QC & Preprocessing 01_qc_preprocessing.yaml 35 FastQC, MultiQC, Trimmomatic
02 Alignment 02_alignment.yaml 31 BWA-MEM, BLASTN, Samtools
03 RNA-seq 03_rnaseq.yaml 58 DESeq2, Kallisto, featureCounts
04 Variant Analysis 04_variants.yaml 57 GATK, BCFtools, VEP
05 Epigenomics 05_epigenomics.yaml 36 Bismark, MACS2, deepTools
06 Single-cell 06_single_cell.yaml 45 Seurat, Scanpy, Cell Ranger
07 Spatial Omics 07_spatial.yaml 11 Cellpose, Space Ranger, Squidpy
08 Assembly 08_assembly.yaml 20 SPAdes, Flye, QUAST
09 Metagenomics 09_metagenomics.yaml 30 Kraken2, MetaPhlAn, HUMAnN3
10 Microbiome 10_microbiome.yaml 18 QIIME2, nf-core Ampliseq
11 Population Genetics 11_population_genetics.yaml 29 ADMIXTURE, GCTA, REGENIE
12 Structural Biology 12_structural_biology.yaml 27 AlphaFold2, AutoDock, ESM-2
13 Immunogenomics 13_immunogenomics.yaml 6 MiXCR, TRUST4, arcasHLA
14 Ancient DNA 14_ancient_dna.yaml 1 EAGER2
15 Metabolomics 15_metabolomics.yaml 5 XCMS, MZmine3, SIRIUS
16 Drug Discovery 16_drug_discovery.yaml 1 ADMET Prediction
17 Proteomics 17_proteomics.yaml 14 MSFragger, Percolator, Philosopher
18 ML / DL 18_ml_dl.yaml 19 PyTorch, TensorFlow, RAPIDS
19 Cancer Genomics 19_cancer_genomics.yaml 10 AMBER, COBALT, Survival KM
20 Comparative Genomics 20_comparative_genomics.yaml 8 OrthoFinder, MCScan
21 Multi-omics 21_multiomics.yaml 4 MOFA+, MOSCOT
22 Proteogenomics 22_proteogenomics.yaml 4 TransDecoder, PRICE, Xtail
23 nf-core Pipelines 23_nfcore_pipelines.yaml 2 nf-core RNA-seq, Nanoseq
24 Annotation 24_annotation.yaml 4 RepeatMasker, AUGUSTUS, DAVID
25 Genomic Utilities 25_genomic_utilities.yaml 3 BEDTools, BEDOPS, PyMOL
26 Long Read 26_longread.yaml 6 Guppy, Dorado, Medaka
27 CRISPR 27_crispr.yaml 9 MAGeCK, Cas-OFFinder
28 Imaging 28_imaging.yaml 2 Steinbock, MCMICRO
29 HTTP Tools 29_http_tools.yaml 512 Enrichr, OmniBioAI Workflow Runner

Testing

# Run all tests (excluding live SIF execution)
pytest tests/ -v -k "not test_tool_runs_in_sif"

# Run with coverage
pytest tests/ --cov=scripts --cov-report=term-missing \
  -k "not test_tool_runs_in_sif"

# Run including SIF execution tests (requires Singularity)
pytest tests/ -v

Historical test result (verified 2026-08-07): 10,008 passed · 1,525 failed · 1 skipped in 31s (excludes live SIF-execution tests). The failures were all one category — test_dockerfiles.py::TestDockerfileStructure::test_dockerfile_uses_approved_base, parametrized per tool (yak, yara, zarr_extra, zarr_v2_extra, and many more) — a base-image policy check a large number of Dockerfiles currently fail, not 1,525 independent issues. Not investigated further here (README-only pass); flagging honestly rather than repeating the stale "1026 passed" figure, which predates this.


API

api/server.py (FastAPI) serves as the tool-images container in omnibioai-studio's compose stack, port 8097.

Method Endpoint Status
GET /health Working
GET /v1/tools Working — lists tools discovered from dockerfiles/Dockerfile.*
GET /v1/tools/{tool}/dockerfile Working — returns the raw Dockerfile
GET /v1/tools/{tool}/log Working — returns the build log if one exists
POST /v1/build/{tool} Known non-functional (documented in code, issue #13, closed won't-fix)
POST /v1/build-all Known non-functional (same reason)

The two build endpoints shell out to build_all.sh, but the container this API runs in only has api/ copied into it — no Docker CLI, no /var/run/docker.sock, no Singularity/Apptainer binary, and build_all.sh itself isn't even present in the image. They're left in place returning exit 127 rather than reworked into something that looks functional but isn't. The real build path is host-side: build_missing_sifs.sh (or build_all.sh directly), run on a host with Docker + Singularity installed — never through this HTTP API.

The API container exposes two ports in the Compose deployment:

  • 8097 — FastAPI API (/health, /v1/*, and /docs)
  • 5179 — nginx-served React frontend, proxying /v1/* to the API

The standalone Docker image copies the API and frontend only. Compose mounts the host dockerfiles/, sif/, and build_logs/ directories into the container so the UI can inspect the current host-side build state.

Frontend

frontend/tool-images-ui/ (React + TypeScript, Vite) — ships in this same repo, not documented elsewhere.

cd frontend/tool-images-ui
npm install
npm run dev

The production frontend is served by nginx on port 5179. The Vite development server uses its own development port and is useful when working on the UI independently of the Compose container.

Notes

  • All images are built for linux/arm64 (aarch64) — DGX Spark / Grace Hopper
  • build_all.sh, build_missing_sifs.sh, and the fallback builders are ARM64 workflows; build_multiarch_sifs.sh is the separate workflow for its explicitly selected amd64 + arm64 tool set
  • SIF files are stored in sif/ (gitignored — ~235G total)
  • Tools marked ⚠️ require an external license or manual download
  • Tools reusing an existing SIF are noted as reused
  • Build logs are in build_logs/ (gitignored)

Requirements

For host-side image/SIF builds, install:

  • Python 3.11 or newer
  • Docker with BuildKit/buildx support
  • Singularity or Apptainer
  • Sufficient local storage for Docker layers, build logs, and SIF images

For the frontend, use Node.js/npm. The API container installs its Python runtime dependencies during the Docker build; host-side test execution uses the dependencies in requirements-test.txt and the coverage configuration in pyproject.toml.

Related Repos

Repo Description
omnibioai-tes Tool Execution Service — orchestrates Slurm jobs
omnibioai-tool-runtime Containerized tool runner
omnibioai Main Django application
omnibioai-toolserver HTTP ToolServer shim

About

ARM64-compatible Docker and Singularity images for bioinformatics and ML tools — FastQC, STAR, BWA, GATK, DESeq2, PyTorch, and more. Built for NVIDIA DGX Spark (aarch64) and deployable via Slurm. Declarative YAML-driven image definitions; part of the OmniBioAI reproducible tool execution stack.

Topics

Resources

Stars

1 star

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages