Rigistrasse 12B, 6331 Hünenberg, Switzerland
+41 76 8313 669

Color Printing

3D printing for everyone. Get started now.

“Any customer can have a car painted any colour that he wants, so long as it is black.”

(Henry Ford, 1909)



3D color printing has been quite a journey for me over the last few months, so I thought it may make sense to share my insights with everyone else. I believe the 3D printing world is ready for this and with a few simple steps you can bring more color into your life.

The prerequisites for this tutorial are:

  • Any 3D printer (e.g. Creality Ender 3)
  • Single extruder
  • Use of PLA
  • Manual filament changes (hell, yes)
  • Prusa Slicer as the slicer of choice

Why Prusa Slicer and not Cura or Simplify3D or any other slicing program available for free? Because it's there and I like it!

That said, however, I primarily made a decision in favor of Prusa Slicer because first of all I happened to own a Prusa MK3S printer and second Prusa Slicer is a great program. Why? Because it handles complexity well to the point that you barely notice how complex the process is, in particular as it concerns printing in color. Therefore I encourage you to give Prusa Slicer a shot, and I am sure you will not be disappointed!

I would also like to thank Rainer Schloßhan for his continuing support and valuable insight concerning color printing with Prusa Slicer.

Installation of Prusa Slicer

The following steps are necessary to install Prusa Slicer and to set it up for your Creality Ender 3:

  • Download the most recent version of Pruas Slicer from here.
  • Unzip all the contents to a folder of your choice.
  • Start Prusa Slicer by (double-)clicking the executable file.
  • Download the printer profile for the Ender 3 from here.
  • Unzip the configuration file (.INI) and save a copy on your desktop.
  • Import the configuration file (.INI).

Prusa Slicer now knows your printer dimensions and specifications and we are ready for the next steps.

Multi-color setup

A few steps are required to add a new color to your current printing profile:

  • You have to increase the number of extruders corresponding to the number of colors you intend to use under “Printer Settings”.
  • Assign a color to each extruder (red in our first example).
  • Now close the window.
  • And open the tab “Filament Settings”.
  • Choose the same same color for the filament in the upper section and save the filament profile using a name of your preference.
  • Do the same for the second extruder and select “white” this. Then choose the filmanet color as before and save the filament settings under a new name.
  • Now go back to the Plater and select the correct extruder-filament-combination on the right.

Believe or not, that's it! The more important steps are a thing of the past and we can start configuring our dual-color print in the next chapter of this tutorial.

Importing the STL files

