3D Printer Skew Correction Calculator
Enter the three measurements from a skew calibration print to calculate the signed correction factor, angular error, and firmware command for XY, XZ, or YZ skew.
Skew correction factor-0.02
- Angular error (degrees)
- -0.97
- Inferred adjacent side (mm)
- 100.46
- Signed corner displacement (mm)
- -1.69
- Uncertainty range
- Factor -0.017657 to -0.016244; angle -1.0116 degrees to -0.9306 degrees.
- Measurement verdict
- All valid uncertainty endpoints stay negative, so the measured skew direction is resolved as negative.
- Firmware command
- SET_SKEW XY=140.4,142.8,99.8
Print and measure the calibration object with any existing skew compensation disabled.
Follow the calibration model corner labels; swapping AC and BD reverses the sign of this correction.
How to use this calculator
- Disable existing skew compensation, then print a labeled skew calibration object in the plane you want to correct.
- Measure AC, BD, and AD from the model reference points using the same caliper technique each time.
- Choose Klipper or Marlin so the command row uses the right syntax for your firmware.
- Enter your estimated measurement uncertainty to see whether the skew direction is clear.
- Reprint and remeasure after applying the correction instead of stacking corrections from one old print.
How the skew factor is calculated
This calculator uses the same three-measurement geometry documented for Klipper skew correction and the same correction-factor convention used by Marlin bed skew compensation. The calibration print supplies two diagonals, AC and BD, plus the reference side AD. From those three values the missing adjacent side is inferred first:
s = sqrt(2 * AC^2 + 2 * BD^2 - 4 * AD^2) / 2
The cosine term for the measured corner angle is then:
c = (AC^2 - s^2 - AD^2) / (2 * s * AD)
The firmware correction factor is:
f = tan(pi / 2 - arccos(c))
The signed angular error shown by the calculator is atan(f) * 180 / pi. The signed corner displacement is f * AD, which expresses the same skew as a lateral offset over the measured AD span. A factor near zero means the two diagonals agree closely for the labeled geometry.
Plane and firmware output
For Klipper, the command keeps the raw measurements because SET_SKEW calculates and stores the factor internally. The output is shaped as SET_SKEW XY=AC,BD,AD, or the same pattern for XZ or YZ. For Marlin, M852 receives the calculated factor directly: I for XY, J for XZ, and K for YZ.
What moves the answer most
The difference between the two diagonals controls the sign and size of the correction. Swapping AC and BD reverses the sign, so the corner labels on the calibration model matter. The uncertainty range recomputes the factor at every plus-or-minus combination of AC, BD, and AD. If that interval crosses zero, the apparent skew is small enough that measurement error could explain the sign.
What this calculator leaves out
Software skew correction does not square the frame, gantry, belt path, or Z assembly. It also does not fix axis scale error, thermal shrinkage, backlash, loose motion parts, or nonlinear distortion. Use the result after the printer is mechanically sound, keep the test print free of old skew compensation, and confirm with a fresh calibration print.
Worked example
With the default XY measurements from Klipper's example, AC is 140.4 mm, BD is 142.8 mm, and AD is 99.8 mm. The inferred adjacent side is 100.459 mm. The correction factor is -0.016951, the signed angular error is -0.9711 degrees, and the corner displacement over AD is -1.692 mm.
With 0.05 mm measurement uncertainty, the sensitivity range is factor -0.017657 to -0.016244 and angle -1.0116 degrees to -0.9306 degrees. Because the whole interval stays negative, the measured skew direction is resolved by these measurements. For Klipper, the command is SET_SKEW XY=140.4,142.8,99.8.
Common questions
How do I measure AC, BD, and AD on a skew calibration print?
Use the corner reference points defined by the calibration model, not the outside of any corner flat unless the model says to. Measure AC, BD, and AD with the same caliper pressure and jaw placement, and keep the print free of old skew compensation while making the test object.
Which diagonal is AC and which is BD?
Use the labels from the skew calibration model. The math is signed, so entering the two diagonals backward reverses the correction direction. If the model is oriented for Klipper, corner A is normally placed toward the origin of the selected plane.
Should I correct printer skew mechanically or in firmware?
Fix obvious mechanical problems first. A racked frame, loose gantry, belt mismatch, or tilted Z assembly can create other errors that firmware skew compensation cannot remove. Software correction is best for small remaining squareness errors after the machine is mechanically stable.
How do I use SET_SKEW and save a Klipper skew profile?
Send the generated SET_SKEW command for the plane you measured, then print and measure again to verify the result. Klipper can save a named skew profile with SKEW_PROFILE SAVE, followed by SAVE_CONFIG when prompted by the firmware.
Which M852 parameter corresponds to XY, XZ, and YZ?
Marlin uses I for XY skew, J for XZ skew, and K for YZ skew. The older S parameter is an alias for I when only XY skew correction is enabled, so this calculator uses I, J, or K explicitly.
What is the difference between skew, dimensional scaling, and filament shrinkage?
Skew is a squareness error: axes are not at a true right angle. Dimensional scaling is a length error along an axis, and filament shrinkage is material behavior after printing. A skew factor can square the coordinate system, but it does not replace steps/mm, rotation distance, extrusion, or material calibration.