Skip to content

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-09-12 by direct file count; SIF count reflects this machine's local sif/ state, not a fixed platform-wide total)

OmniBioAI Tool Images preview

The frontend (frontend/tool-images-ui/) lists every tool discovered from dockerfiles/Dockerfile.* with its live build/SIF status — at the time of this screenshot, 996 built, 2 needing a license, and 249 missing or broken out of 1,247 tracked tools:

OmniBioAI Tool Images — tool catalog and build status


Structure

omnibioai-tool-images/
├── dockerfiles/          ← 1,249 Dockerfiles, one per tool
├── sandbox.def           ← BioQueryAI Python sandbox def — see Notes
├── 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)
├── scripts/
│   ├── build_all.sh                          ← build all images
│   ├── build_missing_sifs.sh                 ← rebuild only missing/failed SIFs
│   ├── build_new_tools.sh                    ← fallback builder for named tools
│   ├── build_multiarch_sifs.sh               ← separate amd64+arm64 workflow
│   ├── push_to_hf.sh / push_to_ghcr.sh       ← push SIFs to Hugging Face / GHCR
│   ├── upload_sifs_s3.sh / upload_sifs_azure.sh ← push SIFs to S3 / Azure Blob
│   └── archive/                              ← superseded one-off build scripts (historical)

Quick Start

# Build a single tool
bash scripts/build_all.sh fastqc

# Build all tools
bash scripts/build_all.sh

# Build selected missing tools with the fallback builder
bash scripts/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 scripts/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!

Distribution

Once SIFs are built, four scripts push them off this machine to a remote store. None of these are wired into the API — they're run manually, host-side:

Script Target Requires
scripts/push_to_hf.sh Hugging Face dataset repo omnibioai/omnibioai-sif-images huggingface-cli, logged in
scripts/push_to_ghcr.sh ghcr.io/omnibioai/omnibioai-sif/<tool>:arm64 via oras (vendored in scripts/, auto-installed if missing) GH_USER and GH_TOKEN env vars
scripts/upload_sifs_s3.sh s3://<S3_SIF_BUCKET>-<AWS account ID>/ (bucket auto-created) AWS CLI credentials
scripts/upload_sifs_azure.sh Azure Blob container ${AZURE_SIF_CONTAINER:-omnibioai-sif} (auto-created) AZURE_STORAGE_CONNECTION_STRING

All four skip files already present at the destination and are safe to re-run. scripts/push_omnibioai_images.sh (the original combined Sylabs+GHCR pusher) is superseded by these and kept only for history.


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

Test result (verified 2026-09-12): 11,545 passed · 1 skipped · 24 deselected in 32s (excludes live SIF-execution tests). This is a clean run — the previously reported 1,525 failures (all one category, test_dockerfiles.py::TestDockerfileStructure::test_dockerfile_uses_approved_base) were fixed in commit 5d85eb2 ("update Dockerfile contract checks").


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 scripts/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 scripts/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: scripts/build_missing_sifs.sh (or scripts/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
  • scripts/build_all.sh, scripts/build_missing_sifs.sh, and the fallback builders are ARM64 workflows; scripts/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)
  • sandbox.def is a separate, manually-built Apptainer definition (not part of the dockerfiles/ + scripts/build_all.sh pipeline) that produces sif/bioqueryai_sandbox.sif — a general-purpose Python analysis sandbox (pandas/scanpy/pydeseq2/etc.). It's consumed outside this repo: omnibioai-tes (tool_id: bioqueryai_python_runner / bioqueryai_sandbox_script) and omnibioai-workbench's BioQueryAI agent run LLM-generated Python scripts inside it via apptainer exec --writable-tmpfs, over Slurm/TES.

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