ACE PRO K1 Max with CFS upgrade Kit - Anycubic Color Engine Pro Driver for K1 Max, K1 series and Klipper
A comprehensive Klipper driver for the Anycubic Color Engine Pro multi-material unit, optimized for K1 Max with CFS upgrade kit and other Klipper-based 3D printers.
NOTE: DO NOT INSTALL THE CFS FIRMWARE THAT COMES WITH THE KIT. THIS HAS NOT BEEN TESTED WITH THAT FIRMWARE. ONLY USE THE NON-CFS FIRMWARE.
I now have a K2 Plus with CFS and have been working with it. I still have my K1 Max and ACE (and still use it) and will continue answering what questions come up or fixing any bugs that get found but won't be actively updating this. I have the source code for the mainsail and fluidd configs if someone wants to work on improving them.
- Credits
- Features
- Hardware Requirements
- Images
- Installation
- Pin Configuration
- Commands Reference
- Endless Spool Feature
- Inventory Management
- Hardware Setup
- Contributing
This project is based on excellent work from:
- ACEResearch - Original ACE Pro research
- DuckACE - Base driver implementation
- BunnyAce - Base driver fork
- ACEPROSV08 - Forked from
- Multi-Material Support: Full 4-slot filament management
- Endless Spool: Automatic filament switching on runout
- Persistent State: Settings and inventory saved across restarts
- Feed Assist: Advanced filament feeding control
- Runout Detection: Dual sensor runout detection system
- Inventory Tracking: Material type, color, and temperature management
- Temperature Monitoring: Ace chamber temp added to Temperatures panel
- Debug Tools: Comprehensive diagnostic commands
- Seamless Integration: Native Klipper integration
- Mainsail Panel: optional Mainsail Panel for status and control
- Fluidd Panel: optional Fluidd Panel for status and control
- Anycubic Color Engine Pro multi-material unit
- Filament Sensors:
- Extruder sensor (at entrance of extruder)
- Toolhead sensor (before hotend at cutter)
- Hotend: Compatible with filament cutting (recommended)
- K1 Series CFS upgrade kit: K1 Series CFS upgrade Kit
- Filament Splitter: BAMBULAB filament splitter
cd ~
git clone https://github.com/swilsonnc/ACEPROK1Max.git# Run install.sh
./ACEPROK1Max/install.shAdd near the top of your printer.cfg (preferably above the other [include] lines):
[include ace.cfg]Add near the bottom of your printer.cfg to add the Ace Chamber temp to your Temperatures panel:
[temperature_ace]
[temperature_sensor ace_chamber]
sensor_type: temperature_ace
min_temp: 0
max_temp: 70Comment out [filament_switch_sensor filament_sensor] section in printer.cfg
#[filament_switch_sensor filament_sensor]
#pause_on_runout: false
#switch_pin: !PC15
#runout_gcode:
# {% if printer.extruder.can_extrude|lower == 'true' %}
# G91
# G0 E30 F600
# G90
# {% endif %}Add in your printer.cfgfor correct temperatures when purging and cutting:
[gcode_macro _GLOBAL_VARS]
variable_extruder_target: 0.0
gcode:Add this near the top of your start_print macro under the initial {% set extruder_temp line
SET_GCODE_VARIABLE MACRO=_GLOBAL_VARS VARIABLE=extruder_target VALUE={params.EXTRUDER_TEMP}I use Orca Slicer and you can refer to the images below for my settings for it. Pay special attention to the bed exclusion settings as these are very important or your extruder motor may contact the cutter piece or the purge bucket and break something.
Make sure you setup multiple filaments in Orca. Make sure when you are slicing a part that you click the first layer on the right hand bar and select change filament. That will set the current_extruder that your macro's will need in order to work correctly.
You can also use the paint tool and paint the model with your loaded filaments and it will print it that way. Just make sure your colors and types match what is actually in the ace.
If you use a different slicer you will have to figure out where these settings go on your own.
Connect the ACE Pro to a regular USB port and configure the sensor pins according to your board layout.
| Command | Description | Parameters |
|---|---|---|
ACE_CHANGE_TOOL |
Manual tool change | TOOL=<0-3|-1> |
ACE_CHANGE_SPOOL |
Change spool (retract filament back to ACEPRO) | INDEX=<0-3> |
ACE_FEED |
Feed filament | INDEX=<0-3> LENGTH=<mm> [SPEED=<mm/s>] |
ACE_RETRACT |
Retract filament | INDEX=<0-3> LENGTH=<mm> [SPEED=<mm/s>] |
ACE_GET_CURRENT_INDEX |
Get current slot | Returns: -1, 0, 1, 2, 3 |
| Command | Description | Parameters |
|---|---|---|
ACE_ENABLE_FEED_ASSIST |
Enable feed assist | INDEX=<0-3> |
ACE_DISABLE_FEED_ASSIST |
Disable feed assist | INDEX=<0-3> |
| Command | Description | Parameters |
|---|---|---|
ACE_SET_SLOT |
Set slot info | INDEX=<0-3> COLOR=<R,G,B> MATERIAL=<name> TEMP=<Β°C> |
ACE_SET_SLOT |
Set slot empty | INDEX=<0-3> EMPTY=1 |
ACE_QUERY_SLOTS |
Get all slots | Returns JSON |
ACE_SAVE_INVENTORY |
Save inventory | Manual save trigger |
| Command | Description |
|---|---|
ACE_ENABLE_ENDLESS_SPOOL |
Enable endless spool |
ACE_DISABLE_ENDLESS_SPOOL |
Disable endless spool |
ACE_ENDLESS_SPOOL_STATUS |
Show endless spool status |
| Command | Description |
|---|---|
ACE_TEST_RUNOUT_SENSOR |
Test sensor states |
ACE_DEBUG |
Debug ACE communication |
ACE_GET_CURRENT_INDEX |
Get currently loaded slot index |
| Command | Description | Parameters |
|---|---|---|
ACE_START_DRYING |
Start dryer | TEMP=<Β°C> [DURATION=<minutes>] |
ACE_STOP_DRYING |
Stop dryer | - |
The endless spool feature automatically switches to the next available filament slot when runout is detected, enabling continuous printing across multiple spools.
- Runout Detection β Immediate response (no delay)
- Disable Feed Assist β Stop feeding from empty slot
- Switch Filament β Feed from next available slot
- Enable Feed Assist β Resume normal operation
- Update State β Save new slot index
- Continue Printing β Seamless continuation
# Enable endless spool
ACE_ENABLE_ENDLESS_SPOOL
# Disable endless spool
ACE_DISABLE_ENDLESS_SPOOL
# Check status
ACE_ENDLESS_SPOOL_STATUS- Enabled: Automatic switching on runout
- Disabled: Print pauses on runout (standard behavior)
- No Available Slots: Print pauses automatically
Track filament materials, colors, and printing temperatures for each slot.
# Set slot with filament
ACE_SET_SLOT INDEX=0 COLOR=255,0,0 MATERIAL=PLA TEMP=210
# Set slot as empty
ACE_SET_SLOT INDEX=1 EMPTY=1# Get all slots as JSON
ACE_QUERY_SLOTS
# Example response:
# [
# {"status": "ready", "color": [255,0,0], "material": "PLA", "temp": 210},
# {"status": "empty", "color": [0,0,0], "material": "", "temp": 0},
# {"status": "ready", "color": [0,255,0], "material": "PETG", "temp": 240},
# {"status": "empty", "color": [0,0,0], "material": "", "temp": 0}
# ]- Inventory is automatically saved to Klipper's
save_variables - Restored on restart
- Manual save:
ACE_SAVE_INVENTORY
- Extruder Sensor: The first sensor in the extruder
- Toolhead Sensor: The bottom sensor in the extruder at the cutter
- Wiring: Connect sensors to toolhead board in spots designated in cfs upgrade kit instructions
Connect the ACE Pro unit to your printer's host computer via USB. The driver will automatically detect the device.
Use a BAMBULAB-compatible filament splitter for optimal performance with the ACE Pro system or any good smooth printable splitter. I am using this one and it has never failed me once. 4-in-1 PTFE adapter
Contributions are welcome! Please feel free to submit issues, feature requests, or pull requests.
- Fork the repository
- Create a feature branch
- Make your changes
- Test thoroughly
- Submit a pull request
This project is licensed under the same terms as the original projects it's based on.
