Skip to main content

COSMol-viewer

A high-performance molecular viewer for Python and Rust, powered by a unified Rust core. It supports both in-notebook visualization and native desktop rendering, with smooth playback for scientific animations.

Full installation, workflow, and Python API documentation is available at https://cosmol-studio.github.io/COSMol-viewer/.

COSMol-viewer is a compact, cross-platform renderer for molecular and geometric scenes. Unlike purely notebook-bound solutions such as py3Dmol, COSMol-viewer runs everywhere:

  • Native desktop window (Python or Rust) via egui
  • Jupyter / IPython notebook via WASM backend
  • Rust applications

All implementations share the same Rust rendering engine, ensuring consistent performance and visual output.


Quick concepts

  • Scene: container for shapes (molecules, proteins, spheres, etc.).
  • Viewer.render(scene, ...): create an interactive viewer in a native window or notebook canvas.
  • scene.save_image(path, ...) / scene.to_png(...) / scene.display(...): render the scene directly to a static PNG at any requested resolution. This is independent of notebook JavaScript or browser canvas readback.
  • scene.set_camera_view(...) / scene.rotate_camera(...): set the reproducible camera used by both static exports and newly created viewers.
  • viewer.update(scene): push incremental changes after Viewer.render() (real-time / streaming use-cases).
  • Animation: An Animation object containing frames and settings.
  • Animation(interval, loops, interpolate): stores precomputed frames and playback settings.
  • Viewer.play(animation, width, height): recommended for precomputed animations and demonstrations. The viewer takes care of playback timing and looping.

Why prefer play for demos?

  • Single call API (hand off responsibility to the viewer).
  • Built-in timing & loop control.
  • Optional interpolate mode between frames for visually pleasing playback even when input frame rate is low.

Why keep update?

  • update is ideal for real-time simulations, MD runs, or streaming data where frames are not precomputed. It provides strict fidelity (no interpolation) and minimal latency.

Usage

python

See examples in Google Colab.

Install with pip install cosmol-viewer

1. Static molecular rendering

from cosmol_viewer import Molecule, Scene

mol_data = open("molecule.sdf", "r", encoding="utf-8").read()

mol = Molecule.from_sdf(mol_data).centered()

scene = Scene()

scene.set_scale(1.0)

scene.add_shape_with_id("molecule", mol)

scene.set_camera_view(azimuth=35, elevation=20, distance=32, fov=18)
scene.save_image("rendered_scene.png", width=1600, height=1000)

Static exports and native interactive viewers both bootstrap native GL on desktop. save_image / to_png first try the fast in-process offscreen path; on platforms with a headless GL path, this avoids creating a GUI event loop. If the in-process path cannot be created after a native viewer has already run, they automatically retry in an isolated Python subprocess. Set COSMOL_VIEWER_RENDER_ISOLATED=1 to force that isolated path. Google Colab is detected automatically and uses an isolated software-rendering subprocess, so notebook code does not need to set either this variable or LIBGL_ALWAYS_SOFTWARE.

For an interactive native window:

from cosmol_viewer import Viewer

viewer = Viewer.render(scene, width=800, height=500)

print("Press Any Key to exit...", end='', flush=True)
_ = input()

In a notebook, use a static PNG display when you do not need interaction:

scene.display(width=1200, height=800)
scene.display(width=1200, height=800, background="transparent")

For an interactive notebook canvas, enable a transparent scene background before rendering:

scene.set_transparent_background()
scene.set_zoom_disabled()
scene.set_auto_rotate()
viewer = Viewer.render(scene, width=800, height=500)

For static exports, omit background to use the scene background, pass a color such as "#ffffff" or [255, 255, 255], or use "transparent" for a PNG with a transparent background.

2. Animation playback with Viewer.play

from cosmol_viewer import Scene, Viewer, Molecule, Animation

anim = Animation(interval=0.05, loops=-1, interpolate=False)
for i in range(1, 10):
    with open(f"frames/frame_{i}.sdf", "r") as f:
        mol = Molecule.from_sdf(f.read())

    scene = Scene()
    scene.add_shape(mol)
    anim.add_frame(scene)

