Holodeck is a CLI tool and webapp that renders Blender animations as slide decks that can be viewed in a web-browser.
Because the Holodeck webapp displays pre-rendered frames, the resulting slide deck presentation allows slide decks that are higher fidelity than what can be achieved with a tool like google slides, in a way that appears to be realtime (but isn't).
Live demo: jbellenger.github.io/holodeck
Holodeck uses Blender frame markers (default blender key-binding: M) as pause points. Pressing space in the holodeck webapp will animate (using the frame rate configured in blender) until the next pause point.
To turn a .blend file into something you can upload to a static host, run:
holodeck build demo/demo.blend dist/demoThat creates dist/demo, which you can upload to GitHub Pages, S3, or any other static host. To preview the same directory locally, run:
holodeck serve dist/demoThat command opens the local player URL in your default browser. Use --no-open to skip that behavior.
Holodeck reads the active scene's frame range, fps, and timeline markers from Blender.
frame_startandframe_enddefine the rendered frame span.- Timeline markers define presentation boundaries. Put a marker on the frame where a section should begin.
- In the browser player, left and right navigation jumps between marker frames, and playback stops when it reaches the next marker or the end of the animation.
- Marker names are ignored. Only their frame numbers matter.
- Marker frame numbers are interpreted relative to the scene's start frame, so a marker on the first rendered frame becomes marker
0in the exported manifest. - Markers outside the rendered frame range are ignored.
holodeck/: Python package and CLI entrypointholodeck/core/: testable logic for Blender invocation, manifest generation, and servingholodeck/resources/: browser player assets bundled with the package and used for local exports, static hosting, and distributable buildsdemo/: canonical demo source files, includingdemo.blendand tracked rendered framesdocs/: generated local demo output built fromdemo/tests/: pytest coverage for core logic and CLI behaviortests/fixtures/blends/: Blender fixtures for render override integration tests
- Create the virtual environment and install dependencies:
make setup- Build the standalone
holodeckexecutable:
make buildThat produces both dist/holodeck (PyInstaller) and dist/holodeck.pex (PEX).
- Build an export from a
.blendfile:
./dist/holodeck build demo/demo.blend dist/demo- Serve it locally:
./dist/holodeck serve dist/demoholodeck build demo/demo.blend dist/demo
holodeck refresh demo/demo.blend dist/demo
holodeck serve dist/demo --port 8000
holodeck serve dist/demo --no-openbuild: render a.blendfile into a static directory you can upload to a siterefresh: rebuildmanifest.jsonand reinstall player assets for an existing render outputserve: preview an existing Holodeck directory locally
You can build both standalone executables:
make buildThat produces:
dist/holodeck: a PyInstaller single-file binarydist/holodeck.pex: a PEX executable built from the same CLI entrypoint
You can also build them individually:
make build-pyinstaller
make build-pex- The file is movable on the same machine.
- The executable bundles Python, the player assets, and the Blender helper scripts.
- It is distributable to other machines of the same OS and CPU architecture with Blender available on
PATH. - It is not a cross-platform binary. Build it separately on macOS, Linux, and Windows if you need all three.
make setup: createholodeck-venv/and install the package plus pytestmake test: run the full test suitemake test-one TEST=test_add_frame: run a focused testmake build: produce bothdist/holodeckanddist/holodeck.pexmake build-pyinstaller: produce the standalonedist/holodeckbinary with PyInstallermake build-pex: produce the standalonedist/holodeck.pexexecutable with PEXmake build-demo: rebuilddocs/fromdemo/demo.blendanddemo/render/make regen-blend-fixtures: rebuild the tracked Blender test fixturesmake serve-demo: servedocs/on port8000usingdist/holodeckmake clean: remove the virtualenv and Python cache files
holodeck/resources/ is the canonical source for the browser player. Local source-tree exports, packaged builds, and distributable binaries all read from the same asset directory. GitHub Pages publishes a CI-generated artifact assembled from demo/render/ plus holodeck refresh instead of serving checked-in docs/ files.