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. Even if you're not going to use Slic3r, this article also contains some general advice regardless of what software you use, about how to improve print quality and reliability.

Why would you want to use Slic3r? Well, it is open source and costs nothing, it supports many printers so you're not locked into a certain vendor, and many of the newest 3D printing features are pioneered in Slic3r and are only later on blatantly mimicked by the competition, so you'll often be ahead of the curve. There are other guides about setting up Slic3r with the Creator Pro, 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.

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 your printer understands, you need a ‘slicer’. As the name implies, it is a program that slices the model into layers and then derives an optimal path for the extruders to follow to deposit each layer of material. The FFCP used to ship with an installer for ReplicatorG on the SD card. However, do not use this program for printing, there are much better ones (see below).
ReplicatorG is still useful for changing firmware parameters through the USB interface, but even then you must obtain the latest compatible release because the version that came with your printer could be way too old and incompatible with the Sailfish firmware.

Obtaining the software

There are many options. FlashForge has been developing their own slicing program called FlashPrint which is pretty decent for beginner use. If you want to do more advanced things however and don't want to be locked into the FlashForge , you'll need to upgrade to a different slicing program.

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 may be 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 can just buy S3D and you can skip the rest of this chapter and move on to the hints.

If 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 (here for the regular version, here for the Prusa3D edition) and the developers will probably look into it. Or you can even fix it yourself if you have the skills.

Slic3rThere are two main variants of Slic3r. The regular Slic3r has been stuck at version 1.2.9 for a very long time and this version is quite unstable, at least on Mac OS X. An upcoming 1.3.0 release has been planned but again it is taking its sweet time. For these reasons I recommend using the Prusa3D fork, which uses the same code base but is much more actively developed, contains fixes that make it much more stable, as well as some new features. You could also try out a developer build of the upcoming 1.3 release of Slic3r, it should also be much more stable but may lack some of the Prusa3D features.

Although the configurations I provide below might work with the regular Slic3r, I only support using them with recent releases of the Prusa3D edition.

Slic3r can only produce GCode files but the FFCP only understands the binary X3G file format, therefore you need GPX, a program that translates 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. When using a WiFi-enabled SD card like the Toshiba FlashAir, you can even upload files to the printer without touching the SD card (see the hints section). 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 OctoPrint is probably a much better option. 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: download config and G-code

There are two important parts when it comes to configuring Slic3r. First: general printer, filament, and slicing settings; second: the bits of GCode that will be executed at the start and end of every print. The G-code is included in the Slic3r config bundle I provide, but I also offer it as a separate download so you can update the G-code separately from the rest. I will try to make sure that the config file always has the most recent G-code but if you want to be really sure, download and install both. I provide the downloads as Things on Thingiverse. If you have a Thingiverse account, you can hit the ‘Watch’ button on the pages of both these things, and you should get notifications when I upload new versions.

Follow the instructions in the following two sections to install the config and G-code.

Installing or upgrading the general config in Slic3r

I provide my Slic3r settings as a config bundle that you can import, but beware: these are tweaked for specific filaments, all-metal hot-ends, 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 and possibly your specific prints. I rarely use the profiles as-is, I usually tweak things per print. For a guide on tweaking Slic3r's settings, I refer to the Slic3r manual.

The first time you run Slic3r PE, it will show a configuration wizard. Select ‘Custom setup’ in the bottom left and just skip through the wizard, it doesn't matter what you enter. This will create a triplet of ‘My Settings’ presets that you should preferably delete afterwards. If you used Slic3r before and want to update the presets while making sure that no old settings will be accumulated, delete all profiles you haven't created yourself. (Importing a new bundle will not delete obsolete presets.)

Next, unzip the file you downloaded above and use ‘Load Config Bundle’ in Slic3r's File menu to load the .ini file.

Load config

The next step is to install or update the ‘make_fcp_x3g’ post-processing script and configure it in the Print Settings presets. The latter must be repeated even if you have done it before (every time you import the config bundle, the path will be overwritten with a bogus default value pointing to this very webpage). You can opt to omit post-processing and instead manually convert .gcode files to .x3g, but that is cumbersome and will not perform some other steps the script performs, like a workaround for a bug in Slic3r that can cause the wrong nozzle to heat up. (If you want to do it manually nonetheless, you must still wipe the post-processing path in each config to avoid an error message.)

First install the make_fcp_x3g script somewhere on your computer and ensure it is executable. This is a Bash script. In Linux or Mac OS X a suitable location could be a ‘bin’ folder in your home directory where you would also store other personal executable files. If you're using a recent version of Windows, you can run the script in WSL via a .BAT script. More details can be found on the Thingiverse page or the GitHub repository for the script.

Once you know the filesystem path where you placed make_fcp_x3g (Linux, OS X) or the BAT script (Windows), update every Print Settings preset in Slic3r and enter this path in ‘Output options’ → ‘Post-processing scripts’, replacing the bogus default value.

Next, ensure the GPX program itself is installed and you know its filesystem path. If you wish to use some of my other post-processing scripts like the one for dualstrusion, this is a good time to install them as well. Ensure gpx and all script files are executable. Open the make_fcp_x3g file in an editor and follow the instructions in its comments to set the correct filesystem paths to gpx and any post-processing scripts. To test it, load a simple 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 something went wrong, information may be found in a ‘WARN’ or ‘FAIL’ file if present. If you run the scrpt yoursef with the ‘-c’ argument, it might be able to diagnose problems.

