Filament calibration

If you spend time in any 3D printing discussion group, you’ll find users wrestling with several common complaints:

  • Stringing between vertical parts

  • Zits and blobs on vertical printed surfaces

  • Ugly z-seams created when the nozzle is moved to the next layer

  • Irregular exterior walls when printing parts with multiple internal infill variations

  • Uneven top surfaces

To a degree, these are unfortunate characteristics of current consumer-grade Fused Filament Fabrication (FFF) printing. You’re simply not going to get prints that look like cast or machined parts. On this page, we’ll look at what you can do to minimize these problems. The most effective way of doing this is getting your extrusion rates set properly.


These notes are based on my experiences with the Prusa i3 Mk3 printer. If you are using a different printer, please verify the hardware details are same. These pages may be a bit rough as I revise them and add new material. Please check back regularly for updates.

Most slicers include several settings to work around these problems. You’ll find settings for:

  • retraction and de-retraction length

  • retract/de-retract filament speeds

  • wiping

  • z-lift or z-hop

  • coasting (Cura)

and likely others I can’t think of at the moment.

In a perfect world, you wouldn’t need these features. The printer would extrude precisely the amount of filament needed for a segment, stop extruding instantly once the extrude command is complete, and start just as cleanly on the next extrude command. Unfortunately, we don’t live in a world of perfect physics, so these features have been added to compensate for the differences between the slicer’s view of the world and reality.

Any mis-match between your slicer settings and actual printer or filament characteristics can result in the slicer creating gcode commands that push just a bit too much or too little filament. Push too much and the result is excessive filament oozing that has to go somewhere. This is what contributes to unsightly blobs, strings and seams. Push too little and you can get under-extrusion, leading to gaps and weak adhesion.

While we can adjust for these mis-matches using these settings, it’s easy to wind up chasing our tails, compensating with one setting for problems created with another. The key is to minimize the need for compensation in the first place. We can do that by matching our slicer settings as closely as possible to the real-world characteristics of our printer and filament. This allows the slicer to produce gcode that more closely reproduces what you see in your slicer’s preview mode. We do this by adjusting our slicer settings for each filament based on measured physical characteristics.

Perfecting prints

PrusaSlicer ships with a selection of filament profiles that have been tweaked for specific brands and types of filament, as well as some generic types. These profiles will provide settings that provide reasonable results for most filaments. If you want are chasing any quality problems, you definitely want to spend a few minutes creating and tweaking a custom filament profile for any filaments that you use frequently.

Fortunately, this process is straightforward:

  1. With a pair of calipers with sufficient resolution (0.02mm or better), measure and average the diameter of the filament at several locations. At least 3 locations over a meter or more of filament are recommended. Enter this value in Filament Settings->Filament Diameter.

  2. Look at your slicer settings or view the gcode file to identify the extrusion width being used for perimeters (the walls). Look at your slicer settings for the number of perimeters used on walls. If you are using 0.45mm perimeter extrusion widths and 2 perimeters, your cube should print with close to 0.90mm thick walls. This is your TARGET thickness. Some people swear by using 1 perimeter, others by 3. After doing some research, I’ve settled on 2 as a good number that will allow the extruder flow to compensate for any filament inconsistency.

  3. Slice and print a small cube (20mm works though some recommend 40mm to ensure filament is flowing evenly for the walls) with 0 top layers and 0% infill with a 1.0 extrusion multiplier. This will give you a hollow -– but not vase mode -– cube.

  4. Measure the wall thickness on each wall. You’re not trying to measure the variation of the printer between layers, so measure near the top center. You want the actual width of lines printed, not the worst-case, so don’t worry about measuring along the entire wall height or in corners. Average these measurements together. This is your ACTUAL thickness.

  5. Divide TARGET by ACTUAL. This is your calibrated Extrusion Multiplier for this filament. Enter this value in Filament Settings->Filament-Extrusion multiplier.

Linear advance

The Prusa Mk3 supports Linear Advance (LA). This feature of the Marlin firmware maintains even nozzle pressure throughout an extrusion, from initial acceleration, through consistent motion at speed, to final deceleration and stopping. Prusa is hardly the only company to support LA, but they have embraced it in a way that I don’t see in many other printers. Notably, PrusaSlicer doesn’t include a coast (stop extruding early) feature. With LA, it’s not really needed. If you calibrate LA properly for each filament, or use a brand that Prusa has calibrated for you, extrusion rates should be even across an entire flat surface.

  • If LA is set too low you’ll see “dog bone” bulges in

corners rather than neat squares. * If LA is set too high corners will look rounded off.

There are several LA calibration prints, including Marlin (the Mk3 uses v1.0) and Prusa’s (IMO) less efficient method. Use either of these methods to identify the best LA value for your filament, and set the appropriate value in Filament Settings->Custom G-Code->Start G-Code. You’ll find a line that looks similar to:

M900 K{if printer_notes=~/.*PRINTER_HAS_BOWDEN.*/}200{elsif nozzle_diameter[0]==0.6}18{else}30{endif} ; Filament gcode

Replace the LA value (30) with the new value.


Clarify the M900 command.

About the Z-seam

The z-seam is probably the most common source of complaints about part quality. While you can hide the seam, you cannot eliminate it completely. If your parts have corners, you can use the nearest or aligned options to have the slicer create the seam for each layer in a corner. If you use rear they’ll all align along the rear of the part. Any of those should help with visual appearance. With good calibration, the size and irregularity of the z-seam should be reduced.

Once you get these calibrations done, you should find that your issues with stringing, bulges, inconsistent corners and other common problems are minimized if not eliminated.

Fine tuning retraction settings

Retraction is the final frontier of calibration tuning. Ideally, we’re doing as little retraction as needed to improve final print quality.

I use the following retraction settings as a starting point:

  • 0.2-0.4mm retraction

  • 0-0.2mm z-lift

  • 50mm/s retract speed

  • 25mm/s de-retract speeds

The z-seam is still visible (you can’t eliminate it) but far less prominent. Fine stringing, irregular exterior walls and blogs are largely gone. As an added bonus, prints go faster without waiting for retraction moves.

At this point, any slicer settings you use are just making minor corrections to a print that is as near-perfect as we can make it.

Contact and feedback

You can find me on the Prusa support forums or Reddit where I lurk in many of the 3D printing-related subreddits.

Last updated on 20191210