ADMET Builder
ADMET Builder (OpenADMET)
Introduction
As of 7/6/26, ADMET Builder is an internal Irwin Lab web tool for submitting one or more compounds in SMILES format and receiving OpenADMET prediction results.
The current backend runs on C7 using the `openadmet-models` conda environment.
ADMET Builder returns:
- Molecular formula
- SMILES string
- RDKit-generated 2D structure image
- logD
- Caco-2 A to B permeability
- Caco-2 B to A permeability
- Mouse plasma protein binding
- Human plasma protein binding
- Downloadable CSV output
Created by Benjamin "Ben" Romero (Undergrad Northwestern University '29), Summer 2026.
Developed in the Irwin Lab at UCSF.
How to Login
Log into C7:
ssh USER@epsilon.compbio.ucsf.edu
Confirm location:
hostname pwd
How to Open Website With SwitchyOmega
If using SwitchyOmega, use:
Protocol: SOCKS5 Host: localhost Port: 1074
Then open:
http://169.230.26.173:8501
If the SOCKS proxy is not running, start it from a Mac terminal:
ssh -f -N -D 1074 USER@epsilon.compbio.ucsf.edu
When finished, switch SwitchyOmega back to Direct.
Where The Website Lives
Project directory on C7:
~/openadmet/admet-builder
Important files:
app.py static/index.html static/styles.css static/app.js .gitignore
Repository
GitLab repository:
https://gitlab.docking.org/USERNAME/admet-builder
Clone using HTTPS:
git clone https://gitlab.docking.org/USERNAME/admet-builder.git cd admet-builder
Clone using SSH:
git clone git@gitlab.docking.org:USERNAME/admet-builder.git cd admet-builder
Environment
The backend uses the OpenADMET conda environment:
module load anaconda3/2025.06.0 source "$(conda info --base)/etc/profile.d/conda.sh" conda activate openadmet-models
Python dependencies include:
- Flask
- pandas
- RDKit
- OpenADMET models package
The OpenADMET model directory is expected at:
~/openadmet/permeability-logd-ppb-chemeleon-baseline/anvil_training
How to Start Backend
On C7:
module load anaconda3/2025.06.0 source "$(conda info --base)/etc/profile.d/conda.sh" conda activate openadmet-models cd ~/openadmet/admet-builder python app.py
The backend runs on:
http://0.0.0.0:8501
The browser URL is:
http://169.230.26.173:8501
Test from C7:
curl http://127.0.0.1:8501
How to Keep Backend Running
Use screen:
screen -S admet-builder module load anaconda3/2025.06.0 source "$(conda info --base)/etc/profile.d/conda.sh" conda activate openadmet-models cd ~/openadmet/admet-builder python app.py
Detach:
Ctrl-A D
Reconnect:
screen -r admet-builder
List screens:
screen -ls
Stop backend:
screen -r admet-builder Ctrl-C exit
Test Input
Example SMILES input:
CCO c1ccccc1 CC(=O)Oc1ccccc1C(=O)O
Larger test molecule:
CC(C)Cc1ccc(cc1)[C@@H](C)C(=O)O
Test API With curl
Test the API from C7:
curl -X POST http://127.0.0.1:8501/predict-smiles \
-H "Content-Type: application/json" \
-d '{"smiles":["CCO","c1ccccc1","CC(=O)Oc1ccccc1C(=O)O"]}'
Current API Endpoint
Main endpoint:
POST /predict-smiles
Example JSON request:
{
"smiles": [
"CCO",
"c1ccccc1",
"CC(=O)Oc1ccccc1C(=O)O"
]
}
Example response contains:
{
"csv": "...",
"rows": [],
"columns": []
}
The frontend uses this response to display the results table and automatically download the CSV.
How It Works
ADMET Builder has three major parts:
| Layer | Technology | Purpose |
|---|---|---|
| Frontend | HTML, CSS, JavaScript | User interface, SMILES input, results table, and structure image display |
| Backend API | Flask | Receives SMILES, runs predictions, and returns results |
| Prediction Engine | OpenADMET | Generates ADMET predictions from molecular input |
Backend flow:
- Receives SMILES strings from the website.
- Converts the SMILES into a temporary CSV file.
- Runs the OpenADMET command-line prediction tool.
- Reads the OpenADMET output CSV.
- Uses RDKit to calculate molecular formulas.
- Uses RDKit to generate 2D molecular structure images.
- Sends results back to the web interface as JSON.
- Provides the same results as a downloadable CSV file.
Modularity
ADMET Builder is modular by design. The frontend, backend, and prediction engine are separated so each part can be reused or replaced.
This means:
- The frontend can be redesigned without changing the model logic.
- The Flask backend can support new endpoints.
- Additional OpenADMET models can be added later.
- Other chemistry tools can be wrapped using the same backend pattern.
- The results table can be adapted for different prediction outputs.
- The SMILES-to-structure display can be reused in other cheminformatics apps.
- The app can serve as a template for future scientific web interfaces.
Because of this structure, ADMET Builder can be used both as a working lab tool and as a starting point for other modular research software.
Output
The output table includes:
| Column | Meaning |
|---|---|
| Molecule | Molecular formula calculated from the SMILES string |
| SMILES | Input molecule string |
| Structure Image | RDKit-generated 2D molecular structure |
| logD | Predicted distribution coefficient |
| Caco-2 A to B | Predicted apical-to-basolateral permeability |
| Caco-2 B to A | Predicted basolateral-to-apical permeability |
| Mouse PPB | Predicted mouse plasma protein binding |
| Human PPB | Predicted human plasma protein binding |
The CSV download contains the same prediction values in a machine-readable format.
Troubleshooting
Site Cannot Be Reached
Check that:
- Backend is running on C7.
- The app is running on port 8501.
- SwitchyOmega is set to SOCKS5 localhost port 1074.
- The browser is using:
http://169.230.26.173:8501
SwitchyOmega Proxy Error
If Chrome says the proxy failed, the SOCKS proxy may not be running.
Start it from a Mac terminal:
ssh -f -N -D 1074 USER@epsilon.compbio.ucsf.edu
SwitchyOmega should be:
Protocol: SOCKS5 Host: localhost Port: 1074
Port Already In Use
Check port 8501:
ss -ltnp | grep 8501
Only kill processes owned by you:
kill PID_NUMBER
Missing pandas or Flask
This usually means the conda environment is not active.
Run:
module load anaconda3/2025.06.0 source "$(conda info --base)/etc/profile.d/conda.sh" conda activate openadmet-models
RDKit Image Error
Make sure the app is running inside the `openadmet-models` environment, which includes RDKit.
Test RDKit:
python -c "from rdkit import Chem; print('rdkit works')"
Notes
ADMET Builder is a research tool. Its predictions are intended for screening, comparison, prioritization, and exploration.
Results should not be treated as experimental measurements.
For office-wide use without SSH/SOCKS tunnels, ADMET Builder should eventually be placed behind an internal hostname or proxy.
Attribution
Created by Benjamin "Ben" Romero (Undergrad Northwestern University '29), Summer 2026.
Developed in the Irwin Lab at UCSF.
Released as part of an open-source UCSF research tool; please credit the creator and lab when using or adapting this work.