PyMOL Visualization Skill
Generate publication-quality molecular structure images using PyMOL.
Prerequisites
PyMOL must be installed. Check with:
pymol -c -q -e "print('ok')" 2>/dev/null && echo "PyMOL available" || echo "PyMOL not found"
If missing: conda install -c conda-forge pymol-open-source.
Workflow
1. Ask the User
Before writing any script, clarify:
- Structure: PDB ID, uploaded file path, or AlphaFold model?
- Goal: What does the figure show? (e.g. protein overview, binding site, PPI interface, active site, mutation, surface, alignment)
- Style preference: Any preferred colors or theme? Journal figure vs. presentation vs. artistic?
2. Write a .pml Script and Run It
pymol -c -q script.pml
-c = no GUI (headless), -q = quiet. For Python API logic, use pymol -c -q -r script.py.
3. Read the Reference Before Writing
Read references/recipes.md before writing — it contains scene-specific recipes and
essential PyMOL commands organized by visualization goal.
4. Deliver Output
Always deliver three files:
- PNG image — the rendered figure
- PML script — so the user can reproduce or tweak
- PSE session — so the user can open in PyMOL GUI and adjust interactively
Save all to user's desktop and use present_files.
Script Template
Every script should follow this structure:
reinitialize
# --- Load ---
fetch 4HHB, async=0
# or: load /path/to/structure.pdb, myprotein
# --- Clean ---
remove solvent
remove elem H
set valence, 0
# --- Base look ---
bg_color white
space cmyk
set ray_shadow, 0
set ray_trace_mode, 1
set antialias, 3
set ambient, 0.5
set spec_count, 5
set shininess, 50
set specular, 1
set reflect, 0.1
set orthoscopic, on
set opaque_background, off
set cartoon_oval_length, 1
set cartoon_rect_length, 1
set cartoon_discrete_colors, on
dss
# --- Representation (scene-specific) ---
hide everything
show cartoon
# ...
# --- Color ---
util.color_chains("(all) and elem C", _self=cmd)
util.cnc("all", _self=cmd)
# --- Camera ---
orient
# zoom sele, 8
# --- Save session BEFORE ray tracing ---
save /mnt/user-data/outputs/structure.pse
# --- Render ---
ray 2400, 1800
png /mnt/user-data/outputs/structure.png, dpi=150
quit
Essential Patterns
Show sidechains cleanly:
cmd.show("sticks", "((byres (sele)) & (sc. | (n. CA) | (n. N & r. PRO)))")
Molecule-agnostic coloring:
util.color_chains("(sele) and elem C", _self=cmd)
util.cnc("sele", _self=cmd)
Surface + cartoon as separate objects:
create surf_obj, sele, zoom=0
show surface, surf_obj
set transparency, 0.5, surf_obj
cmd.color_deep("white", "surf_obj", 0)
Ball-and-stick for ligands:
show sticks, ligand
show spheres, ligand
set sphere_scale, 0.25, ligand
set stick_radius, 0.15, ligand
Goodsell style (flat, illustrative):
set ray_trace_mode, 3
set ray_trace_color, black
unset specular
set ray_trace_gain, 0
unset depth_cue
set ambient, 1.0
set direct, 0.0
set reflect, 0.0
Key Rules
- Always
space cmykfor print colors - Always
remove elem Hunless user needs hydrogens - Always save
.psebefore ray tracing — this is the user's editable session set valence, 0unless showing ligand bond orders- Create separate objects for surface overlays (transparency is per-object)
- Use
async=0withfetch— otherwise structure isn't loaded when next command runs - End script with
quit— otherwise PyMOL hangs in batch mode - Render large (1200x900+) — downscale later for quality