3.4. Live-Z Calibration and Mesh Bed Leveling on the Prusa i3 Mk3

Getting the correct first layer height – the initial spacing between the nozzle and print bed – is critical for a successful print. A good first layer is – literally – the foundation for the rest of your print. If the foundation is poor, you’re going to have problems later on. Unfortunately, the process can be a bit difficult to master when starting out. I’ve captured some of the lessons learned about this process below.

Note

These notes are based on my experiences with the Prusa i3 Mk3 and Artillery/Evnovo Sidewinder X1 printers. If you are using a different printer, please verify the hardware details are similar.

3.4.1. Understanding Live-Z

When you adjust Live-Z, you’re increasing or decreasing the initial gap between the nozzle and the print surface at the start of a print. Live-Z is essentially a correction for the nozzle Z (vertical) position detected by the PINDA probe during bed leveling (more below).

  • Negative adjustment lowers the nozzle closer to the bed.

  • Positive raises it.

Note

This was reversed on the Mk2 and earlier Prusa printers, which sometimes causes confusion. If you’ve used other 3D printers, you’re probably raising the bed towards the nozzle to adjust your 1st layer. The Prusa works by lowering the nozzle towards the bed.

Layer heights are all relative to the 0 position established by the PINDA sensor when doing automatic mesh bed leveling. Live-Z calibration sets an offset to correct this position for the first layer.

  • Too low and the filament has to be squeezed out between the nozzle and print surface. Extrusions may be distorted and ragged. Adjacent lines will be crooked. Filament may be pushed so deeply into the print surface that it’s difficult if not impossible to remove.

  • Too high and the filament is not squished onto the print surface. The extruded filament has a circular cross section with minimal contact with the bed, leading to parts warping or coming loose mid-print. This can result in the frustrating “spaghetti monster” of filament extruded in air, or the potentially damaging “blob of doom” formed when loose heated sticks to and begins building up on the nozzle and hotend.

Nozzle squish provides better inter-layer adhesion

Fig. 3.13 Nozzle squish provides better inter-layer adhesion

Live-Z is only an adjustment for the 1st layer.

  • After the first layer, all movements are made according to gcode commands relative to the 0 Z position. Making Live-Z adjustments will not affect your prints above the first layer.

  • Live-Z adjustment is only done on the printer itself. You normally do not make Live-Z adjustments with slicer settings.

Adjustments are made in micron (1/1000mm) positive or negative steps. Unlike many other settings, you do not need to save Live-Z adjustments. Live-Z settings are automatically stored with the current selected sheet profile.

The goal of Live-Z is to find that “just right” Goldilocks height where filament will adhere solidly but not distort, providing a solid foundation for our prints.

3.4.2. First layer, Live-Z, and print startup sequence

To understand the importance of the Live-Z adjustment, consider what happens at the start of every print:

  • Startup gcode inserted into the print gcode file by the slicer contains the g-code command (G28) to home the printer. Until homed, the printer does not know where the nozzle is positioned. The printer homes each axis by moving the nozzle until it hits the limits of movement to establish the 0 position. On inexpensive printers, these limits are set with a physical limit switch, or endstop. On the Mk3, “soft” endstops identify the limit of motion based on motor feedback. Once all of the axis limits are found, this position is set as the the X=0, Y=0 & Z=0, or “home” position for the nozzle.

  • After the nozzle is homed and nozzle and bed temperatures are reached, a prime line will normally be printed before the actual print. This prime line is printed independently of the slicer settings, and is usually done at the lowest nozzle position to ensure filament is flowing evenly. The prime line is normally printed at your Z 0 position. This is typically 0.15mm and different than your usual first layer height.

  • After the startup gcode is complete, the slicer-generated code takes over. A slicer generated command moves the extruder up to the first layer height you specify fin your slicer settings 1 and starts extruding.

The Live-Z feature lets us add or subtract a small increment from that Z 0 home position. On other printers you may be doing a manual 1st layer adjustment that does something similar, only using a manual and much more tedious process.

To recap:

  • Homing the printer moves the nozzle to the limits of movement and sets the XYZ 0 positions.

  • The Mk3 uses 0.15mm above 0 as the lowest nozzle position.

  • The prime line is normally printed at the lowest nozzle position unless changed in your startup gcode.

  • Slicer-generated gcode will include commands to move the nozzle to 1st layer height slicer setting and will generate gcode to make subsequent Z moves in increments of your slicer layer height.

  • Live-Z adjusts the 0 position up or down slightly and independently of your slicer.

