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)
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
# 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"- Write
dockerfiles/Dockerfile.toolname - Run
bash build_all.sh toolname - Add tool entry to
omnibioai-tes/configs/tools/<domain>.yaml(edit the appropriate category file) - Run
make restartinomnibioai-tes— done!
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 |
# 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/ -vHistorical 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/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/tool-images-ui/ (React + TypeScript, Vite) — ships in this
same repo, not documented elsewhere.
cd frontend/tool-images-ui
npm install
npm run devThe 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.
- 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.shis the separate workflow for its explicitly selectedamd64+arm64tool 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)
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.
| 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 |