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), by means of a configuration bundle I created. 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 a good path for the extruders 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.

Some important reminders

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! As a rule of thumb, you should not exceed 240°C on the standard extruders. To print at higher temperatures for extended periods, an all-metal upgrade is a must.

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.

Beware: this configuration 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 start G-code to ensure the ‘chop’ works.

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. Do not use the 2.0-alpha version that is distributed with some older Linux distros. I recommend version 2.5 or newer. If you will be using WSL in Windows to run the post-processing script, you must install the Linux version of GPX inside the WSL environment.

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 r1d” to produce correct x3g files for the FFCP.

Perl (optional): you only need to install this if you are using an older version of Windows that does not have WSL. Your best options are either Strawberry Perl or Cygwin.

ReplicatorG (optional): even though you shouldn't use this as a slicer, it is still useful for changing firmware parameters through the USB interface. You can probably ignore this but if you do need it, make sure to download the Sailfish-compatible version because other versions can cause corrupt settings.

And last but not least, the thing you probably came here for in the first place:

My configs and scripts: they are also maintained and downloadable from GitHub. There are multiple ways to download the files, simplest is to download a ZIP file through the ‘Clone or download’ button, but if you are familiar with git, you can also clone the repository.

This is not just on GitHub to offer downloads: it is because this is open source. If you want to contribute to these configs, feel free to make a pull request.

Installing or upgrading all the parts

Follow the instructions on the GitHub project page. When you have reached the end of the instructions, come back to this page for info on how to use what you will have installed.

A description of what is in the repository:

Main post-processing script

This can be either the make_fcp_x3g script or a simpler BAT file for older versions of Windows that don't have WSL. Its two most essential functions are:

Next to this, the make_fcp_x3g 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.

Config bundle

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.

It contains the start and end G-code and sensible presets for various materials and print qualities. You need to modify the .ini file to set the post-processing script path (even if you're not going to use a script). Follow the instructions on GitHub. When done, you can load the .ini file using ‘Load Config Bundle’ in PrusaSlicer's File menu.

Load config

G-code snippets

These are included in the main config bundle, it's just easier to track changes in separate files. In the unlikely case that changes in these files were not yet included in the bundles, you can still update the snippets separately if you really want to.

Optional extras

The repository also contains another post-processing script that may help improve print quality. This script, as well as my other post-processing scripts available elsewhere like the one for dualstrusion, can be invoked by the main make_fcp_x3g script. If you cannot use that script but still want to use the other scripts, you will somehow have to run the other scripts manually.

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.

Before trying to actually print something, you should first do a ‘smoke test’ to test whether everything you installed 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.

Next, repeat this test but with the “FFCP Single Material L” printer profile selected. If it worked for ‘R’ but this produces no output, you are probably using the simplified BAT file and have either forgotten to install Perl, or misconfigured its path. Go through those instructions again to fix this.


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. I have not done any extensive tests with other nozzle sizes. 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.

About dualstrusion

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 extruder setup, because the multi-material functionality is only optimised for Prusa printers that use a single nozzle that swaps filaments. If you attempt to use PrusaSlicer's multi-material system as-is on a FFCP, you risk ending 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 single-carriage-dual-nozzle setup for a dual extrusion print. You can find the script and instructions on another page.

Advanced: 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 installed, already contains this G-code but it might not be the very latest. If you notice a more recent commit date on the Slic3r-GCode folder in GitHub than on the Slic3r-configBundles, and you badly want the latest and greatest, you can update the configs to the latest G-code as follows.

In PrusaSlicer, go to Printer Settings, set mode to ‘Expert,’ and copy the snippets from the Slic3r-GCode folder in Github to the correct places: 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. Press the ‘Save’ button when done with each profile.

G-code in Slic3r

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-2020/04 Alexander Thomas