Bambu Companion for Omarchy Quattro
Monitor a Bambu Lab printer from the Omarchy Quattro bar. Bambu Companion shows live print telemetry, the slicer's 2D plate preview and a lightweight, interactive wireframe extracted from the sliced G-code.
Install
omarchy plugin add https://github.com/ypMrg/omarchy-bambu-companion.git --enable
On first launch, the plugin installs its locked Ruby dependencies in an isolated user-data directory. System gems are never modified. Internet access is only required for this initial dependency installation.
Update or remove the plugin with:
omarchy plugin update io.github.ypmrg.bambu-companion --yes
omarchy restart shell
omarchy plugin remove io.github.ypmrg.bambu-companion
If the widget is enabled but not present in the bar, place it explicitly:
omarchy plugin enable io.github.ypmrg.bambu-companion --section right
omarchy restart shell
Setup
Open the bar widget to configure a printer. The panel stays closed across plugin reloads and when other plugins are added. A connection loader remains until the first fresh status report is received; only then does the live dashboard appear.
- Enable local network access on the printer and obtain its serial number and LAN access code from the printer's network settings.
- Open the Bambu Companion widget.
- Enter the printer address, serial number and LAN access code.
- Select Save & Connect to check the printer certificate. No LAN code is sent during this check.
- Review the SHA-256 identity shown for MQTT and FTPS, then select Trust & Connect to approve it and start the authenticated connection.
Use a trusted local network for this first approval. Existing installations without saved certificate identities must approve their printer once after updating; later connections are automatic while those identities remain the same.
The exact printer menu names vary by model and firmware. This plugin uses the local Bambu MQTT and FTPS services; it does not connect to Bambu Cloud.
Configuration
| Setting | Default | Description |
|---|---|---|
| Printer name | 3D Printer |
Name displayed in the dashboard |
| Printer address | — | IPv4, IPv6 address or hostname |
| Serial number | — | Printer serial used by MQTT topics |
| MQTT TLS port | 8883 |
Local encrypted telemetry service |
| FTPS port | 990 |
Local implicit-FTPS file service |
| MQTT / FTPS username | bblp |
Local Bambu service account |
| LAN access code | — | Password shown by the printer |
| Wireframe segment limit | 40000 |
Detail/performance limit, from 1,000 to 100,000 |
| Explode factor | 100 |
Additional vertical layer-spacing factor, from 0 to 500 |
| Auto-rotate by default | enabled | Initial rotation state when the viewport loads |
| Bar summary | enabled | Show or hide status, progress and temperatures in the bar |
The plugin uses the current Omarchy theme accent for non-semantic highlights. The Bar summary toggle is applied immediately. The bar icon is green only while the printer is in the temporary finish state, red on fail or error, and otherwise uses the default bar color. Recap KPIs in the bar always use the default color. Other configuration changes are applied with Save & Connect.
Settings and the live dashboard reflow at narrow widths so every control stays inside the panel margins.
When a code is already available, Settings reports whether it is stored in GNOME Keyring or active only for the current session. Leave the code field blank to keep it, enter another code to replace it, or use Forget code to remove it.
Disconnect printer asks for confirmation, then removes the printer address, serial number, trusted certificates and LAN code. It preserves the printer name and visual preferences so the plugin is ready for a new connection.
Features
- Compact bar icon with optional status, progress and temperature summary.
- Live connection, print state, progress and remaining-time reporting.
- Current and target nozzle/bed temperatures.
- Current layer, total layers and exact or estimated Z progress.
- Speed profile, fan speeds, Wi-Fi signal and last report time.
- Landscape dashboard with telemetry on the left and print preview on the right.
- Selectable slicer image and sliced G-code route when available.
- Animated exploded G-code layers with a configurable spacing factor.
- Animated simulated nozzle marker on the current G-code layer.
- Configurable accent color and wireframe detail limit.
- Automatic reconnect after temporary network loss.
- Monitoring-only operation: no pause, resume, stop, upload or speed commands.
After a completed print, FINISH remains visible for 60 seconds and then
settles to READY. Starting another job cancels that delay immediately.
Print preview
When a job starts, the backend identifies its print file and downloads it over
FTPS. For a sliced 3MF archive it reads the bounded PNG plate preview and the
recognized outer-wall moves from the embedded G-code. Direct .gcode files
provide only the route view.
The Route and Image icon buttons are always visible below the coordinate badge. A source that is unavailable is disabled. The 2D image is selected by default when G-code is unavailable; otherwise the G-code route is selected. Switching views preserves the G-code camera.
A new print starts a new preview generation, so late data from the previous job cannot replace it. The downloaded file is private and temporary, and is removed immediately after parsing, cancellation or failure.
During printer calibration, heating or file preparation, print data may not be available yet. The plugin explains this state and retries automatically. Use Reload preview to request another attempt manually.
Preview controls:
| Input | Action |
|---|---|
| Drag horizontally | Rotate around the model |
| Drag vertically | Inspect from above or below |
| Hold the pointer | Pause automatic rotation |
| Mouse wheel | Zoom from 0.50× to 4.00× |
| Route / Image icons | Select an available preview source |
| Auto-rotate | Enable or disable continuous rotation |
| Explode | Animate additional vertical spacing between G-code layers |
Printed paths use the configured accent color; remaining paths stay subdued. While printing, a small animated point loops over the outer-wall segments of the nearest current layer. It gives the route visual motion; it is not the printer's real-time nozzle position. The renderer samples large routes within fixed budgets and coalesces drag frames so rotation stays responsive.
Supported print files
- Direct
.gcodefiles. - Bambu Studio or OrcaSlicer
.gcode.3mffiles. - Unambiguous
.3mfarchives containingMetadata/plate_*.gcode. - Bambu 3MF plate previews such as
Metadata/plate_*.pngand the standard auxiliary thumbnails. - Outer-wall markers produced by Bambu Studio, OrcaSlicer, PrusaSlicer/SuperSlicer and Cura.
An invalid or missing image does not disable valid G-code, and unsupported G-code does not hide a valid image. MQTT status monitoring continues normally when neither visual source is usable.
Printer compatibility
Bambu Companion has been live-tested with a Bambu Lab A1 Mini. It is expected to work with A1-series and other Bambu printers exposing the same local MQTT, implicit-FTPS and G-code conventions, but compatibility with every model and firmware version is not guaranteed.
The printer must expose its local services and provide a LAN access code. Cloud telemetry used by Bambu Handy is outside this plugin's scope.
Security and local storage
- The plugin does not overwrite user configuration without explicit consent: printer settings are written only with Save & Connect or Trust & Connect, cleared only after confirming Disconnect printer, and the bar-summary preference changes only when its toggle is changed.
- The LAN access code is never stored in plugin settings, the repository, process arguments or normal logs.
secret-toolstores the code in GNOME Keyring when available. Otherwise it remains only in the current backend process memory.- The code is passed to the Ruby backend and GNOME Keyring through standard input, not command-line arguments.
- Downloaded G-code/3MF files use private temporary files and are deleted after parsing, cancellation or failure. No persistent print-file cache is kept.
- Only the bounded PNG preview and simplified toolpath remain in memory. The route respects the configured segment limit and both sources are replaced atomically by the next preview generation.
- Bambu printers use local self-signed certificates, so the plugin applies explicit trust on first use instead of relying on a public certificate authority. It records independent SHA-256 certificate identities for MQTT and FTPS only after Trust & Connect.
- Every authenticated MQTT and FTPS TLS connection must match its saved identity. If either certificate changes, the plugin blocks reconnecting and requires a new explicit review; it never replaces an identity automatically.
Requirements
- Omarchy Quattro v4.
- Printer and Omarchy machine reachable on the same trusted network.
- Local printer access and a valid LAN access code.
ruby,gem,flockand GNUreadlink.secret-tool/GNOME Keyring recommended for persistent secret storage.
The launcher installs the exact Bundler version from Gemfile.lock when
bundle is unavailable, then installs all locked gems under the plugin's
private data directory.
Troubleshooting
The widget is missing
omarchy plugin list --json
omarchy plugin enable io.github.ypmrg.bambu-companion --section right
omarchy restart shell
The printer remains offline
- Verify the address, serial number, ports, username and LAN access code.
- Confirm that local printer access is enabled and both devices share a LAN.
- Replace the saved code if the printer generated a new one.
- Check that a firewall is not blocking TCP ports
8883and990. - If a certificate-change warning appears after a printer reset or firmware change, confirm that the address still targets your printer before approving the new SHA-256 identity.
The preview is unavailable
- Wait while the printer finishes calibration, heating and file preparation.
- Confirm that a supported G-code or 3MF file is present on the printer.
- Select Reload preview after the print has entered
RUNNING. - Status monitoring remains usable even when preview extraction fails.
Inspect Quickshell logs
journalctl -t omarchy-shell -b --no-pager \
| grep -Ei 'bambu|plugin widget|failed|error'
Development and validation
Run all local checks from the repository root:
tests/test-all
This verifies the production bundle, Ruby and shell syntax, high-signal
RuboCop and ShellCheck rules, JSON/QML contracts, launcher isolation, parser
behavior and Canvas rendering. minitest, rubocop, shellcheck, qmllint
and Node.js are development only; none is a runtime dependency of the installed
plugin.
Validate a checkout inside Omarchy Quattro with:
omarchy plugin validate "$PWD"
tests/test-all
For an unpublished checkout in a disposable Quattro VM:
plugin_target="$HOME/.config/omarchy/plugins/io.github.ypmrg.bambu-companion"
test ! -e "$plugin_target"
mkdir -p "$plugin_target"
cp -a -- "$PWD/." "$plugin_target/"
omarchy-shell shell rescanPlugins
omarchy plugin enable io.github.ypmrg.bambu-companion --section right
omarchy restart shell
Architecture
BambuWidget.qmland the smaller QML components implement the bar, dashboard, settings and Canvas renderer.daemon.rblaunches the Ruby backend.- MQTT provides printer telemetry; implicit FTPS provides the active print file.
- Ruby parsers retain a bounded PNG plate preview and streamed, downsampled outer-wall G-code.
- Newline-delimited JSON over stdin/stdout connects the isolated backend to Quickshell.
The current release supports one printer. Multi-printer dashboards, camera streams, cloud access and printer-control actions are intentionally excluded.
License
MIT — Copyright (c) 2026 Matthieu G.C.
Bambu Lab names and trademarks belong to their respective owners. This project is independent and is not affiliated with or endorsed by Bambu Lab.