Skip to main content

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>function table 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)

Source distribution for synnotate 0.2.0
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)

Table of built distributions (wheels) for synnotate 0.2.0
File Interpreter ABI Platform Actions
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.

Release history Release notifications | RSS feed

This release

0.2.0 This release

2 release files No provenance

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page