bpy-widget


Namebpy-widget JSON
Version 0.1.1 PyPI version JSON
download
home_pageNone
SummaryInteractive Blender 3D viewport widget for notebooks with real-time Eevee Next rendering.
upload_time2025-11-08 20:01:56
maintainerNone
docs_urlNone
authorNone
requires_python>=3.11
licenseMIT
keywords 3d blender cycles eevee jupyter marimo notebook rendering visualization widget
VCS
bugtrack_url
requirements No requirements were recorded.
Travis-CI No Travis.
coveralls test coverage No coveralls.
            # bpy-widget

Interactive Blender 3D viewport widget for Jupyter notebooks with real-time rendering powered by Blender 4.5+.

![Python](https://img.shields.io/badge/Python-3.11+-blue.svg)
![Blender](https://img.shields.io/badge/Blender-4.5.4+-orange.svg)
[![PyPI](https://img.shields.io/pypi/v/bpy-widget.svg)](https://pypi.org/project/bpy-widget/)
![License](https://img.shields.io/badge/License-MIT-yellow.svg)
![Vulkan](https://img.shields.io/badge/Vulkan-Supported-purple.svg)

[![GitHub](https://img.shields.io/badge/GitHub-Repository-black?logo=github)](https://github.com/bjoernbethge/bpy-widget)
[![Issues](https://img.shields.io/badge/GitHub-Issues-blue?logo=github)](https://github.com/bjoernbethge/bpy-widget/issues)

## Features

- 🎨 **Interactive 3D Viewport** - Real-time camera controls with mouse/touch gestures
- ⚑ **EEVEE Next & Cycles** - Switch between render engines on the fly  
- πŸš€ **Vulkan Backend** - High-performance GPU acceleration (Blender 4.5+)
- 🎬 **Post-Processing** - Bloom, vignette, color correction, depth of field, and more
- πŸ“Š **Data Visualization** - Import CSV/Parquet data as 3D objects (point clouds, curves)
- πŸ”„ **Live Updates** - Changes render immediately with optimized debouncing
- πŸ“¦ **Import/Export** - Support for GLTF, USD, Alembic formats
- 🧩 **Extension Management** - Manage Blender extensions and addons (Blender 4.2+)

## Installation

```bash
uv add bpy-widget
```

**Requirements:**
- Python 3.11+ (required by Blender 4.5)
- Blender 4.5.4+ as Python module (installed automatically via pip)

**Optional:**
- Modern GPU with [Vulkan](https://www.vulkan.org/) support (for improved performance with `VULKAN` backend)
  - **NVIDIA**: Driver 550+ (see [NVIDIA Vulkan Drivers](https://www.nvidia.com/Download/index.aspx))
  - **AMD**: Latest drivers recommended
  - **Intel Arc**: Supported on modern Intel GPUs

## Quick Start

```python
from bpy_widget import BpyWidget

# Create widget
widget = BpyWidget(width=800, height=600)

# Enable Vulkan for better performance (Blender 4.5+)
widget.set_gpu_backend("VULKAN")

# Display in notebook (Jupyter/Marimo)
widget
```

The widget automatically initializes with a test scene. You can interact with it immediately:
- **Drag** to rotate camera
- **Scroll** to zoom  
- **Touch** gestures on mobile

**Performance:** Vulkan backend provides 10-15% faster rendering compared to OpenGL.

## Detailed Usage

### Scene Setup

```python
# Clear and setup new scene
widget.clear_scene()
widget.setup_lighting(sun_energy=3.0, add_fill_light=True)
widget.setup_world_background(color=(0.05, 0.05, 0.1))

# Create objects
cube = widget.create_test_cube(location=(0, 0, 0))
suzanne = widget.create_suzanne(location=(0, 0, 2))
torus = widget.create_torus(location=(3, 0, 0))
```

### Material System

```python
# Use material presets
gold_mat = widget.create_preset_material("MyGold", "gold")
glass_mat = widget.create_preset_material("MyGlass", "glass")

# Or create custom materials
custom = widget.create_material(
    "Custom",
    base_color=(0.8, 0.2, 0.2),
    metallic=0.5,
    roughness=0.4,
    emission_strength=0.1
)

# Apply to objects
widget.assign_material(suzanne, gold_mat)
```

Available presets: `gold`, `silver`, `copper`, `chrome`, `glass`, `water`, `diamond`, `rubber`, `plastic`, `wood`, `concrete`, `neon_red`, `neon_blue`, `neon_green`

### Data Import

```python
# Import point cloud
widget.import_data("data.csv", as_type="points", point_size=0.1)

# Import as curve
widget.import_data("timeseries.csv", as_type="curve")

# Import multiple series
widget.import_data(
    "multi_series.csv", 
    as_type="series",
    value_columns=["col1", "col2", "col3"]
)

# Batch import
widget.batch_import(["*.csv", "*.parquet"], as_type="points")
```

### Post-Processing Effects

```python
# Setup compositor with effects
widget.setup_extended_compositor()

# Add individual effects
widget.add_bloom_glare(intensity=0.8, threshold=0.8)
widget.add_color_correction(brightness=0.1, contrast=0.1, saturation=1.1)
widget.add_vignette(amount=0.2)
widget.add_film_grain(amount=0.03)
widget.add_chromatic_aberration(amount=0.001)
widget.add_sharpen(amount=0.1)

# Camera effects
widget.add_depth_of_field(focus_distance=5.0, fstop=2.8)
widget.add_motion_blur(samples=8, shutter=0.5)
```

### Import/Export 3D Formats

```python
# GLTF/GLB
objects = widget.import_gltf("model.glb")
widget.export_gltf("output.glb")

# USD/USDZ
objects = widget.import_usd("scene.usd")
widget.export_usd("output.usd")

# Alembic
objects = widget.import_alembic("animation.abc")
widget.export_alembic("output.abc")

# Scene as Parquet (for data analysis)
widget.export_scene_as_parquet("scene_data.parquet")
objects = widget.import_scene_from_parquet("scene_data.parquet")
```

### Extension Management (Blender 4.5+)

```python
# List repositories and extensions
repos = widget.list_repositories()
extensions = widget.list_extensions()

# Enable/disable extensions (by package ID)
widget.enable_extension("molecularnodes")  # Auto-finds repository
widget.disable_extension("molecularnodes")

# Or specify repository module explicitly
widget.enable_extension("molecularnodes", repo_module="bl_ext")

# Install extension (universal method - handles ID, URL, or file)
widget.install_extension("molecularnodes")  # Install by package ID (searches online)

# Install from URL
widget.install_extension(
    "https://extensions.blender.org/download/...",
    pkg_id="molecularnodes"
)

# Install from local file
widget.install_extension("/path/to/extension.zip", pkg_id="my_extension")

# Or use dedicated file installer
widget.install_extension_from_file("my_extension.zip")

# Sync and upgrade
widget.sync_repositories()  # Sync all repositories
widget.upgrade_extensions()  # Upgrade all extensions
widget.upgrade_extensions(active_only=True)  # Upgrade only active extensions

# Legacy addon support (pre-4.2 addons)
legacy_addons = widget.list_legacy_addons()
widget.enable_legacy_addon("space_view3d_copy_attributes")
```

### Performance Settings

```python
# Enable Vulkan backend for improved performance (Blender 4.5+)
widget.set_gpu_backend("VULKAN")  # or "OPENGL" (default)
print(f"Current backend: {widget.get_gpu_backend()}")  # VULKAN

# Switch render engines
widget.set_render_engine("CYCLES")  # or "BLENDER_EEVEE_NEXT"
widget.render_device = "GPU"  # For Cycles (requires GPU support)

# Adjust resolution
widget.set_resolution(1920, 1080)

# Optimize for speed
widget.scene.eevee.taa_render_samples = 8
widget.scene.eevee.use_raytracing = False
```

**Performance Tips:**
- Use **Vulkan backend** for 10-15% faster rendering with EEVEE Next
- **EEVEE Next** is faster for interactive work (~200ms at 512x512)
- **Cycles** provides higher quality but is slower (suitable for final renders)
- Lower resolution for interactive editing, increase for final output

## Convenience Properties

Access Blender internals directly without `bpy.context`:

```python
# Scene access
scene = widget.scene
scene.frame_set(1)
scene.render.fps = 30

# Context access (for advanced operations)
widget.context.view_layer.update()

# Data access
objects = widget.objects  # bpy.data.objects
materials = widget.data.materials  # bpy.data.materials

# Camera access
camera = widget.camera  # bpy.context.scene.camera

# Active object
active = widget.active_object  # bpy.context.active_object
selected = widget.selected_objects  # bpy.context.selected_objects

# Operations access
widget.ops.mesh.primitive_uv_sphere_add(location=(0, 0, 5))
widget.data.objects["Sphere"].scale = (2, 2, 2)
```

**Note:** These properties work in headless Blender environments and safely handle cases where UI contexts aren't available.

## Development

```bash
# Clone repository
git clone https://github.com/bjoernbethge/bpy-widget.git
cd bpy-widget

# Install with dev dependencies
uv sync --dev

# Run example notebooks (set PYTHONPATH for local development)
# PowerShell:
$env:PYTHONPATH = "D:\bpy-widget\src"; uv run marimo edit examples/basic_usage.py

# Bash:
export PYTHONPATH="$(pwd)/src" && uv run marimo edit examples/basic_usage.py

# Frontend development with HMR
cd frontend
npm install
npm run dev  # Starts Vite dev server on localhost:5173

# In another terminal, run notebook with HMR enabled:
$env:ANYWIDGET_HMR="1"; $env:PYTHONPATH="D:\bpy-widget\src"; uv run marimo edit examples/basic_usage.py
```

See `examples/` directory for complete usage examples.

## Examples

See the `examples/` directory for complete working examples:

- `simple_widget.py` - Minimal example to get started quickly
- `basic_usage.py` - Interactive notebook with all features (materials, post-processing, scene controls, Vulkan)
- `data_import.py` - Data visualization with CSV/Parquet import as point clouds and curves

## API Reference

### Core Methods

**Rendering:**
- `widget.set_gpu_backend("VULKAN")` - Set GPU backend (VULKAN/OPENGL)
- `widget.get_gpu_backend()` - Get current GPU backend
- `widget.set_render_engine("BLENDER_EEVEE_NEXT")` - Set render engine
- `widget.set_resolution(width, height)` - Set render resolution
- `widget.render()` - Force immediate render

**Scene Management:**
- `widget.clear_scene()` - Clear all objects
- `widget.setup_lighting()` - Setup default lighting
- `widget.setup_world_background(color, strength)` - Set world background

**Objects:**
- `widget.create_test_cube()`, `create_suzanne()`, `create_torus()`, etc.
- `widget.import_gltf()`, `import_usd()`, `import_alembic()` - Import 3D files

**Materials:**
- `widget.create_material()` - Create custom material
- `widget.create_preset_material()` - Use material presets
- `widget.assign_material()` - Apply material to object

**Data Import:**
- `widget.import_data()` - Import CSV/Parquet as points or curves
- `widget.batch_import()` - Import multiple files

## Troubleshooting

### Import Errors
- Ensure Python 3.11 is installed (required by Blender 4.5)
- Check `bpy` module: `pip show bpy` (should be 4.5.x)

### Rendering Issues
- **EEVEE Next** requires OpenGL or Vulkan support (Vulkan recommended for better performance)
- For headless servers without GPU: `widget.set_render_engine("CYCLES")` and `widget.render_device = "CPU"`
- If Vulkan rendering fails, fallback to OpenGL: `widget.set_gpu_backend("OPENGL")`

### GPU Backend
- Vulkan backend requires compatible GPU drivers:
  - **NVIDIA**: [Driver 550+](https://www.nvidia.com/Download/index.aspx)
  - **AMD**: [Latest drivers](https://www.amd.com/en/support)
  - **Intel Arc**: [Supported GPUs](https://www.intel.com/content/www/us/en/products/docs/discrete-gpus/arc/software/vulkan.html)
- If Vulkan is unavailable, OpenGL is used automatically
- Check current backend: `widget.get_gpu_backend()`
- Learn more: [Vulkan API](https://www.vulkan.org/), [Blender Vulkan Support](https://developer.blender.org/docs/release_notes/4.5/eevee/)

### Material Colors
- Always use RGB or RGBA tuples: `(1.0, 0.5, 0.0)` or `(1.0, 0.5, 0.0, 1.0)`
- Values should be 0.0-1.0 range

## Version

Current version: **0.1.1**

## License

MIT License - see LICENSE file for details.

## Credits

Built with:
- [Blender](https://www.blender.org/) - 3D creation suite (4.5.4+)
- [anywidget](https://anywidget.dev/) - Custom Jupyter widgets
- [Vulkan API](https://www.vulkan.org/) - High-performance GPU rendering

## Related Links

**Project:**
- [GitHub Repository](https://github.com/bjoernbethge/bpy-widget) - Source code and issues
- [PyPI Package](https://pypi.org/project/bpy-widget/) - Install from PyPI
- [Report Issues](https://github.com/bjoernbethge/bpy-widget/issues) - Bug reports and feature requests

**Documentation & Resources:**
- [Blender Documentation](https://docs.blender.org/) - Official Blender docs
- [Blender 4.5 Release Notes](https://www.blender.org/download/releases/4-5/) - What's new in Blender 4.5
- [Blender Python API](https://docs.blender.org/api/current/) - bpy API reference
- [Vulkan API Documentation](https://www.vulkan.org/learn) - Learn about Vulkan
- [anywidget Documentation](https://anywidget.dev/) - Widget framework docs

**GPU Driver Downloads (for Vulkan support):**
- [NVIDIA Drivers](https://www.nvidia.com/Download/index.aspx) - Driver 550+ required for Vulkan
- [AMD Drivers](https://www.amd.com/en/support) - Latest drivers recommended
- [Intel Arc Drivers](https://www.intel.com/content/www/us/en/download/726609/intel-arc-graphics-windows-dch-driver.html) - For Intel Arc GPUs
- [Vulkan Hardware Database](https://vulkan.gpuinfo.org/) - Check GPU Vulkan support

            

Raw data

            {
    "_id": null,
    "home_page": null,
    "name": "bpy-widget",
    "maintainer": null,
    "docs_url": null,
    "requires_python": ">=3.11",
    "maintainer_email": null,
    "keywords": "3d, blender, cycles, eevee, jupyter, marimo, notebook, rendering, visualization, widget",
    "author": null,
    "author_email": "Bj\u00f6rn Bethge <bjoern.bethge@gmail.com>",
    "download_url": "https://files.pythonhosted.org/packages/2f/0b/f4755eb86e956205d6aa45d5564df83f268f894224484c7f4632e898e885/bpy_widget-0.1.1.tar.gz",
    "platform": null,
    "description": "# bpy-widget\n\nInteractive Blender 3D viewport widget for Jupyter notebooks with real-time rendering powered by Blender 4.5+.\n\n![Python](https://img.shields.io/badge/Python-3.11+-blue.svg)\n![Blender](https://img.shields.io/badge/Blender-4.5.4+-orange.svg)\n[![PyPI](https://img.shields.io/pypi/v/bpy-widget.svg)](https://pypi.org/project/bpy-widget/)\n![License](https://img.shields.io/badge/License-MIT-yellow.svg)\n![Vulkan](https://img.shields.io/badge/Vulkan-Supported-purple.svg)\n\n[![GitHub](https://img.shields.io/badge/GitHub-Repository-black?logo=github)](https://github.com/bjoernbethge/bpy-widget)\n[![Issues](https://img.shields.io/badge/GitHub-Issues-blue?logo=github)](https://github.com/bjoernbethge/bpy-widget/issues)\n\n## Features\n\n- \ud83c\udfa8 **Interactive 3D Viewport** - Real-time camera controls with mouse/touch gestures\n- \u26a1 **EEVEE Next & Cycles** - Switch between render engines on the fly  \n- \ud83d\ude80 **Vulkan Backend** - High-performance GPU acceleration (Blender 4.5+)\n- \ud83c\udfac **Post-Processing** - Bloom, vignette, color correction, depth of field, and more\n- \ud83d\udcca **Data Visualization** - Import CSV/Parquet data as 3D objects (point clouds, curves)\n- \ud83d\udd04 **Live Updates** - Changes render immediately with optimized debouncing\n- \ud83d\udce6 **Import/Export** - Support for GLTF, USD, Alembic formats\n- \ud83e\udde9 **Extension Management** - Manage Blender extensions and addons (Blender 4.2+)\n\n## Installation\n\n```bash\nuv add bpy-widget\n```\n\n**Requirements:**\n- Python 3.11+ (required by Blender 4.5)\n- Blender 4.5.4+ as Python module (installed automatically via pip)\n\n**Optional:**\n- Modern GPU with [Vulkan](https://www.vulkan.org/) support (for improved performance with `VULKAN` backend)\n  - **NVIDIA**: Driver 550+ (see [NVIDIA Vulkan Drivers](https://www.nvidia.com/Download/index.aspx))\n  - **AMD**: Latest drivers recommended\n  - **Intel Arc**: Supported on modern Intel GPUs\n\n## Quick Start\n\n```python\nfrom bpy_widget import BpyWidget\n\n# Create widget\nwidget = BpyWidget(width=800, height=600)\n\n# Enable Vulkan for better performance (Blender 4.5+)\nwidget.set_gpu_backend(\"VULKAN\")\n\n# Display in notebook (Jupyter/Marimo)\nwidget\n```\n\nThe widget automatically initializes with a test scene. You can interact with it immediately:\n- **Drag** to rotate camera\n- **Scroll** to zoom  \n- **Touch** gestures on mobile\n\n**Performance:** Vulkan backend provides 10-15% faster rendering compared to OpenGL.\n\n## Detailed Usage\n\n### Scene Setup\n\n```python\n# Clear and setup new scene\nwidget.clear_scene()\nwidget.setup_lighting(sun_energy=3.0, add_fill_light=True)\nwidget.setup_world_background(color=(0.05, 0.05, 0.1))\n\n# Create objects\ncube = widget.create_test_cube(location=(0, 0, 0))\nsuzanne = widget.create_suzanne(location=(0, 0, 2))\ntorus = widget.create_torus(location=(3, 0, 0))\n```\n\n### Material System\n\n```python\n# Use material presets\ngold_mat = widget.create_preset_material(\"MyGold\", \"gold\")\nglass_mat = widget.create_preset_material(\"MyGlass\", \"glass\")\n\n# Or create custom materials\ncustom = widget.create_material(\n    \"Custom\",\n    base_color=(0.8, 0.2, 0.2),\n    metallic=0.5,\n    roughness=0.4,\n    emission_strength=0.1\n)\n\n# Apply to objects\nwidget.assign_material(suzanne, gold_mat)\n```\n\nAvailable presets: `gold`, `silver`, `copper`, `chrome`, `glass`, `water`, `diamond`, `rubber`, `plastic`, `wood`, `concrete`, `neon_red`, `neon_blue`, `neon_green`\n\n### Data Import\n\n```python\n# Import point cloud\nwidget.import_data(\"data.csv\", as_type=\"points\", point_size=0.1)\n\n# Import as curve\nwidget.import_data(\"timeseries.csv\", as_type=\"curve\")\n\n# Import multiple series\nwidget.import_data(\n    \"multi_series.csv\", \n    as_type=\"series\",\n    value_columns=[\"col1\", \"col2\", \"col3\"]\n)\n\n# Batch import\nwidget.batch_import([\"*.csv\", \"*.parquet\"], as_type=\"points\")\n```\n\n### Post-Processing Effects\n\n```python\n# Setup compositor with effects\nwidget.setup_extended_compositor()\n\n# Add individual effects\nwidget.add_bloom_glare(intensity=0.8, threshold=0.8)\nwidget.add_color_correction(brightness=0.1, contrast=0.1, saturation=1.1)\nwidget.add_vignette(amount=0.2)\nwidget.add_film_grain(amount=0.03)\nwidget.add_chromatic_aberration(amount=0.001)\nwidget.add_sharpen(amount=0.1)\n\n# Camera effects\nwidget.add_depth_of_field(focus_distance=5.0, fstop=2.8)\nwidget.add_motion_blur(samples=8, shutter=0.5)\n```\n\n### Import/Export 3D Formats\n\n```python\n# GLTF/GLB\nobjects = widget.import_gltf(\"model.glb\")\nwidget.export_gltf(\"output.glb\")\n\n# USD/USDZ\nobjects = widget.import_usd(\"scene.usd\")\nwidget.export_usd(\"output.usd\")\n\n# Alembic\nobjects = widget.import_alembic(\"animation.abc\")\nwidget.export_alembic(\"output.abc\")\n\n# Scene as Parquet (for data analysis)\nwidget.export_scene_as_parquet(\"scene_data.parquet\")\nobjects = widget.import_scene_from_parquet(\"scene_data.parquet\")\n```\n\n### Extension Management (Blender 4.5+)\n\n```python\n# List repositories and extensions\nrepos = widget.list_repositories()\nextensions = widget.list_extensions()\n\n# Enable/disable extensions (by package ID)\nwidget.enable_extension(\"molecularnodes\")  # Auto-finds repository\nwidget.disable_extension(\"molecularnodes\")\n\n# Or specify repository module explicitly\nwidget.enable_extension(\"molecularnodes\", repo_module=\"bl_ext\")\n\n# Install extension (universal method - handles ID, URL, or file)\nwidget.install_extension(\"molecularnodes\")  # Install by package ID (searches online)\n\n# Install from URL\nwidget.install_extension(\n    \"https://extensions.blender.org/download/...\",\n    pkg_id=\"molecularnodes\"\n)\n\n# Install from local file\nwidget.install_extension(\"/path/to/extension.zip\", pkg_id=\"my_extension\")\n\n# Or use dedicated file installer\nwidget.install_extension_from_file(\"my_extension.zip\")\n\n# Sync and upgrade\nwidget.sync_repositories()  # Sync all repositories\nwidget.upgrade_extensions()  # Upgrade all extensions\nwidget.upgrade_extensions(active_only=True)  # Upgrade only active extensions\n\n# Legacy addon support (pre-4.2 addons)\nlegacy_addons = widget.list_legacy_addons()\nwidget.enable_legacy_addon(\"space_view3d_copy_attributes\")\n```\n\n### Performance Settings\n\n```python\n# Enable Vulkan backend for improved performance (Blender 4.5+)\nwidget.set_gpu_backend(\"VULKAN\")  # or \"OPENGL\" (default)\nprint(f\"Current backend: {widget.get_gpu_backend()}\")  # VULKAN\n\n# Switch render engines\nwidget.set_render_engine(\"CYCLES\")  # or \"BLENDER_EEVEE_NEXT\"\nwidget.render_device = \"GPU\"  # For Cycles (requires GPU support)\n\n# Adjust resolution\nwidget.set_resolution(1920, 1080)\n\n# Optimize for speed\nwidget.scene.eevee.taa_render_samples = 8\nwidget.scene.eevee.use_raytracing = False\n```\n\n**Performance Tips:**\n- Use **Vulkan backend** for 10-15% faster rendering with EEVEE Next\n- **EEVEE Next** is faster for interactive work (~200ms at 512x512)\n- **Cycles** provides higher quality but is slower (suitable for final renders)\n- Lower resolution for interactive editing, increase for final output\n\n## Convenience Properties\n\nAccess Blender internals directly without `bpy.context`:\n\n```python\n# Scene access\nscene = widget.scene\nscene.frame_set(1)\nscene.render.fps = 30\n\n# Context access (for advanced operations)\nwidget.context.view_layer.update()\n\n# Data access\nobjects = widget.objects  # bpy.data.objects\nmaterials = widget.data.materials  # bpy.data.materials\n\n# Camera access\ncamera = widget.camera  # bpy.context.scene.camera\n\n# Active object\nactive = widget.active_object  # bpy.context.active_object\nselected = widget.selected_objects  # bpy.context.selected_objects\n\n# Operations access\nwidget.ops.mesh.primitive_uv_sphere_add(location=(0, 0, 5))\nwidget.data.objects[\"Sphere\"].scale = (2, 2, 2)\n```\n\n**Note:** These properties work in headless Blender environments and safely handle cases where UI contexts aren't available.\n\n## Development\n\n```bash\n# Clone repository\ngit clone https://github.com/bjoernbethge/bpy-widget.git\ncd bpy-widget\n\n# Install with dev dependencies\nuv sync --dev\n\n# Run example notebooks (set PYTHONPATH for local development)\n# PowerShell:\n$env:PYTHONPATH = \"D:\\bpy-widget\\src\"; uv run marimo edit examples/basic_usage.py\n\n# Bash:\nexport PYTHONPATH=\"$(pwd)/src\" && uv run marimo edit examples/basic_usage.py\n\n# Frontend development with HMR\ncd frontend\nnpm install\nnpm run dev  # Starts Vite dev server on localhost:5173\n\n# In another terminal, run notebook with HMR enabled:\n$env:ANYWIDGET_HMR=\"1\"; $env:PYTHONPATH=\"D:\\bpy-widget\\src\"; uv run marimo edit examples/basic_usage.py\n```\n\nSee `examples/` directory for complete usage examples.\n\n## Examples\n\nSee the `examples/` directory for complete working examples:\n\n- `simple_widget.py` - Minimal example to get started quickly\n- `basic_usage.py` - Interactive notebook with all features (materials, post-processing, scene controls, Vulkan)\n- `data_import.py` - Data visualization with CSV/Parquet import as point clouds and curves\n\n## API Reference\n\n### Core Methods\n\n**Rendering:**\n- `widget.set_gpu_backend(\"VULKAN\")` - Set GPU backend (VULKAN/OPENGL)\n- `widget.get_gpu_backend()` - Get current GPU backend\n- `widget.set_render_engine(\"BLENDER_EEVEE_NEXT\")` - Set render engine\n- `widget.set_resolution(width, height)` - Set render resolution\n- `widget.render()` - Force immediate render\n\n**Scene Management:**\n- `widget.clear_scene()` - Clear all objects\n- `widget.setup_lighting()` - Setup default lighting\n- `widget.setup_world_background(color, strength)` - Set world background\n\n**Objects:**\n- `widget.create_test_cube()`, `create_suzanne()`, `create_torus()`, etc.\n- `widget.import_gltf()`, `import_usd()`, `import_alembic()` - Import 3D files\n\n**Materials:**\n- `widget.create_material()` - Create custom material\n- `widget.create_preset_material()` - Use material presets\n- `widget.assign_material()` - Apply material to object\n\n**Data Import:**\n- `widget.import_data()` - Import CSV/Parquet as points or curves\n- `widget.batch_import()` - Import multiple files\n\n## Troubleshooting\n\n### Import Errors\n- Ensure Python 3.11 is installed (required by Blender 4.5)\n- Check `bpy` module: `pip show bpy` (should be 4.5.x)\n\n### Rendering Issues\n- **EEVEE Next** requires OpenGL or Vulkan support (Vulkan recommended for better performance)\n- For headless servers without GPU: `widget.set_render_engine(\"CYCLES\")` and `widget.render_device = \"CPU\"`\n- If Vulkan rendering fails, fallback to OpenGL: `widget.set_gpu_backend(\"OPENGL\")`\n\n### GPU Backend\n- Vulkan backend requires compatible GPU drivers:\n  - **NVIDIA**: [Driver 550+](https://www.nvidia.com/Download/index.aspx)\n  - **AMD**: [Latest drivers](https://www.amd.com/en/support)\n  - **Intel Arc**: [Supported GPUs](https://www.intel.com/content/www/us/en/products/docs/discrete-gpus/arc/software/vulkan.html)\n- If Vulkan is unavailable, OpenGL is used automatically\n- Check current backend: `widget.get_gpu_backend()`\n- Learn more: [Vulkan API](https://www.vulkan.org/), [Blender Vulkan Support](https://developer.blender.org/docs/release_notes/4.5/eevee/)\n\n### Material Colors\n- Always use RGB or RGBA tuples: `(1.0, 0.5, 0.0)` or `(1.0, 0.5, 0.0, 1.0)`\n- Values should be 0.0-1.0 range\n\n## Version\n\nCurrent version: **0.1.1**\n\n## License\n\nMIT License - see LICENSE file for details.\n\n## Credits\n\nBuilt with:\n- [Blender](https://www.blender.org/) - 3D creation suite (4.5.4+)\n- [anywidget](https://anywidget.dev/) - Custom Jupyter widgets\n- [Vulkan API](https://www.vulkan.org/) - High-performance GPU rendering\n\n## Related Links\n\n**Project:**\n- [GitHub Repository](https://github.com/bjoernbethge/bpy-widget) - Source code and issues\n- [PyPI Package](https://pypi.org/project/bpy-widget/) - Install from PyPI\n- [Report Issues](https://github.com/bjoernbethge/bpy-widget/issues) - Bug reports and feature requests\n\n**Documentation & Resources:**\n- [Blender Documentation](https://docs.blender.org/) - Official Blender docs\n- [Blender 4.5 Release Notes](https://www.blender.org/download/releases/4-5/) - What's new in Blender 4.5\n- [Blender Python API](https://docs.blender.org/api/current/) - bpy API reference\n- [Vulkan API Documentation](https://www.vulkan.org/learn) - Learn about Vulkan\n- [anywidget Documentation](https://anywidget.dev/) - Widget framework docs\n\n**GPU Driver Downloads (for Vulkan support):**\n- [NVIDIA Drivers](https://www.nvidia.com/Download/index.aspx) - Driver 550+ required for Vulkan\n- [AMD Drivers](https://www.amd.com/en/support) - Latest drivers recommended\n- [Intel Arc Drivers](https://www.intel.com/content/www/us/en/download/726609/intel-arc-graphics-windows-dch-driver.html) - For Intel Arc GPUs\n- [Vulkan Hardware Database](https://vulkan.gpuinfo.org/) - Check GPU Vulkan support\n",
    "bugtrack_url": null,
    "license": "MIT",
    "summary": "Interactive Blender 3D viewport widget for notebooks with real-time Eevee Next rendering.",
    "version": "0.1.1",
    "project_urls": {
        "Homepage": "https://github.com/bjoernbethge/bpy-widget",
        "Issues": "https://github.com/bjoernbethge/bpy-widget/issues",
        "Repository": "https://github.com/bjoernbethge/bpy-widget"
    },
    "split_keywords": [
        "3d",
        " blender",
        " cycles",
        " eevee",
        " jupyter",
        " marimo",
        " notebook",
        " rendering",
        " visualization",
        " widget"
    ],
    "urls": [
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "183df4ba7b6159d51b01cbecccc181c3128c843bab549edc308f2f2726ff57fd",
                "md5": "3c7f3c477d95649dfccdba146bb6ff97",
                "sha256": "fe87dee717465750ac32f64ad4bd9cf336aa6903036a8b6936942fda1fc50d3f"
            },
            "downloads": -1,
            "filename": "bpy_widget-0.1.1-py3-none-any.whl",
            "has_sig": false,
            "md5_digest": "3c7f3c477d95649dfccdba146bb6ff97",
            "packagetype": "bdist_wheel",
            "python_version": "py3",
            "requires_python": ">=3.11",
            "size": 7706634,
            "upload_time": "2025-11-08T20:01:54",
            "upload_time_iso_8601": "2025-11-08T20:01:54.240624Z",
            "url": "https://files.pythonhosted.org/packages/18/3d/f4ba7b6159d51b01cbecccc181c3128c843bab549edc308f2f2726ff57fd/bpy_widget-0.1.1-py3-none-any.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "2f0bf4755eb86e956205d6aa45d5564df83f268f894224484c7f4632e898e885",
                "md5": "dd0bb0498db0269beac476389250d033",
                "sha256": "90344e6ed16fd018d5db9ecd9f14850fe2b10a09dd7eeec7f1b7fcbfc963cf49"
            },
            "downloads": -1,
            "filename": "bpy_widget-0.1.1.tar.gz",
            "has_sig": false,
            "md5_digest": "dd0bb0498db0269beac476389250d033",
            "packagetype": "sdist",
            "python_version": "source",
            "requires_python": ">=3.11",
            "size": 21531208,
            "upload_time": "2025-11-08T20:01:56",
            "upload_time_iso_8601": "2025-11-08T20:01:56.386123Z",
            "url": "https://files.pythonhosted.org/packages/2f/0b/f4755eb86e956205d6aa45d5564df83f268f894224484c7f4632e898e885/bpy_widget-0.1.1.tar.gz",
            "yanked": false,
            "yanked_reason": null
        }
    ],
    "upload_time": "2025-11-08 20:01:56",
    "github": true,
    "gitlab": false,
    "bitbucket": false,
    "codeberg": false,
    "github_user": "bjoernbethge",
    "github_project": "bpy-widget",
    "travis_ci": false,
    "coveralls": false,
    "github_actions": true,
    "lcname": "bpy-widget"
}
        
Elapsed time: 1.32331s