Synnotate
Annotate bacterial and phage genomes — including the genes other tools leave as "hypothetical protein."
Synnotate works out what a gene does from the company it keeps: the genes around it. Because it reads a gene's neighbourhood instead of its sequence, it can put a name to genes that have no known match in any database — the "dark" genes that ordinary annotation leaves blank.
For every gene you get a predicted function and a confidence score. You can also ask Synnotate to show its evidence: whether the same gene neighbourhood turns up in other genomes, and which neighbours led it to the answer.
Install
pip install git+https://github.com/khoa-yelo/Synnotate.git
Then download the data Synnotate needs into a folder of your choice (do this once):
synnotate setup --type prokaryote --dir ./synnotate_db
You point to that folder with --bundle ./synnotate_db whenever you annotate.
Try it
The repository includes a tiny example: a cluster of ribosomal-protein genes with one gene hidden as "hypothetical protein." Synnotate works out what the hidden gene is, from its neighbours alone:
synnotate annotate examples/demo.fna --type prokaryote --bundle ./synnotate_db \
--gff examples/demo.gff --interpret --out demo
gene_id annotation prediction confidence synteny_support trusted
dcw_03 UNKNOWN cell division protein FtsL 0.77 0.65 0.95
confidence is a calibrated expected accuracy (a 0.95 means ~95% of such calls are right), and
trusted flags the strictest accuracy tier — 0.99, 0.95, or blank — that the call meets from
confidence and synteny together.
Annotate your genome
Pick the line that matches what you have:
# You already have an annotated genome (a GFF with product names — e.g. from NCBI, Prokka, or Bakta)
synnotate annotate genome.fna --type prokaryote --bundle ./synnotate_db --gff annotations.gff --interpret --out result
# You have only a genome sequence, not annotated yet
synnotate annotate genome.fna --type prokaryote --bundle ./synnotate_db --backend eggnog --out result
# A phage genome
synnotate annotate phage.fna --type phage --bundle ./synnotate_db --interpret --out result
Add --interpret to include the supporting evidence (synteny and neighbour breakdown). Leave it off
for a faster, prediction-only run.
What Synnotate needs from you
Synnotate reads the functions of a gene's neighbours, so those neighbours have to be named first. How that happens depends on your input:
- An already-annotated genome (a GFF with
product=names) — Synnotate reads the names directly. Nothing else to install. - A genome sequence only — Synnotate first names the genes with eggNOG-mapper (install it separately, below).
- A phage — Synnotate uses Pharokka.
- Your own names — give Synnotate a simple
gene_id<TAB>functiontable with--annotations.
To use the sequence-only path, install eggNOG-mapper once:
mamba install -c bioconda eggnog-mapper
download_eggnog_data.py
Your results
Synnotate writes result.synnotate.tsv, one row per gene:
- prediction — the predicted function
- confidence — a calibrated expected accuracy (isotonic regression), so 0.95 means ~95% of such predictions are correct
- confidence_raw — the uncalibrated softmax score, for reference
- top5 — the five most likely functions
- category — a broad functional category
With --interpret, you also get:
- synteny_support — how strongly other genomes back up the call, from 0 to 1
- trusted — the strictest expected-accuracy tier the call clears from calibrated confidence ×
synteny (
0.99,0.95, or blank); the same trusted-region gate used in the paper - driving_neighbours — which neighbouring genes led to the prediction
Add --gff-out result.gff to also get an annotated GFF you can load into a genome browser.
Options at a glance
| Option | What it does |
|---|---|
--type {prokaryote,phage} |
which organism |
--gff FILE |
use the gene coordinates and names from this GFF |
--annotations FILE |
supply your own gene_id<TAB>function table |
--interpret |
include synteny support and the neighbour breakdown |
--out NAME |
name for the output files |
--gff-out FILE |
also write an annotated GFF |
--device {auto,cpu,cuda} |
run on CPU or GPU (auto by default) |
How it works, briefly
Synnotate learns which gene neighbourhoods go with which functions. A gene with no known match still sits in a recognisable neighbourhood, so Synnotate can name it — and every prediction can be traced back to the specific neighbours that supported it.
Citation & license
Paper in preparation. Released under the MIT license — see LICENSE.
Metadata
Release files for synnotate 0.2.0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | Provenance | Actions |
|---|---|---|---|---|
| synnotate-0.2.0.tar.gz | 27.1 kB | Without provenance | Details for synnotate-0.2.0.tar.gz |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Actions Reset |
|---|---|---|---|---|
| synnotate-0.2.0-py3-none-any.whl | Python 3 | none | any | Details for synnotate-0.2.0-py3-none-any.whl |
Total release size: 54.9 kB
Release files / synnotate-0.2.0.tar.gz
| Download URL | synnotate-0.2.0.tar.gz |
|---|---|
| Size | 27.1 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
8cf427f4c77a9056ad9d3798ac0865f1bc840694ff72a11559bea8b4512374ca
|
|
BLAKE2b-256 checksum How to use checksums |
387733840595c12332aaea6c3d820b50ecf320e87f3a6dd62108626f34364dd5
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.13.11
|
Release files / synnotate-0.2.0-py3-none-any.whl
| Download URL | synnotate-0.2.0-py3-none-any.whl |
|---|---|
| Size | 27.8 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
922f7c3c1853c6e7d892260335fa81c29af12b4b6f0c4674269aee52f1aa77fd
|
|
BLAKE2b-256 checksum How to use checksums |
298c244b5fac1828b5cfcf718193544bc026b3c4a1e59ca2101b47ba23e23047
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.13.11
|
Security for synnotate 0.2.0
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
No provenance found
None of the files in this release were uploaded with provenance metadata.
A note on package security
PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.
To learn more about protecting yourself from malicious actors, visit our package security documentation.