Protein-conditioned nucleic-acid generation

Checking local runtime

Turn selection dynamics into design hypotheses.

Follow AptGEN from early-round SELEX counts through enrichment-aware learning, multi-scale protein conditioning, and candidate triage—entirely on your machine.

Explore the workflow
No cloud calls CSV stays in browser Evidence-labelled outputs
aptgen.local / design LOCAL
Target proteinMulti-scale context READY
01 AGGAAGAATGCAGATTCCCAATAGCG QC 91
49.7M

target-agnostic
pretraining sequences

429

protein targets in
the reported SFT corpus

2.14M

target-associated
SELEX sequences

3×

protein context scales:
global, residue, surface

One system · two routes

From selection history to new-target design

Historical SELEX teaches the model what selection looks like. At design time, a new target can enter through protein features alone—without same-target SELEX.

Model-building route New-target design route
01 Historical selection route
02 SELEX-free design route
01STEP

Historical input

Measure how every sequence changes across rounds.

AptGEN starts from a sequence × round count matrix. Counts are normalized per round before enrichment is interpreted, so deeper sequencing alone is not mistaken for selection.

Input
FASTQ-derived counts or CSV
Output
Normalized round trajectories
Guardrail
Counts are not affinity measurements

Interactive lab

Inspect real round dynamics. Explore real model outputs.

Local data boundaryYour file is parsed in this browser tab and is never uploaded.

Awaiting a round-count matrix

Load the bundled BRK example or inspect your own experiment.

We will calculate per-round frequencies, diversity, fold change, and enrichment trajectories locally.

Inside the model

Protein context at three biological scales

The active MSAG route combines protein identity, residue context, and surface geometry before autoregressive sequence generation.

MSAG DECODERgated hierarchical cross-attention
next-token distribution
ACGT
01

GLOBAL CONTEXT

What protein is this?

A mean-pooled protein language-model embedding supplies broad family and functional context, including for targets not present in the same-target training set.

Captures
identity · family · function
Does not prove
a physical binding interface

Read every output at the right level

A transparent evidence ladder

Computational confidence and distribution recovery are useful filters. Neither is a substitute for direct biochemical measurement.

LEVEL 01 · OBSERVED

SELEX selection dynamics

Directly observed sequencing counts and their normalized change across rounds.

  • round frequency
  • enrichment slope
  • population diversity
Data-derived
LEVEL 02 · MODELLED

Sequence-distribution recovery

How generated populations resemble held-out enriched sequence sets.

  • k-mer F1 / JSD
  • edit-distance recall
  • validity / uniqueness
Computational proxy
LEVEL 03 · HYPOTHESIS

Structural plausibility

Predicted co-folds and confidence metrics can prioritize structural hypotheses.

  • Boltz-2 confidence
  • surface complementarity
  • optional MD follow-up
Predicted structure
LEVEL 04 · VALIDATED

Experimental binding

Direct wet-lab assays are required to establish binding, affinity, and specificity.

  • SPR / BLI / MST
  • EMSA / pull-down
  • counter-target panel
Gold standard
A≠Kd

Core interpretation rule

Enrichment, model reward, and structure confidence are different quantities.

The website never relabels a surrogate score as measured affinity. Bundled evidence is strongest within represented protein families; broad unseen-family generalization is not established. Advance candidates only when the corresponding experiment exists.

No external service required

Open the story.
Or load the model.

The static site includes a real BRK round-count excerpt and versioned local model outputs. The bundled Python server adds live MSAG sampling from repository weights and protein tensors.

01 Works by opening index.html02 Standard-library local server03 Lazy checkpoint loading
LOCAL TERMINAL

# From the AptGEN repository root

$ python website/server.py

AptGEN offline website: http://127.0.0.1:8000

Live inference: enabled

# Lightweight static-only mode

$ python website/server.py --no-live-inference

LOCALHOST ONLYDATA POLICY: LOCAL