Controlling PyMol from afar

Do you keep downloading .pdb and .sdf files and loading them into PyMol repeatedly?

If yes, then PyMol remote might be just for you. With PyMol remote, you can control a PyMol session running on your laptop from any other machine. For example, from a Jupyter Notebook running on your HPC cluster.

Setup

You need to have pymol_remote installed on both the local and remote machine.

pip install pymol_remote

Usage

Start PyMol server on laptop

First, start a PyMol server using pymol_remote. By default, it listens on port 9123.

pymol_remote

Create tunnel

Next, forward the remote port. To do this manually, choose a port to forward to, say 9123 again, and create an ssh tunnel for example.

ssh -R 9123:localhost:9123 yourservername -N -f

Optionally: Since I also use ssh to connect to the server, I added a RemoteForward entry to my ~/.ssh/config which will automatically do the port forwarding for me.

Host yourservername
	HostName yourservername.stats.ox.ac.uk
	RemoteForward 9123 localhost:9123

Setup PyMol session in notebook

Now, open a Jupyter Notebook on the remote server. In the notebook, setup the remote PyMol session using localhost as the IP address and the port chosen in the previous step.

from pymol_remote.client import PymolSession

cmd = PymolSession(hostname="127.0.0.1", port=9123)

Use PyMol remotely

That’s it! We can now control the remote PyMol session like we would a local session. For example, we can fetch a structure from the PDB and generate the protein’s surface.

# reset PyMol session
cmd.reinitialize()

# load entry 8TZX from the PDB
cmd.fetch("8TZX")

# show the protein with a white surface
cmd.hide("cartoon")
cmd.show("surface")
cmd.color("white", "polymer")

Now, let’s add a prediction stored on the machine running the Notebook:

with open("./model_output/top_prediction.sdf") as file:
  
    # read local file into buffer
    buffer = file.read()

    # load file into the remote PyMol session
    cmd.set_state(buffer, format="sdf", object="prediction")

We can manipulate the PyMol session via the user interface, the PyMol command line, or the Python API in the notebook.

Once we are happy, we can save the image:

Author