Ideally, setting a 0.2mm 1st layer height in your slicer will result in a 0.2mm layer height being printed, but actual results can vary. This usually doesn’t matter.

The Z=0 position detected by the PINDA probe may be sub-optimal for a number of reasons:

  • We want a bit more or less squish with some filaments for better bed adhesion.

  • The print surface may not be perfectly flat or we may have changed print surfaces.

  • We may have simply set our 1st layer height incorrectly thanks to the simplistic on-board adjustment routine.

Live-Z lets us add or subtract a small increment from that 0 position to correct for these problems.

3.4.3. Understanding Automatic Mesh Bed leveling

When we adjust Live-Z, we’re making a correction based on a small part of our print area. In theory, once you’ve got your print surface clean and Live-Z adjustment calibrated, printing should be straightforward. Unfortunately, physics come into play on the relatively large surface of our print bed:

  • The surface is large enough that physical warping can occur due to repeated heat and cooling cycles.

  • Removal and replacement of the spring steel sheet may result in surface variations between prints.

A warped print bed is the bane of 3D printing, causing 1st layer variations that can result in inconsistencies and adhesion problem areas on the bed. Fortunately, the Prusa Mk3 provides an automated mesh bed leveling feature that can measure small variations over the entire print surface and compensate for these at print time. This is another of the “quality of life” features that distinguishes Prusa printers from low-cost competitors. Automatic mesh bed leveling makes yet further adjustments based on a grid of test points at various spots across the bed to compensate for an uneven print surface.

To do this, the printer moves to the Z=0 position, then successively moves over the entire print surface probing the actual distance to the bed at each position using the PINDA probe attached to the extruder mechanism. You can select between 3x3 and 7x7 (recommended) mesh bed leveling and the number of times to probe at each position in your printer settings menu. This procedure has been optimized to the point that there’s very little difference in the time it takes for a basic 3x3 level with 3 probes and 7x7 level with 5 probes (roughly 45 seconds), so using the maximum resolution is recommended.

Once mesh bed leveling is completed at the start of a print, the Mk3 will vary the nozzle height during the print to compensate for small print surface variations. Unless your bed is severely warped, this should provide a consistent first layer over the entire surface.

These increments are calibrated automatically and are added or subtracted to our Live-Z adjusted Z 0 position. Mesh bed leveling establishes the Z 0 position at various points across the bed. Live-Z correction is applied as an adjustment to the Z 0 position.

3.4.4. Mastering Live-Z calibration

3D printers are amazingly precise machines. Live-Z adjustments are made at incredibly precise micron (1/1000mm) increments. Unfortunately, most documentation is written using less than precise terminology. Raising (making less negative) or lowering (making more negative) Live-Z by “a lot” or “a bit” doesn’t mean much if you have no point of reference.

Here’s a quick unscientific rundown:

  • I set my Live-Z to 0. This is “way high”. The nozzle is visibly above the print surface. My Z 0 position is exactly as detected by the PINDA probe during leveling.

  • I start a print. The filament will flow out in a round extrusion and float about. The nozzle is simply too high to stick filament to the bed.

  • I lower (make more negative) the nozzle by “a lot” (0.1mm) until I see the filament starting to stick. At first, it will appear to stick but still move easily with a poke of the finger. Keep going.

  • Once the filament doesn’t easily poke loose from the bed, I slow down and keep lowering the nozzle in “large” (0.06mm) increments. This is what I consider a minimal adjustment to correct any problems. Keep lowering until the gaps between extrusions disappear.

  • Look at the edges where the infill meets the perimeter extrusions. If there are still holes, I start lowering in “small” (0.02mm) increments. Continue until the gap close up. You’ll notice the appearance will change when you hit the “aha” level and look very even.

  • If you go too far, just back up “a bit” (0.02-0.04mm). Adjust up and down in “small” (0.02mm) increments until you get a clean, even surface.

When in doubt, start high. You’re always better off starting high since it’s easy to see when you’ve moved low enough. If you’re too low, it can look like nothing is extruding or you just get smears of filament and may hear the extruder clicking as it struggles to push filament out. If you’ve having no luck, raise Live-Z to 0 and start again.

There is no one “right” Live-Z setting. It will vary between sheets or after making hardware changes like nozzle changes (though it shouldn’t by much). Adjusting Live-Z is a bit like cooking a soft-boiled egg. You can read about it a hundred times, but there’s a feel for it you just have to learn for yourself. Once you’ve mastered it, it’s a breeze and you’ll wonder why people have such a hard time with it.