Viewer.play(anim, width=800, height=500)  # loops=-1 for infinite repeat

3. Protein cartoon rendering

from cosmol_viewer import Protein, Scene, Viewer

mmcif_data = open("protein.cif", "r", encoding="utf-8").read()
protein = Protein.from_mmcif(mmcif_data).centered().rainbow_residues()

scene = Scene()
scene.add_shape_with_id("protein", protein)

viewer = Viewer.render(scene, width=800, height=500)

Protein.from_mmcif() and Protein.from_pdb() use COSMolKit's protein reader, then the viewer core assigns secondary structure before rendering a ChimeraX-style cartoon ribbon mesh. Use .rainbow_residues() for ChimeraX-style residue rainbow coloring, or .color("#10ACBF") for a uniform cartoon color.

more examples can be found in the examples folder:

cd cosmol_viewer
python .\examples\render_protein.py

Documentation

Please check out our documentation at here.


Contact

For any questions, issues, or suggestions, please contact wjt@cosmol.org or open an issue in the repository. We will review and address them as promptly as possible.

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

cosmol_viewer-0.2.25.tar.gz (161.4 kB view details)

Uploaded Source

Built Distributions

If you're not sure about the file name format, learn more about wheel file names.

cosmol_viewer-0.2.25-cp39-abi3-win_amd64.whl (7.5 MB view details)

Uploaded CPython 3.9+Windows x86-64

cosmol_viewer-0.2.25-cp39-abi3-win32.whl (7.5 MB view details)

Uploaded CPython 3.9+Windows x86

cosmol_viewer-0.2.25-cp39-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (8.9 MB view details)

Uploaded CPython 3.9+manylinux: glibc 2.17+ x86-64

cosmol_viewer-0.2.25-cp39-abi3-manylinux_2_17_i686.manylinux2014_i686.whl (9.3 MB view details)

Uploaded CPython 3.9+manylinux: glibc 2.17+ i686

cosmol_viewer-0.2.25-cp39-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (8.4 MB view details)

Uploaded CPython 3.9+manylinux: glibc 2.17+ ARM64

cosmol_viewer-0.2.25-cp39-abi3-macosx_11_0_arm64.whl (7.0 MB view details)

Uploaded CPython 3.9+macOS 11.0+ ARM64

cosmol_viewer-0.2.25-cp39-abi3-macosx_10_12_x86_64.whl (7.5 MB view details)

Uploaded CPython 3.9+macOS 10.12+ x86-64

File details

Details for the file cosmol_viewer-0.2.25.tar.gz.

File metadata

  • Download URL: cosmol_viewer-0.2.25.tar.gz
  • Upload date:
  • Size: 161.4 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: maturin/1.14.1

File hashes

Hashes for cosmol_viewer-0.2.25.tar.gz
Algorithm Hash digest
SHA256 b66b6ba38745b9233311588095acd1a4c917b4d6d26c16e70042cde46787ac3c
MD5 277653e72a9387e28a43a894c2de39f5
BLAKE2b-256 d7bfae5bbf9b68f72990df87e296c3e5d53a99b0574da4c7f9b711c8aaa3ea09

See more details on using hashes here.

File details

Details for the file cosmol_viewer-0.2.25-cp39-abi3-win_amd64.whl.

File metadata

File hashes

Hashes for cosmol_viewer-0.2.25-cp39-abi3-win_amd64.whl
Algorithm Hash digest
SHA256 9b8ea34b52f926fe7156944f8ee77299a6c9a5bed2215dd7ada880a120cf7d90
MD5 e7e167b02f17c02f8ab973a28963b746
BLAKE2b-256 9d22c58c72a059051aab64772325423b7095dc85bcbb7b93f92263294bba8d1c

See more details on using hashes here.

File details

Details for the file cosmol_viewer-0.2.25-cp39-abi3-win32.whl.

File metadata

File hashes

