# Optional slicer-API sidecar stack for Bambuddy. # # Both services are HTTP wrappers around a slicer CLI: the same Node code # (`maziggy/orca-slicer-api`, `bambuddy/profile-resolver` branch) bundled # with a different binary in each image. Bambuddy talks to them via the # URLs configured in Settings -> Slicer. # # bambu-studio-api → host port 3001 (BambuStudio CLI) # orca-slicer-api → host port 3003 (OrcaSlicer CLI) # # Bambuddy's virtual-printer feature reserves host ports 3000 and 3002, # which is why the OrcaSlicer sidecar sits on 3003. Override either port # in `.env` (see `.env.example`) if you don't run Bambuddy on this host. # # Usage: # cd slicer-api/ # docker compose up -d # starts OrcaSlicer only # docker compose --profile bambu up -d # starts both # # Updating: `docker compose pull` skips profile-gated services, so a bare # pull silently leaves bambu-studio-api on its old image (and restart: # unless-stopped keeps it serving). Use `docker compose --profile bambu pull`, # or name the service: `docker compose pull bambu-studio-api`. # # First start pulls pre-built images from GHCR (~110 MB OrcaSlicer, # ~220 MB BambuStudio). No local build, no git in the BuildKit worker, # works on QNAP / Synology / Container Station out of the box. # # Both images are linux/amd64 only. OrcaSlicer's ARM64 path is on hold # pending an upstream extraction fix; BambuStudio doesn't publish ARM64 # at all. ARM64 hosts are best served by running the sidecar on a separate # x86_64 box; failing that, `docker-compose.arm64.yml` in this directory # runs these same images under QEMU emulation — experimental, ~3-6x slower, # and it needs binfmt set up on the host. See the README. services: orca-slicer-api: image: ghcr.io/maziggy/orca-slicer-api:${SIDECAR_TAG:-latest} container_name: orca-slicer-api restart: unless-stopped ports: - "${ORCA_API_PORT:-3003}:3000" volumes: - ./data/orca:/app/data environment: NODE_ENV: production PORT: "3000" # Largest model accepted for a slice, in MB. See .env.example. MAX_MODEL_UPLOAD_MB: "${MAX_MODEL_UPLOAD_MB:-512}" healthcheck: test: ["CMD", "curl", "-f", "http://localhost:3000/health"] interval: 30s timeout: 5s start_period: 10s retries: 3 bambu-studio-api: image: ghcr.io/maziggy/bambu-studio-api:${SIDECAR_TAG:-latest} container_name: bambu-studio-api restart: unless-stopped ports: - "${BAMBU_API_PORT:-3001}:3000" volumes: - ./data/bambu:/app/data environment: NODE_ENV: production PORT: "3000" # Largest model accepted for a slice, in MB. See .env.example. MAX_MODEL_UPLOAD_MB: "${MAX_MODEL_UPLOAD_MB:-512}" healthcheck: test: ["CMD", "curl", "-f", "http://localhost:3000/health"] interval: 30s timeout: 5s start_period: 10s retries: 3 profiles: - bambu