The Snapmaker U1 can drive an external chamber heater through Klipper, using the BIQU Panda Breath board with either of two firmwares:
Both are a 300 W PTC chamber heater with HEPA/carbon air filtration, and both are
presented to Klipper as a standard heater_generic, so slicer chamber temperature
commands (M141/M191) work out of the box. Only one can be enabled at a time.
If you already have a Panda Breath, there is a no-USB migration that converts it to DragonBreath over Wi-Fi.
These apply to either chamber heater — they are a consequence of running a hot chamber on the U1, not of a particular device.
Installing and operating a chamber heater significantly raises sustained operating temperatures inside the enclosure. This accelerates wear on electronics, motors, and other components beyond their rated conditions. Any damage attributable to elevated thermal stress is unlikely to be covered under warranty. Use at your own risk.
The U1 motherboard has insufficient thermal headroom for sustained elevated chamber temperatures. There are documented cases of motherboard overheating causing mid-print failures. The RK3562 main processor begins thermal throttling at 85 °C, degrading Klipper real-time performance and causing motion or communication errors.
Additional active cooling on the motherboard is required before using a chamber heater.
Printable cooling solutions available on MakerWorld:
See also: Quick overview on fan mods applied for Snapmaker U1 — community thread covering additional fan mod approaches (to be evaluated).
DragonBreath is community open firmware
for the Panda Breath board. It drives the same PTC heater and filtration blower, adds
an on-device safety model (sensor checks, target clamp, element foldback,
over-temperature shutdown, cooldown airflow, and a communications watchdog), and
integrates with Klipper as a heater_generic.
⚠️ Safety. DragonBreath drives a mains-powered heater and ships with no warranty. A fault could cause overheating, fire, or damage. Use at your own risk and never run it unattended. Additional motherboard cooling is required — see Risks and Warranty.
In the Firmware Config web interface at http://<printer-ip>/firmware-config/, open
Snapmaker Components → PandaBreath / DragonBreath Chamber Heater and choose
DragonBreath (Recommended).
You will be asked to:
I UNDERSTAND, andEnabling writes the Klipper configuration and restarts Klipper. It does not touch the device: DragonBreath holds its own connection to the printer (see Usage), so the device must already be flashed and provisioned.
If a Panda Breath is currently enabled, the two are mutually exclusive — set the setting to Disabled first, or use Migrate to DragonBreath.

If a Panda Breath is already configured, Firmware Config offers a Migrate to DragonBreath action that converts it over Wi-Fi — no USB, no flashing by hand:

