Multi-Color Printing for first layer on Snapmaker Using OrcaSlicer + Virtual Extruders (with M600)

Hello,

I have Snapmaker 2 A350 with dual nozzle, I’m trying to print:
https://makerworld.com/en/models/380201-keychain-spiderman?from=search#profileId-280371

But the problem i can’t find a way to print multi color same layer in my case first layer face down

So I want share my experience how .make it work with help of ChatGPT.

I’ve successfully configured OrcaSlicer to use my Snapmaker dual-extruder printer for manual multi-color prints using virtual extruders and the M600 command for filament changes.


What I Did

  1. Added Virtual Extruders in OrcaSlicer:

I set up 8 extruders in the printer profile.

T0 and T1 = Snapmaker’s physical extruders.

T2, T4, T6, … = Virtual tools that reuse T0 but prompt for filament change.

T3, T5, T7, … = Virtual tools that reuse T1 but prompt for filament change.

  1. Edited Tool Change G-code

I kept OrcaSlicer’s default tool-switch logic.

I inserted custom M600 commands based on the tool number:

Even virtual tools = change filament for T0.

Odd virtual tools = change filament for T1.

Tool Change G-code:

————————————

;***** Update: 20250505
{if current_extruder != next_extruder}
; Change T[current_extruder] → T[next_extruder] (layer [layer_num])
; layer
T{next_extruder}

; === Custom filament change for virtual extruders ===
{if next_extruder==2 or next_extruder==4 or next_extruder==6 or next_extruder==8 or next_extruder==10}
M600 ; Manual filament change for T0-based virtual tools
{endif}
{if next_extruder==3 or next_extruder==5 or next_extruder==7 or next_extruder==9 or next_extruder==11}
M600 ; Manual filament change for T1-based virtual tools
{endif}
; === End custom M600 section ===

{if layer_num == 1 &&
((filament_type[current_extruder] == “PLA” || filament_type[current_extruder] == “TPU”)
|| (filament_type[next_extruder] == “PLA” || filament_type[next_extruder] == “TPU”))
}
; set bed temp: {filament_type[current_extruder]}({bed_temperature[current_extruder]}) → {filament_type[next_extruder]}({bed_temperature[next_extruder]})
M140 S{min(bed_temperature[current_extruder], bed_temperature[next_extruder])}
{endif}

M109 T[next_extruder] S{if layer_num < 1}[nozzle_temperature_initial_layer]{else}[nozzle_temperature]{endif} C3 W1 ;wait T[next_extruder]
{if layer_num == 1}
G1 E{retraction_length[next_extruder]} F200;deretract
{endif}

{if layer_z > first_layer_height && layer_num >= close_fan_the_first_x_layers[next_extruder]}
; M106 P[next_extruder] S{fan_min_speed[next_extruder] * 255.0 / 100.0} ;restore fan speed for T[next_extruder]
{endif}
; End Toolchange
{endif}

————————————

I hope it helpful for you

Thank you

3 Likes