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.

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.24.tar.gz (154.6 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.24-cp39-abi3-win_amd64.whl (7.5 MB view details)

Uploaded CPython 3.9+Windows x86-64

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

Uploaded CPython 3.9+Windows x86

cosmol_viewer-0.2.24-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.24-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.24-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.24-cp39-abi3-macosx_11_0_arm64.whl (7.0 MB view details)

Uploaded CPython 3.9+macOS 11.0+ ARM64

cosmol_viewer-0.2.24-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.24.tar.gz.

File metadata

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

File hashes

Hashes for cosmol_viewer-0.2.24.tar.gz
Algorithm Hash digest
SHA256 ccdd8801440ddef932c72e44344ae649cf405ba067008f90458f3a871ebeb7d5
MD5 2612da67fc755aec3696c47f76e9e22e
BLAKE2b-256 0cf18920712f1f675fcd7f01930d9b9cc5513894df564a29add48ac1dd9f8ec2

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for cosmol_viewer-0.2.24-cp39-abi3-win_amd64.whl
Algorithm Hash digest
SHA256 2b9c97e3e184f9d48c79135883ce009aad8e506491081d8efb840e4fc2376172
MD5 4195865e62cf998a95a2b61d57a5354d
BLAKE2b-256 b28e3bdc51f290735fb10b9eb4a998b997915628a260d3ece05fc4cac85466fe

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for cosmol_viewer-0.2.24-cp39-abi3-win32.whl
Algorithm Hash digest
SHA256 2b46eddddbc6a42530790e1b08cea0d1dd4032708c22e1e74e682db21e938cb6
MD5 66309653ee61e5fb2fef34d56b6add1b
BLAKE2b-256 79fce4e5c478f9e6280502c18325ad0245100ff92403a7b1cd16c56d8b719ad1

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for cosmol_viewer-0.2.24-cp39-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 677a909c3e6c77f20686c8e063f777d1f8883654140b7dfc1c4a4a6656b50395
MD5 7ce5dd30782f69d346009189e8fbd1cc
BLAKE2b-256 6d5d36b4c34fc7fd4d2c2702923c7c29a0dbf7321c0522134e43be40edd5300f

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for cosmol_viewer-0.2.24-cp39-abi3-manylinux_2_17_i686.manylinux2014_i686.whl
Algorithm Hash digest
SHA256 fb542e67815cda51afa82296cc043cfec1aafdeef2fc9fdaec836455e0376670
MD5 4e78023ea5b1cbce7b763506d0088970
BLAKE2b-256 3ea3d680822976f9e8f57bf87df708683f6f3758a8650d095a0ef27c6534ec26

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for cosmol_viewer-0.2.24-cp39-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 9f192fcc1ab086466a9ee1cc464efe9e77ccad70255d0a46b95bb180bb7a4ba4
MD5 407c20d0ab9ae06fd49d55e0c75bf0b1
BLAKE2b-256 8655bb4d2b6fcd2951105a6c1b1beebef738e09f14c1fff1a096011502d04e03

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for cosmol_viewer-0.2.24-cp39-abi3-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 ce43f5d547f47d79b7b4bfbcc7cea7eb3d71241b41f026d4405bf4927b41f378
MD5 ef14a1421c226b1b6677a23a8bca4135
BLAKE2b-256 47e1f7f1f450dc3686382279ff519756dcf5e9fb4b025aaaf914b131749359a2

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for cosmol_viewer-0.2.24-cp39-abi3-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 2171ad7484ceae64d33eeb7bd7067f2a5fd729fc4696ae52f81ad7c96debf8f5
MD5 b7cf77ea2ec87a3a7e3028ba2e034552
BLAKE2b-256 21507e43f46ea4241584b98f3bfac5a608781e1a536a08833f8645d240028879

See more details on using hashes here.

Release history Release notifications | RSS feed

0.3.0

8 files

0.2.26

8 files

0.2.25

8 files

This release

0.2.24 This release

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