---
id: gh-bambu-labs
name: "bambu-labs"
url: https://skills.yangsir.net/skill/gh-bambu-labs
author: earthtojake
domain: automation
tags: ["3d-printing", "automation", "lan-control", "gcode", "mqtt"]
install_count: 9000
rating: 4.50 (120 reviews)
github: https://github.com/earthtojake/text-to-cad/tree/main/plugins/cad/skills/bambu-labs
---

# bambu-labs

> 此技能用于通过局域网安全地管理和启动 Bambu Lab 3D 打印任务。它支持对已验证的 `.gcode` 文件进行干运行、上传和谨慎启动，利用 Bambu LAN 的 FTPS/MQTT 协议进行数据传输。该 Skill 旨在简化 3D 打印工作流，确保打印过程的安全性和可控性，避免手动操作的潜在错误，提高打印效率。

**Stats**: 9,000 installs · 4.5/5 (120 reviews)

## Before / After 对比

### 打印任务启动时间

**Before**:

用户需要手动选择打印机、上传 G-code 文件、确认打印参数，整个过程耗时较长，且易受网络状况和用户熟练度影响。

**After**:

该 Skill 能够自动化 G-code 文件的上传和打印任务的启动，通过预设配置和安全检查，大幅缩短了从文件准备到打印机开始工作的等待时间。

| Metric | Before | After | Change |
|---|---|---|---|
| 打印任务启动时间 | 8分钟 | 2分钟 | -75% |

### 打印任务启动错误率

**Before**:

手动操作时，用户可能因疏忽选择错误的 G-code 文件、未检查打印机状态或跳过安全确认，导致打印失败或材料浪费。

**After**:

此技能强制执行干运行和启动确认等安全规则，有效避免了因人为错误导致的打印任务启动失败，显著降低了错误率和资源浪费。

| Metric | Before | After | Change |
|---|---|---|---|
| 打印任务启动错误率 | 15% | 3% | -80% |

## Readme

# Bambu Labs

Provenance: maintained in [earthtojake/text-to-cad](https://github.com/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 `serial` or let `send` cache it.
- Prefer workspace-root `bambu-printers.json` over 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

1. 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, prefer `brew install --cask orcaslicer`.
2. 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.json` directly.
   For a new printer setup or onboarding request, read
   `references/new-printer-onboarding.md` first. 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.

```bash
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:

```json
{
  "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.

3. Read status before live work:

```bash
python scripts/bambu_lan_print.py status \
  --printer a1-mini \
  --push-all \
  --wait-seconds 10
```

4. 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-print` after 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`.

```bash
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:

```bash
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:

```bash
python scripts/bambu_lan_print.py serial \
  --printer a1-mini \
  --json
```

Clear a stale printer error after fixing the underlying cause:

```bash
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:

```bash
python scripts/bambu_lan_print.py pause \
  --printer a1-mini
```

Execute pause and collect printer reports:

```bash
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`:

```bash
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:

```bash
python scripts/bambu_lan_print.py cancel \
  --printer a1-mini \
  --execute \
  --confirm-cancel-print \
  --mqtt-qos 1 \
  --wait-after-publish 10
```

## Failure Modes

- `gcode_file` returns `result: fail` or leaves the printer `IDLE`: plain G-code upload worked, but the firmware rejected or ignored direct local start. For A1 Mini, switch to `template-project`.
- Project uploaded under `cache/` starts then fails with `print_error: 83935248` or `0500-C010`: clear the error, upload project handoffs to FTPS root, and use `ftp:///<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: FAILED` or HMS after enabling Developer Mode: clear the printer error and power-cycle before retrying.
- FTPS login works but upload fails with `553` or missing `cache/`: 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.


---
*Source: https://skills.yangsir.net/skill/gh-bambu-labs*
*Markdown mirror: https://skills.yangsir.net/api/skill/gh-bambu-labs/markdown*