Skip to main content
Documentation

Virtual screening

The /app/screen page submits a single Boltz-2 campaign covering up to 1000 ligands at once. Results stream in live as each prediction completes and persist to Postgres so they survive page reloads and tab closes.

Input formats

You can supply ligands in four ways:

  • Paste SMILES: one ligand per line, tab-separated as name <TAB> smiles. Lines starting with # are ignored. Comma- and whitespace-separated formats also parse.
  • Upload .smi / .csv: drag-and-drop. The RDKit SMILES <TAB> name convention is auto-detected and rewritten to OpenDDE’s name <TAB> smiles form.
  • ChEMBL known ligands: pulls every compound annotated as active against the chosen target via the existing /ligands endpoint.
  • FDA-approved set: a bundled starter list of ~30 well-known drugs (public/data/fda_approved_drugs.json). Append entries with {name, smiles, chembl_id?} and reload.

Each SMILES is validated client-side via POST /api/v1/validate with a 600 ms debounce. Invalid entries surface a red chip in the count strip and are silently dropped at submit time.

Expected runtimes

HardwarePer prediction50 ligands500 ligands
Local CPU (M1/M2 Mac)3–8 min2.5–7 hours> 1 day
Cloud GPU (A10G)20–60 s15–50 min3–8 hours
NIM / dedicated A10010–30 s10–25 min1–4 hours

On the first prediction the Boltz container downloads ~3 GB of model weights (cached in the boltz-cache Docker volume). The OpenDDE UI shows a warmup banner during this 5–15 min download — subsequent predictions start immediately.

Interpreting the rank-ordered list

The results page (/app/screen/results/[id]) sorts by predicted pKi descending by default. Treat this as a triage tool, not a final answer:

  • The top of the list is high-confidence binders, not necessarily the most potent ones in absolute terms.
  • Within the top 20, fine pKi differences (< 1 log unit) are not reliable. Filter by binder probability (≥ 0.7) and Lipinski pass to focus on drug-like binders.
  • Use the “Experimental vs predicted” scatter on the pocket detail page to gut-check whether Boltz-2 is performing well on this specific target before trusting the screen.

Shortlisting top hits

Each result row has a Predict complex button that hands the ligand to the existing AlphaFold 3 / AutoDock Vina workflow. The recommended flow:

  1. Apply filters: min pKi 6, min binder 70%, Lipinski pass only.
  2. Export the filtered list as CSV for offline triage.
  3. Pick the top 5–10 to push into complex prediction for explicit binding-pose modeling.
  4. Validate experimentally before drawing any quantitative conclusions.

Persistence and resumption

Campaigns are stored in the screening_campaigns andscreening_job_map tables; individual predictions live inaffinity_predictions. The pocket detail page automatically rehydrates predictions for any target you visit and resumes polling for in-flight jobs — closing the tab does not abort a screen.

Next

  • Affinity prediction — what the pKi and binder-probability numbers actually mean.
  • API reference — the underlying/affinity/screen and /affinity/campaign/{id}endpoints.