[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"project-11691":3},{"id":4,"name":5,"fullName":6,"owner":7,"repo":5,"description":8,"homepage":9,"htmlUrl":10,"language":11,"languages":9,"totalLinesOfCode":9,"stars":12,"forks":13,"watchers":14,"openIssues":15,"contributorsCount":9,"subscribersCount":16,"size":16,"stars1d":17,"stars7d":18,"stars30d":19,"stars90d":16,"forks30d":16,"starsTrendScore":20,"compositeScore":21,"rankGlobal":9,"rankLanguage":9,"license":9,"archived":22,"fork":22,"defaultBranch":23,"hasWiki":22,"hasPages":22,"topics":24,"createdAt":9,"pushedAt":9,"updatedAt":37,"readmeContent":38,"aiSummary":39,"trendingCount":16,"starSnapshotCount":16,"syncStatus":40,"lastSyncTime":41,"discoverSource":42},11691,"bambuddy","maziggy\u002Fbambuddy","maziggy","Your Bambu Lab. No Cloud. Your Rules.  Self-hosted command center for Bambu Lab — from one A1 to a 40-printer farm. ",null,"https:\u002F\u002Fgithub.com\u002Fmaziggy\u002Fbambuddy","Python",1965,244,12,93,0,90,173,698,270,102.17,false,"main",[25,26,27,28,29,30,31,32,33,34,35,36],"3d-printing","3mf-files","bambu","bambu-studio","bambulab","3d-printer","3dprinting","filament","filamentadmin","gcode","self-hosted","selfhosted","2026-06-12 04:00:55","\u003Cp align=\"center\">\n  \u003Cimg src=\"static\u002Fimg\u002Fbambuddy_logo_dark.png\" alt=\"Bambuddy Logo\" width=\"300\">\n\u003C\u002Fp>\n\n\u003Ch1 align=\"center\">Bambuddy\u003C\u002Fh1>\n\n\u003Cp align=\"center\">\n  \u003Cstrong>Your printers. No cloud. Your rules.\u003C\u002Fstrong>\u003Cbr>\n  Self-hosted command center for Bambu Lab &mdash; from one A1 to a 40-printer farm.\n\u003C\u002Fp>\n\n\u003Cp align=\"center\">\n  \u003Ca href=\"https:\u002F\u002Fgithub.com\u002Fmaziggy\u002Fbambuddy\u002Freleases\">\u003Cimg src=\"https:\u002F\u002Fimg.shields.io\u002Fgithub\u002Fv\u002Frelease\u002Fmaziggy\u002Fbambuddy?style=flat-square&color=blue\" alt=\"Release\">\u003C\u002Fa>\n  \u003Cimg src=\"https:\u002F\u002Fgithub.com\u002Fmaziggy\u002Fbambuddy\u002Factions\u002Fworkflows\u002Fci.yml\u002Fbadge.svg?branch=main\">\n  \u003Cimg src=\"https:\u002F\u002Fgithub.com\u002Fmaziggy\u002Fbambuddy\u002Factions\u002Fworkflows\u002Fgithub-code-scanning\u002Fcodeql\u002Fbadge.svg\">\n  \u003Cimg src=\"https:\u002F\u002Fgithub.com\u002Fmaziggy\u002Fbambuddy\u002Factions\u002Fworkflows\u002Fsecurity.yml\u002Fbadge.svg\">\n  \u003Ca href=\"https:\u002F\u002Fgithub.com\u002Fmaziggy\u002Fbambuddy\u002Fblob\u002Fmain\u002FLICENSE\">\u003Cimg src=\"https:\u002F\u002Fimg.shields.io\u002Fgithub\u002Flicense\u002Fmaziggy\u002Fbambuddy?style=flat-square\" alt=\"License\">\u003C\u002Fa>\n  \u003Ca href=\"https:\u002F\u002Fgithub.com\u002Fmaziggy\u002Fbambuddy\u002Fstargazers\">\u003Cimg src=\"https:\u002F\u002Fimg.shields.io\u002Fgithub\u002Fstars\u002Fmaziggy\u002Fbambuddy?style=flat-square\" alt=\"Stars\">\u003C\u002Fa>\n  \u003Ca href=\"https:\u002F\u002Fgithub.com\u002Fmaziggy\u002Fbambuddy\u002Fissues\">\u003Cimg src=\"https:\u002F\u002Fimg.shields.io\u002Fgithub\u002Fissues\u002Fmaziggy\u002Fbambuddy?style=flat-square\" alt=\"Issues\">\u003C\u002Fa>\n  \u003Ca href=\"https:\u002F\u002Fdiscord.gg\u002FaFS3ZfScHM\">\u003Cimg src=\"https:\u002F\u002Fimg.shields.io\u002Fdiscord\u002F1461241694715645994?style=flat-square&logo=discord&logoColor=white&label=Discord&color=5865F2\" alt=\"Discord\">\u003C\u002Fa>\n  \u003Ca href=\"https:\u002F\u002Fgithub.com\u002Fsponsors\u002Fmaziggy\">\u003Cimg src=\"https:\u002F\u002Fimg.shields.io\u002Fbadge\u002FGitHub_Sponsors-Sponsor-ea4aaa?style=flat-square&logo=github-sponsors&logoColor=white\" alt=\"GitHub Sponsors\">\u003C\u002Fa>\n  \u003Ca href=\"https:\u002F\u002Fsponsors.bambuddy.cool\">\u003Cimg src=\"https:\u002F\u002Fimg.shields.io\u002Fbadge\u002FSponsors_Portal-sponsors.bambuddy.cool-2dd4bf?style=flat-square&logo=heart&logoColor=white\" alt=\"Sponsors Portal\">\u003C\u002Fa>\n  \u003Ca href=\"https:\u002F\u002Fko-fi.com\u002Fmaziggy\">\u003Cimg src=\"https:\u002F\u002Fimg.shields.io\u002Fbadge\u002FKo--fi-Support-ff5e5b?style=flat-square&logo=ko-fi&logoColor=white\" alt=\"Ko-fi\" target=_blank>\u003C\u002Fa>\n\u003C\u002Fp>\n\n\u003Cp align=\"center\">\n  \u003Ca href=\"https:\u002F\u002Fdemo.bambuddy.cool\">\u003Cstrong>🎮 Try the Live Demo\u003C\u002Fstrong>\u003C\u002Fa> •\n  \u003Ca href=\"#-features\">Features\u003C\u002Fa> •\n  \u003Ca href=\"#-screenshots\">Screenshots\u003C\u002Fa> •\n  \u003Ca href=\"#-quick-start\">Quick Start\u003C\u002Fa> •\n  \u003Ca href=\"http:\u002F\u002Fwiki.bambuddy.cool\">Documentation\u003C\u002Fa> •\n  \u003Ca href=\"https:\u002F\u002Fdiscord.gg\u002FaFS3ZfScHM\">Discord\u003C\u002Fa> •\n  \u003Ca href=\"#-contributing\">Contributing\u003C\u002Fa>\n\u003C\u002Fp>\n\n\u003Cp align=\"center\">\n  \u003Ca href=\"https:\u002F\u002Fdemo.bambuddy.cool\">\n    \u003Cimg src=\"https:\u002F\u002Fimg.shields.io\u002Fbadge\u002F🎮_Live_Demo-demo.bambuddy.cool-00ae42?style=for-the-badge&labelColor=0a0d14\" alt=\"Live Demo\">\n  \u003C\u002Fa>\n  \u003Cbr>\n  \u003Cem>Spin up your own private Bambuddy in ~10 seconds — no install, no signup, 30-minute session.\u003C\u002Fem>\n\u003C\u002Fp>\n\n---\n\n## 📰 As Featured In\n\n> **\"Bambuddy is the companion app that Bambu Lab should have built from day one.\"**\n> — Adam Conway, [XDA-Developers](https:\u002F\u002Fwww.xda-developers.com\u002Ffinally-have-full-control-bambu-lab-printer-ditched-bambu-cloud\u002F)\n\n\u003Cp align=\"center\">\n  \u003Ca href=\"https:\u002F\u002Fwww.xda-developers.com\u002Ffinally-have-full-control-bambu-lab-printer-ditched-bambu-cloud\u002F\">\u003Cimg src=\"https:\u002F\u002Fimg.shields.io\u002Fbadge\u002FXDA--Developers-Read-C8102E?style=flat-square\" alt=\"XDA-Developers\">\u003C\u002Fa>\n  \u003Ca href=\"https:\u002F\u002Fwww.howtogeek.com\u002Ffree-your-bambu-lab-3d-printer-from-the-cloud\u002F\">\u003Cimg src=\"https:\u002F\u002Fimg.shields.io\u002Fbadge\u002FHow--To%20Geek-Read-33A6CA?style=flat-square\" alt=\"How-To Geek\">\u003C\u002Fa>\n  \u003Ca href=\"https:\u002F\u002Fwww.fabbaloo.com\u002Fnews\u002Fbambuddy-launches-as-open-source-alternative-to-bambu-labs-cloud\">\u003Cimg src=\"https:\u002F\u002Fimg.shields.io\u002Fbadge\u002FFabbaloo-Read-F77B0F?style=flat-square\" alt=\"Fabbaloo\">\u003C\u002Fa>\n  \u003Ca href=\"https:\u002F\u002Fwww.igorslab.de\u002Fen\u002Fbambuddy-the-silent-alternative-to-the-bamboo-cloud\u002F\">\u003Cimg src=\"https:\u002F\u002Fimg.shields.io\u002Fbadge\u002FIgor's%20Lab-Read-E10000?style=flat-square\" alt=\"Igor's Lab\">\u003C\u002Fa>\n  \u003Ca href=\"https:\u002F\u002F3druck.com\u002Fen\u002Fprograms\u002Fbambuddy-open-source-tool-replaces-bambu-cloud-for-management-and-automation-of-3d-print-jobs-38153226\u002F\">\u003Cimg src=\"https:\u002F\u002Fimg.shields.io\u002Fbadge\u002F3Druck-Read-0080C0?style=flat-square\" alt=\"3Druck\">\u003C\u002Fa>\n  \u003Ca href=\"https:\u002F\u002Fwww.fastblinker.com\u002Fbambuddy-the-open-source-solution-thats-revolutionizing-bambu-lab-3d-printer-management\u002F\">\u003Cimg src=\"https:\u002F\u002Fimg.shields.io\u002Fbadge\u002FFastBlinker-Read-00B0FF?style=flat-square\" alt=\"FastBlinker\">\u003C\u002Fa>\n\u003C\u002Fp>\n\nTwo leading 3D-printing publications independently concluded that Bambuddy's feature set **already exceeds Bambu's own cloud**:\n\n> *\"The features seem to exceed those provided by Bambu Lab's own cloud.\"* — [Fabbaloo](https:\u002F\u002Fwww.fabbaloo.com\u002Fnews\u002Fbambuddy-launches-as-open-source-alternative-to-bambu-labs-cloud)\n>\n> *\"The list of functions seems so extensive that it even goes beyond what Bambu Lab offers in its own cloud.\"* — [3Druck.com](https:\u002F\u002F3druck.com\u002Fen\u002Fprograms\u002Fbambuddy-open-source-tool-replaces-bambu-cloud-for-management-and-automation-of-3d-print-jobs-38153226\u002F)\n\n📄 **[See all press coverage →](https:\u002F\u002Fbambuddy.cool\u002Fpress.html)**\n\n---\n\n## 🌐 NEW: Remote Printing with Proxy Mode\n\n\u003Cp align=\"center\">\n  \u003Cimg src=\"docs\u002Fimages\u002Fproxy-mode-diagram.png\" alt=\"Proxy Mode Architecture\" width=\"800\">\n\u003C\u002Fp>\n\n**Print from anywhere in the world** — Bambuddy's new Proxy Mode acts as a secure relay between your slicer and printer:\n\n- 🔒 **End-to-end TLS encryption** — FTP, file transfer, and camera are transparently proxied with the printer's real TLS certificate\n- 🛡️ **Optional Tailscale integration** — per-VP toggle + Docker socket mount surface the host's Tailscale IP on the VP card, so you know which `100.x.x.x` to paste into the slicer when you want a virtual printer reachable over your tailnet ([setup](https:\u002F\u002Fwiki.bambuddy.cool\u002Ffeatures\u002Fvirtual-printer\u002F)). Bambuddy's self-signed CA import is still required on the slicer side: Bambu Studio \u002F OrcaSlicer validate printer TLS against a bundled BBL CA (not the system trust store), **and** their Add Printer dialog is IP-only (no hostname to match an LE cert against), so a publicly-trusted cert can't help on either dimension. Tailscale's role is the private tunnel (reachability from anywhere, no port forwarding), not cert-import elimination.\n- 🌍 **No cloud dependency** — Direct connection through your own Bambuddy server\n- 🔑 **Uses printer's access code** — No additional credentials needed\n- ⚡ **Full-speed printing** — Transparent TCP proxy, only MQTT is decrypted for IP rewriting\n\nPerfect for remote print farms, traveling makers, or accessing your home printer from work.\n\n👉 **[Setup Guide →](https:\u002F\u002Fwiki.bambuddy.cool\u002Ffeatures\u002Fvirtual-printer\u002F#proxy-mode-new-in-017)**\n\n---\n\n## 🍰 NEW: Integrated Slicing — Slice & Print, All In One Place\n\n**No desktop slicer required.** Drop an STL or 3MF into Bambuddy's File Manager, hit **Slice**, and the result lands as a ready-to-print `.gcode.3mf` in the same folder — without ever opening Bambu Studio or Orca Slicer.\n\n- 🍰 **One-click slicing** — Slice from any browser. The job runs server-side in a [tiny sidecar container](slicer-api\u002FREADME.md), progress streams back as a toast, and the sliced file appears in your library when it's done.\n- 📱 **Slice from your phone or tablet** — Bambuddy's PWA + the new server-side slicer means you can drop an STL in from mobile and queue a print without ever touching a desktop.\n- 🎒 **Bring your own profiles** — Import a `Printer Preset Bundle` (`.bbscfg`) exported from Bambu Studio: pick a curated **printer + process + filament** triplet from a dropdown in the Slice dialog, no more juggling JSON files.\n- 🔁 **Same dispatch as the rest of Bambuddy** — The sliced output flows into the existing queue \u002F plate-picker \u002F AMS-mapping path, so all the regular conveniences (multi-printer dispatch, AMS routing, scheduled prints) just work.\n\nOptional but recommended — drop the [`slicer-api\u002F` Compose stack](slicer-api\u002FREADME.md) next to your Bambuddy install and the **Slice** button lights up everywhere.\n\n👉 **[Slicer Integration Guide →](https:\u002F\u002Fwiki.bambuddy.cool\u002Ffeatures\u002Fslicer-api\u002F)**\n\n---\n\n## Why Bambuddy?\n\n- **Own your data** — All print history stored locally, no cloud dependency\n- **Works offline** — Uses Developer Mode for direct printer control via local network\n- **Full automation** — Schedule prints, auto power-off, get notified when done\n- **Multi-printer support** — Manage your entire print farm from one interface\n\n---\n\n## ✨ Features\n\n\u003Ctable>\n\u003Ctr>\n\u003Ctd width=\"50%\" valign=\"top\">\n\n### 📦 Print Archive\n- Automatic 3MF archiving with metadata\n- 3D model preview (Three.js)\n- Duplicate detection & full-text search\n- Photo attachments & failure analysis\n- Timelapse editor (trim, speed, music) with automatic AVI-to-MP4 conversion for P1-series printers, manual upload & remove\n- 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\u002FH2D Pro, **Filament Track Switch (FTS) support** — when the FTS accessory is installed the per-nozzle filter is suppressed since the FTS routes any AMS slot to either extruder)\n- Plate thumbnail browsing for multi-plate archives (hover to navigate between plates)\n- Archive comparison (side-by-side diff)\n- Tag management (rename\u002Fdelete across all archives)\n- **Per-archive print history** — Each archive card shows an `N prints` badge whenever a model has been printed more than once (reprint + failed retries all counted). Click the badge for the full per-archive Print Log — every individual run with date, status, duration, filament used, cost, and failure reason. Reprints contribute new rows so a failed retry never overwrites the source archive's data — the original 100 g successful print stays visible alongside the 10 g failed reprint, and Quick Stats add up to 110 g across both events.\n- **Print Log** — Chronological table view of all print activity with columns for date\u002Ftime, 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.\n\n### 📊 Monitoring & Control\n- Real-time printer status via WebSocket\n- Live camera streaming (MJPEG) & snapshots with multi-viewer support — most Bambu printers only allow one upstream connection, so Bambuddy fans out a single shared stream to all browser tabs \u002F cards \u002F overlays\n- **Long-lived camera tokens** for Home Assistant \u002F Frigate \u002F kiosks — mint a token from Settings → API Keys, paste it once, capped at 365 days, revocable at any time (no infinite tokens — leaked permanent tokens are unsafe by design)\n- **Streaming overlay for OBS** - Embeddable page with camera + status for live streaming (`\u002Foverlay\u002F:printerId`), configurable FPS (`?fps=30`), status-only mode (`?camera=false`)\n- External camera support (MJPEG, RTSP, HTTP snapshot, USB\u002FV4L2) with layer-based timelapse\n- **Build plate empty detection** - Auto-pause print if objects detected on plate (multi-reference calibration, ROI adjustment)\n- Fan status monitoring (part cooling, auxiliary, chamber)\n- Printer control (stop, pause, resume, chamber light, print speed, **airduct mode** for P2S\u002FH2*, **build-plate Z-jog** with Studio-style not-homed warning)\n- **Status badges on printer card**: SD Card (green \u002F red), Enclosure Door (green \u002F yellow — X1\u002FP1S\u002FP2S\u002FH2*), Airduct Mode (cooling \u002F heating)\n- **Force Refresh** menu item — request a full status push from the printer without reconnecting\n- Bulk printer actions (multi-select cards, then stop\u002Fpause\u002Fresume\u002Fclear all — select by state or location)\n- Printer search and filters — live search by name\u002Fmodel\u002Flocation\u002Fserial plus status and location dropdown filters (WebSocket-reactive, mobile-friendly)\n- Resizable printer cards (S\u002FM\u002FL\u002FXL)\n- Skip objects during print\n- AMS slot RFID re-read\n- **AMS slot Load \u002F Unload from the printer card** — Hover any AMS slot or external spool, click the menu button, and load that tray or unload the currently-loaded one without going to the touchscreen; supports dual-extruder H2D (Ext-L \u002F Ext-R drive their own nozzle)\n- AMS slot configuration (model-filtered presets, K profiles, color picker, pre-population for configured slots)\n- AMS info card (hover for serial number, firmware version) with custom friendly names that persist across printers\n- **AMS remote drying** — Start, monitor, and stop drying sessions for AMS 2 Pro and AMS-HT directly from the Printers page with filament-based temperature\u002Fduration presets, optional spool rotation; automatic PSU detection and HMS power error reporting\n- **Queue auto-drying** — Automatically dry filament between scheduled prints when humidity exceeds threshold; configurable presets per filament type, optional blocking mode\n- **Ambient drying** — Automatically keep filament dry on idle printers based on humidity, regardless of whether prints are queued\n- Configurable drying presets per filament type (temperature & duration for AMS 2 Pro and AMS-HT)\n- Dual external spool support for H2D (Ext-L \u002F Ext-R)\n- HMS error monitoring with history and clear errors\n- Print success rates & trends\n- Filament usage tracking\n- Cost analytics & failure analysis\n- **AI print-failure detection** — Optional integration with a self-hosted [Obico](https:\u002F\u002Fgithub.com\u002FTheSpaghettiDetective\u002Fobico-server) ML API: watches each running print's camera feed, smooths scores over time (30-frame warmup + EWM + rolling means), and fires a configurable action once per print (notify \u002F pause \u002F pause-and-off)\n- Per-user statistics filtering (admin permission gated)\n- CSV\u002FExcel export\n\n### ⏰ Scheduling & Automation\n- **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)\n- Print queue with drag-and-drop and timeline schedule view\n- Multi-printer selection (send to multiple printers at once)\n- Batch print quantity (print multiple copies — set quantity in the print\u002Fschedule dialog, first copy prints immediately, rest are queued)\n- Staggered batch start (start printers in groups with configurable interval to avoid power spikes — works in both Print and Queue dialogs)\n- Configurable default print options (bed levelling, flow\u002Fvibration calibration, first layer inspection, timelapse) in Settings → Workflow\n- Model-based queue assignment (send to \"any X1C\" for load balancing) with location filtering\n- Filament override for model-based queue (swap filament colors\u002Ftypes before scheduling)\n- Filament validation (only assign to printers with required filaments)\n- Prefer lowest remaining filament (consume partial spools first when multiple match)\n- Per-printer AMS mapping (individual slot configuration for print farms)\n- Scheduled prints (date\u002Ftime)\n- Shortest Job First scheduling (SJF toggle on queue page — scheduler picks shorter prints first, with starvation guard)\n- Queue Only mode (stage without auto-start)\n- Clear plate confirmation between queued prints (can be disabled in settings for farm workflows)\n- Auto-print G-code injection (per-model start\u002Fend snippets for Farmloop, SwapMod, AutoClear, Printflow 3D — toggle per queue item)\n- Smart plug integration (Tasmota, Home Assistant, MQTT, REST\u002FWebhook)\n- REST smart plugs: Control any device with an HTTP API (openHAB, ioBroker, FHEM, Node-RED) with separate power\u002Fenergy URLs and unit multipliers\n- MQTT smart plugs: Subscribe to Zigbee2MQTT, Shelly, or any MQTT topic for energy monitoring\n- Energy consumption tracking (per-print kWh and cost) — restart-resilient: mid-print backend restarts no longer lose per-print energy\n- Energy statistics by date range (Today \u002F Week \u002F Month \u002F …) in total-consumption mode via hourly lifetime-counter snapshots\n- HA energy sensor support (for plugs with separate power\u002Fenergy sensors)\n- Auto power-on before print\n- Auto power-off after cooldown\n\n### 📁 File Manager (Library)\n- Upload and organize sliced files (3MF, gcode, STL)\n- **External folder mounting** - Mount host directories (NAS, USB, network shares) without copying files\n- **STL thumbnail generation** - Auto-generate previews for STL files on upload or batch generate for existing files\n- ZIP file extraction with folder structure preservation\n- Option to create folder from ZIP filename\n- Folder structure with drag-and-drop\n- Rename files and folders via context menu\n- Print directly to any printer with full options\n- Add to queue without creating archive upfront\n- Plate selection for multi-plate 3MF files\n- Duplicate detection via file hash\n- Mobile-friendly with always-visible action buttons\n- **Server-side Slice button** (optional) — slice STL\u002F3MF without a desktop slicer when the [`slicer-api\u002F` Compose stack](slicer-api\u002FREADME.md) is running; the result lands as a new `.gcode.3mf` in the same folder, with progress shown via a toast tracker that follows the job to completion. Supports importing **Bambu Studio Printer Preset Bundles** (`.bbscfg`) so a curated printer + process + filament triplet can be picked in the Slice dialog without re-uploading JSON profiles ([details](https:\u002F\u002Fwiki.bambuddy.cool\u002Ffeatures\u002Fslicer-api\u002F#slicer-bundles-bbscfg))\n\n### 🌍 MakerWorld Integration\n- Paste any `makerworld.com\u002Fmodels\u002F…` URL → preview, plate picker, and import without leaving Bambuddy\n- Per-plate **Save** or **Save & Slice in Bambu Studio \u002F OrcaSlicer** (your preferred slicer from Settings)\n- **Import all plates** button for multi-plate models\n- Auto-creates a \"MakerWorld\" folder in File Manager; override with any existing folder via the picker\n- Per-plate image gallery with keyboard-navigable lightbox\n- Recent imports sidebar — last 10 MakerWorld imports with one-click jump to File Manager or slicer\n- Remove-from-library for imported plates with confirm modal (no LAN cookie paste, no browser extension)\n- Reuses your existing Bambu Cloud login — no separate OAuth flow or browser extension to install\n\n### 📁 Projects\n- Group related prints (e.g., \"Voron Build\")\n- Track plates (print jobs) and parts separately\n- Auto-detect parts count from 3MF files\n- Color-coded project badges\n- **Project URL + cover photo** — paste a MakerWorld\u002FPrintables\u002FThingiverse link and upload a hero image so each card is immediately recognisable; the URL renders as a one-click link beside the project name\n- Bulk assign archives via multi-select toolbar\n- Import\u002FExport projects as ZIP (includes files) or JSON\n- Print or queue files from linked library folders directly in the project view (resulting archive auto-linked to the project)\n\n\u003C\u002Ftd>\n\u003Ctd width=\"50%\" valign=\"top\">\n\n### 🔔 Notifications\n- WhatsApp, Telegram, Discord\n- Email, Pushover, ntfy (with per-event priority — Min \u002F Low \u002F Default \u002F High \u002F Urgent)\n- Home Assistant persistent notifications\n- Custom webhooks\n- Quiet hours & daily digest\n- Customizable message templates with per-filament usage details\n- Print finish photo URL in notifications\n- Filament usage and progress in failed\u002Fcancelled print notifications\n- **Missing spool assignment warning** — Toast and push notification when a print starts with unassigned AMS trays\n- HMS error alerts (AMS, nozzle, etc.)\n- Build plate detection alerts\n- First layer complete alert (with camera snapshot)\n- Bed cooled alerts (configurable threshold)\n- Queue events (waiting, skipped, failed)\n\n### 🧵 Spool Inventory\n- Built-in spool inventory with AMS slot assignment, usage tracking, and remaining weight management\n- Automatic filament consumption tracking: 3MF slicer estimates for all spools (primary), AMS remain% delta as fallback\n- Mid-print spool reassignment support: uses live assignment if changed during print, snapshot otherwise\n- Per-layer gcode accuracy for partial prints (failed\u002Fcancelled), with linear scaling fallback\n- **Per-spool cost tracking** — Set cost\u002Fkg 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.\n- **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.\n- Spool catalog, color catalog, PA profile matching, and low-stock alerts\n- **Multi-colour gradients, transparency, and visual effects** — Paste a comma-separated hex list (e.g. from 3dfilamentprofiles.com) to render a spool as a gradient or conic colour wheel; transparency shows through a checkerboard so the alpha you set is the alpha you see; pick a visual effect (sparkle, wood, marble, glow, matte) for the swatch overlay. Same fields are editable on the colour catalog so combos can be reused across spools.\n- **Printable spool labels** — Generate PDF labels for any selection of spools in four pre-built sizes: AMS holder (30×15 mm), box label (62×29 mm), Avery L7160 sheet (A4, 21 per page), and Avery 5160 sheet (US Letter, 30 per page). Each label shows the colour swatch, brand, material, name, the **spool ID** (for at-a-glance identification across many similar spools), and a QR code that deep-links straight back to the spool's row in Bambuddy when scanned with a phone. Pick from the inventory page — search, filter by material, multi-select spools, then print or save to PDF.\n\n### 🔧 Integrations\n- [Spoolman](https:\u002F\u002Fgithub.com\u002FDonkie\u002FSpoolman) filament sync with per-filament usage tracking and fill level display\n- MQTT publishing for Home Assistant, Node-RED, etc.\n- **Prometheus metrics** - Export printer telemetry for Grafana dashboards\n- Bambu Cloud profile management\n- **Local Profiles** - Import OrcaSlicer presets (`.orca_filament`, `.bbscfg`, `.bbsflmt`, `.zip`, `.json`) without Bambu Cloud\n- K-profiles (pressure advance)\n- **GitHub backup** - Schedule automatic backups of cloud profiles, k profiles and settings to GitHub\n- **Scheduled local backups** - Automatic backup snapshots on hourly\u002Fdaily\u002Fweekly schedule with retention management and NAS-mountable output\n- External sidebar links\n- Webhooks & API keys\n  - Per-user ownership — each key acts on behalf of its creator\n  - Optional **cloud-access scope** — opt in to let an API key read its owner's Bambu Cloud presets \u002F filament catalogue \u002F device list (off by default)\n- Interactive API browser with live testing\n\n### 🖨️ Virtual Printer & Remote Printing\n- **🌐 Proxy Mode** — Print remotely from anywhere via secure TLS relay\n- **🪞 Live target-printer mirror in non-proxy modes (NEW!)** — Immediate \u002F Review \u002F Queue VPs now mirror their target printer's live state to the slicer: AMS slot contents, FTS \u002F dual-extruder routing, k-profiles, AMS load \u002F dry \u002F calibration commands, and the camera stream all flow through the VP. Use the slicer as a full remote for the printer behind the VP without giving up Bambuddy's queue \u002F archive \u002F dispatch features.\n- Emulates a Bambu Lab printer on your network\n- Send prints directly from Bambu Studio\u002FOrca Slicer\n- Configurable printer model (X1C, P1S, A1, H2D, etc.)\n- Archive mode, Review mode, Queue mode, or Proxy mode\n- Queue mode: optional **force-color-match** so the scheduler refuses to dispatch onto a printer with the wrong filament loaded\n- SSDP discovery (same LAN) or manual IP entry (VPN\u002Fremote)\n- Network interface override for multi-NIC\u002FDocker\u002FVPN setups\n- Secure TLS\u002FMQTT\u002FFTP communication\n\n### 🛠️ Maintenance & Support\n- Maintenance scheduling & tracking\n- Interval reminders (hours\u002Fdays)\n- Print time accuracy stats\n- File manager for printer storage\n- Firmware update helper with version badge (LAN-only printers) — lists all announced versions with Usable\u002FUnavailable\u002FInstalled badges and supports rollback to older firmware\n- Debug logging toggle with live indicator\n- Live application log viewer with filtering\n- Support bundle generator with comprehensive diagnostics (privacy-filtered)\n- **In-app bug reporting** — Submit bug reports directly from the UI with optional screenshot (upload, paste, or drag & drop), interactive debug log capture (start logging, reproduce at your own pace, stop & submit), and system info. Reports create GitHub issues via a secure relay. Privacy-first: all logs are sanitized and sensitive data (IPs, serials, credentials) is never included.\n\n### 🔒 Optional Authentication\n- Enable\u002Fdisable authentication any time\n- Group-based permissions (80+ granular permissions)\n- Default groups: Administrators, Operators, Viewers\n- JWT tokens with secure password hashing\n- Comprehensive API protection (200+ endpoints secured)\n- User management (create, edit, delete, groups)\n- User activity tracking (who uploaded archives, library files, queued prints, started prints)\n- **Per-user Bambu Cloud accounts** — Each user has their own independent Cloud login for profiles\n- **Advanced Auth via Email** — SMTP integration for automated user onboarding and self-service password resets\n- Admin creates users with email — system sends secure random password automatically\n- Users can reset their own password from the login screen (no admin needed)\n- Customizable email templates (welcome email, password reset)\n- **Two-Factor Authentication (TOTP + Email OTP)** — Per-user opt-in 2FA compatible with Google Authenticator, Authy, 2FAS and any standard TOTP app, or a 6-digit code delivered by email. Each user gets 10 single-use backup codes. Brute-force-protected (per-user + per-IP rate limits), replay-protected (same code cannot be accepted twice in the same 30 s window), and the pre-auth token is a single-use DB-backed challenge bound to the browser session via an HttpOnly cookie.\n- **Single Sign-On (OIDC \u002F SSO)** — Log in via PocketID, Authentik, Keycloak, or any standards-compliant OIDC provider. PKCE (S256) for public clients, `email_verified` gating, issuer & `aud`\u002F`nonce` validation, opt-in account linking via verified email, optional auto-provisioning of new BamBuddy accounts, and strict SSRF hardening on every URL pulled from the OIDC discovery document (scheme + private\u002Floopback\u002Flink-local IP checks).\n- **Per-user email notifications** — Users receive email alerts for their own print jobs (start, complete, failed, stopped) with individual toggle controls\n\n\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003C\u002Ftable>\n\n**Plus:** Configurable slicer (Bambu Studio \u002F OrcaSlicer) • Customizable themes (style, background, accent) • Mobile responsive • Keyboard shortcuts • Multi-language (EN\u002FDE\u002FJA\u002FIT) • Auto updates • Database backup\u002Frestore • System info dashboard\n\n---\n\n## 🎬 Demo\n\n\u003Cp align=\"center\">\n  \u003Ca href=\"https:\u002F\u002Fdemo.bambuddy.cool\">\n    \u003Cimg src=\"https:\u002F\u002Fimg.shields.io\u002Fbadge\u002F🎮_Try_It_Live-demo.bambuddy.cool-00ae42?style=for-the-badge&labelColor=0a0d14\" alt=\"Live Demo\">\n  \u003C\u002Fa>\n  \u003Cbr>\n  \u003Cem>Spin up your own private Bambuddy with simulated printers and pre-loaded print history. Click around freely — it's your sandbox. ~10 seconds to spawn, 30-minute session, no signup.\u003C\u002Fem>\n\u003C\u002Fp>\n\n\u003Cp align=\"center\">\n  \u003Cstrong>Prefer a video walkthrough?\u003C\u002Fstrong>\n\u003C\u002Fp>\n\n\u003Cp align=\"center\">\n  \u003Ca href=\"https:\u002F\u002Fyoutu.be\u002Fbmq2Z0lEXeo\">\n    \u003Cimg src=\"https:\u002F\u002Fimg.youtube.com\u002Fvi\u002Fbmq2Z0lEXeo\u002Fmaxresdefault.jpg\" alt=\"Bambuddy Demo Video\" width=\"800\">\n  \u003C\u002Fa>\n  \u003Cbr>\u003Cem>Click to watch the demo on YouTube\u003C\u002Fem>\n\u003C\u002Fp>\n\n---\n\n## 📸 Screenshots\n\n\u003Cdetails>\n\u003Csummary>\u003Cstrong>Click to expand screenshots\u003C\u002Fstrong>\u003C\u002Fsummary>\n\n\u003Cp align=\"center\">\n  \u003Cimg src=\"docs\u002Fscreenshots\u002Fprinters.png\" alt=\"Printers\" width=\"800\">\n  \u003Cbr>\u003Cem>Real-time printer monitoring with AMS status\u003C\u002Fem>\n\u003C\u002Fp>\n\n\u003Cp align=\"center\">\n  \u003Cimg src=\"docs\u002Fscreenshots\u002Farchives.png\" alt=\"Archives\" width=\"800\">\n  \u003Cbr>\u003Cem>Print archive with 3D preview and project assignment\u003C\u002Fem>\n\u003C\u002Fp>\n\n\u003Cp align=\"center\">\n  \u003Cimg src=\"docs\u002Fscreenshots\u002Freprint_ams_mapping.png\" alt=\"Reprint AMS Mapping\" width=\"800\">\n  \u003Cbr>\u003Cem>Re-print with AMS filament mapping preview\u003C\u002Fem>\n\u003C\u002Fp>\n\n\u003Cp align=\"center\">\n  \u003Cimg src=\"docs\u002Fscreenshots\u002Fedit-timelapse.png\" alt=\"Timelapse Editor\" width=\"800\">\n  \u003Cbr>\u003Cem>Built-in timelapse editor with trim, speed, and music\u003C\u002Fem>\n\u003C\u002Fp>\n\n\u003Cp align=\"center\">\n  \u003Cimg src=\"docs\u002Fscreenshots\u002Fprojects.png\" alt=\"Projects\" width=\"800\">\n  \u003Cbr>\u003Cem>Group related prints into projects\u003C\u002Fem>\n\u003C\u002Fp>\n\n\u003Cp align=\"center\">\n  \u003Cimg src=\"docs\u002Fscreenshots\u002Fproject-detail-1.png\" alt=\"Project Detail\" width=\"800\">\n  \u003Cbr>\u003Cem>Project detail view with assigned archives\u003C\u002Fem>\n\u003C\u002Fp>\n\n\u003Cp align=\"center\">\n  \u003Cimg src=\"docs\u002Fscreenshots\u002Fproject-detail-2.png\" alt=\"Project Detail Timeline\" width=\"800\">\n  \u003Cbr>\u003Cem>Project timeline and print history\u003C\u002Fem>\n\u003C\u002Fp>\n\n\u003Cp align=\"center\">\n  \u003Cimg src=\"docs\u002Fscreenshots\u002Fprint-queue.png\" alt=\"Queue\" width=\"800\">\n  \u003Cbr>\u003Cem>Print scheduling and queue management\u003C\u002Fem>\n\u003C\u002Fp>\n\n\u003Cp align=\"center\">\n  \u003Cimg src=\"docs\u002Fscreenshots\u002Fschedule-print.png\" alt=\"Schedule Print\" width=\"800\">\n  \u003Cbr>\u003Cem>Schedule prints for specific date and time\u003C\u002Fem>\n\u003C\u002Fp>\n\n\u003Cp align=\"center\">\n  \u003Cimg src=\"docs\u002Fscreenshots\u002Fstatistics.png\" alt=\"Statistics\" width=\"800\">\n  \u003Cbr>\u003Cem>Customizable statistics dashboard\u003C\u002Fem>\n\u003C\u002Fp>\n\n\u003Cp align=\"center\">\n  \u003Cimg src=\"docs\u002Fscreenshots\u002Fmaintenance-1.png\" alt=\"Maintenance\" width=\"800\">\n  \u003Cbr>\u003Cem>Maintenance tracking per printer\u003C\u002Fem>\n\u003C\u002Fp>\n\n\u003Cp align=\"center\">\n  \u003Cimg src=\"docs\u002Fscreenshots\u002Fmaintenance-2.png\" alt=\"Maintenance Settings\" width=\"800\">\n  \u003Cbr>\u003Cem>Configure maintenance types and intervals\u003C\u002Fem>\n\u003C\u002Fp>\n\n\u003Cp align=\"center\">\n  \u003Cimg src=\"docs\u002Fscreenshots\u002Fcloud_profiles-1.png\" alt=\"Cloud Profiles\" width=\"800\">\n  \u003Cbr>\u003Cem>Bambu Cloud filament profiles\u003C\u002Fem>\n\u003C\u002Fp>\n\n\u003Cp align=\"center\">\n  \u003Cimg src=\"docs\u002Fscreenshots\u002Fcloud_profiles-2.png\" alt=\"Cloud Profiles Edit\" width=\"800\">\n  \u003Cbr>\u003Cem>Edit filament preset settings\u003C\u002Fem>\n\u003C\u002Fp>\n\n\u003Cp align=\"center\">\n  \u003Cimg src=\"docs\u002Fscreenshots\u002Fk_profiles-1.png\" alt=\"K-Profiles\" width=\"800\">\n  \u003Cbr>\u003Cem>Pressure advance (K-factor) profiles\u003C\u002Fem>\n\u003C\u002Fp>\n\n\u003Cp align=\"center\">\n  \u003Cimg src=\"docs\u002Fscreenshots\u002Fk_profiles-2.png\" alt=\"K-Profiles Edit\" width=\"800\">\n  \u003Cbr>\u003Cem>Edit K-factor profile settings\u003C\u002Fem>\n\u003C\u002Fp>\n\n\u003Cp align=\"center\">\n  \u003Cimg src=\"docs\u002Fscreenshots\u002Fsettings-general.png\" alt=\"Settings\" width=\"800\">\n  \u003Cbr>\u003Cem>General configuration and integrations\u003C\u002Fem>\n\u003C\u002Fp>\n\n\u003Cp align=\"center\">\n  \u003Cimg src=\"docs\u002Fscreenshots\u002Fsettings-powerplugs.png\" alt=\"Smart Plugs\" width=\"800\">\n  \u003Cbr>\u003Cem>Smart plug control and energy monitoring\u003C\u002Fem>\n\u003C\u002Fp>\n\n\u003Cp align=\"center\">\n  \u003Cimg src=\"docs\u002Fscreenshots\u002Fsettings_notifications.png\" alt=\"Notifications\" width=\"800\">\n  \u003Cbr>\u003Cem>Multi-provider notification system\u003C\u002Fem>\n\u003C\u002Fp>\n\n\u003Cp align=\"center\">\n  \u003Cimg src=\"docs\u002Fscreenshots\u002Fsettings_api_keys.png\" alt=\"API Keys\" width=\"800\">\n  \u003Cbr>\u003Cem>API keys and webhook endpoints\u003C\u002Fem>\n\u003C\u002Fp>\n\n\u003Cp align=\"center\">\n  \u003Cimg src=\"docs\u002Fscreenshots\u002Fsettings-virtual-printer.png\" alt=\"Virtual Printer Settings\" width=\"800\">\n  \u003Cbr>\u003Cem>Virtual printer configuration\u003C\u002Fem>\n\u003C\u002Fp>\n\n\u003Cp align=\"center\">\n  \u003Cimg src=\"docs\u002Fscreenshots\u002Fslicer-virtual-printer.png\" alt=\"Slicer Virtual Printer\" width=\"800\">\n  \u003Cbr>\u003Cem>Virtual printer appears in Bambu Studio\u002FOrca Slicer\u003C\u002Fem>\n\u003C\u002Fp>\n\n\u003Cp align=\"center\">\n  \u003Cimg src=\"docs\u002Fscreenshots\u002Fmqtt-debug-log.png\" alt=\"MQTT Debug Log\" width=\"800\">\n  \u003Cbr>\u003Cem>MQTT debug logging for troubleshooting\u003C\u002Fem>\n\u003C\u002Fp>\n\n\u003Cp align=\"center\">\n  \u003Cimg src=\"docs\u002Fscreenshots\u002Fquick_power_plug_sidebar.png\" alt=\"Quick Power Plug\" width=\"400\">\n  \u003Cbr>\u003Cem>Quick power plug control in sidebar\u003C\u002Fem>\n\u003C\u002Fp>\n\n\u003C\u002Fdetails>\n\n---\n\n## 🚀 Quick Start\n\n### Requirements\n- Python 3.10+ (3.11\u002F3.12 recommended)\n- Bambu Lab printer with **Developer Mode** enabled (see below)\n- **\"Store sent files on external storage\"** enabled in Bambu Studio\u002FOrcaSlicer\n- Same local network as printer\n\n### Installation\n\n#### Docker (Recommended)\n\n**Option A: Pre-built image (fastest)**\n```bash\nmkdir bambuddy && cd bambuddy\ncurl -O https:\u002F\u002Fraw.githubusercontent.com\u002Fmaziggy\u002Fbambuddy\u002Fmain\u002Fdocker-compose.yml\ndocker compose up -d\n```\n\n**Option B: Build from source**\n```bash\ngit clone https:\u002F\u002Fgithub.com\u002Fmaziggy\u002Fbambuddy.git\ncd bambuddy\ndocker compose up -d --build\n```\n\nOpen **http:\u002F\u002Flocalhost:8000** in your browser.\n\n> **Multi-architecture support:** Pre-built images are available for `linux\u002Famd64` and `linux\u002Farm64` (Raspberry Pi 4\u002F5).\n\n> **macOS\u002FWindows 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.\n\n> **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](https:\u002F\u002Fdocs.docker.com\u002Fengine\u002Finstall\u002Flinux-postinstall\u002F).\n\n\u003Cdetails>\n\u003Csummary>\u003Cstrong>Docker Configuration & Commands\u003C\u002Fstrong>\u003C\u002Fsummary>\n\n**Environment Variables:**\n\n| Variable | Default | Description |\n|----------|---------|-------------|\n| `TZ` | `UTC` | Your timezone (e.g., `America\u002FNew_York`, `Europe\u002FBerlin`) |\n| `PORT` | `8000` | Port BamBuddy runs on (with host networking mode) |\n| `DEBUG` | `false` | Enable debug logging |\n| `LOG_LEVEL` | `INFO` | Log level: `DEBUG`, `INFO`, `WARNING`, `ERROR` |\n\n**Data Persistence:**\n\n| Volume | Purpose |\n|--------|---------|\n| `bambuddy.db` | SQLite database with all your print data (not used with PostgreSQL) |\n| `archive\u002F` | Archived 3MF files and thumbnails |\n| `logs\u002F` | Application logs |\n\n**Updating:**\n\n```bash\n# Pre-built image: just pull the latest\ndocker compose pull && docker compose up -d\n\n# From source: rebuild after pulling changes\ncd bambuddy && git pull && docker compose up -d --build\n```\n\n**Daily Beta Builds:**\n\nBeta builds with the latest fixes are pushed regularly to the same beta version tag:\n\n```bash\n# Pull the current beta\ndocker pull ghcr.io\u002Fmaziggy\u002Fbambuddy:0.2.2b1\n# or from Docker Hub\ndocker pull maziggy\u002Fbambuddy:0.2.2b1\n```\n\nUse [Watchtower](https:\u002F\u002Fcontainrrr.dev\u002Fwatchtower\u002F) to automatically update when new daily builds are pushed.\n\n> **Note:** Beta builds use version tags like `0.2.2b1` — they are never tagged as `latest`. Your stable installation won't auto-update to a beta unless you explicitly pull a beta tag.\n\n**Useful Commands:**\n\n```bash\n# View logs\ndocker compose logs -f\n\n# Stop\u002FStart\ndocker compose down\ndocker compose up -d\n\n# Shell access\ndocker compose exec bambuddy \u002Fbin\u002Fbash\n```\n\n**Custom Port:**\n\n```yaml\nports:\n  - \"3000:8000\"  # Access on port 3000\n```\n\n**Reverse Proxy (Nginx):**\n\n```nginx\nserver {\n    listen 443 ssl http2;\n    server_name bambuddy.yourdomain.com;\n\n    ssl_certificate \u002Fpath\u002Fto\u002Fcert.pem;\n    ssl_certificate_key \u002Fpath\u002Fto\u002Fkey.pem;\n\n    location \u002F {\n        proxy_pass http:\u002F\u002Flocalhost:8000;\n        proxy_http_version 1.1;\n        proxy_set_header Upgrade $http_upgrade;\n        proxy_set_header Connection \"upgrade\";\n        proxy_set_header Host $host;\n        proxy_set_header X-Real-IP $remote_addr;\n        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;\n        proxy_set_header X-Forwarded-Proto $scheme;\n        proxy_read_timeout 86400;\n    }\n}\n```\n\n> **Note:** WebSocket support is required for real-time printer updates.\n\n**Network Mode Host** (required for printer discovery and camera streaming):\n\n```yaml\nservices:\n  bambuddy:\n    build: .\n    network_mode: host\n```\n\n> **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.\n\n\u003C\u002Fdetails>\n\n#### Manual Installation (Linux\u002FmacOS)\n\n```bash\n# Clone and setup\ngit clone https:\u002F\u002Fgithub.com\u002Fmaziggy\u002Fbambuddy.git\ncd bambuddy\npython3 -m venv venv\nsource venv\u002Fbin\u002Factivate\npip install -r requirements.txt\n\n# Run\nuvicorn backend.app.main:app --host 0.0.0.0 --port 8000\n```\n\nOpen **http:\u002F\u002Flocalhost:8000** and add your printer!\n\n> **Need detailed instructions?** See the [Installation Guide](http:\u002F\u002Fwiki.bambuddy.cool\u002Fgetting-started\u002Finstallation\u002F)\n\n### Enabling Developer Mode\n\nDeveloper Mode allows third-party software like Bambuddy to control your printer over the local network.\n\n1. On printer: **Settings** → **Network** → **LAN Only Mode** → Enable\n2. Enable **Developer Mode** (appears after LAN Only Mode is enabled)\n3. Note the **Access Code** displayed\n4. Find IP address in network settings\n5. Find Serial Number in device info\n\n> **Note:** Developer Mode disables cloud features but provides full local control. Standard LAN Mode (without Developer Mode) only allows read-only monitoring.\n\n### Slicer Settings\n\nIn 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.\n\n1. Open **Bambu Studio** or **OrcaSlicer**\n2. Go to the **Device** tab for your printer\n3. In **Print Options**, enable **Store Sent Files on External Storage**\n\n---\n\n## 📚 Documentation\n\nFull documentation available at **[wiki.bambuddy.cool](http:\u002F\u002Fwiki.bambuddy.cool)**:\n\n- [Installation](http:\u002F\u002Fwiki.bambuddy.cool\u002Fgetting-started\u002Finstallation\u002F) — All installation methods\n- [Getting Started](http:\u002F\u002Fwiki.bambuddy.cool\u002Fgetting-started\u002F) — First printer setup\n- [Features](http:\u002F\u002Fwiki.bambuddy.cool\u002Ffeatures\u002F) — Detailed feature guides\n- [Troubleshooting](http:\u002F\u002Fwiki.bambuddy.cool\u002Freference\u002Ftroubleshooting\u002F) — Common issues & solutions\n- [API Reference](http:\u002F\u002Fwiki.bambuddy.cool\u002Freference\u002Fapi\u002F) — REST API documentation\n\n---\n\n## 🖨️ Supported Printers\n\n| Series | Models |\n|--------|--------|\n| X1 | X1, X1 Carbon, X1E |\n| X2 | X2D |\n| H2 | H2D, H2D Pro, H2C, H2S |\n| P1 | P1P, P1S |\n| P2 | P2S |\n| A1 | A1, A1 Mini |\n\n---\n\n## 🛠️ Tech Stack\n\n| Component | Technology |\n|-----------|------------|\n| Backend | Python, FastAPI, SQLAlchemy |\n| Frontend | React, TypeScript, Tailwind CSS |\n| Database | SQLite (default) or PostgreSQL |\n| 3D Viewer | Three.js |\n| Communication | MQTT (TLS), FTPS |\n\n---\n\n## 🤝 Contributing\n\nContributions welcome! Ways to help:\n\n1. **📝 Document** — Improve the wiki and guides *(urgently needed!)*\n2. **Test** — Report issues with your printer model\n3. **Translate** — Add new languages\n4. **Code** — Submit PRs for bugs or features\n\nNot sure where to start? Reach out on [Discord](https:\u002F\u002Fdiscord.gg\u002FaFS3ZfScHM) or email **martin@bambuddy.cool** — I'll help you find something that fits.\n\n```bash\n# Development setup\ngit clone https:\u002F\u002Fgithub.com\u002Fmaziggy\u002Fbambuddy.git\ncd bambuddy\n\n# Backend\npython3 -m venv venv && source venv\u002Fbin\u002Factivate\npip install -r requirements.txt\nDEBUG=true uvicorn backend.app.main:app --reload\n\n# Frontend (separate terminal)\ncd frontend && npm install && npm run dev\n```\n\nSee [CONTRIBUTING.md](CONTRIBUTING.md) for guidelines.\n\n---\n\n## 📄 License\n\nAGPL-3.0 License — see [LICENSE](LICENSE) for details.\n\n---\n\n## 🙏 Acknowledgments\n\n- [SpoolEase](https:\u002F\u002Fgithub.com\u002Fyanshay\u002FSpoolEase) by yanshay — early inspiration for NFC-based spool tracking and AMS inventory concepts\n- [Bambu Lab](https:\u002F\u002Fbambulab.com\u002F) for amazing printers\n- The reverse engineering community for protocol documentation\n- All testers and contributors\n\n---\n\n## 💖 Support Bambuddy\n\nBambuddy stays independent because real people support it directly. If Bambuddy makes your printers more useful, please consider:\n\n- **[GitHub Sponsors](https:\u002F\u002Fgithub.com\u002Fsponsors\u002Fmaziggy)** — five recurring tiers from $5\u002Fmo (Backer) to $500\u002Fmo (Corporate). Supporter+ ($15\u002Fmo) get access to a private sponsors space with a monthly newsletter and early release notes. Patron+ ($35\u002Fmo) vote on the quarterly roadmap. Sustaining Sponsor+ ($150\u002Fmo) get a direct async email line for technical questions (~2-3 business days). Corporate ($500\u002Fmo) get priority email response (next business day), README header logo, sitewide footer logo on [bambuddy.cool](https:\u002F\u002Fbambuddy.cool), and [Press page](https:\u002F\u002Fbambuddy.cool\u002Fpress.html) placement.\n- **[Ko-fi](https:\u002F\u002Fko-fi.com\u002Fmaziggy)** — one-time tip or recurring.\n\nSponsors get listed in [BACKERS.md](BACKERS.md). Need commercial support (SLA, multi-printer consulting)? Email `martin@bambuddy.cool`.\n\n---\n\n\u003Cp align=\"center\">\n  Made with ❤️ for the 3D printing community\n  \u003Cbr>\u003Cbr>\n  \u003Ca href=\"https:\u002F\u002Fdiscord.gg\u002FaFS3ZfScHM\">Join our Discord\u003C\u002Fa> •\n  \u003Ca href=\"https:\u002F\u002Fgithub.com\u002Fmaziggy\u002Fbambuddy\u002Fissues\">Report Bug\u003C\u002Fa> •\n  \u003Ca href=\"https:\u002F\u002Fgithub.com\u002Fmaziggy\u002Fbambuddy\u002Fissues\">Request Feature\u003C\u002Fa> •\n  \u003Ca href=\"http:\u002F\u002Fwiki.bambuddy.cool\">Documentation\u003C\u002Fa>\n\u003C\u002Fp>\n","Bambuddy 是一个用于 Bambu Lab 3D 打印机的自托管命令中心，支持从单台 A1 到 40 台打印机集群的管理。它允许用户在本地环境中全面控制其 3D 打印设备，无需依赖云端服务，确保数据隐私和操作自由度。项目基于 Python 开发，具备处理 G-code、3MF 文件以及耗材管理等核心功能，并提供直观的用户界面来监控打印任务状态、调整参数设置。适用于需要高度定制化或对数据安全有严格要求的小型工作室到大型制造工厂等各种规模的 3D 打印应用场景。",2,"2026-06-11 03:32:18","trending"]