100mm extrusion calibration for FlashForge Creator Pro

by DrLex, published

100mm extrusion calibration for FlashForge Creator Pro by DrLex Jul 18, 2017
0 Share
Download All Files

Thing Apps Enabled

Order This Printed View All Apps

Liked By

View All

Give a Shout Out

If you print this Thing and display it in public proudly give attribution by printing and displaying this tag.

Print Thing Tag

Thing Statistics

829Views 318Downloads Found in 3D Printing Tests


These are ready-to-use X3G files for the FlashForge Creator Pro and similar printers, to perform the calibration procedure as explained on the MatterHackers site. The files will instruct the printer to extrude exactly 100mm of filament.

How to use

First, measure and mark a known distance on the filament, for instance 110mm, starting from a reference point. If you are sure you are under-extruding, you can mark exactly 100 mm for easier measurements.

It is recommended to cut off a strand of filament and insert this directly into the extruder, without the guide tube. This has several advantages:

  1. The result will not be influenced by the filament bending and twisting inside the guide tubes, which could introduce a large measurement error.
  2. You do not risk unwrapping and tangling the filament spool during the tests.
  3. After loading this piece of filament, you can simply measure from the top of the extruder carriage to the end of the strand, and use this as your initial length. Still, if you want to make an explicit mark, either use a marker or a clip (I find muzz64's ‘Germz’ quite handy for this purpose).

To repeat the test a certain number times, make sure your strand of filament is at least 100 mm times this number, plus a certain margin, plus the length needed to load the filament.

Next, pick the x3g file for the desired extruder and temperature, and ‘print’ it. Temperature is not crucial, you should pick a temperature that is high enough for the filament to flow but not too high to bake it.
When it has finished, measure the remaining distance between the reference point and your mark (or end of the strand). You can calculate the extrusion multiplier from the difference between the measured and expected distance.

For instance, if you marked 110 mm and the final distance is 17 mm, you extruded 17 -
(110 - 100) = 7 mm less than expected, or only 93 mm instead of 100. This means your extrusion multiplier should be 100/93 = 1.0753.
Other example: you marked 120 mm and the final distance is 9 mm. You extruded (120 - 100) - 9 = 11 mm more than expected. This means your extrusion multiplier should be 100/111 = 0.9009.

The first example is more likely than the latter, because you will usually get under-extrusion due to the extruder gear teeth biting into the filament. See the bottom of this page for an explanation.


You should repeat the test at least twice to check consistency of the result. The test must be repeated for every different filament, although you can probably safely assume that different colors of the same material from the same brand will yield the same results.

The extrusion rate should be slow enough for most filaments. If you find it extrudes too fast for some really flexible filament or so, either modify the source files and convert them to X3G using GPX, or ask me.

Mind that it is not essential to get the extrusion multiplier correct to umpteen digits after the decimal point. In fact, this test showed that I have been under-extruding for a long time, yet my prints were accurate and reliable. In the end, use the multiplier that provides the best results in practice, not in theory.

This method will only compensate for the difference in expected versus actual extruded length. It does not compensate for incorrect filament diameter, and the extrusion multiplier is not meant for that in the first place. You should always measure the exact diameter of your filament and configure it in your slicing software.

Print Settings

Printer Brand:



Creator Pro


Leave the build platform at the bottom of the printer, its only purpose in this test will be to catch the spiral of extruded filament.

The file will preheat the extruder, then beep and show a prompt to press the ‘OK’ button. After this, it will start extruding what the printer believes to be 100 mm of filament. The carriage will move in a square pattern while doing this, this ensures that the test is more or less realistic (my initial attempts to just extrude from a stationary position proved unreliable). Don't mind the weird zig-zag dance at the end, this is to ensure the file has enough commands to avoid confusing messages on the LCD display. At the end, the display should show the extrusion counter at exactly 0.100 m, because that is what the printer believes to have extruded (even though in reality, it almost never is).

Why is the extrusion multiplier needed

Most extruder designs rely on a geared wheel that pushes against another wheel. The teeth of the gear provide a good grip on the filament clamped in between the two wheels. However, the softer the material, the deeper the teeth will dig into the filament, and the smaller the effective radius of the driving gear becomes. To extrude a certain length of filament, a gear with a smaller effective radius will need to make more turns than one with a larger radius.

Your printer's firmware is configured with some reasonable default conversion factor between extrusion coordinates in print commands, and the number of motor steps required to pull the instructed length of filament through the extruder. This default is chosen for some typical filament, and will not be correct for a softer or harder filament. This is where the extrusion multiplier is needed.

Some firmwares allow to send a command with the multiplier, which is then automatically applied to all coordinates. Sailfish (as used by the FFCP) however, does not allow this, therefore the extrusion coordinates themselves must already be multiplied before sending them to the printer.

More from 3D Printing Tests

view more

All Apps

Auto-magically prepare your 3D models for 3D printing. A cloud based 3D models Preparing and Healing solution for 3D Printing, MakePrintable provides features for model repairing, wall thickness...

App Info Launch App

Kiri:Moto is an integrated cloud-based slicer and tool-path generator for 3D Printing, CAM / CNC and Laser cutting. *** 3D printing mode provides model slicing and GCode output using built-in...

App Info Launch App
KiriMoto Thing App

With 3D Slash, you can edit 3d models like a stonecutter. A unique interface: as fun as a building game! The perfect tool for non-designers and children to create in 3D.

App Info Launch App

Print through a distributed network of 3D printing enthusiasts from across the US, at a fraction of the cost of the competitors. We want to change the world for the better through technology, an...

App Info Launch App

Quickly Scale, Mirror or Cut your 3D Models

App Info Launch App

3D Print a wide range of designs with Treatstock. Easy to use tools to get the perfect result. The global 3D printing network that connects you with high-quality and fast working print services nea...

App Info Launch App

Thank you for your file.

I'm trying to calibrate my machine that runs sailfish but i can't seem to tune my machine properly.

I can only extrude 78mm out of 100mm no matter what i try

To my understanding sailfish doesn't keep the esteps in it's eprom but uses the settings that are encoded in the .X3D file so therefore i think that's where my problem is coming from?

is it possible to post up the file as a .gcode file so i can encode it back to .x3d with my estep information to try?

thank you

Sailfish executes the raw X3G files which directly contain the number of steps. This means the extrusion multiplier must already have been taken into consideration while writing the .x3g. Even if you would find some way to apply a global multiplier between what is in the x3g files and what the printer actually extrudes, it would be a bad idea because you would need to manually change this every time you swap filaments.
You must configure the extrusion multiplier in your slicing program. Every program should allow to make a profile per filament, and enter the multiplier per filament. Again, you shouldn't try to make a global calibration for the entire printer because that doesn't make sense.

I'm not sure about how S3D treats this, I'm using Slic3r. It directly applies the multiplier to the extrusion coordinates in the gcode, because there is no standard way to specify the multiplier to be used during gcode-to-x3g conversion. This conversion (for Slic3r output) typically happens through the GPX program, which only has a fixed table for the steps-per-mm per printer type. Ideally the gcode file would contain actual millimeters for the E coordinates, and the multipliers would be included as a parameter, and it would be GPX which applies these multipliers. This is not how it currently works unfortunately, so we're stuck with this hack of directly manipulating the E coordinates, which leads to nonsensical values for anything that tries to give you an estimate of how much filament a print will require.

There is not much point in making a modified version of these test files. If you calculate the extrusion multiplier following the instructions, and ensure it is applied in your normal workflow, then the correct amount of filament will be extruded for your prints. If you would really want to verify that the multiplier works, you could make a very small test object that needs about 100mm of filament, and determine exactly how many millimeters it would require with a multiplier of 1.0. Then, set the correct multiplier and actually print it, and check whether the expected length of filament was actually consumed by the extruder.

"there is no standard way to specify the multiplier to be used during gcode-to-x3g conversion. "

There is: I don't know how slic3r works, but if it creates x3g files then it's using GPX in some form. There should be a configuration file for GPX that lets you specify steps/mm for each of the X, Y, and Z axis. There should also be a configuration setting for the "A" and "B" axis. Those are the stepper rates for the right and left extruders (respectively.)

This works the same as the "E-Steps" EEPROM setting found on many single extruder printers (except in typical sailfish fashion of requiring a pre-process to convert mm to steps.)

As for the argument of it it's better to do this in firmware (or the GPX config) or at a profile setting.... well, that's a different topic.

Ideally, there wouldn't be any slip regardless of the type of filament being used. In that case, being the A/B axis steps/mm is configuring the amount of raw filament going IN the extruder, one setting should apply regardless of what you might be feeding into it. If there IS any slip, it's not going to be consistent, so any calibration is less useful.

Slic3r only outputs gcode files. To obtain an X3G file, it must be separately converted with for instance the GPX program (which of course can be configured to be an automated post-processing step). GPX is usually invoked with a machine preset that determines the steps per mm. It would indeed be better if the G-code file would simply contain the ideal E coordinates for perfect filament, plus a separate extrusion multiplier that depends on the actual filament diameter and squishiness. This would allow to convert the same gcode file into an X3G with a different multiplier, without having to re-slice it.
Slic3r does allow to output gcode with so-called ‘volumetric E’ coordinates, which specify only the volume of filament needed per print move (not even the length, so it is independent of filament diameter). An extra G-code command at the start of the file sets the conversion factor between those E coordinates and the actual extruded lengths. Some firmwares support this, like the most recent Marlin versions if I have to believe the documentation.

With a good extruder, slip is never a cause of filament being extruded slower than ideally, unless the filament jams (which usually ruins the print anyway). The main cause is the filament being pushed into the extruder gear, causing it to bite deeper into the material, and the effective radius of the extruder gear to decrease. This is why extrusion multiplier is not merely a fixed extruder property that should be tuned only once, it is a combination of extruder+material. I need a multiplier of about 1.2 for NinjaFlex, while for PLA and ABS it is very close to 1.0.