3D Printing with the FlashForge Creator Pro and PrusaSlicer (Slic3r)

This article describes how to use the FlashForge Creator Pro with the open-source PrusaSlicer (based on Slic3r). If you want to see what kinds of results I get with my FFCP + PrusaSlicer, check out my makes on Thingiverse.
Once you have this running, you may also want to check out my article with general advice about how to improve print quality and reliability, regardless of what software you use.

PrusaSlicer logo

Intro: why PrusaSlicer?

Around 2011, 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 in 2016, on a whim I decided to buy a 3D printer, assuming that enough know-how should have been accumulated over those five years to produce a good commercial printer. After evaluating different models, I picked the FlashForge Creator Pro due to its competitive price point and good reviews.

To convert a 3D model into a set of instructions the printer understands, a ‘slicer’ program is needed. As the name implies, it chops up the model into layers and then derives an optimal path for the extruders to follow to deposit each layer of material. The first problem I was facing back then, was that the printer came with the outdated ReplicatorG program and I wanted to use a better slicer. I didn't like the cost and closed nature of Simplify3D, therefore I looked for an open source alternative. None of the options at that time had good support for the FFCP though. Slic3r looked promising because it was actively developed and had many cutting-edge features. Hence I decided to create my own configuration from scratch for it. Later on, Prusa made their own fork of Slic3r which became ‘Slic3r PE’ and eventually ‘PrusaSlicer.’ It was even more actively developed, and therefore I switched to PrusaSlicer instead.

The main reasons why I like Slic3r and its PrusaSlicer fork, are that many new 3D printing features are pioneered in them and only later on blatantly mimicked by the competition. PrusaSlicer started out as a fork of Slic3r with some minor changes, but it is quite different now. Although obviously primarily meant to be used with Prusa printers, it is as extensible as the original Slic3r and does not lock the user into a certain printer vendor. It is being actively developed so if you find a bug or have a feature request, you can report it on GitHub and the developers will probably look into it. Or you can even fix it yourself if you have the skills.

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. This is why I started making my own configuration and post-processing scripts shortly after I had bought my printer, and I have been improving them ever since. I now share all these configs and scripts for everyone to use.

I only support using these configurations with recent releases of PrusaSlicer because it is much more actively developed and contains extra features compared to the regular Slic3r. Because both projects share the same source code base, my configs might also work with Slic3r 1.3.x, but I give no guarantees whatsoever.

Download the required parts

You need a set of programs and files to make PrusaSlicer work with the FFCP.

PrusaSlicer itself, obviously. The best place to download the latest release is from their GitHub page. Avoid downloading alpha releases, they may not work with my configs yet. Beta releases should be OK, but take the latest stable version if you want to avoid any issues.

GPX: PrusaSlicer can only produce text-based GCode files, but the FFCP only understands the binary X3G file format. You need GPX to do the translation. There are multiple ways to install it, one is to download it from GitHub. Ideally you should use a recent build that lists ‘fcp’ as a supported MACHINE type. If yours does not, then using the ‘r1d’ type is also OK. Do not use the 2.0-alpha version that is distributed with some older Linux distros. I recommend version 2.5 or newer.
In Mac OS X, you can install gpx through Homebrew. You can also use GpxUi which is available for Windows and Linux as well. If you won't be using my make_fcp_x3g script, you will need to manually run gpx. You must invoke it with the argument “-m fcp” or “-m r1d” to produce correct x3g files for the FFCP.

My configs and scripts: there are two important parts when it comes to configuring PrusaSlicer. 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 PrusaSlicer config bundle, but I also offer it as a separate download so you can update the G-code separately from the rest. I 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.

Both the config bundles and GCode are maintained in a GitHub repository.

Even though you shouldn't use ReplicatorG as a slicer, it is still useful for changing firmware parameters through the USB interface. If you need it, make sure to download the Sailfish-compatible version because other versions can cause corrupt settings.

Important: keep in mind that the filament presets in my config bundle are tweaked for specific filaments, all-metal hot-ends, a glass printing bed, and my personal preferences. Some temperatures are too high for an unmodified Creator Pro! Although this config bundle may work for you out-of-the-box, it should be considered a starting point only. You must 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 although it might be outdated. A concise how-to can be found below.

Installing or upgrading all the parts

Post-processing script

The config bundle you downloaded above contains two important parts. First, the ‘make_fcp_x3g’ post-processing script. Its two most essential functions are:

Next to this, the script can also invoke other post-processing scripts and it can adapt end G-code to allow printing objects taller than the theoretical 150 mm limit (see the hints article for more information). It is not mandatory to use this script, but I highly recommend it. If you don't want to use the script and run into problems when doing things your own way, it will be much harder for me to help you out.

make_fcp_x3g is a Bash script that can be used as-is in Linux or Mac OS X. In recent versions of Windows, you can also run Bash scripts in the WSL environment via a BAT script. For those without WSL, I also provide a simpler alternative BAT file simple_ffcp_postproc.bat that can perform the same two essential functions. Instructions for setting up either WSL or this simpler BAT file can be found in the GitHub repository.

Now install the make_fcp_x3g script and/or the appropriate BAT script somewhere on your computer and ensure it is executable. A suitable location would be a ‘bin’ folder in your home directory where you might also store other personal executable files. You will need the path to the post-processing script (or BAT file) below, so remember it. For instance if your user account name is ‘foobar’ and you placed the script in a directory ‘bin’ in your home folder, the path would be:

