A part that fits perfectly in CAD but not in your hand: a hole that grabs a fastener, a flange that won’t align. Dimensional accuracy isn’t one setting. Filament shrinks as it cools. Holes print undersized regardless of wall thickness. Frames that should be square come out subtly skewed. Each needs separate attention, and each has a dedicated tool in modern slicers.
Extrusion Multiplier: The Starting Point, Not the Whole Story
The extrusion multiplier — called Flow in PrusaSlicer 2.8 and Flow Rate in OrcaSlicer 2.2 — is a scalar applied to the volumetric flow the slicer calculates for every move. The slicer knows the nozzle diameter, layer height, and line width. From those it determines how much filament must be pushed per millimetre of travel to fill the requested extrusion width. The multiplier scales that number up or down.
A value of 1.0 means “extrude exactly what geometry demands.” A value of 0.95 underextrudes by 5%, thinning each extruded line and widening the gap between adjacent lines. A value of 1.05 over-packs the line, forcing plastic outward and making walls thicker.
The multiplier is the right tool for one job: correcting a systematic offset between commanded extrusion width and actual extruded line width. That offset comes from filament diameter variation, slight hob slippage, or a motor current that’s a touch low. The standard calibration prints a single-wall cube and measures wall thickness against the expected value. If the slicer asked for a 0.45 mm wall and you measure 0.48 mm, the multiplier should drop to roughly 0.45/0.48 = 0.94.
But that calibration only corrects the width of an unconstrained external perimeter. It does nothing for internal geometry, nothing for holes, and nothing for the fact that plastic shrinks as it transitions from molten to solid. If you chase a tight hole fit by dropping the extrusion multiplier, you’ll also thin every other wall on the part. Suddenly the part feels flimsy, top layers gap, and overhangs sag because there isn’t enough material to bridge the perimeter lines.
Treat the extrusion multiplier as a per-filament baseline. Dial it in once with a single-wall cube, write it on the spool, and leave it alone. Everything else gets its own compensation.
Material Shrinkage: Why Your Part Is Smaller Than the STL
All thermoplastics contract as they cool from extrusion temperature to ambient. PLA is relatively forgiving — roughly 0.2% to 0.5% linear shrinkage. ABS is worse, typically 0.5% to 1.0%. Polypropylene and unannealed nylon can exceed 1.5%. That doesn’t sound like much until you print a 150 mm bracket and find it’s a full millimetre short of the mounting holes.
Shrinkage is not uniform. The part cools from the outside in, and each layer cools at a different rate. A thick section holds heat longer and shrinks more than a thin wall. The bottom layers, pinned to a heated bed, are constrained in X and Y but free to curl in Z. The top layers contract freely in all directions. The result is a part that’s slightly smaller than the STL, with internal stresses that can warp it further.
Slicer Shrinkage Compensation
PrusaSlicer and OrcaSlicer both offer a shrinkage compensation setting, found under Filament Settings → Advanced. It’s a percentage that scales the entire model in X, Y, and Z independently before slicing. A value of 0.5% in X and Y tells the slicer to enlarge the model by that amount, so the printed part shrinks back to nominal.
| Slicer | Setting Name | Location | Independent Axes |
|---|---|---|---|
| PrusaSlicer 2.8 | Shrinkage | Filament Settings → Advanced → Shrinkage | Yes (X/Y/Z) |
| OrcaSlicer 2.2 | Shrinkage | Filament Settings → Advanced → Shrinkage | Yes (X/Y/Z) |
The compensation is applied to the toolpath, not the mesh. The slicer recalculates extrusion widths and perimeters at the scaled size, so you aren’t just stretching underextruded lines.
How to Determine the Right Value
Print a calibration block of known dimension — 100 mm in the axis you care about is a good start. Measure the cooled part with calipers, taking care to measure flats, not corners (corners bulge slightly from acceleration artefacts). The required compensation percentage is:
(nominal − actual) / nominal × 100
If a 100 mm block measures 99.4 mm, the compensation is (100 − 99.4) / 100 × 100 = 0.6%. Enter 0.6% for that axis.
Repeat for each axis. Z shrinkage often differs from X/Y because layer adhesion and bed constraint change the cooling dynamics. Don’t be surprised if Z needs a different value.
The trade-off: shrinkage compensation scales the entire part uniformly. It cannot fix differential shrinkage between thick and thin sections. For parts with extreme thickness variation, you may need to split the model or adjust the design itself.
Hole Compensation: Fixing What Extrusion Multiplier Cannot
Holes print undersized. This is true even when your extrusion multiplier is perfect and your shrinkage compensation is dialled in. The mechanism is different.
A hole is an internal perimeter. The nozzle traces a circular path, laying down a line of plastic that has width. The inner edge of that line defines the hole diameter. In an ideal world, the slicer offsets the toolpath inward by half the extrusion width so the inner edge lands exactly on the modelled geometry. In practice, the molten plastic is being dragged around a curve. It gets pulled inward by the nozzle’s motion, like a rope rounding a post. The tighter the curve, the worse the effect. A 3 mm hole suffers far more relative error than a 30 mm hole.
Additionally, the first solid layer above a hole often sags slightly, and the perimeters around the hole cool and contract toward the centre. The result is a hole that’s anywhere from 0.2 mm to 0.5 mm undersized, depending on diameter, material, and print temperature.
The Slicer’s Approach
Both slicers implement hole compensation as a per-model setting. The idea is simple: enlarge every detected hole by a fixed diameter offset before slicing. It’s not a percentage — it’s a millimetre value added to the diameter.
In OrcaSlicer 2.2, the setting is “Hole horizontal expansion” under the Quality tab when a model is selected. A value of 0.2 mm adds 0.2 mm to the diameter of every hole (0.1 mm to the radius). The slicer detects closed internal contours and applies the offset only to them, leaving external geometry untouched.
PrusaSlicer 2.8 handles this through “XY Size Compensation” in Print Settings → Advanced, but that setting affects the entire model outline. For hole-specific compensation, use a modifier mesh or the “Hole horizontal expansion” setting available when right-clicking an object and selecting “Add settings” → “Layers and perimeters.”
Testing and Setting It
Print a plate with several holes of known diameters — 3 mm, 5 mm, 8 mm, 10 mm. Measure each with pin gauges or the shank of a known-good drill bit. Calipers work for larger holes but struggle below 5 mm because the jaws don’t seat perfectly in a circle.
If all holes are undersized by roughly 0.3 mm regardless of diameter, a hole compensation of 0.3 mm is appropriate. If the error varies significantly with diameter — say 3 mm holes are off by 0.4 mm but 10 mm holes are off by only 0.15 mm — the problem is more complex. In that case, set compensation for the small holes and accept that larger holes will be slightly oversized. An oversized hole can be sleeved or filled; an undersized hole requires drilling, which leaves a rough internal finish.
A warning: hole compensation only works on vertical holes (holes in the XY plane). Horizontal holes — those printed in the XZ or YZ plane — are bounded by overhangs and bridging, not by a continuous perimeter. The slicer cannot apply the same offset logic to them. Horizontal holes almost always print undersized and slightly teardrop-shaped. The fix is design-side: model horizontal holes with a slight teardrop shape, or size them up in CAD and ream after printing.
Skew Correction: When Your Printer’s Axes Aren’t Square
A printer can be perfectly calibrated in extrusion and shrinkage and still produce parts that are out of square. If the X and Y axes are not perpendicular — if the gantry is racked, the frame is twisted, or the linear rails aren’t trammed — every part will be a parallelogram instead of a rectangle. A bracket that should bolt to two perpendicular surfaces won’t sit flat. Holes that should align across a 100 mm span will be offset.
This is a mechanical problem first. If your printer’s skew is severe, the correct fix is to square the frame physically. But small residual skew — fractions of a degree — is common and can be corrected in firmware.
Measuring Skew
Print a known-square test piece. The classic approach is a large rectangle, 150 mm × 150 mm, printed a few layers thick. Measure both diagonals with calipers. If the diagonals are equal, the axes are square. If they differ, the angle between X and Y is not 90°.
The skew angle in radians is approximately:
skew ≈ (diagonal1 − diagonal2) / (diagonal1 + diagonal2) × 2
For small angles, multiply by 57.3 to get degrees. A 0.5 mm difference on a 212 mm diagonal (the diagonal of a 150 mm square) corresponds to about 0.14° of skew. That’s enough to cause a 0.25 mm offset across 100 mm.
Correction in Marlin and Klipper
Marlin firmware includes an M852 gcode command for skew correction, but it requires the printer to have defined the skew factor in Configuration.h. The more common approach is Klipper’s [skew_correction] module, which applies a transformation matrix to all moves.
In Klipper, you print a calibration piece (often an L-shaped bracket with known reference points), measure the actual vs. expected positions, and feed those into a script that generates the correction. The printer then transparently adjusts every X and Y move to compensate for the frame skew.
OrcaSlicer has no built-in skew compensation, nor does PrusaSlicer. Skew correction belongs in firmware, not the slicer, because it’s a property of the machine’s motion system, not the model. Applying skew in the slicer would require pre-distorting every STL, which is fragile and version-dependent.
A Practical Workflow
- Square the printer mechanically. Check frame bolts, belt tension, and gantry alignment. This fixes 90% of skew.
- Print a diagonal test square. Measure.
- If residual skew exceeds 0.1°, enable firmware skew correction and calibrate.
- Re-verify with the test square.
Do not try to fix skew with extrusion multiplier or shrinkage compensation. Those operate on scale, not on axis orthogonality. You’ll chase your tail.
Bringing It Together: A Calibration Sequence
The order matters. Each correction builds on the previous one, and doing them out of sequence embeds errors into later steps.
- Mechanical squareness: Tram the frame, tension belts, align the gantry. No software setting fixes a loose bolt.
- Extrusion multiplier: Single-wall cube, one per filament. Write it down.
- Shrinkage compensation: 100 mm calibration block, measured after full cooling. Per filament, per axis if needed.
- Hole compensation: Multi-hole test plate. Set a single diameter offset that works for your most common hole size.
- Skew correction: Firmware-side if residual skew remains after mechanical squaring.
After this sequence, a well-designed part should fit its mating components without post-processing. If it still doesn’t, the problem is likely in the model — tolerances too tight for FDM, or a design that ignores print orientation.
Dimensional accuracy isn’t one setting. It’s a stack of independent corrections, each addressing a different physical reality of how plastic melts, flows, cools, and how machines move. Treat them separately, calibrate them in order, and you’ll spend less time sanding and more time assembling.