CFS — Color Filament System (K2 Plus Combo)¶
This page covers the built-in CFS (Color Filament System) that ships with the K2 Plus Combo. The CFS is Creality's multi-material hub allowing automatic filament switching between up to 16 spools (4 units × 4 slots each).
Combo only
This page applies to the K2 Plus Combo. If you have the standalone K2 Plus without the CFS, this hardware is not present and these config sections can be ignored.
How the CFS Works in Klipper¶
The CFS is not a standalone Klipper component — it is fully integrated into the stock printer.cfg via box.cfg. It communicates over a dedicated RS-485 serial bus and is exposed to Klipper through a custom Creality module ([box]).
Config files involved¶
| File | Location | Purpose |
|---|---|---|
box.cfg |
/mnt/UDISK/printer_data/config/box.cfg |
All CFS hardware config, positions, and macros |
printer.cfg |
/mnt/UDISK/printer_data/config/printer.cfg |
Includes box.cfg via [include box.cfg] |
Key hardware sections in box.cfg¶
[serial_485 serial485]
serial: /dev/ttyS5 # dedicated RS-485 port for CFS
baud: 230400
[auto_addr] # automatic address discovery for CFS units
[filament_rack]
not_pin: !PA5 # filament presence sensor for the rack
[box]
bus: serial485
filament_sensor: filament_sensor
# ... cut positions, purge positions, temperatures, velocities
Filament Slot Addressing¶
The CFS addresses filaments using a TxY notation:
- T — fixed prefix
- x — unit number (1–4, one per CFS box)
- Y — slot letter within that unit (A, B, C, D)
Examples: T1A, T1B, T2C, T4D
The M8200 macro translates between Klipper's I parameter (0-based integer index) and this notation:
Filament Change Sequence¶
A full tool-change triggered by M8200 or a slicer Tx command follows this sequence:
- Pre-op (
CR_BOX_PRE_OPT) — move toolhead to safe Z height, prepare state - Move to cut position — X=10 Y=200 (pre-cut), then execute cut
- Cut (
CR_BOX_CUT/M8200 C) — cutter fires at calibratedcut_pos_x - Retract (
CR_BOX_RETRUDE/M8200 R) — pulls filament back to CFS unit - Load new filament (
CR_BOX_EXTRUDE/M8200 L I[slot]) — feeds new filament to toolhead - Purge/flush (
CR_BOX_FLUSH/M8200 F) — extrudes purge length at purge position (X=133–160, Y=378) - End-op (
CR_BOX_END_OPT) — restore fans, move to safe position
Purge and wipe positions (from your calibrated box.cfg)¶
| Position | X | Y |
|---|---|---|
| Pre-cut | 10 | 200 |
| Purge / extrude | 133 | 378 |
| Wipe left | 135–160 | 378 |
| Wipe right | 160–170 | 374 |
| Safe home | 225 | 345 |
| Clean left boundary | 135 | 378 |
| Clean right boundary | 160 | 378 |
Calibrated Cut Position¶
Your printer's cut position has been auto-calibrated and saved in the SAVE_CONFIG block of printer.cfg:
Do not remove the SAVE_CONFIG block
The cut_pos_x value is the result of the cutter calibration routine. If you wipe this block or restore factory settings, you will need to re-run the cutter calibration from the touchscreen before the CFS can operate correctly.
Key Macros¶
These macros are defined in box.cfg and are available in Fluidd/Mainsail:
| Macro | Purpose |
|---|---|
BOX_LOAD_MATERIAL |
Full load sequence for a new spool |
BOX_QUIT_MATERIAL |
Full unload sequence |
BOX_INFO_REFRESH ADDR= NUM= |
Refresh RFID and remaining length for a slot |
M8200 P |
Pre-op (prepare for filament change) |
M8200 C |
Execute cut |
M8200 R |
Retract filament to CFS |
M8200 L I=[slot] |
Load filament from slot (0-based index) |
M8200 F |
Purge/flush new filament |
M8200 O |
End-op (restore state after change) |
BOX_CHECK_MATERIAL_REFILL |
Called automatically on runout |
Slicer Setup (OrcaSlicer)¶
In OrcaSlicer, configure the K2 Plus Combo as a multi-material printer:
- Tool change G-code: Use the
M8200sequence or theT[next_extruder]command. - The stock firmware interprets
T0–T15and translates them to the CFS slot addressing automatically. - Set flush/purge volume to match the values in your
box.cfg(BOX_MATERIAL_CHANGE_FLUSHuses the configured length and velocity).
See the OrcaSlicer page for full slicer configuration.
Troubleshooting¶
CFS not responding / filament not loading
- Verify the RS-485 cable is seated on both the CFS unit and the printer mainboard.
- Check that /dev/ttyS5 is present: ls /dev/ttyS*
- Restart Klipper: /etc/init.d/S55klipper restart
Cut position error after factory reset
- Re-run cutter calibration from Settings → CFS → Cutter Calibration on the touchscreen.
- The calibrated value is written back to the SAVE_CONFIG block in printer.cfg.
Filament sensor always triggered / never triggered
- Check filament_switch_sensor filament_sensor in Fluidd's sensor status.
- The sensor pin is ^!nozzle_mcu:PA11 — the ^ is a pull-up, ! inverts logic. Do not remove these modifiers.
Purge position leaving blobs on print
- Adjust extrude_pos_x and extrude_pos_y in box.cfg to match your waste chute position.
- Adjust clean_left_pos_x / clean_right_pos_x to ensure the wiper fully removes the purge string.
Backup Before Modifying¶
Before editing box.cfg or the CFS-related sections of printer.cfg, back up your config:
cp /mnt/UDISK/printer_data/config/box.cfg /mnt/UDISK/printer_data/config/box.cfg.bak
cp /mnt/UDISK/printer_data/config/printer.cfg /mnt/UDISK/printer_data/config/printer.cfg.bak
Or use the helper script's Backup & Restore Klipper configuration files feature.