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> nameconvention is auto-detected and rewritten to OpenDDE’sname <TAB> smilesform. - ChEMBL known ligands: pulls every compound annotated as active against the chosen target via the existing
/ligandsendpoint. - 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
| Hardware | Per prediction | 50 ligands | 500 ligands |
|---|---|---|---|
| Local CPU (M1/M2 Mac) | 3–8 min | 2.5–7 hours | > 1 day |
| Cloud GPU (A10G) | 20–60 s | 15–50 min | 3–8 hours |
| NIM / dedicated A100 | 10–30 s | 10–25 min | 1–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:
- Apply filters: min pKi 6, min binder 70%, Lipinski pass only.
- Export the filtered list as CSV for offline triage.
- Pick the top 5–10 to push into complex prediction for explicit binding-pose modeling.
- 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/screenand/affinity/campaign/{id}endpoints.