A comprehensive Klipper driver for the Anycubic Color Engine Pro multi-material unit, optimized for SOVOL SV08 and other Klipper-based 3D printers.
- Features
- Hardware Requirements
- Installation
- Configuration
- Commands Reference
- Endless Spool Feature
- Inventory Management
- Hardware Setup
- Contributing
- Credits
Base driver fork:
https://github.com/BlackFrogKok/BunnyACE
- 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
- Debug Tools: Comprehensive diagnostic commands
- Seamless Integration: Native Klipper integration
- Anycubic Color Engine Pro multi-material unit
- Filament Sensors:
- Extruder sensor (at splitter exit)
- Toolhead sensor (before hotend)
- Hotend: Compatible with filament cutting (recommended)
- Filament Splitter: BAMBULAB filament splitter
- Toolhead: Nadir extruder for SV08/Voron
- Cutting Mod: Mr Goodman BAMBULAB hotend with cutter
cd ~
git clone https://github.com/szkrisz/ACEPROSV08.git# Link the driver to Klipper extras
ln -sf ~/ACEPROSV08/extras/ace.py ~/klipper/klippy/extras/ace.py
# Link the configuration file
ln -sf ~/ACEPROSV08/ace.cfg ~/printer_data/config/ace.cfg# Activate Klipper virtual environment
source ~/klippy-env/bin/activate
# Update pyserial to version 4.5 or higher
pip3 install pyserial --upgradeAdd to your printer.cfg:
[include ace.cfg][ace]
serial: /dev/ttyACM0
baud: 115200
extruder_sensor_pin: ^PC2
toolhead_sensor_pin: ^PC3
feed_speed: 50
retract_speed: 50
toolchange_retract_length: 150
toolchange_load_length: 630
toolhead_sensor_to_nozzle: 10
endless_spool: TrueConnect 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: Install at the splitter exit point
- Toolhead Sensor: Install before the hotend entry
- Wiring: Connect sensors to configured pins with pullup resistors
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.
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 based on excellent work from:
- ACEResearch - Original ACE Pro research
- DuckACE - Base driver implementation
- BunyAce - Base driver fork
This project is licensed under the same terms as the original projects it's based on.
