This release is a pre-release and may not be stable for production use.
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
interpolatemode between frames for visually pleasing playback even when input frame rate is low.
Why keep update?
updateis 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)
viewer.keep_alive()
keep_alive() waits for Enter, stdin EOF, or the native viewer process to exit,
then closes the viewer. It is a finalization step: the viewer cannot be reused
afterwards. Calling it in Jupyter or Colab raises RuntimeError.
Native viewers run in a dedicated executable bundled with the Python wheel.
No register_render() call is needed in Python. For a source development build,
see DEV.md.
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.
Metadata
Release files for cosmol-viewer 0.5.0rc3
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | Provenance | Actions |
|---|---|---|---|---|
| cosmol_viewer-0.5.0rc3.tar.gz | 3.1 MB | Without provenance | Details for cosmol_viewer-0.5.0rc3.tar.gz |
Built distributions (wheels)
Total release size: 91.6 MB
Release files / cosmol_viewer-0.5.0rc3.tar.gz
| Download URL | cosmol_viewer-0.5.0rc3.tar.gz |
|---|---|
| Size | 3.1 MB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
d240a704690b308ae9a39c249c63a625d41bfe7c7ccd28dc0ad1185cc6779f2e
|
|
BLAKE2b-256 checksum How to use checksums |
33fac8aaaca5ec6c3c2c4929af8dc5234a6f1453c05ed44e6a467cc9d5995fa0
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
maturin/1.15.0
|
Release files / cosmol_viewer-0.5.0rc3-cp39-abi3-win_amd64.whl
| Download URL | cosmol_viewer-0.5.0rc3-cp39-abi3-win_amd64.whl |
|---|---|
| Size | 13.0 MB |
| Tags | CPython 3.9 Windows x86-64 abi3 |
|
SHA-256 checksum How to use checksums |
1666699ba950da774d44b4008c1296614635e843e07ebfb4ee20846d6dba4733
|
|
BLAKE2b-256 checksum How to use checksums |
0bdad579cf3fda65a07b0b9c34611cad639425dee8a465572c6540f9a32afa86
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
maturin/1.15.0
|
Release files / cosmol_viewer-0.5.0rc3-cp39-abi3-win32.whl
| Download URL | cosmol_viewer-0.5.0rc3-cp39-abi3-win32.whl |
|---|---|
| Size | 12.7 MB |
| Tags | CPython 3.9 Windows x86-32 abi3 |
|
SHA-256 checksum How to use checksums |
fa7c04739777e6cf7dd7b104c85d5b69e3f1bda33b70d18d1d443db66b10959c
|
|
BLAKE2b-256 checksum How to use checksums |
b6a5800f412a926393e45a88ea7b51cd3f5216ace31b133dde1757038e7ba2bf
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
maturin/1.15.0
|
Release files / cosmol_viewer-0.5.0rc3-cp39-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
| Download URL | cosmol_viewer-0.5.0rc3-cp39-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl |
|---|---|
| Size | 13.5 MB |
| Tags | CPython 3.9 Linux glibc 2.17+ x86-64 abi3 |
|
SHA-256 checksum How to use checksums |
b887ca06cb6995d9d8f13e382519258593ce3eeecc898b9752256474b23260b8
|
|
BLAKE2b-256 checksum How to use checksums |
d25b167cbe1bc4394710d18169446f0a748d8c35e98df6f9f16e4337037d18ca
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
maturin/1.15.0
|
Release files / cosmol_viewer-0.5.0rc3-cp39-abi3-manylinux_2_17_i686.manylinux2014_i686.whl
| Download URL | cosmol_viewer-0.5.0rc3-cp39-abi3-manylinux_2_17_i686.manylinux2014_i686.whl |
|---|---|
| Size | 14.1 MB |
| Tags | CPython 3.9 Linux glibc 2.17+ x86-32 abi3 |
|
SHA-256 checksum How to use checksums |
8b23b97c1ace31c0e0cb3e9af6855212669a608435aeaf29d5381408dbfb90f4
|
|
BLAKE2b-256 checksum How to use checksums |
5ae9cea00a7a26f1a42f399c1d3ee814d2e449ee7cbfb8adb854705c6b52df72
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
maturin/1.15.0
|
Release files / cosmol_viewer-0.5.0rc3-cp39-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
| Download URL | cosmol_viewer-0.5.0rc3-cp39-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl |
|---|---|
| Size | 13.0 MB |
| Tags | CPython 3.9 Linux glibc 2.17+ ARM64 abi3 |
|
SHA-256 checksum How to use checksums |
09de24cf3e318e41d1c243b5b8835dedb917ff9048a9195d0373fb853097dbf0
|
|
BLAKE2b-256 checksum How to use checksums |
c9472afd38738e4251522c24ebbe9b50b7421d530452b03b8db93c18dc33a407
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
maturin/1.15.0
|
Release files / cosmol_viewer-0.5.0rc3-cp39-abi3-macosx_11_0_arm64.whl
| Download URL | cosmol_viewer-0.5.0rc3-cp39-abi3-macosx_11_0_arm64.whl |
|---|---|
| Size | 10.8 MB |
| Tags | CPython 3.9 abi3 macOS 11.0+ ARM64 |
|
SHA-256 checksum How to use checksums |
328b58894221ff1435f5ef5a501abab34ffb5884c3860eaa182ade5eec66dc5f
|
|
BLAKE2b-256 checksum How to use checksums |
d280c8f05255149ffe5836f77334d6013be9da23809d2b4e459a2e8470053924
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
maturin/1.15.0
|
Release files / cosmol_viewer-0.5.0rc3-cp39-abi3-macosx_10_12_x86_64.whl
| Download URL | cosmol_viewer-0.5.0rc3-cp39-abi3-macosx_10_12_x86_64.whl |
|---|---|
| Size | 11.4 MB |
| Tags | CPython 3.9 abi3 macOS 10.12+ x86-64 |
|
SHA-256 checksum How to use checksums |
78d618442d4f6e1c7091bb12cadaad6ebc296b24fbb25e3e316b50043223c848
|
|
BLAKE2b-256 checksum How to use checksums |
a4cdaa31546a590e3573b2265c4ab742f6fa65423d312a04f2f05daec4e02ed2
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
maturin/1.15.0
|
Security for cosmol-viewer 0.5.0rc3
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
No provenance found
None of the files in this release were uploaded with provenance metadata.
A note on package security
PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.
To learn more about protecting yourself from malicious actors, visit our package security documentation.