3D Printing with the FlashForge Creator Pro and Slic3r

This article describes how to use the FlashForge Creator Pro with the open-source Slic3r program. There are other guides about this, but I have noticed that many of them are outdated, or keep copying the same old configuration bits full of cargo cult while lacking certain necessary improvements. I also give some general advice, regardless of what software you use, about how to improve print quality and reliability.

If you want to see what kinds of results I get with my FFCP + Slic3r, check out my makes on Thingiverse.


Some five years ago, 3D printing broke through to the mainstream, partially thanks to certain patents expiring. As usual, a bit of a hype emerged and less-than-well-informed journalists started claiming that traditional stores would disappear and everyone would be downloading products and printing them at home. Of course, reality slowly returned and it became clear that 3D printers are not the ultimate solution to everything, yet they are useful for specific applications. I waited for the dust to settle and decided to buy a commercial 3D printer that was built with know-how accumulated over those five years. After evaluating different models, I picked the FlashForge Creator Pro due to its good reviews and its competitive price point.


Using a suitable slicer program

To convert a 3D model into a set of instructions that your printer understands, you need a ‘slicer’. It is a program that, as the name implies, slices the model into layers and then derives an optimal path for the extruders to follow to deposit each layer of material. The FFCP ships with an installer for ReplicatorG on the SD card. However, development of that program has been stagnating, it is slow, and limited in functionality. It still is useful for changing firmware parameters through the USB interface, but for printing I recommend using a different slicer program.

Obtaining the software

There are many options. A popular one is Simplify3D, but it is paid software and rather pricy. Many are enthusiastic about it because it “just works”. This means that if you want to actually learn about the intricacies of 3D printing, it is a bad choice because the software will shield you from all the things that can go wrong, which are usually also the things you learn the most from. If you just want to print things in the same way as you drive a car without knowing what makes it move, then you should just buy S3D, and you can skip the rest of this chapter and move on to the hints. If instead you want to go the slightly more adventurous way of using a free and open-source program, I recommend Slic3r. It has many powerful features and is being actively developed, so if you find a bug or have a feature request, you can report it on GitHub and hope the developers will look at it. Or if you have the skills, you can just fix it yourself.

Slic3rMind that the current 1.2.9 build of Slic3r is quite unstable, at least on Mac OS X. Moreover, development seems slow. I recommend using the Prusa3D fork, which is identical for the most part, but contains fixes that make it much more stable and is much more actively developed.

Slic3r can only produce GCode files, but the FFCP only understands the binary X3G file format, therefore you need GPX, a program that converts GCode into X3G. Do not use the old version that exists on Thingiverse. You need a recent build that has support for the FFCP (machine type ‘fcp’). For Mac OS X, you can install it through Homebrew. Or, you can use GpxUi, which is available for Windows and Linux as well.

Slic3r lacks the ability to send commands directly to the printer over the USB serial connection. This means you either need to copy the X3G files to an SD card to print from, or use another way to send instructions to your printer. If you are in my situation where there is no need for a hyper-efficient pipeline to print in large volumes, I consider printing from SD card the preferred method. It does not suffer from typical problems of a serial connection like limited command throughput, and it does not require to keep a computer running near the printer and ensuring it does not crash or reboot. If you do have a dedicated computer connected to your printer, then it should be possible to use ReplicatorG to feed it GCode or X3G files. However, in that case a better option is probably to use OctoPrint. I have tried neither, but OctoPrint looks very interesting, and can be run from a cheap and power-efficient computer like a Raspberry Pi.

Configuring Slic3r: general config

There are two important parts when it comes to configuring Slic3r. First: the general printer, filament, and slicing settings; second: the bits of GCode that will be executed at the start and end of every print.

I provide my Slic3r settings here as a config bundle that you can import, but beware: these are tweaked for specific filaments, a glass printing bed, and my personal preferences. Although it may be sufficient for your needs, this config bundle should be considered a starting point only. You will need to adjust the settings according to your setup. For a guide on tweaking Slic3r's settings, I refer to the Slic3r manual.

Download the config bundle (zip archive, 9.2 kB) (last updated 2017/03/05)