To revert, boot the device back to its stock slot: Settings → Maintenance → Boot inactive slot on the device (works until the next DragonBreath firmware update overwrites that slot).
If you are not migrating, set the device up directly:
dragonbreath-<version>.bin from the
DragonBreath releases. Stock
writes it to the inactive slot and reboots into it.DragonBreath_XXXX (password 987654321);
connect to it and the setup page opens automatically, or browse to
http://192.168.4.1./setup page (also in the AP portal), set
Control source to Klipper / Moonraker (the default) and enter your
printer’s Moonraker host. This is a single choice — the other sources (Bambu, Home
Assistant, Klipper-MQTT) are mutually exclusive.For full device documentation, see the DragonBreath repository.
Enabling writes a connection config you own:
/home/lava/printer_data/config/extended/klipper/dragonbreath.cfg
Edit it in Fluidd/Mainsail or via SSH to change the IP or port, then restart Klipper:
[dragonbreath]
host: 192.168.1.100
#port: 80
#token: web
token is only needed if you set a control token on the device (stored in the
device’s NVS); Klipper sends it as the X-DragonBreath-Auth header. Leave it
commented unless you configured one.dragonbreath_heater.cfg) that is included automatically. Do not edit it — it
is overwritten on firmware upgrades. It caps the settable chamber target at
70 °C, a hard limit enforced by the DragonBreath firmware.DragonBreath appears in Fluidd/Mainsail as a chamber heater
(heater_generic dragonbreath) plus a filtration toggle. Use standard G-code:
| Command | Effect |
|---|---|
M141 S45 |
Set chamber target to 45 °C |
M191 S45 |
Set chamber target to 45 °C and wait until reached |
M141 S0 |
Turn off chamber heating |
In your slicer, set the filament profile’s chamber temperature as usual — M141/M191
commands in start G-code are handled automatically. For start-macro recipes,
bed/chamber ordering, and the OrcaSlicer command-ordering trap, see
Using the chamber heater.
Filtration blower. The blower is a simple on/off output
(output_pin dragonbreath_filter) — drive it with
SET_PIN PIN=dragonbreath_filter VALUE=1 (on) / VALUE=0 (off). For safety, the
device refuses to switch it on while heating or cooling down; turning it off is
always allowed.
How control works. There is no separate auto/manual mode. Klipper pushes the target and keeps a heartbeat “lease” with the device; DragonBreath holds that target autonomously on its own controller and latches the heater off if Klipper stops or crashes (its communications watchdog). The chamber follows whatever your slicer/macros command, with the device providing the safety fallback.
| Command | Description |
|---|---|
DRAGONBREATH_RESET |
Clear a latched DragonBreath device fault |
Set Snapmaker Components → PandaBreath / DragonBreath Chamber Heater → Disabled. The Klipper configuration is removed and Klipper restarts. This does not revert the device firmware — see Migrating from Panda Breath for how to boot the board back to stock.
Klipper shows a heater error / verify_heater failure. DragonBreath is a slow
heater with coarse 1 °C reporting; the managed configuration already uses relaxed
verify_heater windows. If it still trips, check Wi-Fi between the printer and the
device.
Device not reachable. Set a static DHCP lease and use the IP address in
dragonbreath.cfg; mDNS can be unreliable.
Heater latched off mid-print. The device drops the heater if the Klipper link goes
quiet (the communications watchdog). Check Wi-Fi stability, then clear a latched fault
with DRAGONBREATH_RESET.
Locked out / lost network. On the device, hold Power + Auto for 5 s to wipe its network and configuration and return to the setup access point. The firmware is untouched and the heater is cut.
Print fails or printer reboots during long high-temperature prints. This is a symptom of motherboard overheating. See Motherboard Overheating.
Integrates the BIQU Panda Breath
running its stock firmware. This firmware reverse-engineers the Panda Breath
WebSocket API and exposes the device as a standard Klipper heater_generic, so slicer
chamber temperature commands (M141/M191) work out of the box.
If you are setting up a new device or want the maintained path, use DragonBreath instead.
Enable via the Firmware Config web interface under Snapmaker Components → PandaBreath / DragonBreath Chamber Heater → Panda Breath.
During setup the web interface will ask for the Panda Breath IP address and will automatically bind the device to the printer.
Panda Auto mode heats the chamber to target under Klipper, then hands off hold and
cool-down to the Panda’s native auto mode (requires device firmware v1.0.3 or v1.0.4).
A legacy pure-heater_generic Manual mode also exists but is hidden — it is less
safe if the device or network is lost mid-print, and is not recommended.
After enabling, a config file is placed at:
/home/lava/printer_data/config/extended/klipper/panda_breath.cfg
To change the IP address or port, edit that file directly in Fluidd/Mainsail or via SSH:
[panda_breath]
host: 192.168.1.100
port: 80
Restart Klipper after saving.
Once enabled, the Panda Breath appears as a chamber heater in Fluidd/Mainsail. Use standard G-code commands to control it:
| Command | Effect |
|---|---|
M141 S45 |
Set chamber target to 45 °C |
M191 S45 |
Set chamber target to 45 °C and wait until reached |
M141 S0 |
Turn off chamber heating |
In your slicer, set the chamber temperature for the filament profile as usual —
M141/M191 commands in start G-code are handled automatically.
Additional commands are available for direct device control:
| Command | Parameters | Description |
|---|---|---|
PANDA_BREATH_AUTO |
ENABLE=1/0 TARGET=<°C> |
Enable/disable Panda native auto mode |
PANDA_BREATH_DRY_RUN |
TARGET=<°C> DURATION=<min> |
Start native filament drying cycle |
PANDA_BREATH_DRY_STOP |
— | Stop active drying cycle |
Disable via Snapmaker Components → PandaBreath / DragonBreath Chamber Heater → Disabled. The device is automatically unbound from the printer and the configuration file is removed.
Klipper shows heater error / verify_heater failure
The Panda Breath is a slow external heater with coarse 1 °C temperature reporting. The
default verify_heater configuration uses extended gain check and error windows to
avoid false positives. If errors still occur, check WiFi connectivity between the
printer and the Panda Breath device.
Device not reachable at PandaBreath.local
mDNS resolution can be unreliable. Set a static DHCP lease and use the IP address
directly in panda_breath.cfg.
Print fails or printer reboots during long high-temperature prints
This is a symptom of motherboard overheating. See Motherboard Overheating for cooling solutions.
dragonbreath.cfg / panda_breath.cfg