Dimensional accuracy: compensating holes, outer contours, the first layer and shrinkage

Published October 15, 202612 sources

Short answer

Measure a test part, then correct the specific error: X-Y hole or contour compensation for fits, elephant foot compensation for a flared first layer, and shrinkage scaling for parts uniformly small after cooling [2, 3]. The shrinkage fields use opposite conventions: OrcaSlicer's Shrinkage (XY) wants measured ÷ designed × 100, such as 94%, while PrusaSlicer's Shrinkage compensation XY wants the shortfall itself, such as 1% [3, 6]. Out-of-square axes need skew correction [9].

Match the correction to the error

Dimensional errors come in different shapes, and each slicer setting fixes only one of them. A useful first step is to measure two features of different size. An error that stays the same size on a 10 mm and a 100 mm feature is an offset, which the XY compensation settings address; an error that grows with the feature is a scale problem, which is what shrinkage compensation is for.

What you measure Likely correction Where
Holes too small, outer size correct X-Y hole compensation OrcaSlicer [2]
All edges off by a fixed amount X-Y contour compensation, or XY Size Compensation OrcaSlicer, PrusaSlicer [2, 6]
Bottom edge flares outward Elephant foot compensation Both [2, 7]
Error proportional to size Shrinkage (XY / Z) Filament profile [3, 6]
Diagonals of a square differ Skew correction Firmware [9]

Get extrusion right before measuring. OrcaSlicer notes that too high a flow ratio causes over-extrusion and dimensional inaccuracy [5], so calibrate flow rate first.

OrcaSlicer’s tolerance test and X-Y compensation

OrcaSlicer ships an Orca Tolerance Test handy model: right-click the plate in Prepare mode and choose Add Handy Model. It has a base with six hexagonal holes at clearances of 0.0, 0.05, 0.1, 0.2, 0.3 and 0.4 mm, plus a hexagonal tester; a 6 mm Allen key also works as a gauge. Measure the holes and the tester with calipers, adjust X-Y hole compensation and X-Y contour compensation, and repeat until the fit is right [1]. The wiki notes that tolerances vary from printer to printer even with the same filament and profile.

The two settings act separately [2]:

  • X-Y hole compensation (xy_hole_compensation) grows or shrinks holes in the XY plane; positive values make holes bigger.
  • X-Y contour compensation (xy_contour_compensation) does the same to outer contours; positive values make the part bigger.

OrcaSlicer describes both as small corrections for parts with assembly problems. PrusaSlicer has one combined XY Size Compensation, which grows the object outward with positive values and shrinks it with negative ones; its tooltip mentions fine-tuning hole sizes [6].

Two more OrcaSlicer options help accuracy. Precise wall removes the overlap between the outer wall and the next inner wall, which otherwise can push the outer wall outward when walls print inner-first. Precise Z height adjusts the last five layers so the sliced height matches the model, for example 20.1 mm instead of 20.2 mm at 0.2 mm layers [2].

Elephant foot compensation

The first layer is pressed into a hot bed, so it spreads wider than the layers above [7]. OrcaSlicer adds the weight of the part, thermal expansion, a bed that is too hot and inaccurate leveling as contributors [2]. Its material page warns that a hot first-layer bed temperature in particular can produce this deformation [4].

PrusaSlicer. The setting is under Print Settings → Advanced and needs Advanced or Expert mode. Prusa says about 0.2 mm usually suits a 0.4 mm nozzle, that official profiles enable it, and that PrusaSlicer 2.2 and newer avoid over-shrinking thin first-layer lines. A gap between brim and part in the preview is expected; if the brim fails to attach on the real print, the value is too high [7].

OrcaSlicer. OrcaSlicer applies the full distance to the first layer and tapers it linearly over elefant_foot_compensation_layers: compensation = distance − (distance ÷ layers) × (current layer − 1). With 0.25 mm over 5 layers, layers 1 to 5 shrink by 0.25, 0.20, 0.15, 0.10 and 0.05 mm, and layer 6 onward is untouched [2].

If the flare is large, check the first-layer Z offset before raising the compensation, since a nozzle set too close squishes the first layer further. The elephant’s foot guide covers the other causes.

Shrinkage compensation: opposite conventions

Some materials come out smaller after cooling, and both slicers can scale the model in the filament profile to compensate. They ask for the number in opposite ways:

Slicer Field What to enter Example from the docs
OrcaSlicer Shrinkage (XY), Shrinkage (Z) Measured ÷ designed × 100 94 mm measured on 100 mm → 94%
PrusaSlicer Shrinkage compensation XY, Shrinkage compensation Z The shortfall in percent 99 mm measured on 100 mm → 1%

