3D Print Shrinkage & Scale Compensation

To cancel shrinkage, scale the model by designed ÷ measured × 100%: a 100 mm part that prints at 99.4 mm needs 100.60%. Measure a test print in X, Y and Z and this tool gives the value for each slicer, checks whether the error is shrinkage or a fixed offset, and shows the steps-per-mm fix if the error is the machine.

Published October 30, 2026

1. Material

2. Test part: designed and measured

Any unit, the same for both. Measure a long part (50 to 150 mm); leave an axis empty to skip it.
X
Y
Z

3. Two sizes on one axis (optional)

Print a short and a long feature on the same axis, outer sizes only. This tells shrinkage (grows with size) from a fixed offset (the same at any size).

4. Firmware values (optional)

Only if the error is the machine (see below). Enter what you have now; empty boxes are left alone.
Marlin: send M503 and read the M92 line. Klipper: rotation_distance in each [stepper_…] section of printer.cfg.

Scale to Enter in the Slicer

AxisErrorScale %PrusaSlicerOrcaSlicer
  • Scale %: object scale in any slicer (scale lock off for per-axis), and Cura's material setting Scaling Factor Shrinkage Compensation (XY and Z in recent versions).
  • PrusaSlicer: Filament Settings → Advanced → Shrinkage compensation XY and Z, entered as the shrinkage (99 mm measured on 100 mm = 1%).
  • OrcaSlicer: Filament → Shrinkage, entered as measured ÷ designed (99 mm on 100 mm = 99%). Check the tooltip in your version. If your slicer has no filament shrinkage setting, use the object scale %.

Machine Fix: Steps or rotation_distance

Change these only if the error is the machine: the same percentage with every material, including PLA, and confirmed by measuring a commanded move. Correcting shrinkage here makes every other filament print the wrong size.

Typical Shrinkage by Material

Typical linear shrinkage in the X-Y plane of FDM parts, from filament makers' data and common practice. Brands, colours, part shape, enclosure temperature and print direction all change it, so measure your own. "Scale %" cancels the typical value: 100 ÷ (1 − shrinkage).

MaterialTypical rangeTypicalScale %Notes

How Shrinkage and Scale Compensation Works

Plastic shrinks as it cools, so a printed part comes out a fraction of a percent smaller than the model, more in ABS and nylon than in PLA. Scaling the model up by designed ÷ measured cancels it.

Shrinkage grows with size: 0.6% is 0.06 mm on a 10 mm feature but 1.2 mm on a 200 mm part. That is why it matters most on long parts and on parts that must line up with holes far apart.

The Formulas

1. Scale for each axis
scale % = designed ÷ measured × 100
shrinkage % = (designed − measured) ÷ designed × 100
scale % from a known shrinkage = 100 ÷ (1 − s/100)
Scaling by 100.6% does not exactly undo 0.6% shrinkage; 100 ÷ 0.994 = 100.604% does. The difference is tiny but it is the correct one.
2. Shrinkage or offset?
measured = a × designed + b (two sizes)
a = (M₂ − M₁) ÷ (D₂ − D₁), b = M₁ − a·D₁
If the error grows with size (a ≠ 1, b ≈ 0), it is proportional: shrinkage or steps. If it is the same at both sizes (a ≈ 1, b ≠ 0), it is a fixed offset from over-extrusion, line width or elephant's foot: fix flow or use XY size compensation (−b/2 per side), not scale.
3. Steps per mm (Marlin)
new steps = old steps × designed ÷ measured
M92 X80.48 Y80.44 then M500
M92 sets steps per mm, M500 saves to EEPROM (needs EEPROM enabled in the firmware).
4. rotation_distance (Klipper)
new rotation_distance = old × measured ÷ designed
[stepper_x] rotation_distance: 39.760
rotation_distance is the distance per motor turn, so it moves the opposite way to steps per mm. Edit printer.cfg and send RESTART. On a CoreXY or Hybrid machine, stepper_x and stepper_y drive both axes together; use one shared value, never different X and Y corrections.

Material Shrinkage or Machine Error?

