Control PyMOL molecular visualization through Claude Code. Use when asked to "visualize protein", "render structure", "show cartoon", "color by chain", "ray trace", "set up pymol", "install pymol", or work with molecular graphics. Handles setup, visualization commands, and publication-quality figure generation.
This skill enables Claude Code to control PyMOL molecular visualization software through the claudemol socket interface. It supports:
| Task Category | Examples |
|---|---|
| Setup | Install PyMOL, configure claudemol, verify connection |
| Structure Loading | Load PDB files, fetch from RCSB, open local structures |
| Representations | Cartoon, surface, sticks, spheres, ribbons, lines |
| Coloring | Color by chain, spectrum, B-factor, custom colors |
| Selections | Select residues, chains, ligands, binding sites |
| Camera | Orient view, zoom, rotate, save viewpoints |
| Ray Tracing | High-quality renders, publication figures |
| Export | Save images (PNG), sessions (PSE), movies |
Run the automated setup script:
python /path/to/skills/pymol/scripts/setup_pymol.py
pip install claudemol
macOS (Recommended):
brew install pymol
Windows/Linux (Headless):
pip install pymol-open-source
Windows (Licensed PyMOL):
Connect to existing PyMOL installation - see references/troubleshooting.md
claudemol setup
This adds the socket plugin to PyMOL's startup.
lsof -i :9880 # macOS/Linux
netstat -an | findstr 9880 # Windows
claudemol communicates with PyMOL via a TCP socket on port 9880.
import socket
import json
def send_pymol_command(code: str, host: str = 'localhost', port: int = 9880) -> dict:
"""Send a command to PyMOL via claudemol socket."""
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
sock.settimeout(30)
try:
sock.connect((host, port))
message = json.dumps({"code": code})
sock.sendall(message.encode('utf-8'))
response = sock.recv(65536)
return json.loads(response.decode('utf-8'))
finally:
sock.close()
commands = """
cmd.load('1ubq.pdb')
cmd.show('cartoon')
cmd.color('cyan', 'all')
cmd.orient()
"""
result = send_pymol_command(commands)
# From local file
cmd.load('/path/to/structure.pdb')
cmd.load('/path/to/structure.cif')
# From RCSB PDB
cmd.fetch('1ubq')
cmd.fetch('6lu7', type='cif')
# Show representations
cmd.show('cartoon', 'all')
cmd.show('surface', 'chain A')
cmd.show('sticks', 'resn LIG')
cmd.show('spheres', 'name CA')
# Hide representations
cmd.hide('lines', 'all')
cmd.hide('everything', 'solvent')
# Color by chain (automatic colors)
cmd.util.cbc()
# Spectrum coloring (rainbow N to C)
cmd.spectrum('count', 'rainbow', 'all')
# Specific colors
cmd.color('red', 'chain A')
cmd.color('blue', 'resn LIG')
cmd.color('green', 'resi 50-100')
# B-factor coloring
cmd.spectrum('b', 'blue_white_red', 'all')
# Create named selections
cmd.select('binding_site', 'byres resn LIG around 5')
cmd.select('active_site', 'resi 145+41+166 and chain A')
cmd.select('interface', 'chain A within 4 of chain B')
# Selection algebra
cmd.select('no_water', 'all and not solvent')
# Orient and zoom
cmd.orient()
cmd.zoom('all')
cmd.zoom('chain A', buffer=5)
cmd.center('resn LIG')
# Set specific view
cmd.set_view([...]) # 18-element matrix
# Store and recall views
cmd.view('view1', 'store')
cmd.view('view1', 'recall')
# Basic ray trace
cmd.ray(1920, 1080)
cmd.png('/path/to/output.png')
# Publication quality
cmd.set('ray_trace_mode', 1)
cmd.set('ray_shadows', 'on')
cmd.set('antialias', 2)
cmd.ray(2400, 2400)
cmd.png('/path/to/figure.png', dpi=300)
See references/visualization.md for complete workflows:
See references/commands.md for complete command documentation:
cmd.* functionsSee references/troubleshooting.md for platform-specific issues:
| Issue | Resolution |
|---|---|
| Connection refused | Ensure PyMOL is running with claudemol plugin loaded |
| Port 9880 in use | Kill other processes or change port |
| No GUI (Windows pip) | Use headless mode or licensed PyMOL |
| GLUT missing (macOS) | Install via Homebrew instead of pip |
| Slow ray tracing | Reduce resolution or simplify scene |