I find adjustments of 0.02mm to be the smallest that makes a difference in my Live-Z settings. Most adjustments are +/- 0.06mm. With just a bit of practice, I’ve gotten to the point that I can make a call on adjusting Live-Z based on a quick visual inspection.

  • A gap between extrusions means I need to lower it 0.04-0.06mm.

  • A rough top surface means I need to raise it a similar amount.

Then I adjust with +/- 0.02mm bumps up or down as needed. The same values work equally well on my Sidewinder printer.

Don’t worry too much about the “true zero” position. I wasted a lot of time following online discussions about carefully adjusting the nozzle so it touches the bed at the 0 position, then adjusting up from there. I finally realized the Mk3 won’t let you move below 0.15mm. When my 0.2mm 1st layer prints evenly and adheres securely, it is “correct”. If I ever need very accurate 1st layer heights (I usually don’t), I can make minor adjustments to Live-Z. Otherwise, I only care if the 1st layer adheres and provides a good foundation for the rest of the print.

3.4.5. Calibrating Live-Z

3.4.5.1. When to calibrate the Live-Z setting

I suggest recalibration any time the distance between the nozzle and bed may have changed.

  • When swapping between spring steel print sheets (unless you’ve verified sheets are the same thickness).

  • When replacing the nozzle.

  • After printer movement or hardware maintenance that might affect the Z position.

It may also be necessary under other circumstances.

  • When updating firmware. I’ve noticed distances seem to vary between firmware versions.

  • When switching to PETG or other materials that don’t need as much “squish” as PLA for good adhesion. Backing off (making less negative) Live-Z between 0.2 and 0.02mm may help with filament that sticks to the nozzle. Otherwise, I don’t find it necessary to re-calibrate when swapping filament.

3.4.5.2. Preparation

Before you begin, be sure you have properly and thoroughly cleaned the PEI print surface. A poorly cleaned surface will throw your results off, resulting in much wasted time and frustration.

3.4.5.3. Live-Z calibration using the on-board Prusa routine

Prusa provides a Live-Z calibration option as an on-board menu selection. This procedure prints a series of parallel lines with a small square at the end to allow adjustment of the Live-Z adjustment mid-print.

Note

The Live-Z menu option is only available on the top-level menu during actual printing. If you want to adjust it between prints, scroll down to the Settings menu and you’ll find it there.

First, here’s an overview of the completed print. Note that the thin lines are square and adhere to the bed well.

Successful on-board Live-Z adjustment print

Fig. 3.14 Successful on-board Live-Z adjustment print

If adjusted correctly, adhesion should be sufficient to allow gentle poking at the extrusions without them coming lose.

Testing adhesion during on-board Live-Z adjustment print

Fig. 3.15 Testing adhesion during on-board Live-Z adjustment print

Finally, the small square printed at the end of the run should be solid and adhere completely.

Close-up of final on-board Live-Z test

Fig. 3.16 Close-up of final on-board Live-Z test

Note that the Live-Z adjustment is automatically associated with the current print sheet selection and saved on the Mk3. If you have multiple print sheets set on your printer, the Live-Z setting is maintained separately and automatically for each one.

Caution

It is important to complete the on-board Live-Z calibration at least once to set a flag in non-volatile storage indicating Live-Z is set. Failure to do so can result in a floating Live-Z height between prints.

While this procedure works, it can be a bit difficult to interpret the results. It works and can be helpful for the practiced eye to make quick adjustments, but there are easier ways to cablibrate your Live-Z setting.

3.4.5.4. Jeff Jordan’s “Life Adjust” alternate Live-Z calibration procedure

Jeff Jordan’s “life-adjust” procedure has reached legendary status over on the Prusa support forums, with well over 50 pages of posts. The brilliance of Jeff’s approach is in it’s simplicity. Rather than printing thin lines and trying to extrapolate what they mean for an entire print, he uses an actual print with lines printed adjacent to each other. A simple 75x75x0.20mm single-layer print is large enough to see how lines interact, yet simple enough to print and adjust quickly.

Here’s a quick look at Jeff’s procedure mid-print.

Jeff Jordan's "Life Adjust" print

Fig. 3.17 Jeff Jordan’s “Life Adjust” print

Notice the gaps between lines at the lower-right, indicating the nozzle is too high (not negative enough). I’ve made gradual adjustments to lower (make more negative) the nozzle as the print progresses to the left. Notice the gaps between lines and holes at the edges closing up as the interior lines move to the upper left.