Both make a part the wrong size by a percentage, so a single measurement cannot tell them apart. These checks can:

  • Change the material. Print the same part in PLA, which barely shrinks. If PLA is also 0.6% small, it is the machine. If only ABS or nylon is small, it is shrinkage.
  • Measure a move, not a print. Clamp a dial indicator or mark the bed, command a 100 mm move, and measure it. If the move is right, leave steps alone.
  • Compare X and Y. Material shrinks about the same in X and Y. A big difference between them points to a belt, pulley or steps on one axis.
  • Use standard hardware values first. A GT2 belt on a 20-tooth pulley moves 40 mm per turn: 80 steps/mm at 1/16 microstepping, rotation_distance 40. A value far from the calculated one is a setting error, not something to tune with a print.
  • Two sizes. A fixed offset (the same at 20 mm and 100 mm) is extrusion, not shrinkage and not steps.

For extruder steps (e-steps), see Printer Steps per mm.

Worked Example

An ABS test bar, 100 × 100 × 50 mm designed
  • Measured X 99.40 mm, Y 99.45 mm, Z 49.90 mm (the tool's example).
  • X: 100 ÷ 99.40 × 100 = 100.604%, shrinkage 0.60%. Y: 100.553% (0.55%). Z: 50 ÷ 49.90 = 100.200% (0.20%).
  • PrusaSlicer filament shrinkage: XY 0.6% (or 0.58%, the X-Y average), Z 0.2%. OrcaSlicer filament shrinkage: 99.4%. Cura scaling factor: 100.6% XY, 100.2% Z.
  • A 20 mm feature on the same axis measured 19.88 mm. Fit: a = (99.40 − 19.88) ÷ 80 = 0.9940, b = 19.88 − 0.994 × 20 = 0.000 mm. The error is proportional with no offset, so it is shrinkage (or steps), not flow.
  • X and Y differ by only 0.05%, typical of material shrinkage. A PLA print of the same bar at 99.95 mm would confirm it is the ABS, so scale in the slicer's ABS profile and leave M92 alone.

Tips for Accurate Calibration

  • Measure big. Calipers read to about ±0.02 mm. On a 20 mm cube that is 0.1%, as large as the PLA shrinkage you are trying to find. Use a 100 to 150 mm bar or an L-shaped part.
  • Measure clean edges away from the first layers (elephant's foot), the seam and corners that bulge.
  • Let it cool to room temperature, and print with the enclosure and settings you will use for real parts.
  • Holes are different. Hole undersize is mostly a fixed offset; use the Hole & Fit Compensation tool after scaling. For inserts, see Heat-Set Insert Hole Size.
  • Infill and walls change shrinkage a little: thick solid parts pull in more. The Strength vs Infill Estimator helps choose settings. For metals, compare with the Metal Properties Finder and the Thermal Expansion calculator.

Frequently Asked Questions

Divide the designed size by the measured size and multiply by 100. A 100 mm part that measures 99.4 mm needs a scale of 100 ÷ 99.4 × 100 = 100.60%. Work out X, Y and Z separately, because Z often shrinks less.

Typical linear shrinkage in FDM is about 0.2 to 0.5% for PLA, 0.2 to 0.6% for PETG, 0.5 to 0.9% for ABS, 1 to 2% for nylon PA6 and 1.5 to 2.5% for polypropylene. Carbon or glass fibre fillers cut it roughly in half. Your brand and settings will differ, so measure a test part.

Use slicer scaling for shrinkage, because it depends on the material and should live in the filament profile. Change steps per mm or rotation_distance only for a machine error, which is the same with every material and shows up when you measure a commanded move. Correcting shrinkage in firmware makes every other material print the wrong size.

A fixed error, such as 0.15 mm too big on both a 20 mm and a 100 mm part, is not shrinkage. It usually comes from over-extrusion, a line width wider than the slicer thinks, or elephant's foot. Calibrate the flow first, then use the slicer's XY size compensation of about half the error per side.

Yes. Resin shrinks as it cures and again in post-curing, typically around 0.5 to 2% linear depending on the resin. Resin slicers have their own X, Y and Z scale settings; use the same designed ÷ measured formula on a cured, washed test part.

Shrinkage figures are typical values, not measurements of your filament. Check firmware changes with a measured move before saving them.