Unzip the file and use ‘Load Config Bundle’ in Slic3r's File menu to load the .ini file.

Load config

You will not want to run each .gcode file Slic3r outputs through the GPX program manually. Luckily, you can have Slic3r execute it for you as a post-processing step. Ensure you have a version of GPX that has ‘fcp’ listed as one of the MACHINE types. You need an intermediate script that invokes the gpx tool with the right parameters, because Slic3r only passes the gcode file as argument.

The config bundle zip includes a Bash script ‘make_fcp_x3g’ that does exactly this, and more. It also is able to invoke the dualstrusion post-processing script, and work around a bug in Slic3r that can cause the wrong nozzle to heat up. Edit the paths to the dualstrusion script and gpx inside this bash script, and enter the path to this script in the ‘Output options’ of all Print Settings profiles. To test it, load any model and use the ‘Export G-Code’ button. If everything is set up correctly, you should find an .x3g file next to the exported .gcode file.

If you're using Windows, you will either need to find a way to run Bash scripts, or you will need to write your own equivalent using something else. I cannot help you with this because I only use Windows for the occasional game and for everything else I use OS X or Linux.

The ‘-p’ option causes GPX to replace the dumb print percentage indicator on the LCD display with something slightly less dumb. I don't know exactly how GPX calculates this improved percentage. It is overly optimistic at the start of the print, but it is a whole lot better than just mapping the Z axis to a percentage, as Slic3r does.

Configuring Slic3r: custom G-Code

The config bundle above already contains this code, but it is likely I will update the code without updating this config, so you should copy the following code snippets into your Printer Settings → Custom G-code, and regularly check for updates. This code is responsible for preparing the whole printer up to the point where it can start extruding the very first layer of your model, as well as for finishing the print, and tool changes for dual extrusion.

Download the GCode snippets (zip archive, 15.3 kB) (last updated 2017/03/05)

Copy each ‘Start’ code snippet to the corresponding printer settings. Copy the ‘End’ code to all settings. Copy ‘ToolChange’ to the ‘Dual Material LR’ settings. Click the save button and overwrite the config. There is also a file ‘Start-dual-extruders-postproc’, only use this if you want to use my experimental dualstrusion post-processing script.

G-Code in Slic3r

If you look around on the internet, you will find copies of the same old GCode being circulated endlessly, with minor changes that sometimes do not make sense. If you find GCode snippets with the codes G130 or M108 in them, do not use them with your FFCP. Those snippets have been pasted together in a Cargo Cult manner by people who barely had a clue what they were doing.

The code I provide here has been tweaked over several months to greatly reduce the risk of prints that fail already before the actual printing has begun. This code is released under the Creative Commons Attribution license. (In a nutshell, this means you can distribute it freely as long as you mention the origin.) Changes compared to the typical code snippets, are:

Long story short, the person who wrote this code, for the most part did know what he was doing. I explicitly waited to publish this code until I knew what each line did, and why. There is no Cargo Cult in here, at best one or two lines that are redundant.

Beware: this code will move the extruders along a line at the front edge of the platform. If you use a glass plate, ensure that the nozzles will not knock any mounting clips off the front corners during the start procedure. Mount the clips at the sides, about 10 mm from the front edge. Or better, use side-mounted clamps (like these) that do not stick out above the plate. If the glass plate is wider than the platform, you may have to tweak the code to ensure the ‘chop’ works.


The dual nozzle setup of the FFCP is not the best design for good dual extrusion prints, there are other printers with a much better configuration (e.g. two independent carriages on the X axis that have a dedicated wiping mechanism like the BCN3D Sigma). I find the FFCP's dual nozzle setup mostly useful to always have my two most used filaments ready for use. Only very rarely I do a dualstrusion print.

It is possible though to get good quality dualstrusions despite the limitations of the single-carriage-dual-extruder setup, by sacrificing print speed and material. The current editions of Slic3r however do not have the right provisions for this. If you simply let it do its thing, you will end up with a print full of ugly ooze and possibly holes as well.

To work around this, I wrote a post-processing script that does all the necessary things to get the most quality out of the dual extruder setup for a dual extrusion print. You can find the script and instructions on another page.

Using Slic3r

