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

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)
| Calculator | |||||
|---|---|---|---|---|---|
| 12 | 108 | +8% | 86.11 | 24.3 | E-steps calculator |
| 17 | 103 | +3% | 90.29 | 23.175 | E-steps calculator |
| 20 | 100 | 0% (calibrated) | 93 | 22.5 | E-steps calculator |
| 22 | 98 | -2% | 94.9 | 22.05 | E-steps calculator |
| 25 | 95 | -5% | 97.89 | 21.375 | E-steps calculator |
| 30 | 90 | -10% | 103.33 | 20.25 | E-steps calculator |
How it works
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.
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.
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
Choose your firmware, enter the current value and the two mark measurements. Everything updates as you type.
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.
Results
New e-steps
steps/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.
How this was calculated
The correction with your numbers.
How this was calculated
The correction with your numbers.
Step 1: Filament that really went through
mark distance − distance left after the test
= 120 − 22
= 98 mmThe mark started this far from the extruder entrance and ended up closer by the length the extruder pulled in.
Step 2: How far off it was
(actual − requested) ÷ requested
= (98 − 100) ÷ 100
= -2%A negative number means the extruder pushed less than you asked for (under-extrusion).
Step 3: New e-steps (Marlin)
current e-steps × requested ÷ actual
= 93 × 100 ÷ 98
= 94.9 steps/mmE-steps are motor steps per millimetre of filament. If the extruder pushed less than asked, it needs more steps per mm, and the other way round.
Step 4: Set it
M92 E<new value>, then M500 to save
= M92 E94.9 ; M500
= 2.04% changeRun the test again after changing the value. If the new result is within 1% of the request, you are done.
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.