KlipperLab
Isometric 3D printer with a dark frame, side control box and print head hovering over a bed holding a small white printed cup on a pale pink backdrop
tuning

Klipper Pressure Advance Calibration Guide, Step by Step

Tune Klipper pressure advance with the TUNING_TOWER test: start 0, factor 0.005 direct drive or 0.020 Bowden, then measure, calculate and verify.

By KlipperLab Editorial · · 8 min read

Every klipper pressure advance calibration guide comes down to one test. Print Klipper’s hollow square_tower.stl at 100 mm/s after running TUNING_TOWER COMMAND=SET_PRESSURE_ADVANCE PARAMETER=ADVANCE START=0 FACTOR=.005 for direct drive (FACTOR=.020 for Bowden). Measure the height where the corners are sharpest and set pressure_advance = 0 + height × factor. Klipper puts typical results between 0.050 and 1.000.

That number only holds if three things are true. The extruder must already be calibrated, the slicer must not override acceleration during the test, and the final value has to go somewhere a slicer profile won’t silently replace it. When a “tuned” printer still bulges at the corners, one of those three is usually why.

What does pressure advance fix?

Pressure advance fixes the lag between extruder motion and actual flow at the nozzle. When the toolhead speeds up out of a corner, pressure hasn’t built yet and the line comes out thin. When it slows into the next corner, the pressure hasn’t bled off yet, so the corner bulges. Ooze at the end of a line comes from the same lag.

Klipper’s kinematics documentation models it as pa_position = nominal_position + pressure_advance_coefficient * nominal_velocity, and that coefficient is your pressure_advance. Klipper smooths the result over pressure_advance_smooth_time. The config reference sets that to 0.040 s by default, with a 0.200 s maximum. Because of the smoothing, the extruder starts slightly before an extrusion move and finishes slightly after it.

As Ellis’ Print Tuning Guide puts it, PA “only changes the distribution of material, not the amount of material.” It won’t fix wrong flow. Marlin’s equivalent is called linear advance, and Klipper vs Marlin covers the wider differences between the two firmwares.

What should you calibrate before pressure advance?

Calibrate the extruder’s rotation_distance and settle on a nozzle temperature first. Klipper’s pressure advance doc lists both as prerequisites. If you tune PA on top of wrong extrusion, or at a temperature you later change, you’ve tuned it against the wrong baseline. Then make sure the extruder itself has no mechanical slop.

  • Rotation distance. Follow Klipper’s rotation distance procedure. Mark the filament about 70 mm from the extruder intake, send G91 then G1 E50 F60, and measure how much actually went in. The new value is previous × actual / requested. The slow 60 mm/min feed keeps nozzle back-pressure out of the measurement.
  • Temperature. Tune at the temperature you will actually print at. Ellis lists large hotend temperature changes among the things that shift PA.
  • Extruder backlash. If one corner shows gapping and bulging at once, Ellis blames the extruder, not the PA value. Turn the drive gear by hand and check for a dead zone when you reverse direction.

The value ends up in the [extruder] section of printer.cfg. If you don’t know how Klipper splits work between host and MCU or how it layers config files, start with how Klipper works.

Method 1: Klipper’s tuning tower

Slice the hollow square tower from Klipper’s docs/prints folder with the settings from the Klipper procedure:

SettingValueReason
Modelsquare_tower.stlPerimeters only, four corners per layer
Print speedAbout 100 mm/sHigh flow makes pressure lag visible
Infill0%Nothing but walls to read
Layer heightAbout 75% of nozzle diameter (0.30 mm on a 0.4 mm nozzle)Coarse layers push more plastic
Dynamic acceleration controlOffSlicer accel commands would override the test limits
Scarf joint seamsOffKeeps seam geometry out of the corners

Before starting the print, send this from the console:

SET_VELOCITY_LIMIT SQUARE_CORNER_VELOCITY=1 ACCEL=500
TUNING_TOWER COMMAND=SET_PRESSURE_ADVANCE PARAMETER=ADVANCE START=0 FACTOR=.005

For a Bowden extruder, change the second line to FACTOR=.020. The first command drops square corner velocity from its 5 mm/s default to 1 mm/s and acceleration to 500 mm/s². In Klipper’s words, this “makes the nozzle travel slower through corners to emphasize the effects of extruder pressure.” TUNING_TOWER then raises ADVANCE with Z, so every millimeter of height corresponds to a known PA value. Neither command writes to printer.cfg. Make sure your PRINT_START macro doesn’t reset velocity limits after you’ve sent them.

How do you read the tower and calculate the value?

Find the height where the corners look best, measure it from the bed with calipers, and calculate pressure_advance = START + height × FACTOR. Below the ideal value the corners blob. Above it, Klipper describes “rounded corners and poor extrusion leading up to the corner.” The good zone is usually a band, not a single layer, so take the middle of it.

Ignore one corner. Klipper notes the slicer often changes layers at one corner, which “can result in that corner being significantly different from the remaining three corners.” Judge the other three.

  • Klipper’s own Bowden example: best corners at 12.90 mm, so 0 + 12.90 × 0.020 = 0.258.
  • A direct-drive tower with best corners at 11.20 mm: 0 + 11.20 × 0.005 = 0.056.

If the corners still bulge at the top of the tower, the right value is above the tested range, so re-run with START set to the top value. If the good band sits in the first few millimeters, re-run with a smaller FACTOR to spread it out. Klipper also warns that values over 0.200 may make the extruder skip during normal acceleration.

Method 2: the pattern test