I will not give a full manual for Slic3r here, there is an entire website for that. I will give some remarks about using Slic3r with the config I provide above.

Main window
Dalek Buddha model by SavageRodent

My workflow is as follows (the above screenshot shows where in the UI each step occurs):

  1. Select print settings, this will determine layer thickness and other quality-related parameters of the print. My ‘rough’ profiles print at 0.27 mm layers, this is OK for large parts or draft prints that do not need to be very strong. The ‘medium’ profiles use 0.2 mm and are good for general purpose. The ‘extrafine’ profiles print at 0.1 mm, slowly, and with the finest possible perimeter, and with nearly the same parameters for the inner and outer perimeters, to ensure a perfect surface finish. These profiles are slow, but provide very fine and strong prints.
  2. Select printer profile, this determines whether you will be using the left or right (or both) extruder(s). My config contains separate profiles for dual material printing with either PLA and ABS, this allows to tweak retraction settings separately for both.
  3. Select filament type(s). Obviously, if you are using one of the ‘Single’ printer profiles, select the filament that is loaded in the extruder you will be using. For the dual extruder profile, the top filament is the right extruder, and the bottom one is the left. For ABS I have two profiles for each filament: ‘fine’ means the fan will be enabled all the time and the print temperature will be higher to compensate. This should only be used for smaller parts that have considerable overhangs or need to have a perfect finish, it is the recommended setting when using the ‘extrafine’ profile. Large ABS parts should not be printed with the fan enabled all the time! For PLA, the fan is always on.
  4. Load one or more models. If it will be a dualstrusion, only load one part of the model, and click the ‘Settings…’ button. Load the other parts inside that dialog, and select which ones are printed with what nozzle. See my dualstrusion article for more details.
  5. Scale, rotate, duplicate, move the object around if desired, and load any additional objects.
  6. Tweak any settings for this specific print (like perimeters, infill, supports, …)
  7. Inspect the preview and layers to see if there is nothing suspicious. Like any software, Slic3r has bugs, and poorly designed STL models may cause problems like missing layers. It is better to notice and work around bugs and problems before starting the print, than discovering your printer full of Angel Hair Pasta.
  8. Export G-code and feed the X3G file to the printer.

All settings are tweaked for 0.4 mm nozzles. If you swap out your stock nozzles for a different size, you will need to modify the configs.

The right nozzle is ‘extruder 1’ and is the default; the left one is ‘2’. When you select filament in the Plater tab for a dual extrusion profile, the topmost one is extruder 1 (right), the second one is 2 (left). When dualstruding, the bed temperature is always set to the filament selected for extruder 1 (right), there is no way to change this. (I have submitted a feature request to remedy this.)

Left extruderBeware: if you do not use the ‘make_fcp_x3g’ script included in the config bundle, and you want to do a print with the left extruder only, you must go into the object settings, and set the extruder for the STL file inside the object to 2. If you don't do this, Slic3r may start heating the other extruder after layer 1, messing up your print.

Hints for printing with the FFCP

As a general recommendation, make sure you have a good calliper or a micrometer. It is essential to know the exact diameter of filament you buy, so you can configure it in your slicer program. It is also extremely useful to accurately measure parts you are trying to make a 3D model of, and to check whether the first layer is printed at the expected thickness. I recommend a mechanical calliper with a clock-like dial. This is accurate, easy to read, and has no stupid batteries that die at the wrong moments.


Another good investment is a small infrared thermometer. This allows to check whether the temperature of the printing bed is correct, which is especially important when using glass (see the adhesion hints).

Highly recommended tweaks

Ensuring good adhesion

One of the most common problems with 3D printing despite many years of evolution, is the first layer sticking insufficiently (or sometimes too much) to the platform. Here are some tips in case you suffer from prints that won't stick or that you cannot remove from the platform without resorting to hammers or power tools.

General hints

Miraculous recovery
An example of a print that miraculously recovered after the inactive nozzle had knocked over one of the supports. The other one survived, and the overhanging material stopped warping just in time. I avoided a repeat of this situation when I printed a second copy, by rotating the model with the supports pointing away from the inactive nozzle.

Maximising Quality

©2016/09-2017/03 Alexander Thomas