calesthio/OpenMontage · critical · FileNotFoundError
Missing Three.js world templates: {', '.join(missing)}
Error message
Missing Three.js world templates: {', '.join(missing)} What it means
Raised by the Three.js world builder when one or more of the bundled runtime templates — index.html, world.css, world-runtime.js — are missing from tools/graphics/templates/threejs_world/ next to threejs_world.py. These templates are the generated world's scaffold; without them the workspace cannot be assembled, so the tool fails fast with the exact missing names.
Source
Thrown at tools/graphics/threejs_world.py:645
@staticmethod
def _write_workspace(
*,
workspace: Path,
spec: dict[str, Any],
report: dict[str, Any],
duration: float,
width: int,
height: int,
render_mode: str,
quality_tier: str,
catalog_paths: list[Path],
) -> list[str]:
template_dir = Path(__file__).resolve().parent / "templates" / "threejs_world"
required = ["index.html", "world.css", "world-runtime.js"]
missing = [name for name in required if not (template_dir / name).is_file()]
if missing:
raise FileNotFoundError(f"Missing Three.js world templates: {', '.join(missing)}")
workspace.mkdir(parents=True, exist_ok=True)
(workspace / "assets").mkdir(exist_ok=True)
(workspace / "renders").mkdir(exist_ok=True)
catalog_index: dict[str, Any] = {"version": "1.0", "catalogs": []}
model_root = workspace / "assets" / "models"
model_root.mkdir(parents=True, exist_ok=True)
for catalog_path in catalog_paths:
manifest_path = catalog_path / "catalog-manifest.json"
manifest = json.loads(manifest_path.read_text(encoding="utf-8"))
catalog_id = str(manifest["catalog_id"])
target = model_root / catalog_id
source = catalog_path / "source"
if target.exists():
shutil.rmtree(target)
shutil.copytree(source, target)
copied = copy.deepcopy(manifest)View on GitHub (pinned to 95e1c3d0ab)
Solutions
- Check the exception message for the exact missing file names
- Restore/reinstall the package so tools/graphics/templates/threejs_world/ contains all three files
- If packaging, ensure non-Python data files are included (package_data / MANIFEST.in)
- Verify with: ls tools/graphics/templates/threejs_world/
Example fix
# pyproject.toml (before: templates excluded) # after [tool.setuptools.package-data] "tools.graphics" = ["templates/threejs_world/*"]
Defensive patterns
Strategy: validation
Validate before calling
from pathlib import Path
required = ["index.html", "world.css", "world-runtime.js"]
tdir = Path(tool_dir) / "templates" / "threejs_world"
missing = [n for n in required if not (tdir / n).is_file()]
assert not missing, f"templates missing: {missing}" Prevention
- Include template dirs in package-data/wheel builds and test the wheel
- Add a CI smoke test that instantiates the world builder
- Verify installs with a file-presence check after deployment
When it happens
Trigger: Partial install or packaging of OpenMontage that shipped threejs_world.py but not its templates directory; templates deleted or moved during a refactor; running from a copied source tree that skipped non-Python files.
Common situations: pip install from a broken sdist/wheel; Docker image built with .dockerignore excluding template dirs; git sparse-checkout missing those paths.
Related errors
- Error: No demo prop files were found in {PROPS_DIR}.
- Command {cmd_name!r} not found. {self.install_instructions}
- Python module {module_name!r} not installed. {self.install_i
AI-assisted analysis of calesthio/OpenMontage@95e1c3d0ab (2026-08-15).
Data as JSON: /api/errors/16b566f7c885b3e7.
Report an issue: GitHub.