OpenBabel — Chemical Format Conversion & Manipulation
OpenBabel 3.1.1. Two interfaces: pybel (Python API, high-level) and obabel (CLI, batch processing). Supports 146 formats, MMFF94/UFF/GAFF force fields.
When to Use This Skill
- Converting between molecular formats: SMILES ↔ SDF ↔ MOL2 ↔ PDB ↔ InChI ↔ CIF ↔ XYZ ↔ 100+ others
- Generating 3D coordinates from SMILES (quick alternative to RDKit ETKDGv3)
- Conformer searching with force field scoring
- Protonation state at given pH
- Computing molecular descriptors (LogP, TPSA, MR) and fingerprints
- SMARTS substructure filtering of large libraries
- Batch library processing (split, deduplicate, filter)
- Converting formats unsupported by RDKit (CIF, VASP POSCAR, XYZ, etc.)
Quick Start
from openbabel import pybel
# Read SMILES → generate 3D → write SDF
mol = pybel.readstring('smi', 'CC(=O)Oc1ccccc1C(=O)O') # aspirin
mol.make3D(forcefield='mmff94', steps=500)
mol.write('sdf', 'aspirin.sdf', overwrite=True)
# Read SDF → SMILES
for mol in pybel.readfile('sdf', 'library.sdf'):
print(mol.write('can').strip()) # canonical SMILES
Router — What to Read
| Task |
Reference |
| pybel Python API: read, write, 3D, descriptors, fingerprints, SMARTS |
references/pybel-python.md |
| obabel CLI: conversion, --gen3d, --conformer, filtering, pH, split |
references/obabel-cli.md |
| Format codes, fingerprint types, descriptors, Tanimoto |
references/formats-fingerprints.md |
Two Interfaces
|
pybel |
obabel CLI |
| Use case |
Scripted workflows, per-molecule logic |
Batch conversion, library filtering |
| Import |
from openbabel import pybel |
subprocess or shell |
| Speed |
Moderate |
Fast (C++ core) |
| Flexibility |
High (per-atom access) |
Moderate (flags) |
Installation
conda install -c conda-forge openbabel # recommended (includes C++ libs)
pip install openbabel # Linux/macOS only
# Verify
python -c "from openbabel import pybel; print(pybel.readstring('smi','C').molwt)"
obabel --version
Key Global Variables
from openbabel import pybel
pybel.informats # dict: {'sdf': 'MDL MOL format', 'smi': 'SMILES format', ...}
pybel.outformats # dict of writable formats
pybel.fps # list of fingerprint types: ['FP2', 'FP3', 'FP4', 'MACCS']
pybel.descs # list of descriptor names
pybel.forcefields # list of available force fields
Relation to RDKit
| Task |
Prefer |
| Drug-like 3D (ETKDGv3) |
RDKit |
| Non-organic / unusual atoms |
OpenBabel (UFF) |
| Format not in RDKit (CIF, XYZ, etc.) |
OpenBabel |
| SMARTS filtering (speed) |
OpenBabel CLI |
| Fingerprints (ECFP) |
RDKit |
| Fingerprints (FP2/FP3/MACCS) |
OpenBabel |
Related Skills
rdkit — complementary: ETKDGv3 conformers, ECFP fingerprints, reactions
ase — ASE reads XYZ/CIF; OpenBabel converts to those formats
scientific-skills:datamol — fast preprocessing, also wraps RDKit
1---2name: openbabel3description: Use when converting molecular file formats, generating 3D coordinates, searching conformers, computing descriptors/fingerprints, or filtering chemical libraries with OpenBabel. Covers both pybel Python API and obabel command-line tool.4---56# OpenBabel — Chemical Format Conversion & Manipulation78OpenBabel 3.1.1. Two interfaces: **pybel** (Python API, high-level) and **obabel** (CLI, batch processing). Supports 146 formats, MMFF94/UFF/GAFF force fields.910## When to Use This Skill1112- Converting between molecular formats: SMILES ↔ SDF ↔ MOL2 ↔ PDB ↔ InChI ↔ CIF ↔ XYZ ↔ 100+ others13- Generating 3D coordinates from SMILES (quick alternative to RDKit ETKDGv3)14- Conformer searching with force field scoring15- Protonation state at given pH16- Computing molecular descriptors (LogP, TPSA, MR) and fingerprints17- SMARTS substructure filtering of large libraries18- Batch library processing (split, deduplicate, filter)19- Converting formats unsupported by RDKit (CIF, VASP POSCAR, XYZ, etc.)2021## Quick Start2223```python24from openbabel import pybel2526# Read SMILES → generate 3D → write SDF27mol = pybel.readstring('smi', 'CC(=O)Oc1ccccc1C(=O)O') # aspirin28mol.make3D(forcefield='mmff94', steps=500)29mol.write('sdf', 'aspirin.sdf', overwrite=True)3031# Read SDF → SMILES32for mol in pybel.readfile('sdf', 'library.sdf'):33 print(mol.write('can').strip()) # canonical SMILES34```3536## Router — What to Read3738| Task | Reference |39|------|-----------|40| pybel Python API: read, write, 3D, descriptors, fingerprints, SMARTS | `references/pybel-python.md` |41| obabel CLI: conversion, --gen3d, --conformer, filtering, pH, split | `references/obabel-cli.md` |42| Format codes, fingerprint types, descriptors, Tanimoto | `references/formats-fingerprints.md` |4344## Two Interfaces4546| | pybel | obabel CLI |47|---|---|---|48| Use case | Scripted workflows, per-molecule logic | Batch conversion, library filtering |49| Import | `from openbabel import pybel` | `subprocess` or shell |50| Speed | Moderate | Fast (C++ core) |51| Flexibility | High (per-atom access) | Moderate (flags) |5253## Installation5455```bash56conda install -c conda-forge openbabel # recommended (includes C++ libs)57pip install openbabel # Linux/macOS only5859# Verify60python -c "from openbabel import pybel; print(pybel.readstring('smi','C').molwt)"61obabel --version62```6364## Key Global Variables6566```python67from openbabel import pybel6869pybel.informats # dict: {'sdf': 'MDL MOL format', 'smi': 'SMILES format', ...}70pybel.outformats # dict of writable formats71pybel.fps # list of fingerprint types: ['FP2', 'FP3', 'FP4', 'MACCS']72pybel.descs # list of descriptor names73pybel.forcefields # list of available force fields74```7576## Relation to RDKit7778| Task | Prefer |79|------|--------|80| Drug-like 3D (ETKDGv3) | RDKit |81| Non-organic / unusual atoms | OpenBabel (UFF) |82| Format not in RDKit (CIF, XYZ, etc.) | OpenBabel |83| SMARTS filtering (speed) | OpenBabel CLI |84| Fingerprints (ECFP) | RDKit |85| Fingerprints (FP2/FP3/MACCS) | OpenBabel |8687## Related Skills8889- `rdkit` — complementary: ETKDGv3 conformers, ECFP fingerprints, reactions90- `ase` — ASE reads XYZ/CIF; OpenBabel converts to those formats91- `scientific-skills:datamol` — fast preprocessing, also wraps RDKit