**Bambuddy 1.2.5.7** **What this is** A feature release on top of 1.2.5.6. 25 new features, four changes, 40 fixes and four dependency advisories closed. 29 community PRs were merged, and 28 people are credited. The headline is **post-print outcome confirmation**. Until now a print that completed counted as a success, even if the part was warped or the wrong colour. A print can now ask whether it came out good, and the answer can come from the web UI, the printer card, a notification, or a 👍 / 👎 on the Telegram message. The File Manager gets the most new features: a Column view, larger previews with zoom and fullscreen, image previews, PDF thumbnails made on the server, notes, links and photos on library files, and **Combine to 3MF** for putting several STLs on one plate. Inventory gains material numbers and a managed supplier list. SSO logins can keep Bambuddy groups in step with the identity provider. Other applications can now sign people in with their Bambuddy account and send messages through your notification channels. Bambuddy itself can now show announcements from the maintainers. Several of the fixes are notifications that had a toggle but never fired: Low Filament, Reorder Alert and Stock Break Alert all send now. Read **Before you update** below: some alerts will fire right after the upgrade. New tables and columns are added automatically on both SQLite and PostgreSQL. There are no breaking API changes, but HMS fault `severity` values change; see below. If you are coming from 1.2.5.5 or earlier, read the 1.2.5.6 release notes too. If you are coming from 1.2.5 or earlier, read the 1.2.5 notes first; all of their upgrade callouts apply to you as well. **Before you update** These change behaviour you may rely on. None of them needs action unless it applies to your setup. - **Notifications that never fired now do.** Low Filament (#2913), Reorder Alert and Stock Break Alert (#2955) had toggles on every provider, but nothing ever sent them. If you switched Low Filament on in the past, expect one alert for each assigned spool that is already low right after updating, and again after each restart while it stays low. Stock alerts fire once per SKU when it reaches its reorder point or will run out before a reorder could arrive. - **HMS faults use the printer's own level (#2728).** The status response, WebSocket, Camera Wall and MQTT relay carry the new `severity` values, so anything that reads `severity` will see different numbers for the same fault. Printer-error notifications now also go out for `hms[]` faults that have a description, which almost never happened before, so you may get more of them. - **The queue starts jobs in the order the queue page shows (#3200).** Jobs pinned to a printer and jobs queued for "Any <model>" used to be ordered separately, and which one won a printer depended on the database. If your queue mixes both, jobs may now start in a different order than you are used to, namely the one on screen. - **Spoolman: each spool's own size is used (#3194).** Editing **Label Weight** now changes only that spool, not its filament. **Cost per kg** is converted at the spool's size, both ways. For 1000 g spools nothing changes. Spools that an earlier version reset with **Reset usage to 0** had their remaining weight overwritten in Spoolman and need re-weighing once (#2906). - **Announcements from the maintainers.** Bambuddy now fetches one signed file from the public `maziggy/bambuddy-notifications` repo on GitHub, at startup and every 6 hours. Nothing about your install is sent. Administrators see them by default. **Settings → General → Updates** can show them to every user, or turn them off entirely, in which case nothing is fetched. - **PostgreSQL: the default connection pool is now 80 instead of 100.** A stock PostgreSQL allows 97, so every install without its own `DB_POOL_SIZE` / `DB_MAX_OVERFLOW` logged a warning at startup. If you raised the server's `max_connections` and want the old ceiling, set `DB_MAX_OVERFLOW=80`. - **Telegram reactions need a bot of their own (#3129).** If you choose **Reaction (👍 / 👎)** as a Telegram provider's verdict mode, Bambuddy polls that bot for reactions. Another app polling the same bot, such as Home Assistant's Telegram integration, stops receiving its messages. In a group, the bot must be an admin to see reactions. - **A printer added by discovery with the wrong model keeps it.** The P-series code table was shifted, so a discovered P1S was saved as a P1P, a P1P as a P1S, and an X1E as a P2S. New printers are saved correctly. For one already saved wrong, pick the right model under **Model** in **Edit** from the printer card's menu. - **Native installs get one new Python dependency**, `pypdfium2`, for PDF thumbnails. The update script and the manual `pip install -r requirements.txt` below install it; it bundles its own binary, so no system package is needed. --- **How to update** **Docker** ```bash docker compose pull docker compose up -d ``` **Native install - recommended path** ```bash sudo BRANCH=main /opt/bambuddy/install/update.sh ``` **Native install - manual path** ```bash sudo systemctl stop bambuddy cd /opt/bambuddy sudo -u bambuddy git fetch --prune --tags --force origin sudo -u bambuddy git checkout main sudo -u bambuddy git reset --hard origin/main sudo /opt/bambuddy/venv/bin/pip install -r requirements.txt cd frontend && sudo npm i sudo systemctl start bambuddy ``` **Windows install** Download `bambuddy-1.2.5.7-windows-x64-setup.exe` from this release page (or the unversioned `bambuddy-windows-x64-setup.exe` alias). Existing Windows installs upgrade in place via the in-app Install Update flow. --- **New** **Print outcome:** - **Post-print outcome confirmation** (#1898, requested by @FedericoPuntelli, contributed by @Thomansky in #3047) - turn on **Ask for Outcome** in the print dialog, or as a default under Settings → Workflow, and Bambuddy asks "How did your print come out?" with the finish photo and **Good** / **Reject**. You can answer in the web UI, on the printer card, or from a notification: ntfy and Telegram get buttons, every other channel a link. A reject takes an optional reason and offers **Print again**. Unanswered prints get an **outcome?** badge and an **Unconfirmed** filter on the Archives page. - **Answer the outcome prompt with a Telegram reaction** (#3046, requested and contributed by @Thomansky in #3129) - a 👍 or 👎 on the message records the verdict. The phone only talks to Telegram, so it works away from home and needs no external URL. See **Before you update**. **File Manager:** - **Column view** (#3020, requested and contributed by @Thomansky in #3190) - a third view mode next to Grid and List, as in the macOS Finder: one column per folder level, with full keyboard navigation and the same actions as the list view. - **Larger previews with zoom and fullscreen, and image previews** (#2976, requested and contributed by @Thomansky in #2990) - PDF, spreadsheet and 3D previews share one large window with a fullscreen button. PDFs zoom with Ctrl/⌘ + wheel, pinch or keys. PNG, JPG, GIF, WebP and BMP get a preview with zoom and pan. Double-click a file to open its preview. - **PDF thumbnails as soon as the file arrives** (#2976) - page one is rendered on the server on upload, from ZIPs and from external folders. **Generate Thumbnails** backfills existing PDFs. - **External link, notes and photos on library files** (#3077, requested by @SergioFuchs, contributed by @Thomansky in #3128) - **File details** opens the file's facts, an editable notes field, a link and a photo gallery. - **Combine several STLs, or several copies of one, onto one plate** (#2999, requested by @Markus98, contributed by @adman234 in #3162) - select STLs, click **Combine to 3MF**, set the copies, and Bambuddy saves one 3MF with every object on one plate, optionally opening the Slice dialog with auto-arrange on. **Inventory and spools:** - **Material numbers** (#2870, requested and contributed by @Thomansky in #2994) - your own number per product, such as `15` for Bambu Lab PLA Basic, filled in automatically for new spools of the same product, with a column, filter, Bulk Edit and a **By Material Number** statistics widget. - **Suppliers as a managed list** (#2988, requested and contributed by @Thomansky in #2996) - assign any number of suppliers to a spool, each with an article number and a quoted price per kg, mark where it was bought, and see consumption and cost **By Supplier** in Statistics. - **Find a spool by its label number, and assign it to a slot from the spool** (#2978, requested and contributed by @pd81 in #2998) - `#3` finds only spool 3, and a spool without a slot has an **Assign Spool** button, which is also where scanning its QR code lands. - **Choose what goes on a spool label, preview it, and save labels as PNG** (#2981, requested by @apizz) - a checkbox per line, a live preview, and PNG output at 203, 300 or 600 dpi for label printer software. - **Ambient drying can wait for sustained humidity** (#2518, requested by @ryansouza, contributed by @M2ABRAMSTANK in #2895) - opening the AMS lid no longer starts a drying cycle of up to 12 hours. Off by default; 15 minutes when switched on. **Queue and printing:** - **Queue cards show the filament each job will print with** (#3132, requested and contributed by @bgrr74 in #3184) - colour swatches and names, the mapped slot and spool, and a yellow warning when a mapped slot has been emptied since. - **Colour swatches for printer slots in the Print / Schedule dialog** (#3159, requested by @frantiseklorenc) - each slot shows its actual colour and hex, so a real colour mismatch can be told apart from two names for the same colour. - **A batch can record the external order it fulfils** - `external_source` and `external_ref` on `POST /queue/batches`, unique together, so an integration that retries can't queue the same order twice. **Notifications and camera:** - **Camera snapshots reach more notifications and more providers** (#3089, requested and contributed by @bbbenji in #3199) - Plate Not Empty and AI Failure Detection carry a photo; Home Assistant, Bark and Slack-format webhooks get photos too, with an **Attach Photo** switch per provider. - **Other applications can send messages through your notification channels** - a per-provider **Messages from connected apps** switch, off by default, and an API key with the new **Send Notifications** permission. - **The streaming overlay can show the printer model** (#3080, requested and contributed by @adamspicedev in #3099 and #3134). - **A second streaming overlay design, for portrait and landscape sources** (#3177, requested and contributed by @adamspicedev in #3183) - **Artwork: Version 2**; Classic stays the default. **Accounts, integrations and the app itself:** - **SSO group sync** (#3107, requested and contributed by @willuhmjs in #3122) - each OIDC provider gains a **Group Claim** and a **Group Mapping**, and the mapped Bambuddy groups follow the identity provider on every login, the same rule as LDAP group mapping. - **Connected apps** - other applications can sign people in with their Bambuddy account (OAuth 2.0 authorization code with PKCE), registered under Settings → API Keys → Connected Apps. Requires authentication to be enabled. - **Announcements from the Bambuddy maintainers, inside Bambuddy** - security fixes, breaking changes, releases and calls for testers, signed and fetched from GitHub. See **Before you update**. - **An app shown in the sidebar can match Bambuddy's theme, and open a Bambuddy page in place** - the framed page is told the theme, and can ask Bambuddy to open one of its own pages. Both only for the link's own origin. - **The API-key printer status carries layers, the job id, HMS faults and the serial** (#2919, requested by @simplytoast1) - additive; existing fields are unchanged. **Changed** - **The Slice dialog uses more of a large screen** - up to 1536 px wide, with a left column that grows with it. - **A STEP preview says it is converting, and for how long** (#2976) - a large STEP file can take over a minute in the browser, and now shows a running counter instead of a spinner that looked stuck. - **Leftover Web Push code and the unused `pywebpush` dependency are gone** (#3171). - **The frontend build no longer warns about `path` and `crypto` for the STEP previewer** (#2976). **Fixes** **AMS slots, K profiles and drying:** - AMS slots that lost their K profile after a printer restart stayed on the default K, and queued jobs printed with it (#3219). Bambuddy now restores a lost selection while the printer is idle and checks again right before a queued job is sent. - A slot that read empty for one status update lost its spool assignment for good (#3186, reported by @Sawtaytoes). - Orca Cloud filaments assigned to an AMS slot showed up in OrcaSlicer as Generic (#3216, reported by @mrnoisytiger). - A drying command the AMS never started showed as an active cycle and could hold the queue forever (#2896, contributed by @M2ABRAMSTANK in #3096). - Re-reading a slot's RFID reported success when the printer refused, and older firmware now gets the command it understands (#3206, reported by @Sawtaytoes). - Filament printed from the external spool was deducted from an AMS spool (#3166; also #2880). **Spools, inventory, Spoolman and SpoolBuddy:** - In Spoolman mode, a spool's own size was ignored in favour of its filament's, so a 250 g spool was charged as if it held 1000 g (#3194, reported by @worried-networking). - In Spoolman mode, weighing ignored the vendor's empty spool weight (#3195, reported by @worried-networking). - A Spoolman spool's own empty spool weight was never saved (#2908, contributed by @ojimpo in #3011). - "Reset usage to 0" on a Spoolman spool set it back to full (#2906, contributed by @ojimpo in #2939). - A new Bambu Lab roll in Spoolman mode was linked to another product line of the same colour (#2907, contributed by @ojimpo in #2944). - SpoolBuddy showed multi-colour and effect spools as one flat colour (#3033, reported by @Sawtaytoes). - "Print labels…" ignored the spools you had ticked (#2980, reported by @apizz). **Queue and dispatch:** - A printer that refused uploads emptied the print queue: one P2S failed 43 jobs in ten minutes (#3210, reported by @Leander-Vh). Those jobs now stay queued and the printer is retried with a growing wait. - The queue did not start jobs in the order shown when pinned and "Any <model>" jobs were mixed (#3200, reported by @bgrr74). - A queued file whose only plate isn't plate 1 hung the printer (#2947, contributed by @sgiffhorn in #2951). **Notifications and HMS:** - The Reorder Alert and Stock Break Alert notifications were never sent (#2955, contributed by @ojimpo in #3196), and their toggles could never be turned on (#2945, regression tests contributed by @ojimpo in #2956). - The Low Filament notification never fired (#2913, contributed by @ojimpo in #2940). - Progress milestones sent 75% at the start of a print, and then never sent 25% or 50% (#3211, reported by @BurgerKerman). - The `{finish_photo_url}` link in a notification failed when authentication was on. - HMS faults now show Bambu's own description and the right level, and faults without published text no longer vanish (#2728, reported by @gzimbric). - A print the printer's AI camera stopped for spaghetti was archived with no failure reason (#2946, contributed by @ojimpo in #2954). **Camera and stream overlay:** - A built-in camera could show the same old picture for hours while reporting a healthy stream (#3218, reported by @adamspicedev; also #3189, reported by @Sawtaytoes). - A live camera view stopped for good after about half an hour on X1, H2 and P2 printers. - The stream overlay's camera stayed frozen until its browser source was refreshed (#3205, contributed by @adamspicedev in #3213). - Stream overlay and Cam Wall links stopped working after a reload, and signed the browser out (#3204, contributed by @adamspicedev in #3212). **Login and directory:** - LDAP group mapping found no groups on lldap and OpenLDAP, and StartTLS never worked with Active Directory or Samba AD (#3197, reported by @TOFM). - Remember Me disappeared from the login page when only SSO sign-in was allowed (#2784, contributed by @vuthanhtrung2010 in #3117). **File Manager and interface:** - PDF previews failed on any browser older than Chrome 145 or Firefox 144 (#2976). - The File Manager stopped 64 px short of the bottom of the window (#3215, reported by @koder-guy). - Number fields could not be cleared and retyped (#3182, reported by @Carter3DP). - Settings tabs lost their icons when a label was long (#3191, contributed by @Thomansky in #3192). - Reading a 3MF's details loaded all of its geometry into memory. **Install, platform and database:** - Installing or updating ran out of memory on 2 GB machines, such as a standard Proxmox LXC or a 2 GB Raspberry Pi (#3181, reported by @PhilippeP62). - PostgreSQL installs warned at every start that the connection pool may exceed the server. See **Before you update**. - Turning off "Check printer firmware" did not stop every firmware lookup. - Saving an empty value for a number setting through the API broke the Settings page until the database was fixed by hand. An affected install now recovers on its own. - A P1P, P1S or X1E added by discovery was saved as the wrong printer. - A connection check that overran in the support bundle discarded everything it had found (#3164). **Security (dependencies)** - `PyJWT` to 2.15.1 and `urllib3` to 2.8.0. Bambuddy's session tokens and SSO sign-in were not open to the PyJWT issues; the fixes for malformed tokens and key sets do reach SSO sign-in. - `dompurify` to 3.4.16, for a low-severity advisory in a mode Bambuddy does not use. - `js-yaml` to 5.4.2 and `brace-expansion` to 5.0.12, both development-only; neither is in the shipped image. **Merged community PRs in this release** - #2895 by @M2ABRAMSTANK - sustained humidity for ambient drying. - #2939, #2940, #2944, #2954, #2956, #3011, #3196 by @ojimpo - Spoolman reset, empty-weight and product-line fixes, Low Filament and stock alerts, AI spaghetti failure reason. - #2951 by @sgiffhorn - queued files whose only plate isn't plate 1. - #2990, #2994, #2996, #3047, #3128, #3129, #3190, #3192 by @Thomansky - File Manager previews, material numbers, suppliers, outcome confirmation, library file details, Telegram reactions, Column view, Settings tabs. - #2998 by @pd81 - spool ID search and assignment from the spool. - #3096 by @M2ABRAMSTANK - parked AMS drying commands. - #3099, #3134, #3183, #3212, #3213 by @adamspicedev - printer model and Version 2 design for the stream overlay, overlay links and camera recovery. - #3117 by @vuthanhtrung2010 - Remember Me with SSO-only login. - #3122 by @willuhmjs - SSO group sync. - #3162 by @adman234 - Combine to 3MF. - #3184 by @bgrr74 - filament on queue cards. - #3199 by @bbbenji - camera snapshots for more notifications. **Thanks** To everyone who requested, reported, captured logs, or contributed: @adamspicedev, @adman234, @apizz, @bbbenji, @bgrr74, @BurgerKerman, @Carter3DP, @FedericoPuntelli, @frantiseklorenc, @gzimbric, @koder-guy, @Leander-Vh, @M2ABRAMSTANK, @Markus98, @mrnoisytiger, @ojimpo, @pd81, @PhilippeP62, @ryansouza, @Sawtaytoes, @SergioFuchs, @sgiffhorn, @simplytoast1, @Thomansky, @TOFM, @vuthanhtrung2010, @willuhmjs, @worried-networking. --- **Sponsors** Bambuddy is sustainable thanks to people who put their money where their use is. If this release saved you time or kept your farm running, the project runs on recurring contributions - there's no paid tier, no telemetry, no upsell, just sustainable maintenance. - GitHub Sponsors (recurring, 5 tiers from $5/mo to $300/mo) - https://github.com/sponsors/maziggy - Ko-fi (one-time or recurring) - https://ko-fi.com/maziggy
Bambuddy
Your printers. No cloud. Your rules.
Self-hosted command center for Bambu Lab — from one A1 to an entire print farm.
🎮 Try the Live Demo • Features • Screenshots • Quick Start • Documentation • Discord • Contributing
Spin up your own private Bambuddy in ~10 seconds — no install, no signup, 30-minute session.
Important
H2-series and P2S owners — how you send a print decides what gets archived. Bambu Studio's Print button sends sliced files to the printer's internal memory, which Bambuddy cannot read — so those prints archive with a name and timing but no thumbnail, filament total or cost. The printer's "Store sent files on external storage" option does not change it (measured on an H2C and an H2D with it enabled); BambuStudio#10481 tracks the default upstream. Start the print from Bambuddy, or slice in OrcaSlicer — both put the file on the card in one step. Staying in Bambu Studio means using Send with External picked and starting the print afterwards, because Print itself offers no choice. All of them need a card or stick in the printer; X1 and P1 series are unaffected. Why this happens →
📰 As Featured In
"Bambuddy is the companion app that Bambu Lab should have built from day one." — Adam Conway, XDA-Developers
Two leading 3D-printing publications independently concluded that Bambuddy's feature set already exceeds Bambu's own cloud:
"The features seem to exceed those provided by Bambu Lab's own cloud." — Fabbaloo
"The list of functions seems so extensive that it even goes beyond what Bambu Lab offers in its own cloud." — 3Druck.com
🔐 NEW: Printer Access & Job Review — For Schools, FabLabs and Shared Farms
Decide who prints on which printer, and what gets printed at all.
- 🖨️ Printer access per group — Limit a group to single printers or to whole locations (a location covers every printer in it, including ones added later). Members see and control only those printers, everywhere: dashboard, cameras, queue, archives, statistics, maintenance and live updates. Manage it by group or by printer on the Printer access page; a printer card's Who has access shows it for one printer.
- 👀 Jobs that wait for review — Without the new Print Without Review permission, a user can still queue jobs, but each one waits with a Waiting for review badge until staff start it. Covers every way a job gets queued: the print dialog, the file manager, pipelines, API keys and the webhook.
- 🔑 Nothing changes until you want it to — Groups without printer limits keep every printer, existing groups keep the right to start jobs, and administrators always see everything. API keys, camera links and overlay tokens reach only the printers of whoever created them.
👉 Printer Access Guide → · Job Review →
💶 NEW: Billing & Cost Centers — Know Whose Budget a Print Came Out Of
For labs, makerspaces and departments that bill print time. Entirely optional, off by default.
- 🏷️ Cost centers — A team, a course, a customer or a grant to print against. Every user also gets a private one automatically.
- 📉 Budgets — An optional total or monthly limit per cost center. A queued print's cost is reserved while it waits, so ten queued jobs can't each pass a check only the last would fail.
- 📒 One ledger — Every charge, deposit, withdrawal and adjustment on the new Finance page. Costs are computed on the server, and a print that fails half way is charged only for the filament it actually used.
📋 NEW: Batch Orders — Print What Was Ordered, Not Just What Was Queued
An order knows how many of each plate you wanted, so a failed print still counts as owed.
- 🔢 A quantity per plate — Set how many runs of each plate you need; the new Batches tab on the Print Queue shows target, done, still owed and failed for every plate.
- 🔁 Queue what's still owed — After a failed run, Queue N remaining re-queues the missing prints with the same printer, AMS mapping and print options.
- 💰 Measured cost — Material plus energy from the runs that actually happened, per plate.
🌐 Remote Printing with Proxy Mode
Print from anywhere in the world — Bambuddy's Proxy Mode acts as a secure relay between your slicer and printer:
- 🔒 End-to-end TLS encryption — FTP, file transfer, and camera are transparently proxied with the printer's real TLS certificate
- 🛡️ 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.xto paste into the slicer when you want a virtual printer reachable over your tailnet (setup). Bambuddy's self-signed CA import is still required on the slicer side: Bambu Studio / 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. - 🌍 No cloud dependency — Direct connection through your own Bambuddy server
- 🔑 Uses printer's access code — No additional credentials needed
- ⚡ Full-speed printing — Transparent TCP proxy, only MQTT is decrypted for IP rewriting
Perfect for remote print farms, traveling makers, or accessing your home printer from work.
🍰 Integrated Slicing — Slice & Print, All In One Place
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.
- 🍰 One-click slicing — Slice from any browser. The job runs server-side in a tiny sidecar container, progress streams back as a toast, and the sliced file appears in your library when it's done.
- 📱 Slice from your phone or tablet — Bambuddy's PWA + the server-side slicer means you can drop an STL in from mobile and queue a print without ever touching a desktop.
- 🎒 Your own profiles — Pick printer, process and filament presets from your imported profiles, Orca Cloud, Bambu Cloud or the slicer's standard set.
- 🎛️ Full print settings — Process settings opens the slicer's whole parameter tree (Simple / Advanced / Expert, with search) so you can change walls, infill, supports or speeds for one slice. Slice as designed keeps the settings the file's designer saved instead.
- 🧭 Auto-orient and auto-arrange — Let the slicer turn parts onto their best side and lay them out on the plate. Combine to 3MF in the File Manager puts several STLs, or copies of one, onto a single plate first.
- 🔄 Re-slice for a different printer in one click — Open any sliced archive in Bambuddy and re-slice it for any printer, including across the single-nozzle ↔ dual-nozzle (H2D / H2D Pro) boundary that BambuStudio's CLI would normally reject. Bambuddy detects the class change and auto-arranges objects laid out for the source bed (e.g. X1C 256×256) so they land safely on the target (e.g. H2D 350×320 with its per-nozzle dead zones).
- 🍱 Slice all plates at once — Multi-plate projects (parted statues, multi-part kits) get a "Slice all N plates" toggle in the Slice dialog. One click produces a single
.gcode.3mfcontaining every plate's gcode, ready for the printer. The toast shows "Plate 2 of 5 — Generating G-code (47%)" as the loop runs. - 🔁 Same dispatch as the rest of Bambuddy — The sliced output flows into the existing queue / plate-picker / AMS-mapping path, so all the regular conveniences (multi-printer dispatch, AMS routing, scheduled prints) just work.
Optional but recommended — drop the slicer-api/ Compose stack next to your Bambuddy install and the Slice button lights up everywhere.
🧩 Slicer Pipelines — Save a Recipe, Reuse in One Click
Stop re-picking the same printer + process + filament + bed-type combination every slice. Save a Slicer Pipeline once from the Slice dialog, then apply the whole bundle to any file with a single click — from File Manager, Archives, or MakerWorld imports.
- 🧩 One-click reuse — A pipeline captures the entire Slice modal selection (printer + process + per-AMS-slot filaments + bed type) and surfaces as Run with pipeline → <name> on every sliceable row.
- 🎯 Specific printer or printer class — Pin a pipeline to one printer, or to a class (e.g. any X1C) and let the queue scheduler pick the first available match. Identical-fleet farms get a single recipe instead of one-per-printer.
- 🪢 Multi-copy fanout — Slice once, dispatch up to N copies. With class targeting the copies fan out across the matching printers in parallel — Spread (fastest wall-clock), Single printer (minimise colour-change overhead), or First N (one to each).
- 📊 Runs dashboard — A new Pipelines tab on the Print Queue page lists every run with colour-coded status badges (queued / slicing / dispatching / in-progress / completed / partial-failure / failed / cancelled), per-copy detail on expand, filter dropdowns (Pipeline / Status / Target), and a Retry failed button that re-runs only the copies that didn't complete — successful copies are never re-printed.
- 🔒 Permission-gated — Three permissions (
pipelines:read/pipelines:write/pipelines:run) let you split authoring the recipe from spending filament with it.
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
📊 Monitoring & Control
⏰ Scheduling & Automation
📁 File Manager (Library)
🌍 MakerWorld Integration
📁 Projects
|
🔔 Notifications
🧵 Spool Inventory
🔧 Integrations
🖨️ Virtual Printer & Remote Printing
🛠️ Maintenance & Support
🔒 Optional Authentication
|
Plus: Configurable slicer (Bambu Studio / OrcaSlicer) • Customizable themes (style, background, accent) • Mobile responsive • Keyboard shortcuts • 15 languages (EN/DE/ES/FR/IT/JA/KO/NL/PT-BR/RU/SV/TR/UK/ZH-CN/ZH-TW) • Auto updates • Database backup/restore • System info dashboard
🎬 Demo
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.
Prefer a video walkthrough?
Click to watch the demo on YouTube
📸 Screenshots
Refreshed printer card in 1.2.5b2 — tighter layout, popovers for all controls (temperature setpoints, fan speeds, jog), and a bottom-aligned power row. The screenshots below predate the refresh.
Click to expand screenshots
Real-time printer monitoring with AMS status
Print archive with 3D preview and project assignment
Re-print with AMS filament mapping preview
Built-in timelapse editor with trim, speed, and music
Group related prints into projects
Project detail view with assigned archives
Project timeline and print history
Print scheduling and queue management
Schedule prints for specific date and time
Customizable statistics dashboard
Maintenance tracking per printer
Configure maintenance types and intervals
Pressure advance (K-factor) profiles
Edit K-factor profile settings
General configuration and integrations
Smart plug control and energy monitoring
Multi-provider notification system
API keys and webhook endpoints
Virtual printer appears in Bambu Studio/Orca Slicer
🚀 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
Windows (Native Installer)
Self-contained .exe — no Python, Node, Docker, or Git required on the target machine. The installer bundles Python 3.13, the React frontend, ffmpeg, and registers Bambuddy as a Windows service.
Download the latest installer:
https://github.com/maziggy/bambuddy/releases/latest/download/bambuddy-windows-x64-setup.exe
Run it (one-time UAC prompt — admin install) → Bambuddy starts as a Windows service and the dashboard opens at http://localhost:8000 automatically. Data lives at C:\ProgramData\Bambuddy\, install at C:\Program Files\Bambuddy\. To update, just run a newer installer over the existing install — your database and archives are preserved.
SmartScreen warning: until our SignPath OSS code-signing approval lands, you'll see "Windows protected your PC" on first run. Click More info → Run anyway.
See the Windows Installer Guide for service management, logs, and troubleshooting.
Docker (Linux / macOS / Windows via Docker Desktop)
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/amd64andlinux/arm64(Raspberry Pi 4/5).
macOS/Windows users: Docker Desktop doesn't support
network_mode: host. Edit docker-compose.yml: comment outnetwork_mode: hostand uncomment theports: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 (not used with PostgreSQL) |
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
Daily Beta Builds:
Beta builds with the latest fixes are pushed regularly to the same beta version tag:
# Pull the current beta
docker pull ghcr.io/maziggy/bambuddy:0.2.2b1
# or from Docker Hub
docker pull maziggy/bambuddy:0.2.2b1
Use Watchtower (image nickfedor/watchtower) to automatically update when new daily builds are pushed.
Note: Beta builds use version tags like
0.2.2b1— they are never tagged aslatest. Your stable installation won't auto-update to a beta unless you explicitly pull a beta tag.
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.
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 (--loop asyncio avoids a uvloop TLS bug that can truncate VP FTP uploads)
uvicorn backend.app.main:app --host 0.0.0.0 --port 8000 --loop asyncio
Open http://localhost:8000 and add your printer!
Need detailed instructions? See the Installation Guide
Windows Native Installation
Windows PowerShell (run as Administrator — the installer self-elevates via UAC if not):
powershell -ExecutionPolicy Bypass -Command "iwr -useb https://raw.githubusercontent.com/maziggy/bambuddy/main/install/windows-installer.ps1 -OutFile windows-installer.ps1; .\windows-installer.ps1"
Installs Bambuddy natively on Windows using Git, Python, a virtual environment, separate data/log directories, and optional NSSM Windows Service registration. See the Windows Installer Guide for parameters and unattended-install options.
Enabling Developer Mode
Developer Mode allows third-party software like Bambuddy to control your printer over the local network.
- On printer: Settings → Network → LAN Only Mode → Enable
- Enable Developer Mode (appears after LAN Only Mode is enabled)
- Note the Access Code displayed
- Find IP address in network settings
- 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.
- Open Bambu Studio or OrcaSlicer
- Go to the Device tab for your printer
- In Print Options, enable Store Sent Files on External Storage
📚 Documentation
Full documentation available at wiki.bambuddy.cool:
- Installation — All installation methods
- Getting Started — First printer setup
- Features — Detailed feature guides
- Troubleshooting — Common issues & solutions
- API Reference — REST API documentation
🖨️ Supported Printers
| Series | Models |
|---|---|
| X1 | X1, X1 Carbon, X1E |
| X2 | X2D |
| H2 | H2D, H2D Pro, H2C, H2S |
| P1 | P1P, P1S |
| P2 | P2S |
| A1 | A1, A1 Mini |
| A2 | A2L |
🛠️ Tech Stack
| Component | Technology |
|---|---|
| Backend | Python, FastAPI, SQLAlchemy |
| Frontend | React, TypeScript, Tailwind CSS |
| Database | SQLite (default) or PostgreSQL |
| 3D Viewer | Three.js (models), libvgcode (G-code preview) |
| Communication | MQTT (TLS), FTPS |
🤝 Contributing
Contributions welcome! Ways to help:
- 📝 Document — Improve the wiki and guides (urgently needed!)
- Test — Report issues with your printer model
- Translate — Add new languages
- Code — Submit PRs for bugs or features
- 🔒 Security review — (specifically wanted, see below)
Not sure where to start? Reach out on Discord or email martin@bambuddy.cool — I'll help you find something that fits.
🔒 Looking for a security-focused contributor
I'm bringing on a contributor whose specific focus is keeping an eye on Bambuddy's security.
Concretely:
Track the dev branch and flag changes touching auth, permissions, token handling, or the CI security backstops. Async post-merge — no gating of in-flight PRs.
What matters more than formal qualifications: fail-closed thinking by default, comfortable reading the auth layer (FastAPI + SQLAlchemy on the backend, a small React surface), willing to push back on except Exception shapes in security-sensitive code.
No fixed time commitment. If you're interested — or know someone who fits — email martin@bambuddy.cool or DM on Discord.
See CONTRIBUTING.md for guidelines.
📄 License
AGPL-3.0 License — see LICENSE for details.
🙏 Acknowledgments
- SpoolEase by yanshay — early inspiration for NFC-based spool tracking and AMS inventory concepts
- Bambu Lab for amazing printers
- The reverse engineering community for protocol documentation
- All testers and contributors
💖 Support Bambuddy
Bambuddy stays independent because real people support it directly. If Bambuddy makes your printers more useful, please consider:
- GitHub Sponsors — five recurring tiers from $5/mo (Backer) to $300/mo (Corporate). Supporter+ ($15/mo) get access to a private sponsors space with a monthly newsletter and early release notes. Patron+ ($35/mo) vote on the quarterly roadmap. Sustaining Sponsor+ ($150/mo) get a direct async email line for technical questions (~2-3 business days). Corporate ($300/mo) get priority email response (next business day), README header logo, sitewide footer logo on bambuddy.cool, and Press page placement.
- Ko-fi — one-time tip or recurring.
Sponsors get listed in BACKERS.md. Need commercial support (SLA, multi-printer consulting)? Email martin@bambuddy.cool.
Made with ❤️ for the 3D printing community
Join our Discord •
Report Bug •
Request Feature •
Documentation








