4.2. Bed Leveling and 1st layer calibration on the Sidewinder X1

Getting the proper 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 weak, 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.


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.

4.2.1. Bed leveling, first layer gap, and the print startup sequence

When you adjust your 1st layer, you’re adding or subtracting a small amount of height from the 0 position of your nozzle to get a good 1st layer. Before we focus on adjusting the 1st layer height, it helps to understand what goes on before the first layer is printed. Here’s a detailed breakdown on what happens at the start of a print:

  • Startup gcode inserted into the print gcode file by the slicer contains the command to home the printer. Until homed, the printer does not know where the nozzle is located. The printer homes each axis by moving the nozzle until it hits the limits of movement to establish the 0 position for each axis. These limits are found when the axis hits a physical limit switch, or endstop. Once 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 typically 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. On the Sidewinder the initial setting can be as low as the 0 Z position.

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

This Z=0 position may be a problem for a number of reasons, including:

  • Your print bed may not be perfectly flat.

  • If the nozzle is too low, the extruder may not be able to push out filament. You will see erratic extrusions and possibly hear the extruder clicking and skipping.

  • If the nozzle is too high, filament will not have sufficient squish to stick to the bed. Extrusions will pop loose and drift around the bed, likely snagging the nozzle and being dragged around.

  • We want a bit more or less squish for some filaments for adhesion purposes. It’s common to raise the nozzle slightly for sticky filaments like PETG that tend to cling to the nozzle.

To recap:

  • Homing the printer moves the nozzle to the XYZ 0 position.

  • Z 0 is the lowest nozzle position.

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

  • Slicer-generated gcode will use the 1st height slicer setting and will try to generate gcode to produce layers of that height.

Ideally, setting a 0.2mm 1st layer height in your slicer will result in a 0.2mm layer height being printed, but it can vary. Four corner bed leveling (tramming)


4 corner leveling procedure Mesh bed leveling

Mesh bed leveling further complicates all this (for our benefit) by making yet further adjustments at various spots on the bed to compensate for an uneven print surface.


mesh bed leveling procedure Z position adjustment


final z position adjustment

4.2.2. When to calibrate the first layer

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

  • After replacing the nozzle.

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

  • After swapping removable print surfaces.

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.

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


update for Sidewinder X1

4.2.4. 1st layer height calibration


1st layer height calibration procedure

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


notes on adapting Jeff Jordan’s “Life Adjust” procedure to the Sidewinder X1

Jeff Jordan’s “life-adjust” procedure has reached legendary status over on the Prusa support forums, with well over 40 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. Unfortunately, Jeff’s gcode is specific to Prusa printers, but his approach can be easily adapted for our printers.

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

Jeff Jordan's "Life Adjust" print

Fig. 4.1 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. 4.2 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.

4.2.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. 4.3 3x3 bed level test print Test print variants for Live-Z calibration

I’ve created a set of STLs suitable for first layer testing 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. 4.4 7x7 bed level test print

You can find this collection of test patterns at the following links: Other first layer calibration prints

Here are some other useful calibration prints:

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

  2. Dezign’s Cali Cat as an overall test that prints much more quickly than the ubiquitous Benchy. This isnt’ really a good 1st layer print, but everybody seems to print Benchy first. Calicat is much faster.

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.


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 Apr 03, 2021. Last build on Apr 22, 2022.