set_fan
Set a 3D printer fan speed from 0-100% to add cooling for bridges and overhangs or manage chamber heat on supported printers.
Instructions
Set the speed of a printer fan.
``percent`` has no default on purpose. Measured 2026-09-18 on an A1:
a call meant to turn the fan OFF reached Kiln with no ``percent`` at
all (the caller's own argument name had been dropped before the
request arrived), the old default of 100 ran the fan flat out, and
the answer confirmed it. A setpoint the caller did not send is
refused, never guessed.
Supported on Bambu Lab, OctoPrint, Moonraker/Klipper printers, and
Elegoo's Centauri Carbon (FDM). Prusa Link has no raw G-code endpoint, so
fan control isn't available there (a known limitation of Prusa Link
itself). An Elegoo machine with no part-cooling fan is refused.
Args:
node: Which fan to set. ``"part"`` (part-cooling / model fan, the
one that cools each layer) works on every supported printer.
``"aux"`` (auxiliary / big fan) and ``"chamber"`` (chamber /
exhaust fan) are Bambu-only — generic Marlin/Klipper firmware has
no standard auxiliary or chamber fan Kiln can address without
knowing that machine's own G-code macros. Defaults to ``"part"``.
percent: Fan speed 0-100. ``0`` turns the fan off, ``100`` is full
speed. Required.
Use this to add cooling for bridges and overhangs (part fan), or — on
Bambu — pull heat with the auxiliary fan or run the chamber/exhaust fan
for materials like ABS/ASA. The Bambu chamber fan only exists on
enclosed models — X1 Carbon, X1E, P1S, P2S, H2S — not on open-frame
models (A1, A1 Mini, A2L, P1P), where a chamber command is a no-op. The
printer's own thermal management may override a manual fan speed during
a print.
Branch on ``outcome`` — one field, three values, the same shape
``start_print`` uses for ``print_start``:
- ``"confirmed"``: the printer, in a report AFTER the command, shows the
effect. For a Bambu, that fan's reported level matches.
- ``"accepted"``: the command was sent and not refused, and the printer
has not shown the effect yet. Normal on a quiet printer. Read
``printer_status()`` before building on it.
- ``"failed"``: the printer's interface refused the command.
``accepted`` (the boolean) keeps its old meaning: sent, not refused. It
is never proof the printer acted. ``success`` is ``False`` only for
``"failed"``.
Tool call template
Replace each placeholder with a value matching the input schema. Only required parameters are included; add optional parameters as needed.
{
"id": 1,
"jsonrpc": "2.0",
"method": "tools/call",
"params": {
"arguments": {
"percent": "<percent>"
},
"name": "set_fan"
}
}Input Schema
| Name | Required | Description | Default |
|---|---|---|---|
| node | No | Which fan to set. ``"part"`` (part-cooling / model fan, the one that cools each layer) works on every supported printer. ``"aux"`` (auxiliary / big fan) and ``"chamber"`` (chamber / exhaust fan) are Bambu-only — generic Marlin/Klipper firmware has no standard auxiliary or chamber fan Kiln can address without knowing that machine's own G-code macros. Defaults to ``"part"``. Default: "part". | |
| percent | Yes | Fan speed 0-100. ``0`` turns the fan off, ``100`` is full speed. Required. |