For fine-tuning, the pattern method beats the tower. Ellis recommends it for precision and calls the older line method deprecated. OrcaSlicer ships line, pattern and tower tests in its calibration menu, each with direct-drive and Bowden variants, and its wiki says the results belong in the material profile.

Reading the pattern, per Ellis’ pattern method page:

  • Pick “the sharpest corner with the fewest artifacts (gaps, bulges, divots).”
  • When torn between two values, lean toward the higher one.
  • Once you have a range, re-run at 0.001 to 0.002 intervals on direct drive.
  • If you use slicer acceleration control, enable it in the generator at your external perimeter acceleration.

According to OrcaSlicer’s wiki, the tower “does not rely on the quality of the first layer,” while the line method’s accuracy “depends heavily” on it. A practical split is to use the tower for the first coarse number on a new extruder or hotend. Then use the pattern for fine passes and per-filament re-checks.

Fast CoreXY machines can use OrcaSlicer’s adaptive pressure advance, which emits a best-fit PA for each feature’s flow rate and acceleration. It has been tested on Klipper. Builds older than July 11, 2024 may show artifacts, and the fix is in stable 0.13.0 (20250411). The suggested matrix is 1k, 2k and 4k mm/s² at 50, 100, 150 and 200 mm/s, for 12 pattern tests in total. Stay at or below the maximum acceleration your input shaper recommends.

Where should the pressure advance value live?

If you mostly print one filament, put the value in printer.cfg. If you swap materials, put it in each filament profile’s start G-code. A runtime SET_PRESSURE_ADVANCE overrides the config value, so a slicer or macro line that sends one silently wins over printer.cfg.

Single filament, followed by a RESTART:

[extruder]
pressure_advance: 0.056

Per filament, in the slicer’s filament start G-code (the method in Ellis’ saving guide):

SET_PRESSURE_ADVANCE ADVANCE=0.056

The G-code reference also accepts EXTRUDER= for multi-extruder machines and SMOOTH_TIME= if you have a reason to leave the 0.040 s default. If a filament profile already sends a value, comment that line out while tuning so it can’t interfere with the test. Restore it with the new number afterwards.

Re-tune when the hardware or material changes. Ellis’ list covers a different filament or brand, a new nozzle size, a large temperature change, enabling or disabling input shaping, and swapping the hotend, extruder or Bowden tube. Input shaping on that list creates an ordering problem. Do a coarse PA pass first, then the ADXL345 input shaper setup, then a final PA pattern at your real accelerations.

How do you verify the result?

Print a real part at your normal speed and acceleration, not at the test’s 500 mm/s². A good result has crisp corners with no bulge, no divot just before a corner, no gap between perimeters on straight walls, and no extruder clicking. If any of those show up, look the symptom up in the table below, which follows Ellis’ too-high and too-low lists.

SymptomLikely causeFix
Bulging corners and line ends, gaps between straight perimetersPA too lowRaise in small steps, re-check with a pattern
Divots or under-extrusion at corners and line ends, gaps at cornersPA too highLower in small steps
Gaps and bulges on the same cornerExtruder backlashFix the dead zone before retuning
Extruder clicks or skips on accelerationPA above roughly 0.200Lower acceleration or PA, check the extruder
New value has no visible effectSlicer or macro sending its own SET_PRESSURE_ADVANCESearch the sliced G-code for the command
Fine strings at line endsFilament cohesion, not pressureSmall retract (Klipper suggests 0.75 mm), wipe on retract, z-lift off

FAQ

what is a good pressure advance value for direct drive klipper

No single value suits every direct-drive printer, because PA depends on the extruder, the nozzle and the filament. Klipper lists typical tuned values between 0.050 and 1.000, with Bowden setups toward the higher end. Direct-drive machines therefore tend to land low in that range. Tune with FACTOR=.005 rather than copying another printer’s number.

do i need to redo pressure advance for every filament

Yes for a new brand or material type. A new color of the same filament line may not need it. Klipper says manufacturer and pigment can change the value, while Ellis finds color differences usually small. Store each result as SET_PRESSURE_ADVANCE in that filament’s start G-code so changing profiles changes the value.

does pressure advance replace retraction

No. Pressure advance manages nozzle pressure during acceleration and deceleration, but filament cohesion still pulls strings at the end of lines. Klipper suggests keeping a small slicer retraction, for example 0.75 mm, with “wipe on retract” enabled and “z-lift on retract” disabled once pressure advance is tuned. Re-check stringing after any pressure advance change.

why does my extruder click after setting pressure advance

Your pressure advance value is probably too high for your current acceleration. Klipper warns that values above 0.200 can make the extruder skip during normal acceleration. Bowden setups can need that much, since Klipper’s Bowden example works out to 0.258. In that case, lower acceleration rather than cutting PA below the value that gives sharp corners.

Sources

  1. Klipper: Pressure Advance
  2. Klipper: Kinematics (pressure advance model)
  3. Klipper: Configuration Reference
  4. Klipper: G-Codes
  5. Klipper: Rotation Distance
  6. Klipper test prints (square_tower.stl), GitHub
  7. OrcaSlicer Wiki: Pressure Advance calibration
  8. OrcaSlicer Wiki: Adaptive Pressure Advance
  9. Ellis' Print Tuning Guide: Pressure / Linear Advance
  10. Ellis' Print Tuning Guide: Pattern Method
  11. Ellis' Print Tuning Guide: Saving Your Value
#klipper #pressure-advance#calibration#extruder-tuning#orcaslicer

Related