MartinNYHC eee901fc20 Merge pull request #536 from maziggy/0.2.1
# Bambuddy v0.2.1

## New Features

- **Multiple Virtual Printers** — Run multiple virtual printers per installation, each with a dedicated bind IP and fully independent FTP, MQTT, SSDP, and Bind servers. Full CRUD API and React UI for creating, editing, and deleting instances. Supports all four modes, any of the 11 printer models, per-instance TLS certificates, and individual network interface override.
- **Background Print Dispatch** ([#112](https://github.com/maziggy/bambuddy/issues/112)) — Printing from archives and the file manager now runs in the background. FTP uploads are decoupled from API request latency, so the UI responds immediately. Real-time progress via WebSocket with per-job upload bars, status badges, and a cancel button.
- **Filament Cost Tracking** ([#452](https://github.com/maziggy/bambuddy/issues/452)) — Track per-spool filament costs and see cost breakdowns for every print. Archive cards display total cost, the print modal shows a real-time cost preview, and the inventory table includes a sortable cost/kg column. A global default filament cost setting provides a fallback. Contributed by @Keybored02.
- **Filament Override for Model-Based Queue** ([#486](https://github.com/maziggy/bambuddy/issues/486)) — When scheduling to "any printer", you can now override the 3MF's original filament choices. The scheduler matches against overridden type and color, preferring printers with exact color matches.
- **Bulk Spool Addition & Stock Spools** ([#480](https://github.com/maziggy/bambuddy/issues/480)) — Quick Add mode for inventorying filament without a slicer profile. Quantity field creates up to 100 identical spools in one transaction. Stock spools shown with an amber badge. New grouping toggle collapses identical unused spools into expandable rows.
- **Developer LAN Mode Detection** — Automatically detects printers without Developer LAN Mode enabled and shows a persistent warning banner with affected printer names and a link to Bambu Lab's documentation.
- **Clear Plate Permission** ([#446](https://github.com/maziggy/bambuddy/issues/446)) — New `printers:clear_plate` permission so users can confirm plate clears without needing full `printers:control`.
- **Full-Page Group Permission Editor** ([#446](https://github.com/maziggy/bambuddy/issues/446)) — Replaced the cramped permission modal with a dedicated full-page editor featuring a 2-column grid, search/filtering, and bulk actions.
- **External Materials & Brands in Spool Form** ([#455](https://github.com/maziggy/bambuddy/issues/455)) — The spool form now allows using custom materials and brands not in the Bambu filament catalog when adding or editing spools.
- **Energy Cost 3-Decimal Precision** ([#416](https://github.com/maziggy/bambuddy/issues/416)) — Energy cost values now support 3 decimal places (e.g., €0.123/kWh) instead of 2, for more accurate cost tracking in regions with fractional energy pricing.
- **Include Beta Updates Setting** — New toggle to opt in to beta/prerelease update notifications. Default: off (stable only).
- **Virtual Printer Dual Bind/Detect Ports** ([#445](https://github.com/maziggy/bambuddy/issues/445)) — The slicer bind/detect handshake now listens on both ports 3000 and 3002 for compatibility across BambuStudio/OrcaSlicer versions.

## Fixed

### Print Queue & Scheduling
- **Queue Empty After Container Restart** ([#523](https://github.com/maziggy/bambuddy/issues/523)) — SQLite WAL not checkpointed on shutdown. Now runs `PRAGMA wal_checkpoint(TRUNCATE)` before exit.
- **Queue Stuck on "Busy" for "Any Model" Jobs** ([#435](https://github.com/maziggy/bambuddy/issues/435)) — Queue API now uses OR logic to also return unassigned items whose `target_model` matches the printer's model.
- **Queue "Any Model" Jobs Stuck in "Waiting" After Plate Clear** ([#435](https://github.com/maziggy/bambuddy/issues/435)) — MQTT raw AMS data returned IDs as strings; fixed type casting.
- **"Queue to Any Printer" Ignores Filament Color Override** ([#486](https://github.com/maziggy/bambuddy/issues/486)) — Now requires at least 1 color match when filament overrides specify colors.
- **"Clear Plate & Start Next" Ignores Filament Override Color** ([#486](https://github.com/maziggy/bambuddy/issues/486)) — Frontend now checks override colors, mirroring the backend's color matching logic.
- **"Clear Plate & Start Next" Shown on Printers Without Correct Filament** ([#527](https://github.com/maziggy/bambuddy/issues/527)) — Widget now filters queue items by filament compatibility.
- **Virtual Printer Queue Sends Wrong Plate ID** ([#529](https://github.com/maziggy/bambuddy/issues/529)) — `plate_id` was always `1`; now extracts plate index from 3MF's `slice_info.config`.
- **Virtual Printer Queue Ignores AMS Mapping** ([#529](https://github.com/maziggy/bambuddy/issues/529)) — Scheduler now computes AMS mapping for all queue items that lack one.
- **Virtual Printer Queue Mode Doesn't Assign Printer** ([#518](https://github.com/maziggy/bambuddy/issues/518)) — Now assigns the VP's target printer or falls back to model-based scheduling.
- **Unnecessary Target Model Selector on "Any" Tab** ([#528](https://github.com/maziggy/bambuddy/issues/528)) — Dropdown hidden when sliced model is known.
- **Print Queue Shows UUID Hash Instead of Filename** ([#438](https://github.com/maziggy/bambuddy/issues/438)) — Library files now display the original human-readable name.
- **SD Card Cleanup After Print Never Runs** ([#374](https://github.com/maziggy/bambuddy/issues/374)) — Used wrong printer object type; fixed to use DB query.
- **Phantom Prints From Lingering SD Card Files** ([#477](https://github.com/maziggy/bambuddy/issues/477)) — Fixed retry loop, added cleanup on `start_print()` failure.

### AMS & Filament
- **AMS History Chart Shows Wrong Time Range** ([#535](https://github.com/maziggy/bambuddy/issues/535)) — X axis now pinned to the full requested time range.
- **Manual Spool Weight Overwritten by AMS Auto-Sync** ([#525](https://github.com/maziggy/bambuddy/issues/525)) — Added `weight_locked` flag for manual weight entries.
- **AMS Slot Auto-Config Falls Back to Generic Instead of Spool's Preset** — Fixed PFUS*/P* custom preset handling and "sticky" generic ID reuse.
- **PCTG Filament Misidentified as PC** ([#478](https://github.com/maziggy/bambuddy/issues/478)) — Reordered material parser; added PCTG to all material type arrays.
- **External Spool Mapping Inverted on H2C** ([#492](https://github.com/maziggy/bambuddy/issues/492)) — Now uses `active_extruder` on dual-nozzle printers.
- **External Spool Assignments Lost on Restart** ([#493](https://github.com/maziggy/bambuddy/issues/493)) — Now looks up external assignments in `vt_tray` data.
- **Filament Fill Level Wrong / Missing for External Spools** ([#496](https://github.com/maziggy/bambuddy/issues/496)) — Fixed priority chain, removed misleading gray fallback bar, added AMS remain fallback for external spools.
- **Wrong AMS Unit Displayed With Dual AMS on P2S** ([#420](https://github.com/maziggy/bambuddy/issues/420)) — Now cross-references `tray_now` with MQTT mapping field for multi-AMS printers.
- **H2D Tray Disambiguation Produces Bogus IDs for AMS-HT** ([#364](https://github.com/maziggy/bambuddy/issues/364)) — Fixed AMS-HT global tray ID computation across multiple code paths.
- **Usage Tracking Wrong Spool on Multi-AMS Printers** ([#364](https://github.com/maziggy/bambuddy/issues/364)) — Now decodes MQTT mapping field from snow encoding for universal spool resolution.
- **Spool Usage Lost When Spool Runs Empty Mid-Print** ([#459](https://github.com/maziggy/bambuddy/issues/459)) — Snapshots assignments at print start; splits weight across trays using per-layer gcode data.
- **Spool Form Allows Empty Brand & Subtype** ([#417](https://github.com/maziggy/bambuddy/issues/417)) — Brand and Subtype now mandatory.

### Printing & Archives
- **Inconsistent Print Cost on Reprints** ([#505](https://github.com/maziggy/bambuddy/issues/505)) — Removed redundant cost paths; now computes from current session only.
- **Finish Photo Not Captured When Archive Has No Source 3MF** ([#484](https://github.com/maziggy/bambuddy/issues/484)) — Falls back to `archive/{id}/` directory.
- **Finish Photo Not Shown for BambuStudio Prints** ([#474](https://github.com/maziggy/bambuddy/issues/474)) — Fixed path resolution for empty `file_path`.
- **Archive Endpoints Crash With "Is a directory"** ([#475](https://github.com/maziggy/bambuddy/issues/475)) — Replaced `.exists()` with `.is_file()` across 15 locations.
- **File Manager Rename Doesn't Update Displayed Name** ([#460](https://github.com/maziggy/bambuddy/issues/460)) — Rename now also updates `print_name` in file metadata.
- **"Open in Slicer" Fails for Special Characters** — Sanitizes `/`, `\`, `?`, `#` to `_` in slicer download URLs.
- **"Open in Slicer" Fails When Auth Enabled** ([#421](https://github.com/maziggy/bambuddy/issues/421)) — Added short-lived, single-use download tokens with platform-specific URL formats.
- **Non-Actionable HMS Errors Triggering Notifications** ([#470](https://github.com/maziggy/bambuddy/issues/470)) — Suppresses MQTT auth failures, cloud connection failures, and user cancellations.
- **ntfy Notifications Fail With "Illegal header value"** ([#466](https://github.com/maziggy/bambuddy/issues/466)) — Escapes newlines in HTTP headers; retries without image when attachments disabled.
- **Print Bed Cooled Notification Never Triggers** ([#497](https://github.com/maziggy/bambuddy/issues/497)) — Moved bed cooldown monitor before archive lookup early-return.
- **K-Profile Response Race Condition Crash** ([#462](https://github.com/maziggy/bambuddy/issues/462)) — Fixed TOCTOU race between MQTT callback and asyncio thread.

### Permissions & UI
- **"Power Off Printer" Not Gated by Control Permission** ([#500](https://github.com/maziggy/bambuddy/issues/500)) — Checkbox now disabled for users without `printers:control`.
- **Created Admin Users Can't See Settings Button** ([#503](https://github.com/maziggy/bambuddy/issues/503)) — Now uses `hasPermission('settings:read')` instead of hardcoded role check.
- **Settings Text Fields Reset While Typing** — Removed stale state overwrite from auto-save handler.
- **Spool Form Profile Dropdown Truncates Long Names** ([#534](https://github.com/maziggy/bambuddy/issues/534)) — Removed inline filament codes; widened modal.

### Timestamps & Dates
- **Timestamps Off by Timezone Offset in Non-UTC Containers** ([#504](https://github.com/maziggy/bambuddy/issues/504)) — Replaced `datetime.now()` / `datetime.utcnow()` with `datetime.now(timezone.utc)` across 16 files (~80 call sites). Fixed 13 frontend `new Date()` calls.
- **Inventory Date Format Ignores Settings** ([#463](https://github.com/maziggy/bambuddy/issues/463)) — Now respects date format setting.
- **Inventory Location Shows Garbled Characters for AMS-HT Slots** ([#463](https://github.com/maziggy/bambuddy/issues/463)) — Now uses shared `formatSlotLabel()` utility.

### Docker & Infrastructure
- **FTP Proxy Cannot Bind to Port 990 in Docker** — `cap_add: NET_BIND_SERVICE` didn't reliably propagate with the `user:` directive. Now sets file capabilities via `setcap` in the Dockerfile.
- **Support Bundle Leaking Personal Data** ([#473](https://github.com/maziggy/bambuddy/issues/473)) — Now queries DB for sensitive values; uses httpx `auth` parameter for smart plug credentials; redacts serial numbers fully.
- **IP Addresses Not Redacted From Support Bundle** — Added IPv4 regex that preserves firmware version strings.

### AMS Mapping & Dual-Nozzle (H2D/H2C)
- **7 AMS Mapping Fixes** — Hard nozzle filter, external spool extruder, `ams_extruder_map` race condition, `group_id` priority, dual-nozzle detection, AMS-HT `globalTrayId`, dropdown nozzle filter.
- **Nozzle Mapping Uses Wrong Source in 3MF** — Now uses `group_id` as primary source instead of `filament_nozzle_map`.
- **H2D Tray Disambiguation Triggers on Single-Nozzle Printers** — Now uses persistent `_is_dual_nozzle` flag.
- **Cancelled Print Usage Tracking Uses Stale Progress** — Now captures last valid progress/layer during printing.
- **Developer Mode Detection Always Reports Null** — Fixed `int(value, 16)` TypeError on integer MQTT field.

### Other
- **Wrong Documentation Link for "Lubricate Carbon Rods" on P2S** ([#490](https://github.com/maziggy/bambuddy/issues/490))
- **"Unknown stage (74)" on H2D** — Mapped stage 74 ("Preparing") and 77 ("Preparing AMS").
- **Color Tooltip Clipped Behind Adjacent Swatches** — Added z-index.
- **PAUSED State Never Matched** ([#447](https://github.com/maziggy/bambuddy/issues/447)) — Removed dead `PAUSED` checks; printer only sends `PAUSE`.

## Improved

- **Queue API Returns More Print Metadata** ([#524](https://github.com/maziggy/bambuddy/issues/524)) — Endpoints now include `filament_type`, `filament_color`, `layer_height`, `nozzle_diameter`, and `sliced_for_model`.
- **Filament Catalog API Renamed** ([#427](https://github.com/maziggy/bambuddy/issues/427)) — `/api/v1/filaments/` → `/api/v1/filament-catalog/` for clarity.
- **Clear Plate Dot Indicator on Sidebar** — Yellow dot on Printers icon when plate clear is needed.
- **Inventory Sidebar Always Visible** — Shows Spoolman iframe or internal inventory based on mode.
- **Queue Page Mobile Responsiveness** — Improved layout for mobile devices.
- **Storage Size Formatting & Overdue Queue Items** — UI polish and i18n fixes.
- **Brazilian Portuguese Translation** — Full translation contributed by @wreuel.
- **H2D Pro Printer Image** — Added H2D Pro image and model mapping. Contributed by @cimdDev.
- **Native Updater Script** — Systemd-based updater with backup and safety checks. Contributed by @uefigs139.
- **Docker Install iptables Option** — Option to add iptables port redirect during Docker install. Contributed by @wreuel.
- **Frontend Pre-Commit Hooks** ([#458](https://github.com/maziggy/bambuddy/issues/458)) — TypeScript type checking and ESLint on staged frontend files.
- **Show Remaining Spool Weight** — Displays remaining weight instead of used weight. Contributed by @Keybored02.

## Community Contributors

Thank you to everyone who contributed to this release:

- **@Keybored02** — Filament cost tracking, remaining weight display, spool form fixes
- **@wreuel** — Brazilian Portuguese translation, Docker iptables install option
- **@cimdDev** — H2D Pro printer image
- **@uefigs139** — Native updater script
- **@aneopsy** — Queue page mobile responsiveness, page refactoring, UI improvements
2026-02-27 10:44:36 +01:00
2026-01-31 14:31:10 +01:00
2026-02-27 10:05:03 +01:00
2026-02-23 12:39:24 +01:00
2025-12-09 17:06:54 +00:00
2026-02-19 09:59:23 +01:00
2025-12-14 09:36:19 +01:00
2026-02-27 10:28:55 +01:00
2025-12-30 10:58:34 +01:00
2026-02-17 20:09:47 +00:00
2026-02-05 10:28:06 +01:00
2026-02-19 16:32:44 +01:00
2026-02-05 10:28:06 +01:00
2026-02-12 07:07:50 +01:00
2025-11-28 10:21:08 +01:00
2026-02-26 07:26:35 +01:00
2026-02-22 13:55:35 +01:00
2026-02-20 15:28:47 +01:00
2026-02-16 10:57:39 +01:00
2026-02-27 09:48:31 +01:00
2026-02-05 10:28:06 +01:00
2026-02-04 15:54:34 +01:00

Bambuddy Logo

Bambuddy

Self-hosted print archive and management system for Bambu Lab 3D printers

Release License Stars Issues Discord Ko-fi

Features • Screenshots • Quick Start • Documentation • Discord • Contributing


🌐 NEW: Remote Printing with Proxy Mode

Proxy Mode Architecture

Print from anywhere in the world — Bambuddy's new Proxy Mode acts as a secure relay between your slicer and printer:

  • 🔒 TLS-encrypted control channels — MQTT and FTP control fully encrypted
  • 🛡️ VPN recommended — Use Tailscale/WireGuard for full data encryption (details)
  • 🌍 No cloud dependency — Direct connection through your own Bambuddy server
  • 🔑 Uses printer's access code — No additional credentials needed
  • ⚡ Full-speed printing — FTP and MQTT protocols proxied transparently

Perfect for remote print farms, traveling makers, or accessing your home printer from work.

👉 Setup Guide →


Why Bambuddy?

  • Own your data — All print history stored locally, no cloud dependency
  • Works offline — Uses Developer Mode for direct printer control via local network
  • Full automation — Schedule prints, auto power-off, get notified when done
  • Multi-printer support — Manage your entire print farm from one interface

✨ Features

📦 Print Archive

  • Automatic 3MF archiving with metadata
  • 3D model preview (Three.js)
  • Duplicate detection & full-text search
  • Photo attachments & failure analysis
  • Timelapse editor (trim, speed, music) with automatic AVI-to-MP4 conversion for P1-series printers, manual upload & remove
  • Re-print to any connected printer with AMS mapping (auto-match or manual slot selection, multi-plate support, nozzle-aware matching for dual-nozzle H2D/H2D Pro)
  • Plate thumbnail browsing for multi-plate archives (hover to navigate between plates)
  • Archive comparison (side-by-side diff)
  • Tag management (rename/delete across all archives)
  • Print Log — Chronological table view of all print activity with columns for date/time, print name, printer, user, status, duration, and filament. Filterable by search, printer, user, status, and date range. Pagination with configurable page size. Clear button removes log entries without affecting archives.

📊 Monitoring & Control

  • Real-time printer status via WebSocket
  • Live camera streaming (MJPEG) & snapshots with multi-viewer support
  • Streaming overlay for OBS - Embeddable page with camera + status for live streaming (/overlay/:printerId), configurable FPS (?fps=30), status-only mode (?camera=false)
  • External camera support (MJPEG, RTSP, HTTP snapshot, USB/V4L2) with layer-based timelapse
  • Build plate empty detection - Auto-pause print if objects detected on plate (multi-reference calibration, ROI adjustment)
  • Fan status monitoring (part cooling, auxiliary, chamber)
  • Printer control (stop, pause, resume, chamber light)
  • Resizable printer cards (S/M/L/XL)
  • Skip objects during print
  • AMS slot RFID re-read
  • AMS slot configuration (model-filtered presets, K profiles, color picker, pre-population for configured slots)
  • Dual external spool support for H2D (Ext-L / Ext-R)
  • HMS error monitoring with history and clear errors
  • Print success rates & trends
  • Filament usage tracking
  • Cost analytics & failure analysis
  • CSV/Excel export

⏰ Scheduling & Automation

  • Background print dispatch — FTP uploads and print-start commands run in the background with real-time WebSocket progress toasts (per-job upload bars, status badges, cancel button)
  • Print queue with drag-and-drop
  • Multi-printer selection (send to multiple printers at once)
  • Model-based queue assignment (send to "any X1C" for load balancing) with location filtering
  • Filament override for model-based queue (swap filament colors/types before scheduling)
  • Filament validation (only assign to printers with required filaments)
  • Per-printer AMS mapping (individual slot configuration for print farms)
  • Scheduled prints (date/time)
  • Queue Only mode (stage without auto-start)
  • Clear plate confirmation between queued prints
  • Smart plug integration (Tasmota, Home Assistant, MQTT)
  • MQTT smart plugs: Subscribe to Zigbee2MQTT, Shelly, or any MQTT topic for energy monitoring
  • Energy consumption tracking (per-print kWh and cost)
  • HA energy sensor support (for plugs with separate power/energy sensors)
  • Auto power-on before print
  • Auto power-off after cooldown

📁 File Manager (Library)

  • Upload and organize sliced files (3MF, gcode, STL)
  • STL thumbnail generation - Auto-generate previews for STL files on upload or batch generate for existing files
  • ZIP file extraction with folder structure preservation
  • Option to create folder from ZIP filename
  • Folder structure with drag-and-drop
  • Rename files and folders via context menu
  • Print directly to any printer with full options
  • Add to queue without creating archive upfront
  • Plate selection for multi-plate 3MF files
  • Duplicate detection via file hash
  • Mobile-friendly with always-visible action buttons

📁 Projects

  • Group related prints (e.g., "Voron Build")
  • Track plates (print jobs) and parts separately
  • Auto-detect parts count from 3MF files
  • Color-coded project badges
  • Bulk assign archives via multi-select toolbar
  • Import/Export projects as ZIP (includes files) or JSON

🔔 Notifications

  • WhatsApp, Telegram, Discord
  • Email, Pushover, ntfy
  • Custom webhooks
  • Quiet hours & daily digest
  • Customizable message templates with per-filament usage details
  • Print finish photo URL in notifications
  • Filament usage and progress in failed/cancelled print notifications
  • HMS error alerts (AMS, nozzle, etc.)
  • Build plate detection alerts
  • Bed cooled alerts (configurable threshold)
  • Queue events (waiting, skipped, failed)

🧵 Spool Inventory

  • Built-in spool inventory with AMS slot assignment, usage tracking, and remaining weight management
  • Automatic filament consumption tracking: 3MF slicer estimates for all spools (primary), AMS remain% delta as fallback
  • Per-layer gcode accuracy for partial prints (failed/cancelled), with linear scaling fallback
  • Per-spool cost tracking — Set cost/kg on each spool; costs are automatically calculated at print completion and aggregated to archives. Print modal shows real-time cost preview. Configurable default cost and currency in Settings.
  • Bulk spool addition — Add multiple identical spools at once (quantity 1–100) with a single form submission. Quick Add mode for stock spools that only need material, color, and weight.
  • Spool catalog, color catalog, PA profile matching, and low-stock alerts

🔧 Integrations

  • Spoolman filament sync with per-filament usage tracking and fill level display
  • MQTT publishing for Home Assistant, Node-RED, etc.
  • Prometheus metrics - Export printer telemetry for Grafana dashboards
  • Bambu Cloud profile management
  • Local Profiles - Import OrcaSlicer presets (.orca_filament, .bbscfg, .bbsflmt, .zip, .json) without Bambu Cloud
  • K-profiles (pressure advance)
  • GitHub backup - Schedule automatic backups of cloud profiles, k profiles and settings to GitHub
  • External sidebar links
  • Webhooks & API keys
  • Interactive API browser with live testing

🖨️ Virtual Printer & Remote Printing

  • 🌐 Proxy Mode (NEW!) — Print remotely from anywhere via secure TLS relay
  • Emulates a Bambu Lab printer on your network
  • Send prints directly from Bambu Studio/Orca Slicer
  • Configurable printer model (X1C, P1S, A1, H2D, etc.)
  • Archive mode, Review mode, Queue mode, or Proxy mode
  • SSDP discovery (same LAN) or manual IP entry (VPN/remote)
  • Network interface override for multi-NIC/Docker/VPN setups
  • Secure TLS/MQTT/FTP communication

🛠️ Maintenance & Support

  • Maintenance scheduling & tracking
  • Interval reminders (hours/days)
  • Print time accuracy stats
  • File manager for printer storage
  • Firmware update helper with version badge (LAN-only printers)
  • Debug logging toggle with live indicator
  • Live application log viewer with filtering
  • Support bundle generator with comprehensive diagnostics (privacy-filtered)

🔒 Optional Authentication

  • Enable/disable authentication any time
  • Group-based permissions (50+ granular permissions)
  • Default groups: Administrators, Operators, Viewers
  • JWT tokens with secure password hashing
  • Comprehensive API protection (200+ endpoints secured)
  • User management (create, edit, delete, groups)
  • User activity tracking (who uploaded archives, library files, queued prints, started prints)
  • Advanced Auth via Email — SMTP integration for automated user onboarding and self-service password resets
  • Admin creates users with email — system sends secure random password automatically
  • Users can reset their own password from the login screen (no admin needed)
  • Customizable email templates (welcome email, password reset)

Plus: Configurable slicer (Bambu Studio / OrcaSlicer) • Customizable themes (style, background, accent) • Mobile responsive • Keyboard shortcuts • Multi-language (EN/DE/JA/IT) • Auto updates • Database backup/restore • System info dashboard


🎬 Demo

Bambuddy Demo Video
Click to watch the demo on YouTube


📸 Screenshots

Click to expand screenshots

Printers
Real-time printer monitoring with AMS status

Archives
Print archive with 3D preview and project assignment

Reprint AMS Mapping
Re-print with AMS filament mapping preview

Timelapse Editor
Built-in timelapse editor with trim, speed, and music

Projects
Group related prints into projects

Project Detail
Project detail view with assigned archives

Project Detail Timeline
Project timeline and print history

Queue
Print scheduling and queue management

Schedule Print
Schedule prints for specific date and time

Statistics
Customizable statistics dashboard

Maintenance
Maintenance tracking per printer

Maintenance Settings
Configure maintenance types and intervals

Cloud Profiles
Bambu Cloud filament profiles

Cloud Profiles Edit
Edit filament preset settings

K-Profiles
Pressure advance (K-factor) profiles

K-Profiles Edit
Edit K-factor profile settings

Settings
General configuration and integrations

Smart Plugs
Smart plug control and energy monitoring

Notifications
Multi-provider notification system

API Keys
API keys and webhook endpoints

Virtual Printer Settings
Virtual printer configuration

Slicer Virtual Printer
Virtual printer appears in Bambu Studio/Orca Slicer

MQTT Debug Log
MQTT debug logging for troubleshooting

Quick Power Plug
Quick power plug control in sidebar


🚀 Quick Start

Requirements

  • Python 3.10+ (3.11/3.12 recommended)
  • Bambu Lab printer with Developer Mode enabled (see below)
  • "Store sent files on external storage" enabled in Bambu Studio/OrcaSlicer
  • Same local network as printer

Installation

Option A: Pre-built image (fastest)

mkdir bambuddy && cd bambuddy
curl -O https://raw.githubusercontent.com/maziggy/bambuddy/main/docker-compose.yml
docker compose up -d

Option B: Build from source

git clone https://github.com/maziggy/bambuddy.git
cd bambuddy
docker compose up -d --build

Open http://localhost:8000 in your browser.

Multi-architecture support: Pre-built images are available for linux/amd64 and linux/arm64 (Raspberry Pi 4/5).

macOS/Windows users: Docker Desktop doesn't support network_mode: host. Edit docker-compose.yml: comment out network_mode: host and uncomment the ports: section. Printer discovery won't work - add printers manually by IP.

Linux users: If you get "permission denied" errors, either prefix commands with sudo (e.g., sudo docker compose up -d) or add your user to the docker group.

Docker Configuration & Commands

Environment Variables:

Variable Default Description
TZ UTC Your timezone (e.g., America/New_York, Europe/Berlin)
PORT 8000 Port BamBuddy runs on (with host networking mode)
DEBUG false Enable debug logging
LOG_LEVEL INFO Log level: DEBUG, INFO, WARNING, ERROR

Data Persistence:

Volume Purpose
bambuddy.db SQLite database with all your print data
archive/ Archived 3MF files and thumbnails
logs/ Application logs

Updating:

# Pre-built image: just pull the latest
docker compose pull && docker compose up -d

# From source: rebuild after pulling changes
cd bambuddy && git pull && docker compose up -d --build

Useful Commands:

# View logs
docker compose logs -f

# Stop/Start
docker compose down
docker compose up -d

# Shell access
docker compose exec bambuddy /bin/bash

Custom Port:

ports:
  - "3000:8000"  # Access on port 3000

Reverse Proxy (Nginx):

server {
    listen 443 ssl http2;
    server_name bambuddy.yourdomain.com;

    ssl_certificate /path/to/cert.pem;
    ssl_certificate_key /path/to/key.pem;

    location / {
        proxy_pass http://localhost:8000;
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "upgrade";
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
        proxy_read_timeout 86400;
    }
}

Note: WebSocket support is required for real-time printer updates.

Network Mode Host (required for printer discovery and camera streaming):

services:
  bambuddy:
    build: .
    network_mode: host

Note: Docker's default bridge networking cannot receive SSDP multicast packets for automatic printer discovery. When using network_mode: host, Bambuddy auto-detects your network subnet and can discover printers via subnet scanning in the Add Printer dialog.

Windows (Portable Launcher)

The easiest way to run Bambuddy on Windows - no installation required:

git clone https://github.com/maziggy/bambuddy.git
cd bambuddy
start_bambuddy.bat

Double-click start_bambuddy.bat and it will:

  • Download Python and Node.js automatically (portable, no system changes)
  • Install dependencies and build the frontend
  • Open your browser to http://localhost:8000

Everything is stored in the .portable\ folder. Use start_bambuddy.bat reset to clean up.

Custom port: set PORT=9000 & start_bambuddy.bat

Manual Installation (Linux/macOS)

# Clone and setup
git clone https://github.com/maziggy/bambuddy.git
cd bambuddy
python3 -m venv venv
source venv/bin/activate
pip install -r requirements.txt

# Run
uvicorn backend.app.main:app --host 0.0.0.0 --port 8000

Open http://localhost:8000 and add your printer!

Need detailed instructions? See the Installation Guide

Enabling Developer Mode

Developer Mode allows third-party software like Bambuddy to control your printer over the local network.

  1. On printer: Settings → Network → LAN Only Mode → Enable
  2. Enable Developer Mode (appears after LAN Only Mode is enabled)
  3. Note the Access Code displayed
  4. Find IP address in network settings
  5. Find Serial Number in device info

Note: Developer Mode disables cloud features but provides full local control. Standard LAN Mode (without Developer Mode) only allows read-only monitoring.

Slicer Settings

In Bambu Studio or OrcaSlicer, enable "Store sent files on external storage" so that print files (3MF) are saved to the printer's SD card. Bambuddy needs these files to extract thumbnails and 3D model previews.

  1. Open Bambu Studio or OrcaSlicer
  2. Go to the Device tab for your printer
  3. Enable "Store sent files on external storage"

📚 Documentation

Full documentation available at wiki.bambuddy.cool:


🖨️ Supported Printers

Series Models
X1 X1, X1 Carbon, X1E
H2 H2D, H2D Pro, H2C, H2S
P1 P1P, P1S
P2 P2S
A1 A1, A1 Mini

🛠️ Tech Stack

Component Technology
Backend Python, FastAPI, SQLAlchemy
Frontend React, TypeScript, Tailwind CSS
Database SQLite
3D Viewer Three.js
Communication MQTT (TLS), FTPS

🤝 Contributing

Contributions welcome! Here's how to help:

  1. Test — Report issues with your printer model
  2. Translate — Add new languages
  3. Code — Submit PRs for bugs or features
  4. Document — Improve wiki and guides
# Development setup
git clone https://github.com/maziggy/bambuddy.git
cd bambuddy

# Backend
python3 -m venv venv && source venv/bin/activate
pip install -r requirements.txt
DEBUG=true uvicorn backend.app.main:app --reload

# Frontend (separate terminal)
cd frontend && npm install && npm run dev

See CONTRIBUTING.md for guidelines.


📄 License

MIT License — see LICENSE for details.


🙏 Acknowledgments

  • Bambu Lab for amazing printers
  • The reverse engineering community for protocol documentation
  • All testers and contributors

If you like Bambuddy and want to support it, you can buy Martin a coffee.


Made with ❤️ for the 3D printing community

Join our Discord • Report Bug • Request Feature • Documentation

S
Description
Your Bambu Lab. No Cloud. Your Rules. Self-hosted command center for Bambu Lab — from one A1 to an entire print farm.
Readme AGPL-3.0
853 MiB
Languages
Python 40%
TypeScript 34.8%
JavaScript 24.5%
Shell 0.5%
HTML 0.1%