Here’s a result showing both extremes, printed from lower-right to top-left.

  • The gaps between lines and holes between the interior and perimeter lines at the bottom-right indicate the nozzle is too high (not negative enough).

  • I lowered the nozzle in large-ish increments (-0.04-0.06mm) until results start to even out just before the center of the print, then slow to +/- 0.02mm increments as it starts looking good.

  • For this example, I continued lowering (making more negative) the nozzle until lines began to appear ragged and distort adjacent lines past the center mark, eventually getting so low that the filament is scraped away. Note that while this might also show gaps between lines, the extrusions are ragged and inconsistent. Compare this to the uniform lines created with the nozzle too high and you’ll quickly be able to judge which way to move the nozzle.

  • Finally, I returned the nozzle to the “good” height with most consistent results at the top-left corner before the print completed.

When you peel the square off the build surface, it should come up as one piece and hold together with a bit of tugging. Lines should be even and surfaces smooth.

Extreme "Life Adjust" results

Fig. 3.18 Extreme “Life Adjust” results

As you get familiar with this procedure, you’ll be able to make adjustments in a few minutes. Mastering Live-Z adjustment will provide the best foundation for the rest of your print.

3.4.6. Variations on the Live-Z calibration print

When you start experimenting with new materials and nozzle sizes, or if you’re using another printer type, you may find that Jeff Jordan’s gcode doesn’t quite fit your needs.

  • If your print area is larger or smaller than the Mk3 you’ll want to move the position of the test square.

  • If you’re using 7x7 or 5x5 mesh bed leveling, a grid of small test prints across the width and depth of the bed can help quickly identify issues at specific test points without the need for a full-bed print.

    3x3 bed level test print

    Fig. 3.19 3x3 bed level test print

3.4.6.1. Test print variants for Live-Z calibration

There’s nothing particularly magical about Jeff Jordan’s “Life Adjust” gcode. You can do the same thing easily by printing and observing any suitably sized first layer. It’s also useful to print small test patterns across the entire bed surface. I’ve created a set of STLs suitable for first layer testing of the full bed on the Prusa i3 Mk3, Prusa Mini, and Artillery Sidewinder X1. These sets include the following patterns:

  • A 75x75x0.2mm square duplicating Jeff Jordan’s print, suitable for printing with different filaments and nozzle sizes.

  • A grid of 25mm squares in a 3x3 pattern across the entire bed.

  • A grid of 5 50mm squares or circles in the corners and center of the bed.

  • A grid of 25mm squares or circles in a 5x5 pattern across the entire bed. Suitable for testing 5x5 mesh bed leveling.

  • A grid of 15mm squares or circles in a 7x7 pattern across the entire bed. Suitable for testing 7x7 mesh bed leveling.

I’ve provided pre-generated sets for the following printers:

  • Prusa i3 Mk3

  • Prusa Mini

  • Artillery/Evnovo Sidewinder X1

I’ve included the OpenSCAD source code to generate the STL patterns so you can tweak the layout and features to suit your needs.

Just slice the appropriate pattern for your printer and print. The prints won’t have the tones and pauses of Jeff Jordan’s prints, but work well once you’ve mastered the procedure.

7x7 bed level test print

Fig. 3.20 7x7 bed level test print

You can find this collection of test patterns at the following links:

I’m also fond of Stoempie’s complex 1st layer test also at 0.20mm single layer. If I can print this without problems, I know I’ve got my Live-Z and 1st layer down.

3.4.6.2. Pre-generated gcode

Here are my first layer calibration prints as pre-generated gcode for a variety of common nozzle sizes:

It’s worth spending some time to get familiar with this process and mastering the adjustments. You won’t need to re-calibrate frequently, but it is recommended when switching nozzles or making other hardware adjustments.

3.4.7. Other tips

Over on the Prusa forums, user jbinfl had a great suggestion to mark each sheet with a bit of blue tape designating the current Live-Z offset to facilitate quick changes between prints.

Marking removable print surfaces with current Live-Z setting

Fig. 3.21 Marking removable print surfaces with current Live-Z setting

Footnotes

1

The actual height of your first layer is subject to a 0.15mm minimum based on the “software endstop” feature of the Prusa firmware. This setting is intended to prevent inadvertently driving the nozzle into the PEI print surface and to provide some distance betwen the nozzle and PEI surface during heating.

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. I occasionally drop into the Official Prusa 3D discord server where I can be reached as bobstro (bobstro#9830). You can email me directly at projects@ttlexceeded.com.

Last modified Aug 09, 2021. Last build on Oct 22, 2021.