Phenotype is a local genome annotation app for inspecting SNPs without pushing raw genotype data to a hosted service. It combines imported genotypes with cached sources such as ClinVar, SNPedia, VEP, and Promethease-style reports.
- Upload a 23andMe or Ancestry-style genome file.
- Review
Findings,New,Clinical,All annotated,Unannotated, andBuild 37 variants. - Search by rsid or gene.
- Filter by zygosity, VEP impact, VEP consequence, and finding severity.
- Sort by magnitude, rating, recency, publication count, gene, rsid, and frequency.
- Open a SNP in the sidebar to see linked studies, SNPedia, ClinVar, and metadata.
- Import VEP output, ClinVar data, and Promethease HTML reports.
- Export VEP input for build 37 variants or rsid lists.
- The table is summary-first.
- Full SNP detail loads only when you click a row.
- Summary counts and the default findings view are cached locally.
- Matching is stricter: rows only show as findings when the imported genotype actually matches.
python3 -m venv .venv
source .venv/bin/activate
python -m pip install --upgrade pip
python -m pip install -e ".[dev]"Run the app:
cd src/phenotype-web
../../.venv/bin/python -m flask --app phenotype.app:create_app run --host 127.0.0.1 --port 5000Open the local URL printed by Flask. If 5000 is busy, use another free port.
Local data lives under src/phenotype-web/data/:
scrapedData.jsonfor cached annotationsyourData.jsonfor imported genotypesphenotype.sqlitefor the local cache
Use the browser upload or run the importer directly:
cd src/phenotype-web
../../.venv/bin/python -m phenotype.scraperImport a Promethease-style HTML report from the browser to seed the cache with existing findings.
The browser supports:
Import ClinVar DBScan x;y ClinVar matchesImport VEPImport report HTMLRefresh finding datesRefresh annotations
After importing a build 37 genome file, use Build 37 variants with x;y to narrow the export to heterozygous rows.
Install the GRCh37 cache:
mkdir -p "$HOME/vep_data"
docker run -t -i -v "$HOME/vep_data:/data" ensemblorg/ensembl-vep INSTALL.pl -a cf -s homo_sapiens -y GRCh37Run VEP on the exported build 37 variants:
docker run --rm \
-v "$HOME/vep_data:/data" \
-v "$PWD/src/phenotype-web/data/exports:/work" \
ensemblorg/ensembl-vep \
vep --cache --offline --assembly GRCh37 --format ensembl \
--input_file /work/phenotype_build37_heterozygous_vep_input.tsv \
--output_file /work/phenotype_vep_output.txt \
--force_overwrite --tab --symbol --hgvs --canonical --variant_class --no_statsImport the result:
.venv/bin/phenotype-vep-import src/phenotype-web/data/exports/phenotype_vep_output.txtGET /api/snpsGET /api/snps/<rsid>GET /api/variantsGET /api/backlogPOST /api/importPOST /api/report/importPOST /api/scrapePOST /api/scrape/resumePOST /api/refresh-findingsPOST /api/vep/importGET /api/scrape-runs/latestGET /api/scrape-runs/<run_id>GET /api/export.csvGET /api/export-vep.tsvGET /api/export-vep-rsids.txtDELETE /api/genotypes
.venv/bin/python -m pytest
.venv/bin/python -m ruff check src/phenotype-web/phenotype tests
.venv/bin/python -m ruff format src/phenotype-web/phenotype tests- The app is for personal exploration, not diagnosis.
- Direct-to-consumer raw data can contain false positives.
- Clinical interpretation should be confirmed with an appropriate lab test and a clinician.