Even if you want to manually post-process, you must still consider the path: in that case it is simply empty.

Config bundle

Now it's time for part 2, the config bundle .ini file itself. It comes in two variants: most likely you need the regular one. You only need the ‘MVF’ one if you have installed the MightyVariableFan system.

The post-processing path you remembered above needs to be configured in the config bundle. You can do this after loading it in PrusaSlicer but it is far less tedious to do this beforehand by editing the ini file itself: change all lines in the file that start with “post_process = ” such that the path (or nothing!) comes after the ‘=’ sign. You can do this with find & replace in a plain text editor. Those familiar with console commands can use a tool like ‘sed’.

Setting up PrusaSlicer

The first time you run PrusaSlicer, it will show a configuration wizard. Your mission is to bypass it entirely, but they tend to change it with each release. Click ‘cancel’ if possible, otherwise skip through it and select ‘None’ in each screen. Do not select any printer or create a custom one. By doing this, ideally no presets should be created. If it did create presets, you should preferably delete them. If you have used PrusaSlicer before and want to make sure that no old settings linger about, delete all profiles you haven't created yourself: importing a new bundle will not delete obsolete presets.

Now load the .ini file using ‘Load Config Bundle’ in PrusaSlicer's File menu.

Load config

If you did not edit the .ini file beforehand, you must now go through every Print Settings preset and enter the path in ‘Output options’ → ‘Post-processing scripts’, replacing the bogus default value. (The interface must be in ‘Advanced’ or ‘Expert’ mode for this.) You also need to do this for each of your own custom profiles. This is very tedious, so it pays off to edit the .ini file itself.

Final config bits

Next, ensure the GPX program is installed and you know its filesystem path. If you use WSL in Windows, install GPX inside the Linux environment. If you wish to use my other post-processing scripts like the one for dualstrusion, now is the time to install them as well. Ensure gpx and all script files are executable. Then 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.

If you use the simple_ffcp_postproc.bat script instead, install gpx.exe somewhere and edit the BAT file to set the correct path.

Now it is time to test whether everything works: load a simple model and hit the ‘Slice now’ button, then ‘Export G-code’. If everything is set up correctly and you have set up the post-processing script, 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 make_fcp_x3g script yourself with the ‘-c’ argument, it might be able to diagnose problems.

Updating the custom G-code in PrusaSlicer

The G-code snippets are 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. The config bundle you imported might not contain the most recent G-code because I may have updated it separately. To update the configs to the latest G-code, proceed as follows.

Open the G-code snippets you downloaded above in a text editor. Go to Printer Settings, set mode to ‘Expert,’ and copy each ‘Start’ snippet to the ‘Custom G-code’ section of each corresponding printer profile (left to L, right to R, dual to LR). Remember to click the save button and overwrite the config after each change. Copy the ‘End’ code to all profiles. Copy ‘ToolChange’ to both ‘Dual Material LR’ profiles.

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 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.

Using PrusaSlicer

I will not give a full manual for PrusaSlicer here, you should be able to find good manuals online. I will give some remarks about using it with the configs 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 releases, but the same principles do hold.

  1. Load one or more models. If it will be a dualstrusion, see my dualstrusion article for more details.
  2. Select printer profile, this determines whether you will be using the left, right, or both extruders. 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. See the ‘cooling’ section of my hints page for more about this. In a nutshell: do not use the ‘fan’ profiles if you do not have a way to vary fan speed, except maybe when printing at ‘ultrafine’ settings.
  4. 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.
  5. Scale, rotate, duplicate, move the object(s) 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, PrusaSlicer has bugs, and poorly designed STL models may cause problems like missing layers. It is better to notice and work around 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 filament selected for extruder 1 (right) determines bed temperature unless there is only extruder 2 material in the first layer.

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 rigid.ink ‘Bioflex’ 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 the various profiles:

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 presets. 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. Save modified presets as copies with unique names if you don't want them to be overwritten.

Beware: filament temperatures have been tweaked for an all-metal hot-end. You should not print at temperatures above 240°C with the stock hot-ends. Lower temperatures if necessary.


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 nozzle and stepper motor except for the very rare occasions when I do a dualstrusion print. Removing the unused nozzle eliminates the risk that it will cause various problems by bumping into the printed part, and removing all the extraneous weight from the carriage results in a very noticeable reduction in ringing artifacts (see my hints page).

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 PrusaSlicer 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. There are multi-material provisions in PrusaSlicer, 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.

Side note: why these configs make sense

If you look around on the internet, you will find copies of the same old GCode endlessly circulated with minor changes that often do not make sense. If you find GCode 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 has been tweaked over several months to greatly reduce the risk of prints that fail already before actual printing begins. 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.

Another side note: the make_fcp_x3g script invokes GPX with the ‘-p’ option. This causes it to override the print percentage shown on the LCD display 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.

What's next?

Head over to my page with hints and tips for using the Creator Pro if you want to get more out of the machine.

The GCode snippets and config bundle are released under the Creative Commons Attribution license. (In a nutshell, this means you can distribute them freely as long as you mention the origin.)
Of course, there is no guarantee whatsoever of fitness for any purpose and so on, use at your own risk.

©2016/09-2019/09 Alexander Thomas