This repository has two main parts:
holodeck/: Blender add-on code. Keep pure, testable logic inholodeck/core/and Blender-specific adapters inholodeck/handlers/.holodeck/resources/: Browser player assets, includingindex.html,styles.css, andplayer.js.tests/: Pytest coverage for the add-on and local server behavior.demo/: Canonical demo source files, includingdemo.blendand tracked rendered frames.
Preserve the existing separation of concerns: logic belongs in core/, Blender hooks and UI belong in handlers/.
make setup: Createholodeck-venv/and install pytest.make test: Run the full test suite with verbose output.make test-one TEST=test_add_frame: Run a focused test by name pattern.make serve: Start the presentation server locally on port8000.make build: Produce both distributable zip files indist/.make clean: Remove the virtualenv and Python cache files.
For quick player checks, run make serve and open http://localhost:8000.
Use 4-space indentation in Python and follow existing straightforward, standard-library-first patterns. Prefer:
snake_casefor functions, methods, variables, and module namesPascalCasefor classes such asManifestGenerator- thin Blender handlers that delegate to testable core logic
No formatter or linter is configured in this repo today, so match the surrounding file style and keep changes small and readable.
Tests use pytest with discovery defined in pytest.ini:
- files:
tests/test_*.py - classes:
Test* - functions:
test_*
Add or update tests whenever behavior changes in holodeck/core/, render handlers, or the local server. Prefer unit tests for manifest generation and lightweight integration tests for server endpoints.
Git history is minimal and currently only shows init, so there is no strong historical convention yet. Use short, imperative commit subjects such as Add manifest marker validation.
For pull requests, include:
- a brief summary of the user-visible or developer-visible change
- test coverage notes (
make test, targeted test names, or manual browser checks) - screenshots or short recordings for player UI changes
- linked issues or context when the change is not self-explanatory