Skip to content
MetriFab

3D Printing guide

E-Steps Calibration: How to Calibrate Your Extruder in Marlin and Klipper

Calibrate your extruder with a 100 mm marked-filament test: worked Marlin e-steps and Klipper rotation_distance formulas, commands and a result chart.

Updated 8 min read6 Test Results Worked Out
Units

Quick answer

Heat the nozzle, mark the filament 120 mm from the extruder entrance, then extrude 100 mm. If 22 mm is left between the mark and the entrance, the extruder pushed 98 mm, which is 2% too little. In Marlin the new e-steps are 93 × 100 ÷ 98 = 94.9, sent as M92 E94.9 and saved with M500. In Klipper the ratio is turned upside down: 22.5 × 98 ÷ 100 = 22.05 for rotation_distance. The 93 and 22.5 are example values; use the ones your own printer reports.

Formula

actual = mark distance − distance left | Marlin: new e-steps = current × requested ÷ actual | Klipper: new rotation_distance = current × actual ÷ requested

Accuracy

The 93 e-steps and 22.5 mm rotation_distance are example numbers, not defaults for any printer: read yours from the firmware. Within 1% of the requested length counts as calibrated here. A correction of more than 20% usually points to a wrong current value, a cold nozzle or a measuring mistake rather than a faulty extruder.
Close-up of a desktop 3D printer's print head with its cooling fans, printing a green part on the bed.
A desktop printer at work. Running cost is the power it draws, mostly by the heated bed, multiplied by the hours and your electricity rate.Photo: Jakub Zerdzicki, Pexels, Pexels License. Credits

Reference table

Search by name or sort by any column. Each row links to the matching calculator.

6 of 6 rows · sorted by left after test (mm)

Worked e-steps results for a 100 mm test with the mark 120 mm from the extruder
Calculator
12108+8%86.1124.3E-steps calculator
17103+3%90.2923.175E-steps calculator
201000% (calibrated)9322.5E-steps calculator
2298-2%94.922.05E-steps calculator
2595-5%97.8921.375E-steps calculator
3090-10%103.3320.25E-steps calculator

How it works

  1. The marked-filament test

    Heat the nozzle to the temperature you normally print at, so the extruder is working against the same resistance as in a real print (firmware also blocks extrusion below a minimum temperature). Measure 120 mm up the filament from the extruder entrance and mark it with a fine pen. Then ask the extruder for 100 mm at a slow speed and measure from the entrance to the mark again. What really went through is the first distance minus the second: with 22 mm left, 120 − 22 = 98 mm. Against the 100 mm you asked for, that is an error of (98 − 100) ÷ 100 = −2%, so the extruder is under-extruding. Use calipers or a steel rule held at the same edge both times.

  2. Marlin e-steps and Klipper rotation_distance move in opposite directions

    More steps per millimetre pushes more filament, but a longer rotation_distance pushes less, so the two formulas are mirror images. Marlin: new e-steps = current × requested ÷ actual, so 93 × 100 ÷ 98 = 94.9, a rise of 2.04%. Klipper: new rotation_distance = current × actual ÷ requested, so 22.5 × 98 ÷ 100 = 22.05, a fall of 2%. If the extruder over-extrudes the numbers swap direction: with 12 mm left it pushed 108 mm (+8%), giving 86.11 e-steps in Marlin or a rotation_distance of 24.3 in Klipper. In Marlin send M92 E94.9 and then M500 to store it, if your firmware has EEPROM settings turned on. In Klipper edit rotation_distance in the [extruder] section of printer.cfg and run FIRMWARE_RESTART.

  3. Check the result and know what it cannot fix

    After you apply the new value, repeat the test. It should land within 1% of the requested length; if not, repeat once more rather than stacking corrections on a noisy measurement. E-steps calibration only fixes how far the extruder pushes filament for a given command. It does not fix a partly blocked nozzle, a filament that is thicker or thinner than labelled, or a slicer flow setting that is wrong for the material, and it should not be used to compensate for them. Get the extruder right first, then adjust flow in the slicer if prints still look over- or under-filled.

Work it out

Change the inputs to work out your own numbers. Each step of the working is shown with the answer.

Your measurements

Firmware

Your firmware

Marlin uses e-steps (steps per mm). Klipper uses rotation_distance (mm per motor turn), and the correction goes the other way.

Send M503 and read the M92 line, or check your firmware config. The starting figure is only an example.

The test

The extrusion length in your command, usually 100 mm.

From the extruder entrance to the mark on the filament, measured before extruding.

From the extruder entrance to the mark, measured after extruding. It should be less than the first distance.

New e-steps94.9 steps/mm

Results

New e-steps

94.9steps/mm

The extruder pushed 98 mm instead of 100 mm. Change the e-steps from 93 to 94.9, then run the test again.

Actually extruded
98mm
120 − 22
Error
-2%
Under-extruding
Change to value
+2.04%
From 93 to 94.9

Send these commands:

M92 E94.9
M500

M92 sets the e-steps for now. M500 saves them to the printer's memory so they survive a restart.

Troubleshooting

What usually goes wrong, how to check for it, and how to prevent it.

  • The new value is more than 20% away from the old one

    Cause
    The current value you typed is not the one in the firmware, the nozzle was cold, or a distance was measured wrongly
    How to check
    Repeat the test and read the current value from the firmware (M503 in Marlin, printer.cfg in Klipper)
    Prevention
    Copy the current value from the printer, heat the nozzle to printing temperature and measure from the same edge each time
  • The result changes from one test to the next

    Cause
    The filament drags on the spool or the guide, the extrusion was too fast, or the pen mark slipped or smeared
    How to check
    Run the test three times; the actual lengths should agree to within about 1 mm
    Prevention
    Let the filament feed freely, extrude slowly, use a fine mark, and apply the average of repeated tests
  • The corrected value is gone after a restart

    Cause
    The change was sent to the running firmware but never saved, or the Klipper config was edited without restarting
    How to check
    After a power cycle, repeat the test or check the stored value (M503 in Marlin)
    Prevention
    Send M500 in Marlin, or edit printer.cfg and run FIRMWARE_RESTART in Klipper, then repeat the test

Common questions

How do I calculate new e-steps?

New e-steps = current e-steps × requested length ÷ actual length. If you asked for 100 mm, 98 mm went through, and the current value is 93, the new value is 93 × 100 ÷ 98 = 94.9. Send M92 E94.9 and then M500 to save it.

Why is the Klipper formula the opposite of Marlin's?

Marlin counts steps per millimetre, so a bigger number pushes more filament. Klipper's rotation_distance is the filament moved per motor rotation, so a bigger number pushes less. Klipper's formula is current × actual ÷ requested: 22.5 × 98 ÷ 100 = 22.05.

How accurate should the extruder be after calibration?

This calculator treats anything within 1% of the requested length as calibrated. Measurement error with a ruler and a pen mark is often close to that size, so repeat the test and average it instead of chasing tiny corrections.

Should I calibrate with the nozzle hot and attached?

Most guides heat the nozzle to printing temperature and extrude through it, so the extruder works against realistic pressure. Heat is also needed because firmware blocks extrusion below a minimum temperature. Use the temperature you normally print at.

Calculators for this