bambu-labs
earthtojake/text-to-cad
Dry-run, upload, and start Bambu Lab prints from validated G-code over local LAN FTPS/MQTT.
What is bambu-labs?
Manages local-network Bambu Lab print handoffs after G-code validation. Use this to upload and cautiously initiate print jobs on Bambu A1/A1 Mini and other supported models via LAN-only mode, with built-in safety defaults (dry-run by default, explicit confirmation required for live starts).
- Dry-run print handoffs before executing live uploads and starts
- Upload validated G-code to printer via FTPS with template-project or plain handoff modes
- Publish MQTT start requests with explicit `--execute --confirm-start-print` guards
- Pause and cancel running prints with dedicated control commands
- Fetch printer serial from TLS certificate and cache printer configuration
- Read printer status and validate G-code before handoff
How to install bambu-labs
npx skills add https://github.com/earthtojake/text-to-cad --skill bambu-labs- Bambu Lab printer on local network with LAN Only and Developer Mode enabled
- Printer IP address and LAN access code from printer touchscreen settings
- Plain `.gcode` file already generated and validated (this skill does not slice)
- Optional: OrcaSlicer or compatible slicer for G-code generation
- Optional: `bambu-printers.json` in workspace root for printer configuration
How to use bambu-labs
- 1.Generate and validate plain G-code using `$gcode` skill or external slicer
- 2.Configure printer with `python scripts/bambu_lan_print.py config set --printer <name> --host <ip> --access-code <code> --model <model>` or edit `bambu-printers.json` directly
- 3.Read printer status with `python scripts/bambu_lan_print.py status --printer <name> --push-all --wait-seconds 10`
- 4.Dry-run the handoff with `python scripts/bambu_lan_print.py send --printer <name> --gcode <file> --handoff template-project --template-project <template.gcode.3mf> --action upload-start` (no `--execute`)
- 5.Inspect the JSON payload and confirm upload succeeds
- 6.Execute live start only after validation and physical checks with `--execute --confirm-start-print`
- 7.Use `pause` or `cancel` commands with `--execute --confirm-cancel-print` for print control
Use cases
- Upload and start a print job after G-code generation and validation
- Pause or cancel an active print with confirmation
- Set up a new Bambu printer with IP and LAN access code discovery
- Debug print failures and clear printer errors
- Inspect dry-run payloads before committing to live uploads
- 3D printing engineers and operators using Bambu Lab printers
- CAD/CAM workflows that generate G-code and need local print handoff
- Teams managing A1, A1 Mini, P1S, and other Bambu models on LAN-only mode
bambu-labs FAQ
`template-project` wraps plain G-code in a known-good `.gcode.3mf` project file and uploads to FTPS root (recommended for A1 Mini). `plain` uploads raw G-code to cache/ and publishes `gcode_file` (works for diagnostics but may be ignored by firmware on A1 Mini).
Treat an explicit user request to print or start as live-start authorization. Always validate G-code, inspect dry-run payload, read printer status, and state physical checks. Use `--execute --confirm-start-print` only when intent is clear and safety checks pass.
Clear the build plate, verify correct plate/filament/nozzle, ensure safe surroundings, and confirm the operator is nearby. Read printer status first with `--push-all --wait-seconds 10` to catch errors or busy states.
On A1/A1 Mini, go to the printer touchscreen, navigate to network/LAN settings, and note the IP and LAN access code. Enable LAN Only and Developer Mode when offered, then power-cycle before running local commands.
Dry-run (default) shows the exact payload and steps without sending to the printer. Always dry-run first to inspect the handoff, then add `--execute` only when ready to upload and start for real.
Full instructions (SKILL.md)
Source of truth, from earthtojake/text-to-cad.
name: bambu-labs
description: Dry-run, upload, and cautiously initiate local Bambu Lab print jobs from validated plain .gcode, using Bambu LAN FTPS/MQTT handoffs.
Bambu Labs
Provenance: maintained in earthtojake/text-to-cad. Use the installed local skill files as the runtime source of truth; the repository link is only for provenance and release review.
Use this skill for local-network Bambu Lab print handoffs after a plain .gcode
file already exists and has been validated. This skill does not slice models.
Safety Rules
- Default to dry-run plans. Real printer traffic requires
--execute. - Never start a print without
--execute --confirm-start-print. - Pause and cancel controls are live printer requests; default to dry-run plans.
Canceling a print requires
--execute --confirm-cancel-print. - Treat an explicit user request to print or start a specific job as live-start authorization; do not pause for a second confirmation solely for physical checks. Still validate the G-code, inspect the dry-run payload, read printer status, prefer upload-only before upload-start, state the physical checks, and stop if validation/status/intent is unsafe or ambiguous.
- Do not ask for the printer serial by default; fetch it from the printer TLS certificate with
serialor letsendcache it. - Prefer workspace-root
bambu-printers.jsonover repeating access codes in commands. The file is local config and should be ignored by Git. - Before a live start, state the physical checks: clear build plate, correct plate/filament/nozzle, safe surroundings, and operator nearby.
- Publishing MQTT is only a start request. Confirm acceptance with printer status/UI and physical observation.
CAD Viewer Handoff
After completing Bambu work that creates or modifies a local supported print artifact such as .gcode or .3mf, you must ALWAYS hand the explicit file path to $cad-viewer when that skill is installed. $cad-viewer must start CAD Viewer if it is not already running and return link(s) to the relevant created or updated file(s); if $cad-viewer is unavailable or startup fails, report that instead of silently omitting the handoff.
Workflow
- Generate and validate plain G-code with
$gcode. If no slicer is installed, install OrcaSlicer and retry; do not treat the missing slicer as a blocker. On macOS, preferbrew install --cask orcaslicer. - Configure the printer. The user can either give the IP/access code in the thread and let the agent write JSON, or edit
bambu-printers.jsondirectly. For a new printer setup or onboarding request, readreferences/new-printer-onboarding.mdfirst. Walk the user through the model-specific touchscreen steps to find the IP and LAN access code, and make Enable LAN Only plus Enable Developer Mode explicit before running local start workflows.
python scripts/bambu_lan_print.py config set \
--printer a1-mini \
--host 192.168.1.34 \
--access-code 12345678 \
--model a1-mini \
--fetch-serial
Manual JSON shape:
{
"printers": {
"a1-mini": {
"host": "192.168.1.34",
"access_code": "12345678",
"model": "a1-mini"
}
}
}
On A1/A1 Mini, find the IP and LAN access code on the printer touchscreen under network/LAN settings. Enable LAN Only and Developer Mode when offered, then power-cycle before retrying local start commands.
- Read status before live work:
python scripts/bambu_lan_print.py status \
--printer a1-mini \
--push-all \
--wait-seconds 10
- Dry-run the exact handoff, inspect the JSON payload, then run upload-only.
Only after upload succeeds should you run upload-start. If the user explicitly
asked to print or start the job, proceed to
upload-start --execute --confirm-start-printafter the validation, status, and upload checks pass. If the user only asked to prepare, slice, upload, or review, stop before the start request.
Handoff Modes
--handoff template-project is the validated A1 Mini path from this repo's LAN
debugging. It starts from validated plain .gcode, copies a known-good
same-printer .gcode.3mf template, replaces Metadata/plate_N.gcode, writes
the plate MD5, uploads the project to the FTPS root, and publishes
print.project_file with url: ftp:///<name>.gcode.3mf.
python scripts/bambu_lan_print.py send \
--printer a1-mini \
--gcode /tmp/job.gcode \
--handoff template-project \
--template-project /path/to/same-printer-template.gcode.3mf \
--action upload-start
Execute after review when the user explicitly asked to print or start, or after physical confirmation when intent is unclear:
python scripts/bambu_lan_print.py send \
--printer a1-mini \
--gcode /tmp/job.gcode \
--handoff template-project \
--template-project /path/to/same-printer-template.gcode.3mf \
--action upload-start \
--execute \
--confirm-start-print
--handoff plain uploads cache/<name>.gcode and publishes
print.gcode_file. Keep it for diagnostics or printers/firmware where this is
known to work. On the tested A1 Mini, direct plain G-code was uploaded
successfully but gcode_file failed or was ignored, so do not use it as the
A1 Mini live-start path.
--handoff bambox-project packages plain .gcode with bambox, uploads the
.gcode.3mf project to FTPS root, and publishes print.project_file.
Currently enabled only for p1s-0.4 with PLA, ASA, or PETG-CF.
Known but disabled until validated profiles exist: a1-mini-0.4, a1-0.4,
x1c-0.4, and p1p-0.4.
Common Debugging Commands
Fetch/cache serial:
python scripts/bambu_lan_print.py serial \
--printer a1-mini \
--json
Clear a stale printer error after fixing the underlying cause:
python scripts/bambu_lan_print.py clear-error \
--printer a1-mini \
--execute
Use --mqtt-qos 1 --wait-after-publish 10 on send when debugging whether the
printer acknowledged the MQTT publish and what status it reported immediately
afterward.
Print Controls
For a running print, use dedicated print-control commands rather than ad hoc MQTT snippets. These commands publish only a control request; they do not upload files or start a new job. Read status after execution to confirm the printer state changed.
Dry-run pause payload:
python scripts/bambu_lan_print.py pause \
--printer a1-mini
Execute pause and collect printer reports:
python scripts/bambu_lan_print.py pause \
--printer a1-mini \
--execute \
--mqtt-qos 1 \
--wait-after-publish 10
Dry-run cancel payload. The Bambu LAN command sent to the printer is stop:
python scripts/bambu_lan_print.py cancel \
--printer a1-mini
Execute cancel only when the user explicitly asks to cancel/stop the print or after confirmation when intent is ambiguous:
python scripts/bambu_lan_print.py cancel \
--printer a1-mini \
--execute \
--confirm-cancel-print \
--mqtt-qos 1 \
--wait-after-publish 10
Failure Modes
gcode_filereturnsresult: failor leaves the printerIDLE: plain G-code upload worked, but the firmware rejected or ignored direct local start. For A1 Mini, switch totemplate-project.- Project uploaded under
cache/starts then fails withprint_error: 83935248or0500-C010: clear the error, upload project handoffs to FTPS root, and useftp:///<name>.gcode.3mf. file:///sdcard/cache/...or local HTTP URLs appear accepted but nothing starts: stop using those URL forms for this workflow.- Bambu Studio or OrcaSlicer project export crashes on macOS: do not keep retrying GUI-backed project export. Use OrcaSlicer for plain
.gcode, then this skill for handoff. - Stale
gcode_state: FAILEDor HMS after enabling Developer Mode: clear the printer error and power-cycle before retrying. - FTPS login works but upload fails with
553or missingcache/: check printer storage/SD card status before MQTT start. - MQTT status works but start does not: confirm serial, access code, Developer Mode/LAN Only status, and the exact handoff payload before retrying.
Read references/new-printer-onboarding.md for new printer setup,
references/local-lan-protocol.md for protocol details, and
references/real-printer-checklist.md before first live use on a new printer.
Related skills
More from earthtojake/text-to-cad and the wider catalog.

cad
Create, modify, and validate parametric CAD parts and assemblies from natural language, technical drawings, or STEP files.

cad-viewer
Start a local CAD Viewer and generate review links for STEP, STL, implicit CAD, G-code, URDF, and other model files.

dxf
Generate and validate 2D DXF drawings from Python ezdxf sources for laser/plasma/waterjet cuts and CAD projections.

gcode
Generate, inspect, and validate FDM G-code from 3D meshes using local slicer CLIs.

implicit-cad
Create browser-native implicit CAD models using GLSL signed-distance fields and shader primitives.

render
Render CAD and robot files in CAD Explorer with review links and snapshots.