Tools for importing Drake simulations into Blender. Record your simulations with meshcat and import them into Blender with full geometry, materials, and animation support.
All Blender videos on SceneSmith were created with the meshcat HTML importer.
- Download
meshcat_html_importer.zipfrom the latest release - Open Blender
- Edit > Preferences > Get Extensions
- Click the dropdown arrow and select "Install from Disk..."
- Select the
meshcat_html_importer.zipfile
- Save your meshcat visualization as HTML
- Import into Blender using one of:
- File > Import > Meshcat Recording (.html)
- Drag and drop the
.htmlfile directly onto the Blender viewport
- Configure import options and import
| Option | Description | Default |
|---|---|---|
| Recording FPS | FPS of the recording (0 = auto-detect) | 0 (auto) |
| Target FPS | Animation FPS in Blender | 30 |
| Start Frame | First frame number | 0 |
| Clear Scene | Remove existing objects before import | On |
| Hierarchical Collections | Create nested collections mirroring the meshcat scene tree | On |
For headless or scripted workflows (requires the bpy package). If you've set up the development environment, the CLI is already available:
meshcat-html-import recording.html -o scene.blendThis project uses uv for package management.
# Install uv if you don't have it
curl -LsSf https://astral.sh/uv/install.sh | sh
# Install all packages with dev dependencies
uv sync --all-extras
# Run tests
uv run pytest
# Format and lint
uv run ruff format .
uv run ruff check --fix .The addon source lives in packages/meshcat-html-importer/src/ and is synced to blender_addons/meshcat_html_importer/ with absolute imports converted to relative imports (required by Blender 5.0's extension policy). After making changes to the package:
# Sync package code to addon and convert imports
make sync-addon
# Build addon zip for distribution
make build-addonPushing a version tag triggers a GitHub Actions workflow that builds the addon zip and creates a GitHub Release with the zip attached.
git tag v0.1.0
git push origin v0.1.0An older workflow that records Drake simulations via a Flask server implementing Drake's glTF Render Client-Server API. Instead of rendering images, it saves object poses as keyframes that can be imported into Blender.
See the drake-recording-server package for full documentation.
uv pip install -e packages/drake-recording-server-
Start the recording server:
drake-recording-server \ --export_path examples/example_output/example.blend \ --keyframe_dump_path examples/example_output/example.pkl \ --blend_file examples/example_output/example_start.blendNote that you need to re-start the server whenever you want to start a new recording.
-
Run your simulation. Every render request from a Blender camera triggers the recording of a new keyframe:
python examples/example_sim.py
-
Open the exported
.blendfile in Blender -
Install the Keyframe Importer addon (
blender_addons/keyframe_importer.py) via Edit > Preferences > Add-ons > Install from Disk -
Use the "Keyframe Importer" sidebar panel to import the
.pklfile
Pre-recorded example files are provided in examples/example_output/ for testing without a running Drake simulation.
Part of the code is based on Drake Blender. This work was inspired by pybullet-blender-recorder.

