Klipper Pressure Advance Tuning: A Practical Step-by-Step
A no-nonsense, machine-agnostic guide to tuning pressure advance in Klipper using the standard tuning tower, with realistic per-filament values from our workshop.
Pressure advance is the single biggest quality lever in Klipper, and it is also the setting we see misconfigured most often when printers land on our bench. Get it right and your corners stop bulging, your gaps stop appearing, and your text-on-prints suddenly reads cleanly. Get it wrong and no amount of slicer tweaking will save you. This is the workflow we use in our workshop on every Klipper machine that comes through, from Creality K2s to Vorons.
What pressure advance actually does
In plain English: when your toolhead accelerates, molten plastic in the nozzle lags behind. When it decelerates, plastic keeps oozing out from residual pressure. Pressure advance tells Klipper to push the extruder slightly ahead of the move and retract it slightly at the end, so flow matches what the toolhead is actually doing.
The symptoms of too little PA are bulging corners and over-extruded seams. Too much PA and you get gaps at corner starts, thin spots after direction changes, and a noticeably clackier extruder.
Direct drive vs Bowden
The extruder geometry matters more than anything else here.
- Direct drive (K2, Voron Trident, Bambu A1, most modern printers): the extruder sits on the toolhead, so the melt zone responds quickly. Expect PA values in the 0.02 to 0.08 range.
- Bowden (older Enders, some Sovols, CR-10 class): a long PTFE tube buffers every movement. Expect PA values from 0.1 up to 0.8 in extreme cases.
If you are unsure which you have, look at where the extruder motor lives. On the toolhead = direct. Bolted to the frame with a tube running to the hotend = Bowden.
The tuning tower workflow
Klipper ships with a built-in TUNING_TOWER command that ramps a parameter linearly with Z height during a print. You print a simple tall test object, the PA value changes as it climbs, then you measure where the print looks best.
Step 1: prep the config
Make sure your [extruder] section has pressure advance enabled. A zero starting value is fine, we are about to overwrite it:
``` [extruder] pressure_advance: 0.0 pressure_advance_smooth_time: 0.040 ```
pressure_advance_smooth_time defaults to 0.040 and you can leave it there. We have not found a good reason to touch it on any printer in normal use.
Step 2: slice a test tower
Use a single-perimeter hollow cube or a dedicated PA tower model, 60 to 100 mm tall, 0.2 mm layers, no top, no infill, one perimeter, no ironing. Print speed around 80 to 100 mm/s with sharp acceleration (3000 mm/s² or higher) to actually stress the extruder.
Step 3: start the print, then issue the tower command
After the print starts and the first layer is down, send the following over the console (Mainsail, Fluidd, or SSH):
```gcode SET_VELOCITY_LIMIT SQUARE_CORNER_VELOCITY=1 ACCEL=500 TUNING_TOWER COMMAND=SET_PRESSURE_ADVANCE PARAMETER=ADVANCE START=0 FACTOR=.005 ```
That is for direct drive. For Bowden, use FACTOR=.020 instead. The SET_VELOCITY_LIMIT line forces the toolhead to slow through corners so the PA effect is visible.
Step 4: read the tower
Let the print finish. Look at one face of the tower under a bright light. You want to find the height where the line is most uniform along its entire length. Below that height you will see fat corners (under-tuned). Above that height you will see fish-spine, thinning just after corners (over-tuned).
Calculate the value:
``` pressure_advance = START + (measured_height_mm × FACTOR) ```
So if the best zone on a direct-drive tower sits at 12 mm height: 0 + (12 × 0.005) = 0.060.
Realistic per-filament values
From our workshop test logs across roughly thirty Klipper printers, here is what we tend to land on. Treat these as sanity checks, not targets:
| Filament | Direct drive | Bowden | |---|---|---| | PLA | 0.020 to 0.045 | 0.30 to 0.55 | | PETG | 0.040 to 0.080 | 0.50 to 0.80 | | ABS / ASA | 0.020 to 0.040 | 0.25 to 0.45 | | TPU 95A | 0.050 to 0.120 | not recommended |
PETG consistently wants 50 to 100 percent more PA than PLA on the same machine. TPU is the most variable and benefits from a separate tune per spool.
Saving the value properly
Do not bake a single PA value into your printer.cfg. Different filaments need different values, and the K2 in particular has a quirk where PA can reset to zero between prints. The clean approach is to set PA per print, from the slicer's start gcode, keyed to the filament:
```gcode SET_PRESSURE_ADVANCE ADVANCE=0.045 ```
In OrcaSlicer or SuperSlicer, drop that line into the filament's start gcode. Each filament profile carries its own value, and Klipper applies it automatically at print start. No save-config dance, no per-printer surprises.
Why retests do not always improve
Things we see on the bench when a customer's tower keeps looking identical:
- Acceleration too low. PA only shows itself at 2000 mm/s² and above. A printer running 800 mm/s² accel will produce a smeared, unreadable tower.
- Wet filament. Damp PETG and PLA hiss and spit, which masks PA artefacts entirely. Dry it first.
- Loose extruder tension or worn gears. If the extruder cannot deliver the commanded push and retract, no software setting will save you.
- Input shaper not tuned. Ringing from untuned shaper looks deceptively like over-extruded corners. Tune input shaper before pressure advance, not after.
- Slicer overriding the value. Bambu Studio and OrcaSlicer can inject
M900orSET_PRESSURE_ADVANCElines you forgot about. Check the actual sliced gcode.
If you would rather not spend an evening on this, our workshop offers a Klipper tuning service via UK post. We dial in pressure advance, input shaper, flow, and PID on your printer and ship it back. Details on the 3D printer repair page or get in touch via contact. For broader context on whether Klipper is even the right move for your machine, see our piece on Klipper vs vendor firmware.