NOSE — NOvel SpEcies Identification Pipeline
An automated, end-to-end Snakemake pipeline for novel microbial species identification and characterization from genomic assemblies, integrating fragmented manual workflows into a single, reproducible six-module pipeline.
What NOSE does
- Polyphasic novelty assessment — computes ANI (Average Nucleotide Identity), AAI (Average Amino Acid Identity), and POCP (Percentage of Conserved Proteins) against programmatically retrieved, validly published reference type strains, rather than relying on a single marker gene like 16S rRNA.
- Six-module Snakemake pipeline
- M1 – Quality & Identity Check: Genome quality assessment and taxonomic identification.
- M2 – Novelty Screening: ANI , AAI , POCP, and 16S analysis against reference type strains.
- M3 – Evolutionary Placement: Phylogenomic tree construction and evolutionary analysis.
- M4 – Metagenomic Mapping: Detects the prevalence and distribution of genomes across metagenomic datasets.
- M5 – Functional Profiling: Biosynthetic gene clusters, antimicrobial resistance genes, mobile genetic elements, and functional annotation.
- M6 – Metabolic Modeling: Genome-scale metabolic model reconstruction and pathway analysis.
- Browser-based GUI — a local browser-based interface (
nose-ui) for uploading genome assemblies, configuring module parameters, monitoring real-time logs, and running the pipeline with ease.
NOSE - Novel species boundary
A genome pair is generally considered the novel species when whole-genome ANI is below ~95%. NOSE flags genomes below that boundary as potential novel species (M1 & M2) and carries them forward into phylogenomic and functional validation (M3 to M6).
Installation
NOSE is distributed as a Python package on PyPI and installed with pip. Each of its six modules runs in its own isolated Conda environment, deployed automatically by Snakemake at runtime — so you need a working Conda/Mamba installation on your system even though NOSE itself is a pip package.
System requirements
- Python 3.9
- A Conda distribution (Miniconda, Anaconda, or Micromamba) — required so Snakemake can build each module's environment with
--use-conda git, for cloning the repository (optional, if not installing from PyPI)
Note
Miniconda is the setup verified to work reliably on our lab HPC/server environment. If you hit solver or dependency conflicts with full Anaconda, switch to Miniconda.
Step 1 — Install Python (If Needed)
Every command on this page is typed into a terminal window, one line at a time: that's Command Prompt or PowerShell on Windows (search for either in the Start menu), Terminal on macOS (Cmd+Space, then type "Terminal"), or your Linux distribution's terminal application.
Linux — most distributions already ship Python. Check first, and only install it if this fails:
$ python3 --version
$ sudo apt update && sudo apt install python3 python3-pip
macOS — download the installer from python.org/downloads and run it, or install via Homebrew:
$ brew install python
Windows — download the installer from python.org/downloads, run it, and check "Add python.exe to PATH" on the first screen before clicking Install.
Verify it worked in a new terminal window:
$ python3 --version
Note
This system Python is only needed to run the Conda installer in Step 2. NOSE itself always runs inside a dedicated Conda environment (created in Step 3 with Python 3.9) — you won't develop against this Python directly, and if you already have Conda installed, you can skip this step entirely since Conda bundles its own.
Step 2 — Install a Conda distribution
Select your platform, then a Conda distribution.
Verified working setup on our Linux HPC/server environment. Recommended if you have run into solver or dependency conflicts with full Anaconda.
# download and install Miniconda
$ wget https://repo.anaconda.com/miniconda/Miniconda3-latest-Linux-x86_64.sh
$ bash Miniconda3-latest-Linux-x86_64.sh
$ source ~/.bashrc
On a shared server, pin to the exact version we've verified against NOSE instead of "latest" (which changes over time and can shift behavior underneath you):
# pinned version verified on our lab server (Python 3.10)
$ curl -O https://repo.anaconda.com/miniconda/Miniconda3-py310_23.5.2-0-Linux-x86_64.sh
$ bash Miniconda3-py310_23.5.2-0-Linux-x86_64.sh
$ source ~/.bashrc
# download and install Anaconda
$ wget https://repo.anaconda.com/archive/Anaconda3-latest-Linux-x86_64.sh
$ bash Anaconda3-latest-Linux-x86_64.sh
$ source ~/.bashrc
Warning
On some Linux HPC / shared-server setups, Anaconda's default channel priority or bundled package versions have caused solver conflicts when Snakemake builds NOSE's per-module environments. If that happens, switch to the Miniconda instructions above.
# install micromamba
$ "${SHELL}" <(curl -L micro.mamba.pm/install.sh)
$ source ~/.bashrc
Micromamba is a good option when you want conda-style environments without the overhead of a full Anaconda/Miniconda install — useful for constrained or containerized environments.
# Apple Silicon (M1/M2/M3)
$ curl -O https://repo.anaconda.com/miniconda/Miniconda3-latest-MacOSX-arm64.sh
$ bash Miniconda3-latest-MacOSX-arm64.sh
# Intel Mac
$ curl -O https://repo.anaconda.com/miniconda/Miniconda3-latest-MacOSX-x86_64.sh
$ bash Miniconda3-latest-MacOSX-x86_64.sh
$ source ~/.zshrc
Download the Anaconda macOS installer (.pkg) from anaconda.com/download and run it.
$ brew install micromamba
Note
NOSE's module dependencies (Snakemake, FastANI, and the rest of the per-module bioinformatics tools) are Linux/macOS-first and are not reliably installable natively on Windows. We recommend using WSL (see the WSL tab) rather than native Windows for running NOSE.
- Download the Miniconda installer for Windows from docs.conda.io/en/latest/miniconda.html.
- Run the
.exeinstaller, keeping the default options. - Open Anaconda Prompt from the Start menu for the pip install step below.
- Download the Anaconda installer from anaconda.com/download and run it.
- Open Anaconda Prompt for the pip install step below.
WSL gives you a real Linux environment on Windows, which is what NOSE's module dependencies expect. This is the recommended path for Windows users.
- Open PowerShell as Administrator and run
wsl --install, then restart when prompted. This installs Ubuntu by default — no need to pick a distribution. - After restart, an Ubuntu terminal window opens automatically the first time (search "Ubuntu" in the Start menu after that). Follow the Linux → Miniconda instructions above inside it — the commands are identical inside WSL.
# inside the WSL Ubuntu terminal
$ wget https://repo.anaconda.com/miniconda/Miniconda3-latest-Linux-x86_64.sh
$ bash Miniconda3-latest-Linux-x86_64.sh
$ source ~/.bashrc
Step 3 — Install NOSE via pip
# create and activate a Python 3.9 environment
$ conda create -n nose python=3.9
$ conda activate nose
# Install NOSE from PyPI
$ pip install nose-pipeline
Step 4 — Configure environments & download reference databases
These commands are the CLI entry points exposed by the pip install:
# configure the per-module runtime conda environments
$ nose-setup
# bulk-download and index required reference databases
$ nose-db
Step 5 — Get an NCBI API key
Every module resolves organism names from GCA/GCF accessions via the NCBI Entrez API. A free API key raises the request rate limit and avoids throttling on large batches.
- Sign in (or create a free account) at ncbi.nlm.nih.gov/account.
- Open Account Settings → API Key Management and click Create an API Key.
- Copy the generated key.
Enter your NCBI email and API key once in the dashboard's Credentials section (or directly in nose_config.yaml) — it's picked up by all six modules automatically.
Note
The email is required; the API key is optional but strongly recommended — without it, NCBI limits requests to 3/second instead of 10/second, which slows down organism-name lookups on large batches.
Install from source
$ git clone https://github.com/RamanLab/NOSE.git
$ cd NOSE
$ pip install -e .
Verify the installation
$ nose-info
Displays localized installation details and version control logs. If the command isn't found, confirm the environment you installed into is activated, and that its bin directory is on your PATH.
Usage & Tutorials
NOSE exposes four command-line entry points. Most day-to-day use goes through the browser GUI; the others handle setup and database management.
Command-line entry points
| Command | What it does |
|---|---|
nose-ui | Launches the browser-based GUI locally at http://localhost:5050 |
nose-setup | Configures the per-module runtime Conda environments |
nose-db | Bulk-downloads and indexes required reference databases |
nose-info | Displays localized installation details and version control logs |
Launching the browser UI
$ nose-ui
Opens a local interface at http://localhost:5050 for uploading a genome assembly and steering each module's runtime parameters through per-module configuration panels. The frontend is plain HTML5/CSS3/vanilla JavaScript with no external framework, and pipeline logs stream to the browser in real time via Server-Sent Events.
How a run flows
A single FASTA upload is passed through all six modules in sequence via a master dispatch script, which chains Snakemake sub-workflows together with custom Python/Bash post-processing. Every module reads its parameters from one centralized config.yaml, and each module's output is parsed into a standardized CSV/TSV that feeds directly into the next module.
Reading the output
Module 2 is the key novelty checkpoint: genomes with whole-genome ANI below 95% against the closest validly published reference are flagged as potential novel species and carried forward into phylogenomics, functional characterization, and metabolic modeling.
Note
Step-by-step tutorials (example dataset, interpreting edge cases near the species boundary, customizing the reference genus lookup) will be added here.
Pipeline Details
NOSE is a Snakemake-based, six-module pipeline for detecting, classifying, and characterizing novel microbial species directly from genomic assemblies. Modules run sequentially, each in its own Conda environment, orchestrated by a master dispatch script around a centralized config.yaml.
Pipeline architecture
Data flow through all six modules — every tool, intermediate file, and hand-off between stages.
Module 1 Genome quality control & classification
Computes assembly metrics and taxonomic lineage for prokaryotic or eukaryotic input. Prokaryotes: QUAST for assembly stats, CheckM2 for completeness/contamination, GTDB-Tk (classify_wf) for taxonomy. Eukaryotes: QUAST, EukCC for completeness/redundancy, CAT (via MetaEuk-predicted proteins) against NCBI taxonomy. A unified High-Quality (HQ) filter — completeness ≥ 90%, contamination ≤ 5%, taxonomic resolution to at least Genus — gates what proceeds downstream; eukaryotic assemblies stop here and aren't propagated further.
Module 2 Genome-relatedness indices (OGRI)
Determines taxonomic position and genomic distance against validly published type strains, dynamically retrieved by genus. Computes three relatedness metrics in parallel — ANI (FastANI), AAI (aai.rb over Prokka-predicted proteomes), and POCP (Qin et al. 2014 method) — plus an optional 16S route via Barrnap + BLASTn. Genomes with WGS ANI < 95% are flagged as potential novel species and isolated for downstream phylogenomic validation.
FastANIaai.rbPOCPBarrnapBLASTnProkkaModule 3 Phylogenetic tree construction
Places genomes flagged as novel in Module 2 within their taxonomic context. Query genomes are partitioned into genus-specific clusters; conserved single-copy genes are extracted via genus-specific HMMs, and Maximum-Likelihood trees are inferred with bootstrap support. Outputs are formatted for interactive visualization.
GToTreeIQ-TREEiTOLModule 4 Metagenomic Mapping Optional
Quantifies prevalence and relative abundance of novel species across user-provided metagenomic datasets using k-mer-based containment estimation — fast, and without the computational cost of read alignment. Produces a standardized master abundance table across samples.
Optional
Only runs if you provide raw metagenomic reads to screen against your novel genomes. If you don't have any, skip this module — the rest of the pipeline doesn't depend on it.
Module 5 Functional characterization
Multi-modal profiling of genomic features, metabolic potential, resistance mechanisms, and mobile genetic elements: structural annotation and COG classification, secondary metabolite / biosynthetic gene cluster detection, prophage and plasmid identification, and antibiotic/biocide/metal resistance screening against curated databases. Results compile into summary tables for visualization.
ProkkaCOGclassifierantiSMASHgeNomadABRICATEModule 6 Genome-scale metabolic model reconstruction Optional
Reconstructs a genome-scale metabolic model for each novel species via a top-down template approach, exported in standardized SBML/FBC format. Network topology and biomass connectivity are validated under unconstrained growth tests, and model quality is benchmarked for stoichiometric consistency.
Optional — requires your own CPLEX license
The default solver is IBM ILOG CPLEX, which needs a license you provide yourself — a free student/academic license works. If you don't have one, skip this module; it doesn't block anything else in the pipeline.
Getting CPLEX (student/academic license)
- Create an IBMid using your university/academic email address.
- Go to the IBM Academic Initiative downloads page and sign in.
- Select IBM ILOG CPLEX Optimization Studio.
- Search for "CPLEX 22.1.1" specifically — NOSE is verified against this version, not the older ones most generic install guides walk through.
- Choose the HTTP download option, then check the box for the installer matching your OS (e.g. "...CPLEX Optimization Studio V22.1.1 for Linux x86-64").
- Accept the license agreement — the Download button only appears once you do.
- Click Download. The installer file (e.g.
cplex_studio2211.linux-x86-64.bin) starts downloading.
Linux / macOS — make the installer executable and run it as superuser, accepting the default install path unless you have a reason to change it:
$ chmod +x cplex_studio2211.linux-x86-64.bin
$ sudo ./cplex_studio2211.linux-x86-64.bin
Windows — run the downloaded .exe installer as Administrator, keeping the default install path.
NOSE only needs the Python bindings
Unlike tools built against CPLEX's MATLAB bindings, NOSE calls CPLEX through its Python API. Once installed, that lives under the install directory at cplex/python/<python-version>/<platform> — for example:
/opt/ibm/ILOG/CPLEX_Studio2211/cplex/python/3.9/x86-64_linux
Copy that path into module6.cplex_lib_path in nose_config.yaml, or the CPLEX Library Path field on Module 6's Config tab (or the Full Pipeline Run page, under M6 settings). No environment variables or .bashrc edits needed — NOSE reads the path directly from config.
Configuration & thresholds
| Module | Key threshold |
|---|---|
| 1 — Quality control | Completeness ≥ 90%, contamination ≤ 5%, taxonomy resolved to ≥ Genus |
| 2 — Relatedness | Novel candidate: WGS ANI < 95%; AAI ≥ 50 reciprocal hits at 20% identity; POCP ≥ 40% identity / 50% coverage / E-value < 1×10⁻⁵ |
| 3 — Phylogenomics | Maximum-Likelihood tree, 1,000 ultrafast bootstrap replicates |
| 4 — Mapping | Containment threshold (c) = 100, minimum 5 target k-mers per detection |
| 5 — Annotation | Database matches ≥ 80% identity, ≥ 80% query coverage (CARD, VFDB, BacMet2, NCBI) |
| 6 — Metabolic models | Unconstrained growth test at ±1000 mmol·gDW⁻¹·h⁻¹ |
Orchestration
Each module is a Snakemake sub-workflow running in its own Conda environment, deployed at runtime and chained together by a master dispatch script alongside custom Python/Bash connectors that standardize tool outputs into CSV/TSV between modules. A centralized config.yaml is the single point of control for analysis paths, parameter thresholds, and compute allocation.
Team & Credits
NOSE is developed at the Centre for Integrative Biology and Systems mEdicine (IBSE), Wadhwani School of Data Science and AI, IIT Madras.
- Prithvi S Prabhu
- Harippriya Sivakumar
- Enos Jadlin
- Pratyay Sengupta
- Karthik Raman — Principal Investigator
Acknowledgements
NOSE builds on open-source tools including FastANI, Snakemake, GTDB-Tk, CheckM2, and the other tools listed under Pipeline Details. See the repository for a full list of dependencies and licenses.
FAQ
Common questions about installing and running NOSE.
What counts as a "novel" species?
NOSE flags a genome as a novel candidate when its ANI to the closest reference genome falls below the species boundary threshold, given sufficient alignment coverage. A flagged result is a candidate for further taxonomic review, not a final classification.
Do I need my own reference database?
NOSE compares against whatever reference database you point it to. You can supply a custom set of reference genomes relevant to your organism group, or use a general-purpose reference set.
Can I run NOSE on a cluster?
Yes — since the pipeline is a Snakemake workflow underneath, it can be submitted to cluster or HPC schedulers using Snakemake's standard execution profiles.
Where do I report a bug or request a feature?
Open an issue on the NOSE GitHub repository.