Sources: OrcaSlicer’s material settings page [3] and PrusaSlicer’s setting tooltips, which limit the field to −10% to +10% [6]. For a 100.00 mm test edge that measures 99.20 mm, enter 99.2% in OrcaSlicer and 0.8% in PrusaSlicer. Entering the PrusaSlicer-style number in OrcaSlicer would describe a part that came out at 0.8% of its intended size. The shrinkage calculator gives both values from one measurement.

OrcaSlicer adds that only the filament used for the outer perimeter is taken into account, and that the scaling happens after its collision checks, so leave extra space between objects [3]. Material-specific printing advice, including for ABS, is in the materials guides.

Squaring X and Y with skew correction

If a printed square has unequal diagonals, the axes are not perpendicular. Klipper’s [skew_correction] module fixes this from three measurements of a calibration print made with correction disabled: diagonals AC and BD, and side AD [9].

  1. Clear any active correction with SET_SKEW CLEAR=1 and print the calibration object with corner A toward the origin.
  2. Measure AC, BD and AD, leaving any corner flats out of AD.
  3. Apply them, for example SET_SKEW XY=140.4,142.8,99.8 from Klipper’s documentation; XZ and YZ planes take their own triples.
  4. Save with SKEW_PROFILE SAVE=<name> and SAVE_CONFIG.
  5. Reprint and confirm with CALC_MEASURED_SKEW AC=<> BD=<> AD=<>.

Klipper recommends loading the profile in start G-code after homing and purge moves, clearing it in end G-code, and keeping parts away from the bed edges because the correction can push moves beyond the axis limits [9, 10].

Marlin’s SKEW_CORRECTION takes the same three lengths as XY_DIAG_AC, XY_DIAG_BD and XY_SIDE_AD in Configuration.h [11]; with SKEW_CORRECTION_GCODE, M852 sets the factors at run time within −1 to 1 [12]. Prusa’s MK3-family XYZ calibration measures skew itself and rates over 0.25° as severe, about 1.1 mm of offset over 250 mm, and under 0.12° as needing no compensation [8].

Questions

Why do my holes print small while outer dimensions are fine?

That pattern is what OrcaSlicer's separate X-Y hole compensation is for: positive values enlarge holes without changing outer contours. PrusaSlicer's single XY Size Compensation grows or shrinks the whole object instead [2, 6].

Should I fix skew in software or square the frame?

Klipper recommends squaring the printer mechanically first if the skew is significant, and using software correction for what remains [9].

Sources

  1. Filament Tolerance Calibration. OrcaSlicer Wiki. Slicer documentation. Compensation settings list; Orca Tolerance Test hole sizes. Accessed October 12, 2026.
  2. Precision (quality settings). OrcaSlicer Wiki. Slicer documentation. X-Y hole/contour compensation, elephant foot compensation formula, precise wall, precise Z height. Accessed October 12, 2026.
  3. Material Basic Information. OrcaSlicer Wiki. Slicer documentation. Shrinkage (XY) and (Z): enter measured percentage, e.g. 94%. Accessed October 12, 2026.
  4. Material Temperatures. OrcaSlicer Wiki. Slicer documentation. Too-hot bed or first layer causes elephant foot. Accessed October 12, 2026.
  5. Flow Ratio Calibration. OrcaSlicer Wiki. Slicer documentation. Wrong flow ratio affects dimensions. Accessed October 12, 2026.
  6. ConfigDefsFDM.cpp (setting definitions and tooltips). Prusa Research, PrusaSlicer source on GitHub. Source code. xy_size_compensation; filament_shrinkage_compensation_xy/z (99 mm measured → 1%), range -10 to 10%. Accessed October 12, 2026.
  7. Elephant foot compensation. Prusa Knowledge Base. Manufacturer documentation. Location, ~0.2 mm for 0.4 nozzle, adaptive thin-line detection, brim gap. Accessed October 12, 2026.
  8. XYZ Calibration details. Prusa Knowledge Base. Manufacturer documentation. MK3 skew thresholds. Accessed October 12, 2026.
  9. Skew correction. Klipper documentation. Firmware documentation. Measurement procedure, SET_SKEW example, profiles, caveats. Accessed October 12, 2026.
  10. G-Codes. Klipper documentation. Firmware documentation. SET_SKEW, CALC_MEASURED_SKEW, SKEW_PROFILE. Accessed October 12, 2026.
  11. Configuring Marlin (Configuration.h). Marlin Firmware documentation. Firmware documentation. SKEW_CORRECTION diagonal and side measurements. Accessed October 12, 2026.
  12. M852 - Bed Skew Compensation. Marlin Firmware documentation. Firmware documentation. Runtime skew factors I, J, K in the range -1 to 1. Accessed October 12, 2026.