WGPU-based 3d viewer
Project description
Octarine is the eighth color of the Discworld's spectrum, which is described as the color of magic itself. Only wizards and cats can see it.
Octarine
A minimalist, easy-to-use, high-performance 3D viewer. Octarine
is build on top of the excellent
pygfx
WGPU rendering engine which does most of the heavy lifting - we're simply
abstracting away some of the boiler plate code for you.
Rationale :thought_balloon:
Why another 3D viewer? There are plenty options out there:
vedo
, ipygany
, polyscope
, napari
, fury
, plotly
or pyvista
to name but a few. All of these are great in their own right but I wanted something (a) without heavy dependencies (i.e. no VTK), (b) that lets me interactively explore my data in both REPL and Jupyter and (c) is very performant. None of the existing solutions ticked all those boxes for me.
Octarine
tries to fill that gap:
- Lightweight with very few direct or indirect dependencies.
- Works in both Jupyter and REPL.
- High performance: a mesh with 15M faces renders with 80 fps at 1080p on a 2023 MacBook Pro.
Installation :rocket:
pip install octarine3d[all]
This will install the minimal requirements plus PySide6
and jupyter_rfb
as window managers for IPython/shell
and Jupyter, respectively. Check out the Install Instructions
for details.
Status :ballot_box_with_check:
All basic components have been implemented but this is a very young project, which means that the API can still change with each version. We'd love for you to take it for a spin and let us know what you think though!
Quickstart :fire:
# Create a Viewer instance
from octarine import Viewer
v = Viewer()
# Add random points as scatter
import numpy as np
points = np.random.rand(10, 3) # 10 random points
v.add(points)
# Clear scene
v.clear()
# Add a mesh (see also `Viewer.add_mesh`)
import pygfx as gfx
m = gfx.geometries.mobius_strip_geometry()
v.add(m, color='b')
# Close the viewer
v.close()
[!NOTE] The above example will work in interactive environments such as IPython and Jupyter. When using from the standard REPL or when running as a script you will have to additionally start the event loop. Please see corresponding the section in the Introduction.
Want to learn more?
Head over to the Documentation!
Want to contribute?
We welcome all kinds of contributions. For example:
- reports of bugs, broken examples, etc.
- feature requests
- pull requests with bug fixes or new features
If you already know what needs doing, feel free to open a pull request right away. When in doubt please open an issue so we can discuss the best way to address the issue.
Development :dash:
Tests
TODO
Docs
To generate the documentation:
pip install -e .[docs]
mkdocs build
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
File details
Details for the file octarine3d-0.2.5.tar.gz
.
File metadata
- Download URL: octarine3d-0.2.5.tar.gz
- Upload date:
- Size: 39.1 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/5.1.1 CPython/3.9.19
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 913c97cf0a3787d5b8dacb9d1e105c6dd2608e019ea9d9e37c36b2aa9c68597e |
|
MD5 | cc8a2740a066d1507ee68379379a973c |
|
BLAKE2b-256 | 5e25a32a6bbff8875b3be95231b745f0562f80288f70c4962f48218900c1b0d6 |
File details
Details for the file octarine3d-0.2.5-py3-none-any.whl
.
File metadata
- Download URL: octarine3d-0.2.5-py3-none-any.whl
- Upload date:
- Size: 39.7 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/5.1.1 CPython/3.9.19
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | d2c58ad5a0170f602091ce56f85030091e6cd924a4af72c172de5be3a19dd3ee |
|
MD5 | 2891077a520fc8afb86c1a48a23a488d |
|
BLAKE2b-256 | 1b838f5089c458804e4254e76ba9289e7499341a8be0284f3fe9bdf1fe7ff992 |