Generate publication-quality molecular visualization images using PyMOL. Use this skill whenever the user mentions PyMOL, molecular visualization, protein rendering, structure figures, PDB visualization, ray tracing molecules, or wants to create images of proteins, ligands, binding sites, protein-protein interactions, or any biomolecular structure. Also trigger when the user wants to: make a figure of a crystal structure for a paper or presentation; render a protein surface; show binding pockets; visualize protein-ligand interactions; create Goodsell-style illustrations; produce cartoon representations with highlighted residues; compare multiple structures side by side; or generate any molecular graphics output — even if they don't mention "PyMOL" by name. Trigger for any request involving PDB files, molecular surfaces, cartoon ribbons, stick models, electron density, or structural biology figures.
Generate publication-quality molecular structure images using PyMOL.
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.
Before writing any script, clarify:
pymol -c -q script.pml
-c = no GUI (headless), -q = quiet. For Python API logic, use pymol -c -q -r script.py.
Read references/recipes.md before writing — it contains scene-specific recipes and
essential PyMOL commands organized by visualization goal.
Always deliver three files:
Save all to user's desktop and use present_files.
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
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
space cmyk for print colorsremove elem H unless user needs hydrogens.pse before ray tracing — this is the user's editable sessionset valence, 0 unless showing ligand bond ordersasync=0 with fetch — otherwise structure isn't loaded when next command runsquit — otherwise PyMOL hangs in batch mode