diff --git a/deploy/busbar-designer.service b/deploy/busbar-designer.service index 03d0b89..65bc3e0 100644 --- a/deploy/busbar-designer.service +++ b/deploy/busbar-designer.service @@ -23,6 +23,10 @@ Environment=HOST=0.0.0.0 Environment=PORT=5000 Environment=FLASK_DEBUG=0 Environment=PATH=/opt/busbar-designer/.venv/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin +; Use OpenSCAD nightly (extracted AppImage) for the Manifold backend. +; Falls back to system "openscad" (CGAL) if this binary is missing. +Environment=OPENSCAD_BIN=/usr/local/bin/openscad-nightly +Environment=OPENSCAD_BACKEND=Manifold ; HOME points inside the project so ezdxf / matplotlib / build123d can write ; their config + cache while ProtectHome=true still hides the real /home. Environment=HOME=/opt/busbar-designer/data diff --git a/holder.py b/holder.py index 80ee1f1..8e518ee 100644 --- a/holder.py +++ b/holder.py @@ -28,6 +28,8 @@ from typing import Any APP_DIR = Path(__file__).resolve().parent SCAD_FILE = APP_DIR / "scad" / "hex_cell.scad" OPENSCAD_BIN = os.environ.get("OPENSCAD_BIN", "openscad") +# Empty string disables; default Manifold gives ~10-50x speedup on OpenSCAD 2024+ +OPENSCAD_BACKEND = os.environ.get("OPENSCAD_BACKEND", "Manifold") RENDER_TIMEOUT = int(os.environ.get("OPENSCAD_TIMEOUT", "300")) @@ -210,6 +212,8 @@ def render_stl(params: dict) -> bytes: with tempfile.TemporaryDirectory() as tmp: out = Path(tmp) / "out.stl" cmd = [OPENSCAD_BIN, "-o", str(out)] + if OPENSCAD_BACKEND: + cmd += ["--backend", OPENSCAD_BACKEND] for k, v in clean.items(): cmd += ["-D", f"{k}={_to_scad_literal(v)}"] cmd.append(str(SCAD_FILE))