Note
This is a daily beta build (2026-11-10). It contains the latest fixes and improvements but may have undiscovered issues.
Docker users: Update by pulling the new image:
docker pull ghcr.io/maziggy/bambuddy:daily
or
docker pull maziggy/bambuddy:daily
**Tip:** Use [Watchtower](https://watchtower.nickfedor.com) (image `nickfedor/watchtower`) to automatically update when new daily builds are pushed.
Added
- Personal access codes show who sent a file to a virtual printer (#1430) — A slicer signs in to a printer with one access code, so a virtual printer never knew who sent a file: in a school or makerspace, queue jobs and files had no owner. With auth on, every user now has a personal access code, at the top of Settings > Virtual Printer (copy it, or make a new one, which retires the old). Entered in Bambu Studio or OrcaSlicer instead of the virtual printer's own code, it works on any virtual printer in File Manager, Review or Queue mode, and what that slicer sends is the user's: the File Manager file, the queue jobs (which wait for a reviewer when the user's jobs must) and, in Review mode, the pending upload, whose file stays the sender's when someone else approves it. Each sign-in checks the user's account is active, that they may upload to the File Manager (plus queue jobs in Queue mode) and, for a virtual printer with a target printer, that the printer is one of theirs and they may see it, so a change of permissions or a new code takes effect at once. Sending files is all a personal code allows: the slicer's commands to the target printer (stop, pause, G-code, AMS) go through only for users with the printer control permission, checked at every command. An upload waiting for review keeps its own copy, so a later file of the same name can't replace it. The virtual printer's own code keeps working as before, without an owner. Not for Proxy mode. The slicer's camera view through a virtual printer with a target printer works with a personal code too, for a user allowed to watch that printer's camera: the printer checks the camera's code itself, so the virtual printer now signs the slicer in there with the printer's own code, and on port 322 the slicer sees the virtual printer's certificate (the one it already trusts for MQTT and FTP) instead of the printer's. The virtual printer's FTP sign-in now refuses an address for a minute after five wrong codes, as its MQTT sign-in already did, and on both a good sign-in no longer resets the count.
- A script adds the virtual printer certificate to the slicers — Bambu Studio and OrcaSlicer only connect to a virtual printer whose certificate is in their printer.cer file, and every slicer update or reinstall puts the original file back, so the certificate had to be added by hand again. The Slicer certificate card under Settings > Virtual Printer now downloads a script for Windows or Linux / macOS with this Bambuddy's certificate already in it. It finds Bambu Studio and OrcaSlicer, adds the certificate, and keeps the original file next to it. It changes nothing where the certificate is already there, and it removes an older certificate of the same Bambuddy, which would otherwise stop the slicer from connecting. On Windows it is a double-click: it asks for administrator rights, and it installs a task that adds the certificate again at every start, at every sign-in and once an hour, so a slicer update no longer breaks the connection (
/uninstallremoves the task). On Linux and macOS it runs with bash, and is run again after a slicer update. Wiki updated. - WLED lights show the printer's status (#1528, requested and contributed by d3nn3s08 in #3124) — A WLED controller can now show what each printer is doing. Under Settings > WLED, pick a printer, enter its WLED address and assign one of the presets saved in WLED to each state: Idle, Preparing, Printing, Paused, Finished, Failed / Error, Awaiting plate clear, Filament problem, HMS error and Offline. Colours, effects and segments stay in WLED; Bambuddy only switches presets. A state without a preset falls back to the next one that has one (a filament runout without its own preset shows Paused). Awaiting plate clear applies only while the queue's Require plate clear setting holds the printer, and Filament problem only when the printer paused because the filament ran out. An optional timeout switches Finished back to Idle. The page can test the connection, load the presets from WLED and try each preset on the strip. If WLED is unreachable, Bambuddy retries every 30 seconds and logs the outage once. Several printers can share one controller when each preset is saved with "Checked segments only". The tab needs the
printers:updatepermission. - Queue several selected files as separate jobs (#3462, requested and contributed by Eifel-Joe in #3471) — Selecting several sliced files in the File Manager and pressing Print always made them printer alternatives: one queue job, run by the first free printer of a matching model. Two files sliced for the same printer model were refused, so putting several parts into one printer's queue meant printing each file on its own. The print dialog now offers Alternatives or Separate jobs. Separate jobs puts one queue item per file into the queue, in the order of the list, with the printers (or Any [model]), plate per file, print options, schedule and quantity applying to every item; each item gets its filament mapping at dispatch, against its own file. The dialog picks what fits: two files for the same model start on Separate jobs, with Alternatives unavailable; files for different models start on Alternatives, as before. A version group is still printed as alternatives only. If the queue refuses a file, the files before it stay queued and a second Print, also after closing and reopening the dialog, continues with the rest without queueing anything twice. The toolbar button now reads Print (N files). Wiki updated.
- Cam Wall tiles show temperatures and finish time, and can pause, stop and switch the light (#3479, sponsor vote Q4 2026) — With the Full status overlay, every connected tile shows its nozzle (both on a dual-nozzle printer), bed and chamber temperatures, and a printing tile adds its finish time beside the time left. Hovering over a tile shows Pause/Resume and Stop, with the same confirmations as the printer card, and a chamber light switch; Tile controls: Always in the wall settings keeps them on screen, and a touch screen always shows them. The controls need the
printers:controlpermission; a user without it, an offline printer and a Cam Wall token (kiosk) wall get none.
Changed
- SpoolBuddy writes OpenTag3D 2.004 on NTAG215 and NTAG216 tags (#3500, suggested by pleasantone) — SpoolBuddy wrote the first version of the OpenTag3D layout. The current version moved every field, so a reader that only knows it read the brand, colour, weight and temperatures from the wrong places. Tags with room for it now get version 2.004, with material, brand, colour name, up to four colours, minimum and maximum print temperature, net weight and empty spool weight. Version 2 no longer fits on an NTAG213, so those keep the first version. SpoolBuddy picks by the size the tag reports, and falls back to the first version if it can't read it; a SpoolBuddy that hasn't been updated keeps writing the first version. Bambuddy does not track density or bed temperature, so a version 2 tag leaves them unset. Wiki updated.
- Virtual printer cards start collapsed — Settings > Virtual Printer opened every virtual printer's card with all its settings, so a few of them filled the page. Each card now shows only its header (name, mode, model, status) until it is clicked.
- Virtual printers put uploads in the File Manager, not the archive — An archive is a print that happened, but a virtual printer archived every file the slicer sent, in Archive, Review and Queue mode, before it ever printed. Uploads now go to the File Manager, and the archive gets the file when it prints, like any other File Manager print. Archive mode is now File Manager mode; virtual printers set to it switch over on upgrade, and archives they created before stay as they are. Each virtual printer card has a File Manager folder (by default a shared top-level folder named Virtual Printer; external folders can't be picked). The same file sent again under the same name into that folder doesn't make a second copy. Review mode stays: pending uploads now wait at the top of the File Manager page (the sidebar badge moved there too), and Add to File Manager stores them in the virtual printer's folder with their tags, notes and project (approving now needs the
library:uploadpermission as well asqueue:create, since it adds a file); the panel is translated now too. Queue mode stores the file and queues it from there, and a new switch, Remove from File Manager once it prints (off by default), takes it out of the File Manager when its print starts. With Save AMS mapping on, the slicer's tray pick still reaches the archive for reprints: the queue job keeps it until the print creates the archive, shows the saved-mapping badge meanwhile, and offers it under Mapping when edited. The virtual printer's archive-name setting (file name or 3MF title) applies to the archive made when the print starts. Wiki updated. - A queue virtual printer shows where its jobs go, and its target can be cleared — In Print Queue mode a virtual printer without a target printer sends each job to the next free printer of its model, but the card's target list only said "Select a printer...", and once a printer was picked there was no way back. The first entry now reads Any available [model] and switches the virtual printer back to that, and a line under the list says where the jobs go. The access code stays the same, so the slicer stays bound. In the other server modes the entry reads None; proxy mode still needs a printer. Wiki updated.
- Profile defaults is compact and has Apply all — Settings → Filament → Profile defaults showed every default as a large box with all its presets and K profiles, so a few products already filled the page. Each default is now one line (product, colour, slicer preset, and how many printer presets and K profiles it has), sorted by product, with a search box; click a line to see its presets and K profiles. The list scrolls on its own. Apply all applies every default to the spools in stock in one go, and like Apply to existing spools it only fills in what a spool doesn't have yet. Wiki updated.
- Slicer sidecars on Bambu Studio 02.09.01.70 and OrcaSlicer 2.5.0 (#3442) — The Bambu Studio sidecar now ships the H3C printer presets (0.2, 0.4, 0.6 and 0.8 mm nozzle). OrcaSlicer has no H3C presets yet. OrcaSlicer 2.5.0 ships its bundled presets in a new packed format, so the sidecar image now fetches the same release's presets as JSON for its preset handling. Slicing with a printer preset saved under a name of its own keeps working on 2.5.0; the sliced file then names the Bambu preset it was saved from as its printer preset. Sidecar images built for older slicer versions work as before.
- "Any model" jobs go to the printer with the fewest print hours (#3480, sponsor vote Q4 2026) — When several printers of a model can take a job, the queue used to pick the first one in its list, so on a farm the same printer got most of the work. It now picks the one with the fewest print hours (the Maintenance counter, including baseline hours entered there), so jobs and wear spread across the farm. Preferred colours still come first, and the queue powers on the least used printer too when it has to switch one on with an Auto Power On plug.
Fixed
- The SpoolBuddy kiosk works with its own device when several are registered (#3504, reported by pleasantone) — The kiosk's Write page always sent the write to the first registered device, which could be another kiosk or an old reader that had long been offline. The online state and display settings also came from that device, and every kiosk showed the weight and tags of every reader. The kiosk now works with one device: the one picked on its Write page, or else the device that is online. Write shows a choice of device when more than one is online, and the kiosk remembers it. Weight, tags and online state from other devices no longer show on it.
- A tag written with SpoolBuddy moves to the new spool (#3505, reported by pleasantone) — With Bambuddy's own inventory, writing a tag that already belonged to another spool linked it to the new spool but left it on the old one too, so scanning it could open the old spool. The tag now moves: the spool that had it gives it up, as it already did with Spoolman.
- SpoolBuddy checks a tag write instead of always reporting success (#3076, reported by jinjiangz, gaps found by pleasantone) — The PN5180 can't see a tag's answer to a write, so Write Tag reported success for every page it sent. SpoolBuddy now reads the written data back and fails the write if the tag holds something else, naming the page. If the tag doesn't answer the read-back, the write still counts, reported as not verified. A tag too small for the data is refused before anything is written, and so is a tag that isn't NDEF-formatted, such as a blank MIFARE Ultralight, which looks like an NTAG to the reader. Before, a write past its end was reported as successful. When the write's result couldn't reach Bambuddy straight away, the next heartbeat brought the same write back and SpoolBuddy ran it a second time, on whatever tag was then on the reader. It now waits until the result is through.
- HMS notifications are no longer sent again after a restart (#3502, reported by pleasantone) — The fix for #3486 remembers which printer errors were already notified, in a table that was never created: startup did not load its model, so every start logged "no such table: hms_notified_faults" and the errors were sent again. The table is now created on the next start.
- A backup from Windows restored on Linux or macOS finds its files (#3501, reported by Tech0verlord) — A Windows install stores the location of each archive, library file and print log entry with backslashes, which Linux and macOS read as part of the file name. After restoring a Windows backup on Docker or another Linux install, every archive showed no thumbnail and refused its 3D preview and reprint with "Archive data unavailable". The restore now turns those backslashes into slashes. It runs only during a restore, does nothing on Windows, and leaves a path alone when a file with that exact name exists. An install already restored from a Windows backup is fixed by restoring the backup again after updating.
- Tags written by SpoolBuddy can be read by phones and other readers (#3500, reported by pleasantone; likely #3076) — SpoolBuddy's Write Tag wrote a copy of the tag's Capability Container in front of the OpenTag3D data. On an NTAG tag that copy landed in the data area, where a phone, NFC Tools or another OpenTag3D reader took it for unknown data, skipped over the spool record and reported an empty tag, although the write had succeeded. Bambuddy itself was unaffected, since it links spools by the tag's ID. The data now starts with the spool record, and the tag's own Capability Container is left as it is. Tags written before need writing again for other readers to see them.
- An A2L with an AMS and an AMS Lite shows both (#3499, reported by auberonkai) — With an AMS 2 Pro and an AMS Lite attached to an A2L at the same time, the printer card showed only the external spool, until one of them was unplugged and the printer reconnected. Bambuddy failed to sort the two units, because the printer names a regular AMS with text and the AMS Lite with a number, and from then on it could not read the AMS data of any later update. Both units now show, in order, and an AMS update that can't be read no longer blocks the ones after it. The connection diagnostic also no longer fails an A2L on "Store sent files on external storage": neither the printer nor the slicers offer that option for it, so the check is skipped, as on the P1 series, and the explanation no longer names the P1 series only.
- Sliced projects keep their changed settings in Bambu Studio (#3497, reported by mdbook) — A 3MF sliced in Bambuddy with a system process preset carries the settings changed on top of it: what was set in the slice dialog's process settings, the designer's settings that were kept ticked, and the source file's supports. The slicer wrote their values into the project but did not mark them as changed from the preset, so Bambu Studio opened the project with the preset's own values and a re-slice there lost them. They are now marked as changed. Slices with a cloud or local preset, and those that use the file's own settings, are unchanged.
- A restart no longer sends printer errors again, and their titles name the right part (#3486, reported by SaadShaya7) — Printers keep some faults in their error list long after they happened, without showing them on the screen, for example "There was an unfinished print job when the printer lost power" after a power cut. Bambuddy remembered which faults it had already notified only until it restarted, so every restart sent each of those faults again. The notified faults are now stored, so a restart only notifies faults that are new. The title of a printer error notification also named the wrong part for several kinds of fault: USB, network and file errors came as "Nozzle/Extruder Error", camera faults as "Motion Controller Error", and an A1 mini's AMS Lite runouts as "Chamber Error". They now read "System Error", "Camera Error" and "AMS Lite Error"; AMS-HT, AMS 3H, toolhead, tool changer and air filter faults are named too, and a fault of any other kind is titled "Printer Error".
- A queue job resumed by the printer finishes in the queue (#3485, reported by SaadShaya7) — Bambuddy checks that a print's completion is about the queue job it closes, by comparing the name the printer reports with the name the job was sent under. A printer that picks a print back up, such as an A1 mini resuming after a power cut or a print Bambuddy reconnects to after a restart, reports the file name with ".3mf" on the end instead, so the names no longer matched: the completion was ignored and the job stayed "printing", blocking the printer's queue until it was stopped by hand. The name is now also compared without its extension. The same comparison decides whether a print counts as started outside Bambuddy, so with Also ask for prints started outside Bambuddy on, such a resumed queue job is no longer asked about as an external print. When a power cut also restarts Bambuddy, it comes back while the printer is still paused in power-loss recovery, and the resume was taken for a new print: a second archive of the same print, left "printing". A print found paused when Bambuddy starts now carries on as the same print once it resumes, as one found printing already did; this also covers a print paused by hand before a restart.
- A virtual H2C reports the right model to the slicer — The H2C comes as two models: older units (O1C, serials starting 094, like the H2D) and those from 2026 (O1C2, serials starting 31B8B). Bambu Studio only syncs printer information with a virtual printer that reports the printer's own one, and says "Printer not connected" otherwise, but the virtual printer list showed both as "H2C". The list now names each H2C entry with its serial family, and says to pick the one whose serial starts like the printer's. A proxy virtual printer takes the right one from its target printer's serial, and a virtual O1C2 now has a serial starting 31B8B like a real one, instead of the H2D's 094, so the slicer also shows it the H2C's HMS texts. An existing virtual O1C2 gets a new serial with this: add it in the slicer again once.
- A slicer whose clock is a little behind can connect to a virtual printer again — A virtual printer makes a new certificate every time Bambuddy starts, and it was valid only from that second on. Bambu Studio on a computer whose clock ran even a minute behind saw a certificate that was not valid yet, refused it, and reported only "-1" when connecting with the access code, which looks exactly like a missing certificate. New certificates now start a day back (a printer certificate never before its CA), so a restart no longer locks out such a computer. Nothing needs to be imported again.
- A printer prompt answered on the printer leaves the HMS list (#3487) — Some faults, such as the A1 mini's "is the filament extruded?" prompt while loading filament, come in the printer's print_error field rather than its HMS list. Bambuddy showed them with the HMS errors but did not notice when the printer set that field back to 0, so the entry stayed on the printer card until "Clear errors" was clicked. It now goes as soon as the printer clears it, and a newer code replaces the old one. An HMS list update that arrives while such a fault is still active no longer drops it either.
- Failed and cancelled prints get their timelapse too (#3481) — The printer saves the timelapse of a print that fails or is cancelled, up to where it stopped, and that video is the best way to see what went wrong. Bambuddy fetched timelapses only for prints that completed, so a stopped print's video stayed on the printer until it was attached by hand with Scan for Timelapse. It is now fetched and attached to that print's run like any other. Wiki updated.
- A printer named after its model no longer hides the model in the support package (#3442, reported by daltonclift) — The support package replaces printer names with [PRINTER]. A printer named "H3C" turned every "H3C" in the package into [PRINTER], including the model itself. A name that is only a model name or model code is not private, so it now stays; any other name is still replaced.
- Auto-drying no longer waits on a drying timer the printer never started (#3478, reported by superflyer11) — An AMS HT can accept a drying command while it feeds a print and never heat: its timer stays at the full time (12h 0m) and its status reads Off, for days. Since 1.3.1b1 the printer card shows such a timer as not running, but auto-drying still took it for a running cycle and never dried that unit again, while the humidity alarms kept firing. A timer that has not moved for a few minutes with the status Off now counts as not drying, so auto-drying tries again after its usual 30-minute pause. If that happens twice in a row, auto-drying stops on that unit and sends the Auto-Drying Suspended notification, saying the timer stood still (new template Auto-Drying Not Heating). It resumes once the humidity is back at or below the threshold. Wiki updated.
- The log says which auto-archive switch skipped a print (#3477, reported by Fuzzylog2x) — Since 1.3.0 the global Auto-archive prints switch (Settings > General > Archive Settings) takes effect for prints started outside Bambuddy. Before, it was saved and never read, so an install upgraded with it off stopped archiving, and the statistics stopped updating. The log only said "auto_archive: False", the same as for a printer's own switch. It now names the global switch or the printer, whichever turned archiving off. The switch's description now says what off means: those prints are missing from the archive, the print history and the statistics, while spool inventory still counts their filament. The wiki explains how to keep statistics without keeping every 3MF (auto-purge removes the files and keeps the statistics), and no longer says auto-purge removes prints from the statistics.
- A camera window no longer opens a dozen streams to the printer at once (#3431, reported by buffdriver) — When the floating camera window was open while the page loaded (after a refresh, for example), Bambuddy opened about twenty camera streams for it. Only one was shown. The browser kept the rest open until the tab was closed, and they filled its six connections to the server. The page started each stream while still preparing to draw the window. It prepared the window several times before showing it, and every attempt left a stream behind. Streams now start only once the window is on the page. The camera page, the camera wall and the stream overlay start their streams the same way.
- A printer whose file service hangs during a print is no longer asked again and again until it refuses every upload (#3474, reported by F9mm) — When the card could not be read at print start, the timelapse baseline was read again every two minutes for the whole print, and each round walked the card twice: up to eight new FTPS connections, each hanging for 30 s against a hung printer. An H2S kept a session for every one of them, then answered every connection with "421 There are too many connections", and no queued job could reach it until the printer was restarted. The card is now read once per round. It is read again only while the print records a timelapse, the wait doubles after each failed round (up to 30 minutes), and it stops after five. A connection or listing that times out now pauses the background timelapse scans of that printer for five minutes. Opening files and sending prints are not held up by this. A printer that answers "421 too many connections" now gets its own message in the queue, saying it may need a restart, instead of "Bambuddy will retry automatically". Wiki updated.