After spending days troubleshooting my TwoTrees SP-5 V3 3D printer with the high-speed upgrade kit, I finally achieved smooth, flawless color changes. This journey took me through multiple firmware versions, slicer experiments, and plenty of trial and error. What began as a simple goal—printing multi-color objects using OrcaSlicer—turned into a deep technical dive into Marlin firmware, motion control, and filament handling.
Why I Wanted Reliable Color Change
I’ve been working on multi-color 3D prints for some time, and for projects on PrintLabSA and CraftConnectSA, the ability to switch colors mid-print is essential. Whether I’m prototyping custom badges, artistic signs, or branded components for craft makers, color adds life and professionalism to the finished product. Unfortunately, my stock TwoTrees firmware was holding me back.
Every time I tried to perform a filament change during a print, something went wrong. The printer would pause, but extrusion after resuming was unreliable. Sometimes it missed steps, sometimes it resumed too high on the Z-axis, and other times it left an ugly blob in the hotend that refused to come out. The workflow was frustrating—far from the precision and reliability that 3D printing should deliver.
Initial Setup and Frustrations
My setup started with the stock closed-source TwoTrees firmware that shipped with the SP-5 V3. It included the MKS WiFi module and an LVGL-based touch interface. While the LVGL UI looked good, it locked me out of the full Marlin menu system. Most advanced motion and filament features were inaccessible, and configuration options were minimal.
When I attempted to use OrcaSlicer’s color change function, the slicer correctly inserted pause commands, but the printer never behaved consistently. After resuming, the nozzle height was wrong, extrusion wasn’t right, and sometimes the filament wouldn’t even load properly. I knew the hardware was fine—it had a reliable extruder, good thermals, and clean mechanics—so the issue had to be firmware-related.
Switching to Open Marlin Firmware
I decided to recompile Marlin 2.1 Bugfix from source. I’ve done plenty of embedded work before, so I was comfortable diving in. The key was enabling all the right options for Advanced Pause and Filament Change. Marlin’s flexibility is powerful, but it requires understanding how the printer handles toolhead movement and filament sensors.
Once I had the firmware building successfully, I uploaded it to the MKS Robin Nano V3.1 board (part of the high-speed upgrade). The difference was immediate—the LCD now used the standard Marlin UI instead of the locked LVGL interface. I could access all motion and extrusion menus directly, including the Move E0 option under “Move Axis.”
Testing the M600 Filament Change Command
With the firmware in place, I began testing using the manual M600 command from the terminal. The Advanced Pause feature kicked in exactly as expected: the printer retracted the filament, parked the nozzle, beeped to alert me, and waited for new filament to be inserted. Once confirmed, it resumed at the correct Z height and continued the print without missing a beat.
This was a huge breakthrough. The original TwoTrees firmware never managed to restore the exact Z position correctly. In Marlin 2.1 Bugfix, everything worked perfectly. I could finally use multi-color prints without fear of ruining a 10-hour job halfway through.
Lessons Learned About Retraction and Blobs
One of my biggest headaches before switching firmware was the dreaded filament blob during unload. The filament would melt too far up the PTFE tube, forming a fat plug that couldn’t be pulled out. I used to cut the filament above the extruder and manually extrude the rest out, which completely defeated the purpose of automated color changes.
Later, I realized the problem wasn’t only firmware—it was also the hotend. I had replaced the stock TwoTrees hotend with a reliable E3D V6-style hotend. The V6 has a tighter, more controlled melt zone and better heatbreak design. Now, when Marlin retracts the filament, it forms a sharp, clean “needle tip” that can easily be pulled out without sticking or leaving residue. This hardware change alone solved much of the blob issue that had plagued me before.
Fine-Tuning for Smooth Operation
Once I had consistent color changes, I focused on refining the process. A few settings made a big difference:
- Unload length: 80–90mm worked best for my direct-drive setup.
- Unload temperature: 195–200°C for PLA produced a clean filament tip.
- Retract speed: Moderate values (25–40 mm/s) prevented grinding or stringing.
- Insertion length: Around 70mm ensured proper filament feeding when resuming.
In OrcaSlicer, I left the “Filament Change” g-code as-is, allowing the slicer to insert the correct M600 command automatically. When triggered, OrcaSlicer retracts, beeps several times, and pauses cleanly for the operator. I can now swap filament and press resume, confident that the print will continue perfectly aligned.
Filament Sensor Observations
The MKS Robin Nano V3.1 has a built-in filament sensor connection, but the correct pin mapping for Marlin hasn’t yet been officially confirmed by the Marlin developers. The stock TwoTrees firmware handled it fine, but in open Marlin builds, it’s still under investigation. I plan to trace the sensor connection manually and assign the pin properly in the next build.
Even without the sensor, though, the printer’s performance under Marlin 2.1 Bugfix is excellent. The Advanced Pause workflow is so reliable that I no longer rely on the sensor for day-to-day printing.
Moving from MKS WiFi to OctoPrint
Another big improvement came from dropping the MKS WiFi module and switching to OctoPrint. The MKS interface limited control and feedback, while OctoPrint gives full visibility and automation. I can now start, monitor, and resume prints directly from my PC or phone. It also makes it easy to test custom g-code sequences, such as pause, park, or filament-change scripts.
OctoPrint’s G-code viewer and console made it simple to confirm that M600 and M25 commands were working as expected. Combined with OrcaSlicer, it’s a professional-grade workflow—far beyond what the original factory setup offered.
Final Results
After all the tweaks, firmware compilations, and experiments, the results are worth it. Color changes on the SP-5 V3 are now smooth, consistent, and completely predictable. The printer pauses, retracts, and resumes precisely where it should. No more missing layers, blobs, or offsets.
For makers, crafters, and anyone printing custom products, this improvement opens the door to far more creative applications. Multicolor text plates, logo badges, artistic signage, and small branded items all become easy to produce on a single-extruder machine—without relying on expensive AMS or multi-head setups.
Conclusion
The key lesson from this experience is that open-source firmware and tools matter. The freedom to recompile Marlin, adjust configuration files, and fine-tune mechanical parameters allowed me to unlock the full potential of my hardware. Closed-source firmware might be convenient at first, but it quickly limits experimentation and precision.
If you’re struggling with color changes, don’t give up. The solution may involve both firmware and hardware adjustments. Start by enabling Advanced Pause in Marlin, test the M600 command, and verify your unload and resume temperatures. If your hotend tends to jam or leave blobs, consider switching to a V6 or similar all-metal design—it can make a world of difference.
Today, my TwoTrees SP-5 V3 with Marlin 2.1 Bugfix, OrcaSlicer, and OctoPrint runs like a dream. Color changes are seamless, prints are clean, and I can finally focus on creativity instead of troubleshooting.
— Written and tested by Pieter, for PrintLabSA and CraftConnectSA.