Side note: the make_fcp_x3g script invokes GPX with the ‘-p’ option, which causes it to replace the dumb print percentage indicator on the LCD display with something slightly less dumb. GPX calculates this improved percentage by estimating how long each print move takes, and making a wild guess at the pre-print warm-up time. Because of this guess and it being unaware of acceleration for print moves, it is usually overly optimistic especially at the start of the print. It is however a whole lot better than just mapping the Z axis to a percentage as Slic3r does.

Updating the custom G-code in Slic3r

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. If you just imported the config .ini file, you should already have the latest G-code, but if you only want to update the G-code without risking to overwrite any of the other settings, proceed as follows.

Unzip the G-code archive you downloaded above, and go to Printer Settings. Copy each ‘Start’ code snippet to the ‘Custom G-code’ section of each corresponding printer profile. Remember to click the save button and overwrite the config after each change. Copy the ‘End’ code to all profiles. Copy ‘ToolChange’ to both of the the ‘Dual Material LR’ settings. There is also a file ‘Start-dual-extruders-postproc’, use this instead of the regular ‘Start-dual-extruders’ if you want to use my experimental dualstrusion post-processing script.

G-code in Slic3r

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.

Side note: why this G-code makes sense

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.


The dual nozzle design of the FFCP is not a very good solution for dual material printing, partly because it was one of the first attempts at it. Originally I found the FFCP's dual nozzle setup mostly useful to always have two filaments ready for use. Eventually though, I made it a habit to remove the right stepper motor and nozzle except for the very rare occasions when I do a dualstrusion print. Removing this extraneous carriage weight results in a very noticeable reduction in ringing artifacts (see below).

It is possible 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. Improvements are being implemented in the Prusa3D edition, but they currently are specific to the Prusa printer models and do not work for the FFCP.

To work around this, I wrote a post-processing script that does all the necessary things to get the most quality out of the single-carriage-dual-nozzle 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. Things may be in different places in the latest Slic3r PE releases, but the same principles do hold.

  1. Select print settings, this will determine layer thickness and other quality-related parameters of the print. Below I give an overview of what each of my print profiles do.
  2. Select printer profile, this determines whether you will be using the left or right (or both) extruder(s). My config contains separate profiles marked ‘flex’. As the name implies, these should be used for flexible filaments, but they are also recommended for any other filament that benefits from slower retraction speeds.
  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 some filaments like ABS there is both a regular and a ‘fan’ profile. The latter keeps the fan enabled all the time and the print temperature may 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 unless you have upgraded your printer to be capable of variable fan speed. For some filaments like PLA, the fan is always on.
  4. Load one or more models. If it will be a dualstrusion, 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, … (If you're using the non-Prusa Slic3r 1.3, you'll notice that the UI has been modified, these tabs will only appear after you have selected them from the main menu.)
  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 finding your printer full of Angel Hair Pasta after several hours.
  8. Export G-code and feed the X3G file to the printer.

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. This might be fixed in the latest Prusa3D builds, but don't take my word for it.)

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 wrong extruder after layer 1, messing up your print.

Print settings overview

After importing the config bundle, you'll have a list of ready-to-use print settings to choose from. They are grouped per material, and per general print quality. The profiles for ABS, PLA and the ‘Bioflex’ from rigid.ink are the most well-tweaked, the PETG ones may still need some tweaking, and the polycarbonate (PC) and NinjaFlex ones were only used for a few small prints and can probably be improved. Here is a short explanation of how the various settings differ within the same material:

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. Of course, feel free to create your own sets of print settings. If you want to keep my pre-made print settings up-to-date, keep in mind that any changes you make to them will be overwritten the next time you load an updated config bundle. Make your own profiles with unique names if you don't want them to be overwritten.

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

Aligning the Y axis belts

A common problem that is not always easily noticed, is that the two Y axis belts (the ones at the top left and right of your printer) can become misaligned. This may happen if something has caused the belts to slip over their pulleys, for instance if the carriage has bumped into the front of the printer. Also, if you have detached these belts for some reason, it is pretty much impossible to re-mount them in an aligned manner. Misaligned Y belts have two undesirable consequences:

  1. Your X axis can become non-perpendicular to the Y axis, hence if you try to print a square, you'll end up with a parallelogram. If you use my start G-code, you'll see that the initial priming line is not parallel with the edge of the bed.
  2. There can be a noticeable ripple on walls printed parallel to the Y axis. The ripple will have a 2 mm period, because this is the pitch of the belts. You can also feel this ripple when manually pushing the carriage back and forth.

Next to checking whether the X axis rods are skewed w.r.t. the bed or printer housing, or noticing the 2 mm ripple, you can also easily detect misalignment by plucking the Y belts like a string. If they have considerably different pitches, they are misaligned. Correcting this would have been easy if FlashForge would have incorporated a detachable coupler on the rod that connects the two pulleys to the Y stepper motor but since they haven't, a more cumbersome solution is needed.

Aligning the Y belts

Cut two strips from a piece of blister packaging, 6 mm wide and about 5 cm long. Bring the carriage forward. Stick the strips in between both Y belts and the underside of their rear pulleys. Then push the carriage backwards until the strips are rolled around the pulleys, see the above photo. Now the belts can slip over the pulleys, and you can wiggle the X axis bars until they are perfectly parallel to the frame, and the belts have the same pitch when plucked. Finally, simply pull the carriage forward again to roll out the blister strips. Check the result and repeat the procedure if necessary.

There is an alternative to this procedure, it provides easier and more accurate adjustment but is not for the faint of heart. You can cut the narrow rod that connects the two Y axis belt pulleys, and reconnect it through a 5 mm axis coupler. If the belts become misaligned, you only need to loosen the coupler, align the X axis, and tighten the coupler again.

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

Maximising Quality

©2016/09-2018/09 Alexander Thomas