E-step calibration sets how many motor steps your firmware needs to push 1 mm of filament. Get this wrong and every print is over- or under-extruded by a fixed percentage.
Quick Steps
Heat hotend to print temp first
Mark filament 100 mm from extruder inlet
Command G1 E100 F100
Measure actual movement
new_e_steps = old x (100 / actual_mm)
Save with M500 (Marlin) or restart Klipper
WHY THIS HAPPENS
WHEN THESE FIXES FAIL
WANT SETTINGS TUNED FOR THIS ISSUE?
Generate slicer settings based on your printer, filament, and this exact problem.
E-steps (extruder steps per millimetre) is the firmware setting that maps stepper-motor steps to filament pushed. It's the foundation under every other extrusion-related setting - flow rate, line width, retraction distance. If e-steps are off by 8%, every print is off by 8% in extrusion volume. Flow rate compensation can hide this, but it shouldn't - flow rate is for fine tuning per-filament, not for compensating for a miscalibrated extruder.
E-steps drift slowly as the extruder gear wears, and they change immediately if you swap extruder hardware (new gear, dual gear upgrade, all-metal extruder). Calibrating once, then re-checking yearly or after any extruder change, keeps the rest of your tuning meaningful.
When To Use It / When Not To
Calibrate when: you've just built or assembled a printer, swapped the extruder or extruder gear, swapped from PTFE-lined to all-metal hotend, you're chasing systematic over- or under-extrusion that doesn't respond to flow rate tweaks, or it's been a year since you last checked.
Don't bother when: the printer prints clean walls and dimensional tests measure correctly. Bambu, Prusa MK4S and other modern factory-calibrated printers usually arrive within 1-2% of correct - re-calibrating just to re-calibrate is wasted time.
Step By Step
1. Get current e-steps. Marlin: send `M503` over USB or check via LCD - look for `M92 E<value>`. Klipper: open `printer.cfg`, find `[extruder] rotation_distance:` (Klipper uses rotation_distance instead of e-steps; same calibration, different math).
2. Heat hotend to print temp (PLA 200C). Without heat, the extruder won't push without grinding.
3. Mark filament 100 mm and 120 mm from the extruder inlet. Use a fine permanent marker. The 120 mm mark is your safety check - it lets you measure even if extrusion overshoots.
4. Command 100 mm extrusion at slow speed. Octoprint/Pronterface terminal: `G1 E100 F100` (100 mm at 100 mm/min = ~1.7 mm/s). Bambu/Klipper LCD: use the manual extrude function set to 100 mm.
5. Measure the gap from extruder inlet to your 100 mm mark. Should be 0 mm. If it's 8 mm, your printer pushed 92 mm instead of 100 mm.
6. Calculate new e-steps.
```
new_e_steps = current_e_steps x (100 / actual_mm_extruded)
```
Example: current 93 e-steps, actual extruded 92 mm: new = 93 x (100/92) = 101.1.
7. Save the new value. Marlin: `M92 E101.1` then `M500`. Klipper: open printer.cfg, calculate `new_rotation_distance = current_rotation_distance x (actual_mm/100)`, save and restart Klipper.
8. Re-test. Mark again, command 100 mm, should now extrude 100 mm +/- 1 mm.
Common Mistakes To Avoid
Measuring with the hotend cold. The extruder grinds without heat - your numbers won't reflect reality.
Measuring with retraction enabled in the same move. Calibrate via raw G-code or the manual extrude UI, not by printing.
Forgetting to save (M500). Marlin will revert your settings on next power cycle without `M500`.
Calibrating with worn or grinding teeth on the extruder gear. Replace the gear first, then calibrate.
Confusing e-steps with flow rate. Flow rate (extrusion multiplier) is per-filament fine-tuning; e-steps is the underlying calibration. Calibrate e-steps first, then dial in flow per filament.
Related Guides And Tools
After e-steps, calibrate flow rate (single-wall cube test) per filament. Pressure / Linear Advance is the next layer of extrusion tuning - blob and seam reduction. If you have systematic under- or over-extrusion that e-steps didn't fix, see the under-extrusion or over-extrusion troubleshooting guides.