I have prepared a ZIP-file for this exercise which you can download here. Please unzip the file and extract the STL files to your desktop.

  • Press the Plus-sign in the navigation menu.
  • Now select the three STL files at once (don't leave the dialog until all three of them are highlighted) and press “Open”.
  • Then hit “Yes” to import a “multi-part object”.

The model is now complete and preparations for the final print can start. You see the three parts of our model on the right side as shown below.

Assigning colors

We now assign a color or extruder, respectively, to each part using the menu on the right side of the screen:

  • Select “1” for “Base” (red).
  • Select “2” for “Letters” and “Border” (white).

The crucial steps are done. Hit “Slice now” and export your g-code file, so we can start the print. However, before we continue there are a few more things we have to figure and correct to make the process of printing as practical as possible.

Custom g-code

We will make these change before we start the final print:

  1. We need to invoke a filament change (“tool change”) using an M600 instruction.
  2. The sequence of filament changes needs to be known.
  3. While changing a filament we will want to turn the fan off, so the waste filament that is generated during the change is not blown across the build plate.

We accomplish all this by inserting custom g-code snippets into our print file using this sections in Prusa Slicer:


We add our g-code here in the section of Prusa Slicer. To avoid any formatting or other issues relating to character encodings please download this file and copy the code over.

; eliminate first tool change
{if previous_extruder != -1}

     ; color notification
     M117 Next color is{

           (filament_colour[next_extruder] == “#00FF00″ ? ” GREEN”
          :(filament_colour[next_extruder] == “#FF0000″ ? ” RED”
          :(filament_colour[next_extruder] == “#FFFF00″ ? ” YELLOW”
          :(filament_colour[next_extruder] == “#0000FF” ? ” BLUE”
          :(filament_colour[next_extruder] == “#FFFFFF” ? ” WHITE”
          :(filament_colour[next_extruder] == “#000000″ ? ” BLACK”
          :(filament_colour[next_extruder] == “#999999″ ? ” GRAY”
          :(filament_colour[next_extruder] == “#D4AF37″ ? ” GOLD”
          :(filament_colour[next_extruder] == “#C0C0C0″ ? ” SILVER”
          :(filament_colour[next_extruder] == “#FFA500″ ? ” ORANGE”
          :(filament_colour[next_extruder] == “#800080″ ? ” PURPLE”
          :(filament_colour[next_extruder] == “#FF6600″ ? ” ORANGE”
          :(filament_colour[next_extruder] == “#F0F0F0″ ? ” TRANSPARENT”
          :(filament_colour[next_extruder] == “#800000″ ? ” BROWN”



     M107; turn fan off

     M600; change tools

     M106; turn fan on


The first if-statement ensures Prusa Slicer skips the first filament change after the print has started. As we have just loaded the correct filament this tool change makes little sense and is a nuisance at best. I have no explanation as to why Prusa Slicer would invoke a tool change at this stage.

Now we add a message to your g-code concerning the color which we will able to extract later on (see below). Each color you have chosen for your print (red and white in this case) needs to be part of that list in the shape of a hexadecimal color code and a description. The colors we have picked in Prusa Slicer for the filament and the extruder are in an RGB format and we have to convert these into hexadecimal using this tool:


I have included 14 different colors. Should you need other colors for any reason, you can simply add more by changing this code and including the extra colors for your print (don't forget to also add a right parenthesis for each color and a space character before each color description).

Please make sure that both “red” and “white” are available in this section as a hex-code (“FF0000” and “FFFFFF”) as well as part of your extruder and filament settings in the form of an RGB-code (“255, 0, 0” and “255, 255, 255).

Before I issue an M600 instruction to change the filament, I am switching off the fan and back on again once the filament has been replaced. We don't want the fan to blow any waste filamant across our build plate, so that's a good thing to do.

Once you have copied this code over to the “custom g-code” section, we are done and continue with the next step(s).

To wipe or not to wipe, that is the question

A “wipe tower” is a feature (not a bug!) printed in multi-color prints to wipe, to purge, and to prime filament when performing a color change.

A “wipe tower” may be used to manage the transition from one color to another to ensure colors don't blend and ruin your print. Wipe towers clear the extruder and the nozzle of any remnants from the previous run (referred to as “purging”). Transitions are managed individually depending upon the actual color transition taking place (e.g. from white to black or black to white) so there is no contamination and at the same time minimal waste.

This is what a wipe tower may look like:

Benefits of using a print tower are:

  • Transition may be managed individually (color by color).
  • There is less manual work.
  • There is less room for error potentially ruining your print.

However, the drawbacks are:

  • Significantly more waste depending upon the nature and geometry of your print.
  • Less space on your build plate.
  • (Significantly) Higher processing/printing time.

Although I have limited experience with the Ender 3 (it isn't my main printer) I can say that it does extrude quite a bit of filament during a change by default. For this reason I have disabled the wipe tower function in Prusa Slicer and will remove any waste material by hand. This requires a little more effort, but it does suffice for our needs.

This is how you enable the wipe tower functionality should you need it:


Final settings

You know your hardware better than I of course, nevertheless I wanted to highlight a few settings that may help you to get started quickly:

  • Do not exceed an overall printing speed of 40 mm/s.
  • Retraction of 5mm for the Ender 3.
  • A z-hop of 0.6 mm or more.
  • First layer height of 0.15 or 0.2 mm.
  • Use a “skirt” in our example as we do not use a wipe tower.

Also I makes sense to turn our print upside down by 180°, so the letters point to print plate. The benefits are obvious in terms of surface quality, but it also offers an advantage because we can stop the print early on when the filament changes occur and not right before the entire print is completed anyway:

Now you can press “Slice now” and export your g-code:


Color print sequence

The print sequence is unknown to you at this point. The goods news is that we have left traces of tool change instructions in the g-code which we can now extract. To do that, we can use a batch file or the command line to issue this instruction which will extract the sequence using Microsoft Windows:

find /i “Next color is ” “C:\\.gcode”

You now see a list of color switches on your screen. However, there is just one fly in the ointment if you like: The first color to be used is not listed here. Unfortunately, we have to identify the first color in a different way and have to go back to Prusa Slicer to do that.

Enable “wipe tower” once again (see above for how you do that), press “Slice now” and take a look at the wipe tower that Slicer has generated:

The outermost border is the color that will be used first. In our case it is “red”, and it is probably a good practice to write this down as well.

What I typically do is I create a text file with all the color swaps and transitions and keep a paper copy (yes!) next to my printer as I am executing the print. That's certainly not a great solution and rather old-school, but it is what it is.

If you have fresh ideas and new insight, please leave a comment. I'll be happy & grateful to incorporate your thoughts!

A few last words (I promise)

When Pruse Slicer performs a tool change it retracts materials to prevent material from oozing out of the nozzle and contaminating your print. That is great because we don't want to have any leftovers on our print. But… there is a problem. For a reason unknow to me Prusa Slicers undoes the retraction once it starts the actual print again which then causes the extruder to leave to a significant amount of filament on your part.

To cut a long story short: We want part A (retraction), but don't need part B. Makes sense?

This is where retraction during a tool change is configured:


The first field is the retraction speed, the second the actual retraction in mm for the filament change. We can now search for the corresponding line in your g-code using a text editor and remove the line entirely:

G1 E4.00000 F2100.00000

“E4.00000″ is the retraction value we chose (4.0 mm, )”F2100.00000” is the actual retraction speed (35 mms/s * 60). If you have chosen different values in this section, then you have to make changes to the line you are searching for and trying to eliminate.

Finally you can start your print!

My conclusion

I must say color-printing is a bit a hassle, but it's definitely worth it! There are no perfect solutions out there as I am writing this and each one of the available one comes with a multitude of drawbacks, in particular if you have a larger number of colors to be used.

I hope this tutorial has been helpful and maybe a tiny bit inspiring despite its technical nature. Color-printing has spiced up my 3D printing experience and I shall say it has made me a color addict. The possibilities are endless if you are ready to invest some time and effort to master the challenges that lies ahead.

Thank you for taking the time and reading this. Good luck!

Links & references

These are all website and download links I have made reference to in this tutorial: