Years ago, I was already fascinated by 3D printers, and I bought my MakerBot Thing-O-Matic back in 2011. Throughout the years I managed to keep it operational; in the end I even got it working with OctoPrint through the OctoPrint-GPX plugin. But basically everyone with even minimal knowledge of 3D printers knows that things have changed and improved since then. Automatic calibration, more filament types, multi-filament printing with automatic filament changes and/or multiple nozzles, larger build volumes… the list goes on. Needless to say, an update for my more-than-a-decade-old, mostly wooden friend was imaginable.
When I heard about the Bambu Lab H2D, I was pretty intrigued: a modern dual-nozzle printer with all the automatic calibration, and with the same table footprint, I could also do some rudimentary plotting and laser cutting/engraving. Sounds pretty neat. Value-system-wise, I would probably put myself closer to Prusa or other open-source options, but that particular package just didn’t seem to exist anywhere else, especially not at that price. Having said that, I don’t necessarily trust Bambu Lab, or at least I don’t want to have to rely on trusting them. They don’t have a perfect track record, and I imagine many have heard about Chinese vacuums that send everything they can to the cloud, including unencrypted Wi-Fi credentials. Although previous network analysis didn’t show nefarious behavior on Bambu Lab’s side, I still chose not to trust them in the future.
Even before I bought the printer, I wanted to know whether I could use it offline, and indeed Bambu Lab has added a LAN Mode. Combined with the “LAN mode liveview” option, I should be able to work with the printer on the local network, albeit without official smartphone app support or cloud features, which is obvious and fine by me.
My goal was to keep Bambu Lab hardware and software completely offline, at all times. Before I connected the printer to Wi-Fi, I unplugged the WAN / “Internet” cable from the router. After connecting it to Wi-Fi, I was able to completely restrict the printer’s internet access in the router settings. I enabled LAN Mode on the H2D, and only then plugged the WAN / “Internet” cable back in.
I think so far things are fairly obvious. At this point I was only able to print by carrying a USB drive (USB-A, mind you…) with the sliced files to the printer, since using the printer over the local network through Bambu Studio was not as straightforward as I had expected. At least not when internet access for Bambu Studio itself is likewise completely restricted with an application firewall. The problem is that Bambu Studio wants to download a Network Plugin from the internet, and only with that can it talk to the printer over the local network.
Though, it is possible to get the Network Plugin and put it where Bambu Studio expects it. First, it’s best to check the recent logs (on macOS they are found in ~/Library/Application Support/BambuStudio/log/), and for me there was an entry along the lines of:
check the plugin from https://api.bambulab.com/v1/iot-service/api/slicer/resource?slicer/plugins/cloud=02.04.00.00
Opening that URL returns some JSON:
{
"message": "success",
"code": null,
"error": null,
"software": {
"type": null,
"version": "02.05.00.66",
"description": "###https://wiki.bambulab.com/en/software/bambu-studio/release/release-note-2-5-0-hotfix###",
"url": "https://public-cdn.bblmw.com/upgrade/studio/software/02.05.00.66/ecbc9115c3/Bambu_Studio_win-v02.05.00.66.exe",
"force_update": false
},
"guide": null,
"resources": [
{
"type": "slicer/plugins/cloud",
"version": "02.04.00.79",
"description": "1. Resolved several sporadically occurring crash issues.\n2. Raised the number of retries for specific network failure scenarios.",
"url": "https://public-cdn.bblmw.com/upgrade/studio/plugins/02.04.00.79/7b859eccf5/win_02.04.00.79.zip",
"force_update": true
}
]
}
And in there we need the url from the first resources entry. If you’re not using Windows, replace win with mac or linux, e.g. for macOS https://public-cdn.bblmw.com/upgrade/studio/plugins/02.04.00.79/7b859eccf5/mac_02.04.00.79.zip. After downloading and unpacking that file, place its contents in ~/Library/Application Support/BambuStudio/plugins/, and on macOS I had to remove the quarantine attribute with xattr -d com.apple.quarantine *.dylib. With the Network Plugin in place I was able to access the printer over the local network through Bambu Studio, start prints, watch the live camera feed, and so forth.
Now that that is working, what about firmware updates? Well, offline firmware updates are supported by Bambu Lab. The problem here is that Bambu Lab has been slow and somewhat unreliable when it comes to publishing new versions on their website for download. For version 01.02.00.00, there were several smaller updates that were never published there, and for version 01.03.00.00 it took them several weeks to publish it on their website after it was already available directly on printers. Unlike with the Network Plugin, I wasn’t able to find an alternative way to download the firmware without registering the printer online. So I guess for now I have to be a bit patient with firmware updates.
Using the setup described above, there is one subtle inconvenience that, however, hasn’t personally bothered me too much: the internal clock of the printer is not synced. The printer relies on NTP, a protocol for getting the current date and time, and this printer has a list of internet NTP servers it tries to get the time from, which obviously doesn’t work in this case. As of writing this, I mainly notice it in the timestamps of the timelapse videos, which are a couple of months in the past and suspiciously close together, making me think its clock is only running while powered on. The solution seems obvious and simple: the printer should also support checking the NTP server supplied by the DHCP server (Option 42); for instance, my router points to itself because it provides an NTP server for the local network. Sadly, the printer doesn’t seem to respect this. One option for getting the correct time on the printer would be to let it access those NTP servers, but then it wouldn’t be “completely offline” anymore, although that likely wouldn’t be too terrible. Alternatively, if I control a local DNS server and change the DNS entries for those NTP servers so they resolve to the IP address of a local NTP server, then theoretically the printer should use that. I quickly tried that with a local chrony and dnsmasq server, set the DNS server in the router’s DHCP settings to the dnsmasq server, and nothing happened… The printer didn’t seem to use the DNS server suggested over DHCP even after “forgetting” the Wi-Fi network, rebooting the device, and so forth. For now this isn’t bothering me too much; maybe in the future I’ll investigate further.
So far I achieved my goal: no Bambu Lab software or hardware has ever connected directly to the internet. My experience so far has been mostly smooth. And apart from this setup story, I have actually been busy designing mounts and holders for various devices, like RIGOL oscilloscopes, OWON multimeters / signal generators, FNIRSI tools, and more. You can check them out here.