Anywidget wrapper for three.js
Project description
anythreejs
A Python / Three.js bridge for Jupyter notebooks, built on anywidget.
This comes out of the need to have a lightweight wrapper around Three.js which is easy to maintain and extend, while being compatible with existing codebases using pythreejs.
Installation
pip install anythreejs
Quick Start
from anythreejs import (
Renderer,
Scene,
PerspectiveCamera,
OrbitControls,
Mesh,
BoxGeometry,
MeshStandardMaterial,
AmbientLight,
DirectionalLight,
)
# Create a scene
scene = Scene(
children=[
Mesh(
geometry=BoxGeometry(1, 1, 1),
material=MeshStandardMaterial(color="#ff0c0cff", roughness=0.4),
),
AmbientLight(intensity=0.4),
DirectionalLight(position=[5, 5, 5], intensity=1),
],
background="#e5e5faff",
)
camera = PerspectiveCamera(position=[3, 3, 3])
controls = OrbitControls(controlling=camera)
# Display the widget (renderer is the widget)
renderer = Renderer(
camera=camera,
scene=scene,
controls=[controls],
width=700,
height=450,
)
renderer
API Overview
anythreejs provides a subset of Three.js objects as Python classes. Currently we only cover the parts used by plopp. We should ideally automatically generate these classes from the Three.js documentation in the future.
Renderer Options
Renderer(
scene=scene, # Scene object
camera=camera, # Camera object
controls=[controls], # Controls list (e.g., OrbitControls)
width=800, # Canvas width in pixels
height=600, # Canvas height in pixels
antialias=True, # Enable antialiasing
alpha=False, # Canvas transparency
)
Interaction
Click Events
import anythreejs as p3
renderer = p3.Renderer(camera=camera, scene=scene, controls=[controls])
def handle_click(change):
info = change.get("new", {})
if info:
print(f"Clicked: {info.get('name')} at {info.get('point')}")
renderer.observe(handle_click, names=["_click_info"])
renderer
pythreejs Compatibility
anythreejs tries to be API-compatible with the original pythreejs. For projects that already use pythreejs
(like plopp), you can switch with minimal changes:
# Instead of:
# import pythreejs as p3
# Use:
import anythreejs as p3
Example (pythreejs-style usage)
import anythreejs as p3
# Create camera
camera = p3.PerspectiveCamera(aspect=800/600)
camera.position = [5, 5, 5]
# Create scene
axes = p3.AxesHelper()
scene = p3.Scene(children=[camera, axes], background="#f0f0f0")
# Create controls
controls = p3.OrbitControls(controlling=camera)
# Create renderer (this is the widget)
renderer = p3.Renderer(
camera=camera,
scene=scene,
controls=[controls],
width=800,
height=600,
)
# Add objects dynamically
mesh = p3.Mesh(
geometry=p3.BoxGeometry(1, 1, 1),
material=p3.MeshStandardMaterial(color="#ff0000"),
)
scene.add(mesh)
# Display
renderer
Credits
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
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file anythreejs-0.0.1.tar.gz.
File metadata
- Download URL: anythreejs-0.0.1.tar.gz
- Upload date:
- Size: 18.6 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: uv/0.9.17 {"installer":{"name":"uv","version":"0.9.17","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
85510082a5e745b8d83d9c195830377d6936370212c391dbc76f45652b1d2d9a
|
|
| MD5 |
e11b042dab867bf5c0d68ccf6c9250f1
|
|
| BLAKE2b-256 |
a45396dc48b440c3033d9a861ec6c27fc0afbf2d2bac242fa23de6d6525d4544
|
File details
Details for the file anythreejs-0.0.1-py3-none-any.whl.
File metadata
- Download URL: anythreejs-0.0.1-py3-none-any.whl
- Upload date:
- Size: 25.4 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: uv/0.9.17 {"installer":{"name":"uv","version":"0.9.17","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
06f0dcf8c596476c822017a9f5138b655196f0cab35c7ba83815a509249b5220
|
|
| MD5 |
c4422bf7df069accacce117b18673d71
|
|
| BLAKE2b-256 |
959141ca04964243ebdb91011b6bfb37ca437b11b8c17ee88ef3afe3317c4ea4
|