If you moved to Klipper from Marlin, the first thing that trips people up is that
there are no E-steps. Klipper describes the extruder with a single value called
rotation_distance — how many millimeters of filament move per full rotation of the
extruder motor. Get it wrong and every print is silently over- or under-extruded, no
matter how dialed-in your slicer is.
This guide walks through calibrating it properly, including the formula so you
understand why it works rather than just copying numbers.
What rotation_distance actually means
In your printer.cfg:
[extruder]
rotation_distance: 7.5
That 7.5 means: one full turn of the extruder stepper should push 7.5 mm of
filament. Klipper computes the step timing from this value plus your microsteps
and full_steps_per_rotation, so you never touch steps/mm directly the way Marlin
does. Calibrating the extruder = correcting this one number.
The calibration method: measure 100 mm of extrusion
This is the same "mark and measure" routine every firmware uses; only the final
math differs.
- Heat the hotend to the normal printing temperature for your loaded filament, so it extrudes freely without skipping.
- Mark the filament at a fixed reference — e.g. exactly 120 mm above the extruder inlet — with a marker or piece of tape.
- Command a slow 100 mm extrusion. Use relative mode so you don't have to track absolute position:
M83
G1 E100 F100
Keep it slow (F100 = 100 mm/min). Fast extrusion skips steps and ruins the test.
- Measure what actually moved. Measure from your reference point again. If you marked at 120 mm and now read 25 mm, the extruder pulled in 95 mm — it under-extruded by 5 mm.
The formula
new rotation_distance = current rotation_distance × (actual extrusion / commanded extrusion)
Worked example: current rotation_distance is 7.5, you commanded 100 mm, and
only 95 mm actually fed:
7.5 × (95 / 100) = 7.125
So your corrected value is 7.125.
Watch the direction — this is the #1 gotcha for Marlin migrants.
With Marlin E-steps, under-extrusion means you raise steps/mm. With Klipper
rotation_distance, under-extrusion means you lower the value. They're inverse
quantities (mm-per-rotation vs steps-per-mm), so the correction goes the opposite
way. If you mentally apply the E-steps direction here, you'll double your error.
If you'd rather not do this by hand (or want to sanity-check the direction), this
free browser tool does exactly this calculation and also converts an old Marlin
steps/mm value into an equivalent Klipper rotation_distance:
Klipper rotation_distance calculator.
Coming from Marlin and want to see the E-steps side too? There's a matching
E-steps calculator.
Apply the value
Edit printer.cfg manually — Klipper doesn't have a "save E-steps" G-code like
Marlin's M500 for this:
[extruder]
rotation_distance: 7.125
Then RESTART (or FIRMWARE_RESTART if you changed pins) and re-run the 100 mm
test. If the first correction was large, expect to iterate once more — measurement
error, filament slip, and a slightly cold nozzle all add noise. You're aiming for
the measured value to land within ~0.5 mm of 100.
Reference starting points (for non-extruder axes)
The same rotation_distance concept governs your motion axes, and for those you can
calculate the starting value instead of measuring:
-
Belt axis:
rotation_distance = belt_pitch × pulley_teeth(e.g. 2 mm GT2 belt × 20-tooth pulley = 40) -
Leadscrew (Z):
rotation_distance = screw_pitch × number_of_starts(e.g. T8 with 4 starts at 2 mm pitch = 8)
These are exact for motion axes; the extruder is the one that needs the
measure-and-correct loop above because of filament grip variability.
What to calibrate next
Getting rotation_distance right only guarantees the correct length of filament
is fed. It does not fix how much plastic ends up in the wall after squish and
pressure. Once the extruder is accurate:
-
Flow rate / extrusion multiplier — print a single-wall cube and measure the
wall with calipers. Tune it per filament in the slicer, not in firmware. A
flow rate calculator
handles the
new flow = current × expected_wall / measured_wallmath. - Pressure advance — for sharp corners and consistent extrusion at speed.
- Volumetric flow ceiling — make sure fast prints aren't outrunning your hotend's melt rate.
Calibrate in that order. If you tune flow before the extruder, the flow
compensation just masks a wrong rotation_distance, and you'll be chasing ghosts.
TL;DR
- Klipper uses
rotation_distance, not E-steps. - Measure a slow 100 mm extrusion, then
new = current × actual / commanded. - Under-extrusion → lower the value (opposite of Marlin).
- Edit
printer.cfg,RESTART, re-measure, iterate. - Then do flow → pressure advance → volumetric flow.
Happy printing — and may your extrusion multipliers be ever accurate.
Top comments (0)