Started as a SnapACE fork, it has grown to over 5 times the original size, with around 85% of the code now its own and many unique features:
Since the very first version I have been asked about this "occasionally", so I finally sat down and built it: ACE per head mode, which gives you 7 colors from a U1 with single ACE.
For now it works with one ACE only (either V1 or V2). It ships as a prerelease and comes without support. I am setting up a sticky feedback thread in the Issues, and I would love to hear how it works out for you.
Just select head mode in config (tested with head 4 only, but selectable) and connect complete ACE with a 4in1 combiner to that head. Remaining Feeders work like Stock-Mode.
- Ace per Head mode (1 ACE 1/2 only at the moment) 7 Colors with U1 + just 1 ACE Pro
- Ace per Head Preflight and Optimization Modes
- Selectable Slots in multi and head preflight
- Removed another Air-Print issue with ACE V2
- RFID Filament Vendor now correctly imported.
- Manual Heads (for TPU usage) Preflight not supported atm.
- Paxx 12-19 version available.
- Matched to 1.4.1 Firmware routines.
- Filament types synced from printer.
- RFID Subtype is now displayed and set.
- Error Corrections: Resume Bug, Filament runout an other problems solved.
Multi-ACE Pro support for Snapmaker U1 with Klipper
⚠️ Beta Software - This is a community-driven development project for enabling multiple Anycubic ACE Pro filament changers on Snapmaker printers. While carefully tested, it relies on community feedback and testing to mature. Use at your own risk. Please report issues and share your experience to help improve multiACE for everyone.
Important Note: Both the Snapmaker U1 and the Anycubic ACE Pro have their own quirks with filament loading/unloading, RFID detection (possibly related to tag sticker positioning), and occasional mechanical issues. Not every problem encountered is a multiACE issue - many are inherent to the underlying hardware. This is a beta release, not a production-ready solution. Whether these U1 and ACE Pro limitations can be resolved in the future remains to be seen.
This is NO AMS-like solution with 1000s of reliable swaps, and I don't think it ever will be - but it recovers to a pause if it fails, so you can solve the problem and continue.
multiACE supports multiple ACE Pro / ACE Pro 2 units on a single Snapmaker U1 printer. Switch between ACE units to use different filament sets - for example, PLA on ACE 0 and PETG on ACE 1 - without physically swapping spools.
- up to 4 or mixed mode with ACE 1 Units / 4 Max no matter what type
ACE Pro 2 Unit has to be on Firmware: 1.1.31 - please make sure you are able to update it.
There is a update script available, but use at you own risk.
https://gist.github.com/hakimio/39c71fa7174e699c6470b7c79323b189 Thanks to hakimio for making this possible. https://drive.google.com/file/d/1SUnXyiJ28iv01P94k4XbRpL4bjl3HbdU/view?usp=sharing Read more: BlackFrogKok#7
A full real-time control panel for your multi-ACE setup. https://printer-ip/multiace/
- Live multi-ACE dashboard with a wiring overlay that shows which slot is feeding which toolhead
- Editable command queue - pause, drop pending load / unload / swap jobs before they run
- Saveable filament loadouts - snapshot the current spool configuration and re-apply it on the next print with a single click
- Dryer settings per ACE, slot-picker, and multi-language UI (EN / DE, more to come)
See it in action: https://youtu.be/9uLE1uydWmo
- Just upload unprocessed GCode via Multiace-Web, print in actual loaded order or organize spools according to optimized layout to save swaps. Autoloads needed spools, no need to preload.
Color swaps during an active print can be triggered two ways:
- Insert
ACE_SWAP_HEADat a layer via your slicer's "Change Filament" / "Insert Custom G-code at Layer" feature - good for a handful of accent swaps without reslicing. - Run the slicer gcode through the included post-processing script - rewrites slicer-emitted virtual toolheads
T4..T15into the correctACE_SWAP_HEADcommands automatically.
Both paths use the same hardened load/unload logic as normal toolchanges. See How to Do Toolswaps below for the exact command format and post-processing setup.
- In-Print Color Swaps - Layer-boundary and mid-layer color swaps during an active print, triggered from slicer gcode or via post-processing script
- Full Cross-ACE Feed_Assist - All connected ACEs stay fully available during a print, feed_assist on every head, at stock toolchange speed (rewritten USB engine)
- Hardened Load / Unload - Retract-recovery between extrude retries, pause-state snapshot before failure, safer resume path (pre-heat before travel, Z-hop before XY)
- FA / Load Toggle per ACE - Disable feed_assist per-ACE and separately for print-time / load-time (
fa_print_disable/fa_load_disable) - **Online Updates **
- ACE Switching - Switch between ACE units via Fluidd macros or console
- Auto-Load - Load all filled slots from selected ACE with one command
- Unload All - Unload all toolheads, automatically switching to correct ACE for retract
- RFID Handling - Automatic RFID detection and display across ACE switches
- Manual Filament Support - Works with both RFID and non-RFID spools
- Per-ACE Dryer Settings - Configurable temperature and duration per ACE
- Normal Mode - Switch back to stock Snapmaker operation at any time (only original files active, no ACE code running). Useful for filaments the ACE Pro cannot handle, such as TPU/TPE
- PAXX Firmware Compatible / Installer - Works with PAXX firmware which provides display mirroring, allowing full load/unload control from your computer / Integrated PAXX Firmware
- Clean Install/Uninstall - One-command scripts with automatic backup and restore
- Snapmaker U1 printer
- Snapmaker firmware or PAXX firmware (tested with Snapmaker 1.3 and PAXX 12-16)
- 1-4 Anycubic ACE Pro units connected via USB (tested with 3 and 2/2)
- SSH access to the printer
- Fluidd web interface
- PTFE tube splitters (1-to-N per toolhead) - also allows switching to Normal Mode without recabling
Why go back to "poop" printing? You don't have to. The main goal of this software is still clean filament handling, not color-swap printing. You don't need to produce 1000-color swap prints that poop out more filament than the part weighs (and multiACE isn't designed for that) - but adding 1-12 extra colors on top of standard multi-material work is nice without much added waste. Or just adding Gold and Silver to your CMYKW Full Spectrum print.
You still use tip forming - why not a cutter? Tip forming is one of several ACE/U1 load-unload quirks. The first approach here is to solve them in software: sensor-reading retries, hardened recovery paths, changes to tip forming. If you want to build a physical cutter, I'll gladly build the routines for it - get in touch. And if something does fail, you can still walk to the printer, sort it out by hand, and hit resume. It doesn't produce as much poop as a cutter, that's an advantage.
Is it fast? No. Tip forming instead of a cutter, plus the bowden length, retries, puts a single color swap at up to 3-4 minutes. And since swaps don't happen at the park position, every change adds directly to print time. That said, stock Snapmaker per-layer color changes aren't any faster and require manual intervention every time - here it's at least automated. Park-position swaps are an option for the future.
Does it work with ACE 2, AnkerMake Vivid, or other changers? The Anycubic ACE 2 is supported as of 0.97b "Kindred Allies" - V1 (ACE Pro) and V2 (ACE 2) devices can run side by side. AnkerMake Vivid and other third-party changers are not supported. If you know another changer that is proven reliably better than the ACE Pro (and Klipper compatible), let me know - I've seen no trustworthy tests on the Vivid, and self-built machines are much pricier. multiACE aims for a solution anyone can set up.
Can I use multiACE with just one ACE Pro?
Yes. With a single ACE, multiACE still manages loads, unloads, and auto-feed cleanly and adds the hardened retry/resume path. ace_device_count defaults to 1, no extra config needed.
Does it work with / without RFID tags? Yes. Anycubic-RFID (or self written) spools work fine - or set filament type and color manually via the Snapmaker display. RFID and non-RFID spools can be mixed across slots and ACEs.
Can I still use TPU / TPE? Yes, switch to Normal Mode (stock feeders, no ACE) or use the new manual heads
Do I need PAXX firmware? No. Stock Snapmaker firmware 1.4+ works. PAXX adds display mirroring so load/unload is fully controllable from the computer - convenient, not required.
Will a failed load during print ruin the whole print? Not automatically. Load failures trigger a pause (not a full abort), snapshot the pause state (active extruder, target temps), and route through a hardened resume path. In many cases - loose filament, gear slip - the retract-between-retries recovery clears the problem before the pause is even raised.
Can I go back to stock operation?
Yes. ACEF__Mode_Normal switches to stock Snapmaker operation (no ACE code running). The uninstall script reverts everything with one command.
Will this work reliably? No. Maybe yes. This is beta software, errors can and will show up. I've thoroughly tested it, but now it's up to you! Test and report errors - you're part of the team.
The ACE Pro connects to the Snapmaker U1 via USB using a Molex Micro-Fit 3.0 connector. No soldering required.
What You Need:
- 1x Molex Micro-Fit 3.0 Male 2x3 connector with pre-crimped wires - AliExpress
- 1x USB Type-A screw terminal adapter - Amazon
For ACE Pro 2 1 Cable per ACE PRO 2, not daisy chain atm, use Kobra S1 cable and this one.
- 1x Molex Micro-Fit 3.0 Female 2x2 connector with pre-crimped wires - AliExpress
- 1x USB Type-A screw terminal adapter - Amazon
Pinout:
ACE Pro Molex (2x3) - front view Connection
|| <- clip
┌────────────┐
│ [1] [2] [3] │ Pin 2 (D-) -> USB D-
│ [4] [5] [6] │ Pin 3 (D+) -> USB D+
└────────────┘ Pin 5 (GND) -> USB GND
Pin 6 (VCC) -> NOT CONNECTED
ACE Pro 2 Molex (2x2) - front view mating side Connection
|| <- clip
┌─────────┐
│ [2] [1] │ Pin 1 (D-) -> USB D-
│ [4] [3] │ Pin 2 (D+) -> USB D+
└─────────┘ Pin 4 (GND) -> USB GND
Pin 3 (VCC) -> NOT CONNECTED
Important: Do not connect Pin (VCC) - the ACE Pro / 2 has its own power supply, and connecting VCC can damage your printer. Molex cables have no standardized color coding - always measure continuity before connecting.
Assembly:
- Connect D-, D+, and GND from the Molex connector to D-, D+, and GND on the USB connector
- Twist D+ and D- wires together (2-3 twists per cm) to reduce electromagnetic interference
- If using a cut USB cable: wrap the exposed section with aluminum foil overlapping the cable shield
- Additional ACE units connect via the daisy chain cable (included with ACE Pro) - no additional USB cables needed for units 2+
- ACE Pro 2 one cable per ACE, Hub needed for more than 1 unit.
Each ACE Pro connects to the printer via two interfaces:
- USB - Serial communication (commands, status, RFID)
- PTFE tubes - Filament path from ACE slots to toolheads
All ACE units are wired in parallel - each ACE slot feeds the same toolhead as the corresponding slot on every other ACE. This allows switching entire filament sets by switching the active ACE.
Splitter
ACE 0 Slot 0 ──────┐
ACE 1 Slot 0 ──────┤──── Head 0 (T0)
ACE 2 Slot 0 ──────┘
ACE 0 Slot 1 ──────┐
ACE 1 Slot 1 ──────┤──── Head 1 (T1)
ACE 2 Slot 1 ──────┘
ACE 0 Slot 2 ──────┐
ACE 1 Slot 2 ──────┤──── Head 2 (T2)
ACE 2 Slot 2 ──────┘
ACE 0 Slot 3 ──────┐
ACE 1 Slot 3 ──────┤──── Head 3 (T3)
ACE 2 Slot 3 ──────┘
Each ACE Pro 2 connects to the Snapmaker U1 via USB (data only - each ACE has its own power supply). The ACE units are daisy-chained through the USB ports on the back of each ACE:
Snapmaker U1 USB Port
│
ACE 0 ─── ACE 1 ─── ACE 2 ─── ACE 3
(USB out → USB in, daisy chain)
Snapmaker U1 USB Port - HUB
│ │ │ │
ACE2 0 ACE2 1 ACE2 2 ACE2 3
(USB out → USB in, daisy chain)
Note: VCC (5V) is not connected in the USB cable - only data lines. Each ACE Pro is powered by its own external power supply.
Each toolhead needs a splitter that merges PTFE tubes from multiple ACE units into a single path to the extruder. With splitters installed, you can switch between ACE units and back to Normal Mode (stock feeders) without recabling.
- 3D print a Y-splitter or multi-way splitter
- Use commercial PTFE tube connectors with multiple inputs
Tip: Keep all PTFE tube lengths as equal as possible between ACE units. Adjust
load_lengthper toolhead inace.cfgif needed.
The ACE Pro reads RFID tags from Anycubic spools to automatically detect filament type, color, and brand. For third-party spools without RFID, you can write compatible tags yourself:
- Tags - Use NFC NTAG 213 or 215 stickers
- iPhone - TagMySpool app
- Android - RFID ACE app
Spools without RFID tags work fine - you can set the filament type and color manually via the Snapmaker display.
| ACE Units | Use Case | Setup |
|---|---|---|
| 2 ACEs | Material switching (e.g. PLA + PETG) | 2-way splitters, direct USB |
| 2 ACEs | Extended color range (8 colors) | 2-way splitters, direct USB |
| 3-4 ACEs | Multi-material + colors | N-way splitters, USB hub |
Before Snapmaker firmware updates: run
bash uninstall_multiace.shfirst, install the firmware update, then reinstall multiACE. Snapmaker firmware updates overwrite the multiACE Klipper files (filament_feed.py,extruder.py,filament_switch_sensor.py); without uninstalling first you end up in a half-stock half-multiACE state where neither path works reliably.
Before installing multiACE, ensure the following:
- Firmware - Install Snapmaker firmware 1.2+ or PAXX firmware 12-14+ on your Snapmaker U1
- Enable Root Access - On the Snapmaker display, go to Settings > About > tap firmware version 10 times to unlock Advanced Mode, then enable Root Access
- Enable SSH - Connect via SSH or serial console and run:
After reboot, Wi-Fi password needs to be re-entered on the display. SSH is then available at
touch /oem/.debugroot@<printer-ip> - Verify SSH - Connect from your computer:
ssh root@<printer-ip>
- Download or clone this repository
- Copy the
multiace/folder to your printer via SCP/SFTP (e.g. WinSCP on Windows, or command line):scp -r multiace/ root@<printer-ip>:/tmp/multiace/ - SSH into the printer and run:
bash /tmp/multiace/install_multiace.sh - Install with WEB UI https://printer-ip/multiace/
bash /tmp/multiace/install_multiace.sh --install-web - Reboot the printer
- multiACE starts in Multi mode - all connected ACE units are detected automatically
Run the uninstall script (installed automatically to the printer):
bash /home/lava/printer_data/config/extended/multiace/uninstall_multiace.sh
Or from the install folder:
bash /tmp/multiace/uninstall_multiace.sh
Then reboot. The printer returns to stock operation.
All operations are available as macro buttons in Fluidd, sorted alphabetically:
| Macro | Description |
|---|---|
| ACEA__Switch_0..3 | Switch to ACE 0-3 (no autoload) |
| ACEB__Load_0..3 | Switch to ACE and load all filled slots |
| ACEC__Unload_All | Unload all toolheads |
| ACEC__Unload_T0..T3 | Unload individual toolhead |
| ACEC__Load_T0..T3 | Load individual toolhead from active ACE |
| ACED__Dry_Start_0..3 | Start drying on ACE (uses config settings) |
| ACED__Dry_Stop | Stop drying on current ACE |
| ACEF__Mode_Normal | Switch to stock mode (no ACE) |
| ACEF__Mode_Multi | Switch to multi-ACE mode |
| ACEG__Status | Show active ACE, detected devices, head mapping, build tag |
| ACEG__List | List all detected ACE devices |
- Insert spools into ACE 0
- Press ACEB__Load_0 → loads all filled slots
- Print normally
- Insert PLA spools into ACE 0, PETG spools into ACE 1
- Load PLA toolheads (T0-T2) via display
- Press ACEA__Switch_1 → switch to ACE 1
- Load PETG into desired toolhead (e.g. T3) via display or ACEC__Load_T3
- Toolchanges during print automatically switch between ACEs
- Press ACEC__Unload_All → unloads everything
- Press ACEB__Load_1 → switch to ACE 1 and load all
Use the Fluidd macros ACEA__Switch_0..3 to switch between ACE units.
Note on macro names: The macro names use letter prefixes (ACEA, ACEB, ACEC...) to ensure they appear in a logical order in Fluidd's alphabetical macro list. If you prefer different names, you can rename them anytime in
config/extended/ace.cfg.
multiACE supports up to 16 logical filaments (4 toolheads × up to 4 ACE units). The core in-print swap command is:
ACE_SWAP_HEAD HEAD=<0..3> ACE=<0..3>
This swaps the filament on HEAD to the matching slot of the given ACE, reusing the hardened load/unload path. There are two ways to get these commands into your print gcode.
For a quick 1-2 swap print without reslicing the whole project, use your slicer's "Insert Custom G-code at Layer" feature (Orca / Prusa: "Change Filament At Layer"; Bambu: "Pause / Custom G-code at layer").
Example: at layer 42, swap the filament on head 0 to the spool in ACE 1, slot 0:
; layer 42
ACE_SWAP_HEAD HEAD=0 ACE=1
Use this when you want full manual control over where and how often swaps happen. Good for color accents, signatures, or single-layer labels.
For a real multi-color print where the slicer already thinks in tool changes, let the Web Preflight do the conversion. The function maps slicer-emitted virtual toolheads T4..T15 to the correct ACE_SWAP_HEAD commands and cleans up the heater/pre-extrude commands so nothing collides with multiACE's own swap flow.
Upload the processed gcode via Fluidd - after the slicer exports, upload the resulting .gcode through multiACE Web UI) and start the print from there. Fluidd sends the rewritten commands to Klipper directly, so the ACE-aware gcode reaches multiACE exactly as the script produced it.
What it does:
- Rewrites bare
T4..T15in the print body intoT<head%4>+ACE_SWAP_HEAD HEAD=X ACE=Y - Skips redundant swaps when a head already holds the requested color
- Runs an optimizer: prints a recommended ACE loadout (which 4 colors should live on the "primary" slots so fewer swaps are needed) to both the slicer's post-process dialog and
multiace_postprocess.log
Running the analysis on your PC (post-processing script)
Since the heavy work runs on the Snapmaker (limited RAM/CPU), you can run the exact same logic on your PC instead. It is the standalone version of the engine. It does two things: it rewrites the G-code in place (injects the ACE_SWAP_HEAD commands) and writes a report with the loadout/swap plan.
Command
python post_process_virtual_toolheads.py [options] <file.gcode> Options:
--layer : layer mode (swaps only at layer boundaries, fewest swaps) --optimize : free optimization (mid-layer swaps allowed) (neither) : simple slot==head --live-lookup [printer-ip] : match against the printer's currently loaded slots (needs network access to the U1; without an IP it uses the MULTIACE_HOST env var or 127.0.0.1) --aces N : override the ACE count (otherwise auto-detected) The <file.gcode> must be the last argument and is overwritten in place (this is standard for a slicer post-processor). Keep a copy first if you want to preserve the original.
Hooking it into Orca / Snapmaker Orca (runs automatically on slice)
Print Settings -> Output options -> Post-processing Scripts, add one line (Windows example, full paths in quotes):
"C:\Python\python.exe" "C:\multiace\post_process_virtual_toolheads.py" --layer Orca appends the exported G-code path automatically. This moves the heavy computation onto your PC instead of the printer, so 130-180 MB files finish in seconds instead of minutes (or failing).
Where the results go (two options)
Automatic: every run appends the report (loadout recommendation, T-remap, swap counts, LAYER MODE: X->Y swaps) to multiace_postprocess.log located in the same folder as the script. Just open it after slicing. Manual (console): redirect stdout: python post_process_virtual_toolheads.py --layer file.gcode > report.txt 2>&1 writes the same report to report.txt (2>&1 also captures any errors). In short: the G-code is rewritten in place, and the analysis report is written automatically to multiace_postprocess.log next to the script (or wherever you redirect it with > report.txt).
All settings live in config/extended/ace.cfg under the [ace] section (the Fluidd macros live in the same file below). For a fresh multi-ACE install only ace_device_count has to be changed - everything else has sensible defaults.
[ace]
ace_device_count: 1 # Number of physical ACE Pro devices (1..8)At startup multiACE waits up to 20s for all expected devices before locking the path-to-index mapping, so a unit mid-USB-reset-cycle at boot never causes index drift. Required for multi-ACE - without an explicit count a single missing unit can lock the wrong mapping.
state_debug: true # per-toolchange / per-load audit log
usb_debug: true # per-scan / per-connect serial-layer log
fa_debug: true # feed_assist trace (useful during 0.90b bring-up)
# log_dir: /home/lava/printer_data/logs # default is usually fineSeparate files under printer_data/logs/multiace_*.log. Keep them on while the release is in beta - they're essential for post-mortem analysis and cost nothing at runtime.
baud: 115200
feed_speed: 80 # mm/s
retract_speed: 80 # mm/s
load_length: 2100 # ACE feed distance into the bowden (mm)
retract_length: 1950 # sensor-to-splitter distance (mm)Set load_length to roughly 110 % of your PTFE length - the phase is sensor-stopped, so overshoot is safe. retract_length = measured extruder-sensor-to-splitter distance minus ~100 mm; the retract only needs to pass the splitter junction, not the full tube. Low retract_speed helps the ACE wind the spool tighter; a spool guide upgrade like this roller guide improves winding quality further.
load_retry: 3 # FEED_AUTO LOAD retries if sensor not reached
extrusion_retry: 7 # outer retries after wheel check fails (0 = disabled)
unload_retry: 3 # unload re-heat / re-run attemptsdryer_temp: 55 # °C
dryer_duration: 240 # minutes
max_dryer_temperature: 70 # safety cap
# Per-ACE overrides (optional):
# dryer_temp_0: 55
# dryer_temp_1: 45
# dryer_duration_0: 240extra_purge_length: 50 # extra mm after flush during toolchange
swap_default_temp: 250 # fallback swap temp when no heater/RFID target
swap_retract_length: 900 # mid-print swap retract (default = retract_length)When bowden lengths differ per ACE, override them in a dedicated [ace N] section:
[ace 0]
load_length: 2100
retract_length: 1950
load_length_2: 2200 # slot-specific override (ACE 0, slot 2)
[ace 1]
load_length: 2050Lookup priority: [ace N] load_length_Y → [ace N] load_length → [ace] load_length. Same for retract_length. Speeds stay global.
- Air Print Detection has to be off - Looking into that for next hotfix.
- Don't turn off automatic load in display - Throws errors.
- Unload before first use - After a fresh install or when upgrading from a previous version, unload all toolheads before starting multiACE. Filament loaded from a previous installation can cause unexpected behavior since multiACE has no knowledge of the previous state. Use ACEC__Unload_All or unload via the display first.
- Unload All clears display info - After ACEC__Unload_All, manually set filament types and colors are cleared. By design - reload and set filament info again after unloading.
Small things that make a big difference in practice - mostly mechanical, a few config-related:
- Use spools the ACE actually likes. Cardboard spools are the classic offender: they soak up humidity, swell, jam in the ACE channel, and the feed wheel still registers motion because only the spool itself is turning. Rewind to plastic or print a spool adapter. Spools that are too large or too small for the ACE Pro hub bind just as easily - stay close to standard 1 kg plastic cores.
- Kobra 3 / S1 guide upgrade. On the newer Anycubic roller-guide system the original feeder parts often skip; print the updated guide parts for much smoother winding. (link to follow)
- Tune the retry parameters for your setup.
load_retry,extrusion_retryandunload_retryare there to be adjusted. The defaults catch most soft failure modes without user intervention, but bumping them up further on a problematic spool/setup is worth experimenting with. - Fit a larger purge bin. Multi-color prints produce more purge than single-material runs. A bigger aftermarket or printed purge bin saves a trip to the printer mid-print.
- Stable splitter / PTFE connections. A splitter that shifts under feed pressure, or a PTFE joint sitting 1–2 mm short, can cost you a load with no obvious cause. Make sure every junction is fully seated, collets are locked, and the splitter is mounted on something that doesn't flex.
If things get out of sync (wrong filament displayed, unexpected behavior), reset everything:
- Unload all toolheads via display (make sure no filament is stuck in any head)
- In Fluidd console:
ACE_CLEAR_HEADS - Power-cycle the printer (full off/on, not just Klipper restart)
- After reboot, start fresh with loading from ACE 0
- Check if
ace.cfgis included:grep ace.cfg /home/lava/printer_data/config/printer.cfg - Check if
multiace/ace_vars.cfgexists - Run uninstall and reinstall
- Check USB connection:
ls /dev/serial/by-path/ - ACE Pro should show as vendor
28e9, product018a - Try power-cycling the ACE
- Delete Python cache:
rm -rf /home/lava/klipper/klippy/extras/__pycache__/ - Check file timestamp in console:
multiACE v0.90b (file: ...)
- Serial errors during ACE switch are logged silently. If errors persist, check USB cables.
When reporting a problem, please include the following logs from your printer. They are essential for diagnosing the issue:
- multiACE state log - per-action audit trail (toolchanges, loads, unloads, FA events):
cat /home/lava/printer_data/logs/multiace_state.log - multiACE USB log - serial connect/disconnect and scan events:
cat /home/lava/printer_data/logs/multiace_usb.log - Klipper log - the last ~200 lines around the time of the issue:
tail -200 /home/lava/printer_data/logs/klippy.log
Also mention:
- Time of error - exact timestamp so we can find it in the logs
- What you did - which button / macro / gcode you triggered
- What happened before - was this mid-print, during load, after a restart, etc.
- Expected behavior - what should have happened instead
- How many ACE units you have connected
- Whether your spools have RFID tags or not
- Whether Developer Mode is enabled (
ls /oem/.debug)
multiACE is a community project — built by hobbyists, for hobbyists. A quick orientation before SSH'ing into your printer:
- multiACE needs root access to your Snapmaker U1 (
touch /oem/.debug+ reboot). With root enabled and custom code running, this may affect your manufacturer warranty. Snapmaker support generally cannot help with a modified printer. - The installer modifies live Klipper files under
/home/lava/klipper/klippy/extras/and/kinematics/(filament feed, switch-sensor, extruder). Stock files are backed up as*_pre_multiace.pyand the includeduninstall_multiace.shrestores everything cleanly. - The project is not endorsed or supported by Snapmaker, Anycubic, or the PAXX upstream maintainers.
- This software comes without warranty — formally covered by GPL-3.0 §15–17. Translation: I do my best, but the responsibility for using it stays with you.
If any of that doesn't sit right, no worries — your printer keeps working with stock Snapmaker firmware as it is. If you're on board: have fun, and feedback / issues are always welcome.
This project is based on SnapACE and Klipper, both licensed under GPL-3.0. multiACE is therefore also GPL-3.0.
This project includes AI-assisted content (research, documentation, parts of code). All content is reviewed by humans before inclusion.
- Hakimio for ACE Pro 2 reverse engineering and support
- SnapACE by BlackFrogKok - Foundation for ACE Pro Klipper integration
- DuckACE - ACE Pro reverse engineering and protocol documentation
- ACE Research by Printers for People - ACE Pro protocol research
- Snapmaker - Printer hardware and firmware
- Anycubic - ACE Pro filament changer
- Community - Testing, feedback, and bug reports (hopefully!)
