Generated, typed, autocompletable Python API for composing Mitsuba scenes.
Project description
Mitsuba Scene Description (MSD)
Disclaimer: Expect rough edges and frequent changes to the API.
Typed, autocompletable Python dataclasses for composing Mitsuba 3 scenes programmatically.
Build a scene with normal Python objects and call mi.load_dict(scene.to_dict()) to render.
The plugin classes are generated at install time by scraping the official Mitsuba plugin reference, so they always match your installed Mitsuba version.
Installation
pip install mitsuba-scene-description
During installation the build hook detects your Mitsuba version and generates typed classes for every plugin in the docs. The version is resolved in this order:
| Priority | Source | Example |
|---|---|---|
| 1 | MITSUBA_VERSION env var |
MITSUBA_VERSION=3.7.1 pip install . |
| 2 | Installed mitsuba package |
automatic if mitsuba is already installed |
| 3 | Built-in fallback (3.7.1) |
no extra setup needed |
Development install
pip install -e .
Usage
import mitsuba_scene_description as msd
import mitsuba as mi
mi.set_variant("llvm_ad_rgb")
# Define components
diffuse = msd.SmoothDiffuseMaterial(reflectance=msd.RGB([0.8, 0.2, 0.2]))
ball = msd.Sphere(
radius=1.0,
bsdf=diffuse,
to_world=msd.Transform().translate(0, 0, 3).scale(0.4),
)
cam = msd.PerspectivePinholeCamera(
fov=45,
to_world=msd.Transform().look_at(
origin=[0, 1, -6], target=[0, 0, 0], up=[0, 1, 0]
),
)
integrator = msd.PathTracer()
emitter = msd.ConstantEnvironmentEmitter()
Constructing scenes
Pass components directly to Scene:
scene = msd.Scene(
integrator=integrator,
sensors=cam, # also accepts a list for multi-sensor setups
shapes={"ball": ball},
emitters={"sun": emitter},
)
Or use the fluent SceneBuilder:
scene = (
msd.SceneBuilder()
.integrator(integrator)
.sensor(cam)
.shape("ball", ball)
.emitter("sun", emitter)
.build()
)
Rendering
mi_scene = mi.load_dict(scene.to_dict())
rndr = mi.render(mi_scene)
mi.util.write_bitmap("test.png", rndr)
scene.to_dict() produces a plain dict ready for mi.load_dict:
{'ball': {'bsdf': {'reflectance': {'type': 'rgb', 'value': [0.8, 0.2, 0.2]},
'type': 'diffuse'},
'radius': 1.0,
'to_world': Transform[
matrix=[[0.4, 0, 0, 0],
[0, 0.4, 0, 0],
[0, 0, 0.4, 1.2],
[0, 0, 0, 1]],
...
],
'type': 'sphere'},
'integrator': {'type': 'path'},
'sensor': {'fov': 45,
'to_world': Transform[...],
'type': 'perspective'},
'sun': {'type': 'constant'},
'type': 'scene'}
Core types
| Type | Description |
|---|---|
Plugin |
Base dataclass for all plugins |
Scene |
Top-level scene container |
SceneBuilder |
Fluent builder for Scene |
Transform |
Chainable affine transform builder (translate, scale, rotate, look_at, matrix) |
ProjectiveTransform |
Extends Transform with perspective/orthographic (Mitsuba >= 3.7) |
RGB |
RGB color value |
Ref |
Reference to a named asset |
Generated plugin categories
Every Mitsuba plugin category gets its own module with a typed dataclass per plugin:
BSDFs, Emitters, Films, Integrators, Media, Phase functions, Reconstruction filters, Samplers, Sensors, Shapes, Spectra, Textures, Volumes.
All classes are re-exported from mitsuba_scene_description, so msd.Sphere, msd.PathTracer, etc. work directly.
Running the generator manually
If you want to regenerate the API outside of the build process:
pip install requests beautifulsoup4
python generator/generate_mitsuba_api.py --out mitsuba_scene_description
Pass --overview <url> to target a specific docs version.
License
MIT
Project details
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 mitsuba_scene_description-0.2.0.tar.gz.
File metadata
- Download URL: mitsuba_scene_description-0.2.0.tar.gz
- Upload date:
- Size: 33.4 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: uv/0.10.0 {"installer":{"name":"uv","version":"0.10.0","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Pop!_OS","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
28b55937c6b3b8403b5b7eff07cab1f2698b40b29524c1def30d9b39a82715ad
|
|
| MD5 |
d49c2245484aa48e5056484a2400b4f4
|
|
| BLAKE2b-256 |
899a4ae095eb20a6fc3a9940611363f0bde2f0dd440bd8c133473b451d40a970
|
File details
Details for the file mitsuba_scene_description-0.2.0-py3-none-any.whl.
File metadata
- Download URL: mitsuba_scene_description-0.2.0-py3-none-any.whl
- Upload date:
- Size: 35.4 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: uv/0.10.0 {"installer":{"name":"uv","version":"0.10.0","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Pop!_OS","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
fa79d07e82cac597637291835a7148cb0b9595378d5eb9ed3fa47cf964d7b09c
|
|
| MD5 |
8fc7b9800fc0e79a7788df665b9e5b6b
|
|
| BLAKE2b-256 |
1324807ce6a1d2fd6785fcd96b07e13da6b2f58c6a63950388c0050f86896565
|