Hashes for cosmol_viewer-0.2.25-cp39-abi3-win32.whl
Algorithm Hash digest
SHA256 96d479bf531d74384c49594713cc737329ee1007db304f65fcaaa4715d8ebead
MD5 c8a2bb3c3761fc35c0b84c75fb7601a8
BLAKE2b-256 c58c779cddaac2454a170b9bcc7e9d700f7ae0be036d01654b864becbe702316

See more details on using hashes here.

File details

Details for the file cosmol_viewer-0.2.25-cp39-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for cosmol_viewer-0.2.25-cp39-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 144b2a01dfc4cd0101463eb18f8b51212bca55f25a7f8e231ccc8cac25350292
MD5 eed09b53f69e30efd7e8f14e90174300
BLAKE2b-256 480d4eb898e045628ec971849cafc196133a20037676f6b511d21bf72022b768

See more details on using hashes here.

File details

Details for the file cosmol_viewer-0.2.25-cp39-abi3-manylinux_2_17_i686.manylinux2014_i686.whl.

File metadata

File hashes

Hashes for cosmol_viewer-0.2.25-cp39-abi3-manylinux_2_17_i686.manylinux2014_i686.whl
Algorithm Hash digest
SHA256 c49a2150e3635db8b5f92c818f333efcf88730675f1f005f3482d02c56c113f8
MD5 a4a4b0022e394d3efc87292ecef2fdea
BLAKE2b-256 04225343060e3db2d850b69154e31c72becd171d41d12d9514907dbc4a438b28

See more details on using hashes here.

File details

Details for the file cosmol_viewer-0.2.25-cp39-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl.

File metadata

File hashes

Hashes for cosmol_viewer-0.2.25-cp39-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 f626fee7bb64fdf4c509cbe886a8a389d9bf2e7fcd9463789eef2ccb94b0c32e
MD5 ddc5633e5ec6a7d535f3734bf3968389
BLAKE2b-256 c04c8c7754dd58ac3674ba1698b0224be5f356b77aaab1748e7ea13f08c32456

See more details on using hashes here.

File details

Details for the file cosmol_viewer-0.2.25-cp39-abi3-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for cosmol_viewer-0.2.25-cp39-abi3-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 9683a640ab4ddff2c6223b18c87e456975280e251e7df2dfd736efdcc1a8f2f7
MD5 75f4c56d780a9f6935ac27d4a97bc16d
BLAKE2b-256 90d2cf45ada9b3f7b244ce258e22f1b576643436d7f74229a7f334d8b6a46e5f

See more details on using hashes here.

File details

Details for the file cosmol_viewer-0.2.25-cp39-abi3-macosx_10_12_x86_64.whl.

File metadata

File hashes

Hashes for cosmol_viewer-0.2.25-cp39-abi3-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 4303cb10ddec59499d3766936f2248f3cc73df63adff4753d56dd8705b632053
MD5 690a3e8debf4444f726226ca35c570bd
BLAKE2b-256 7cc02588ad311fab9f7b368ec2643da7fc72e8f75716657b567a86d7e8957827

See more details on using hashes here.

Release history Release notifications | RSS feed

0.3.0

8 files

0.2.26

8 files

This release

0.2.25 This release

8 files

0.2.24

8 files

0.2.23

8 files

0.2.22

8 files

0.2.21

8 files

0.2.20

8 files

0.2.19

8 files

0.2.18

8 files

0.2.17

8 files

0.2.16

8 files

0.2.14

8 files

0.2.13

8 files

0.2.12

10 files

0.2.11

10 files

0.2.10

10 files

0.2.9

10 files

0.2.8

10 files

0.2.7

10 files

0.2.6

10 files

0.2.5

10 files

0.2.4

10 files

0.2.3

10 files

0.2.2

10 files

0.2.1

10 files

0.2.0

10 files

0.1.7

10 files

0.1.6

10 files

0.1.5

10 files

0.1.4

9 files

0.1.3

6 files

0.1.2

7 files

0.1.1

7 files

0.1.0

107 files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page