To tune pressure advance in Klipper, print Klipper’s square_tower.stl with TUNING_TOWER COMMAND=SET_PRESSURE_ADVANCE PARAMETER=ADVANCE START=0 FACTOR=.005 (direct drive) or FACTOR=.020 (long Bowden) raising PA as the tower grows. Measure the height of the best corners, calculate START + height × FACTOR, and save the result as pressure_advance in [extruder], following Klipper’s procedure.
Pressure advance, or PA, compensates for the delay between extruder movement and nozzle flow as the toolhead accelerates and slows. Ellis explains the pressure lag.
Where pressure advance fits in a Klipper tuning sequence
Tune PA once the printer prints reliably and the hotend, extruder and input shaping are settled. Klipper’s configuration checks end with PID_CALIBRATE, then point to bed leveling and, once basic printing works, pressure advance. An order that avoids repeat work on a Voron:
- Finish the config checks, run
PID_CALIBRATEfor the hotend, and level the bed. - Calibrate extruder
rotation_distanceand settle the nozzle temperature. Klipper lists both as PA prerequisites because both change the result. - Measure resonances and configure input shaping with an ADXL345. Klipper’s ringing tests run with
SET_PRESSURE_ADVANCE ADVANCE=0, and its guide warns that PA may need re-tuning afterwards, so shaping first saves a second PA run. - Restart Klipper, which the same guide asks for before PA tuning, then run the tower or pattern test.
- Tune flow ratio last. Ellis’s Print Tuning Guide orders extruder calibration, first-layer squish, pressure advance, then extrusion multiplier.
Identify the defect before changing PA
Look at the transition between a straight wall and its corner:
| Appearance | Likely PA problem | Adjustment |
|---|---|---|
| Corners bulge; straight walls look relatively consistent | Too little compensation during deceleration | Increase PA |
| Corners have divots or gaps between perimeters | Too much compensation | Decrease PA |
| Continuous extrusion through the corner without a pronounced bulge | Suitable candidate | Verify at normal print settings |
These are the documented low/high PA symptoms. Judge several corners rather than a seam alone.
Flow ratio scales the amount of material extruded; PA compensates for pressure changes. Keep flow ratio fixed during the sweep so the comparison remains useful. OrcaSlicer documents both controls.
Tower, pattern or line: which PA test to use
Use a tower when you want a test that needs only Klipper and any slicer; use a pattern when you want a finer value at your real print settings. Ellis keeps the tower method “for beginners” and calls the pattern method “quicker and more precise” (tower method page). Line tests are quick but depend heavily on first-layer quality.
| Method | PA change | What you read | Main trade-off |
|---|---|---|---|
| Klipper square tower | 0.005 per mm direct drive, 0.020 per mm Bowden | Caliper height of the best corners | Runs at 500 mm/s² and 1 mm/s corner velocity, which exaggerates corners |
| Ellis tower variant | 0.0025 per mm direct drive, 0.025 per mm Bowden | Same height formula | Normal accelerations, one perimeter, 120 mm/s external perimeters |
| Pattern (Ellis generator or OrcaSlicer) | Stepped per printed corner | The sharpest corner with the fewest gaps or bulges | Retest a narrowed range at 0.001 to 0.002 steps |
| OrcaSlicer tower | 0.002 per mm in Orca’s example | Start + step × height | Independent of the first layer, slower to print |
| OrcaSlicer line | Stepped per line | The most even line | Accuracy depends heavily on the first layer; Ellis lists lines as deprecated |
Sources: Klipper’s tower, Ellis’s tower, Ellis’s pattern and OrcaSlicer’s methods.
To read a pattern, Ellis suggests imagining a machinist’s square over each corner and picking the sharpest one; the page states compatibility with Klipper, Marlin and RepRapFirmware. OrcaSlicer’s built-in pattern is adapted from Ellis’s generator and can batch several tests on one plate. The rest of this guide uses Klipper’s own tower because its calculation is transparent; the save and verify steps are the same whichever test you pick.
Prepare a consistent PLA tower
After calibrating rotation_distance and nozzle temperature, download square_tower.stl from Klipper.
Example setup: a Voron with a Stealthburner toolhead and its Clockwork2 direct-drive extruder, a 0.4 mm nozzle, and PLA on a 250 mm plate. Voron’s hardware documentation covers which extruder belongs on which toolhead. These are documentation-based starting settings:
| Setting | Tower value |
|---|---|
| Nozzle temperature | 215°C first layer; 210°C afterward |
| Bed temperature | 60°C |
| Layer height | 0.30 mm, calculated as 75% of nozzle diameter |
| Perimeters | 2–3 walls |
| Infill | 0% |
| Wall speed request | 100 mm/s |
| Retraction and line width | Keep the established profile values |
Sources: Prusa’s PLA temperatures and Klipper’s tower settings. Retain your calibrated filament temperature if different.
Use 0 top layers to leave the tower open. Check the sliced speed preview for cooling slowdowns. Ellis explicitly removes minimum-layer-time slowdown in its tower procedure. If straight walls already under-extrude, establish reliable extrusion at a lower speed before judging corners.
Run the Klipper tuning commands
Disable slicer dynamic acceleration control and scarf seams. Klipper’s test uses 500 mm/s² acceleration and 1 mm/s square-corner velocity to accentuate pressure effects. Official test setup.
For this calibration file, place the following after the normal start sequence and before the tower begins. That prevents startup macros from cancelling the sweep, a problem described in Ellis’s tower instructions.
SET_VELOCITY_LIMIT SQUARE_CORNER_VELOCITY=1 ACCEL=500
Choose one sweep command. For a direct-drive toolhead such as the Clockwork2 above:
TUNING_TOWER COMMAND=SET_PRESSURE_ADVANCE PARAMETER=ADVANCE START=0 FACTOR=.005
For a long Bowden path:
TUNING_TOWER COMMAND=SET_PRESSURE_ADVANCE PARAMETER=ADVANCE START=0 FACTOR=.020
Use Klipper’s factors only in the calibration file.
Temporarily disable slicer PA overrides and adaptive PA for this manual sweep. Adaptive PA can replace the fixed value, as the OrcaSlicer material documentation explains. Watch the console for changing PA values; identical results throughout the tower warrant checking the generated G-code and startup macros.
Read the tower and calculate pressure advance
Ignore the seam corner. Look for continuous walls entering and leaving the remaining corners, without gaps. If the choice is ambiguous, favor the lower value. A small trailing bulge can remain; Ellis’s reference examples help distinguish that from excessive compensation.
Measure the chosen height from the tower’s bottom with calipers. For the commands above, use:
pressure_advance = START + measured_height_mm × FACTOR
FACTOR changes PA per millimetre of height, not per layer. Do not multiply by layer count. Other TUNING_TOWER modes use different formulas, listed in the next section.
Klipper’s worked Bowden example is 0 + 12.90 × 0.020 = 0.258. That is an illustrative calculation, not a recommended value for your spool.
How TUNING_TOWER calculates each value
TUNING_TOWER runs one command with one parameter tied to Z height, so the same tool drives PA towers, temperature towers and the acceleration tower in the input shaping guide. Its full syntax is TUNING_TOWER COMMAND=<command> PARAMETER=<name> START=<value> [SKIP=<value>] [FACTOR=<value> [BAND=<value>]] | [STEP_DELTA=<value> STEP_HEIGHT=<value>] (Klipper G-code reference).
| Option | Value at height z | How to read it |
|---|---|---|
FACTOR | START + FACTOR × z | Measure the best height with calipers |
FACTOR with BAND | START + FACTOR × ((floor(z / BAND) + 0.5) × BAND) | Pick a band; the value steps every BAND mm |
STEP_DELTA with STEP_HEIGHT | START + STEP_DELTA × floor(z / STEP_HEIGHT) | Count bands or read labels |
SKIP with any of the above | Holds START below SKIP mm, then uses max(z − SKIP, 0) as z | Subtract the skipped height first |
With SKIP=2 added to the direct-drive command, a best corner at 14 mm works out to 0 + (14 − 2) × 0.005 = 0.060. Like Klipper’s own example, that is arithmetic, not a target value.
Using OrcaSlicer instead
OrcaSlicer’s pressure-advance calibration offers tower, pattern, and line methods. Select the correct extruder type. A line test depends strongly on first-layer quality; the tower evaluates corners above the bed. Save the chosen result in the material profile. OrcaSlicer calibration instructions.
Use the start and increment belonging to that generated test. OrcaSlicer’s example uses 0 + 0.002 × 8 = 0.016, so substituting Klipper’s manual-tower factor would produce the wrong answer. Run the generated calibration without also adding a manual TUNING_TOWER sweep. OrcaSlicer’s tower calculation.
Save the result and remove overrides
Edit the existing [extruder] section in printer.cfg. Using the illustrative result above:
[extruder]
# Keep the existing extruder configuration here.
pressure_advance: 0.258
Replace the example with your calculated result. Leave pressure_advance_smooth_time at its default 0.040 seconds during ordinary PA calibration; it controls averaging of extruder velocity. Klipper configuration reference. The next section covers when a smooth-time test is worth running.
After the print has finished or been cancelled, issue RESTART to clear the sweep and restore configured motion limits. Klipper’s completion procedure.
For per-filament control, a profile can issue SET_PRESSURE_ADVANCE ADVANCE=0.258, again replacing the example. This changes the running setting; check exported G-code and macros for later competing commands. Klipper command reference. Choose an intentional configuration default and material override rather than maintaining conflicting copies.
What does pressure_advance_smooth_time do?
pressure_advance_smooth_time is the time window, in seconds, over which Klipper averages extruder velocity for pressure advance. The default is 0.040 (40 ms), the value may not exceed 200 ms, and it only applies when pressure_advance is non-zero. Larger values give smoother extruder movement (configuration reference).
Klipper smooths because the basic PA formula would make the extruder motor change velocity abruptly. Klipper’s kinematics document describes the smoothing as a weighted average of extruder position over that window. The average can span several G-code moves, so the extruder starts moving slightly before an extrusion move begins and keeps moving after it ends.
The trade-off is spelled out in a draft advanced tuning guide that Kevin O’Connor opened as Klipper pull request #3158 in August 2020 and closed unmerged in January 2022. The draft says the setting rarely requires tuning, that too small a value can cause excessive extruder noise and skipped steps, and that larger values can cause subtle blemishes leading up to corners. Its suggested test reuses the square tower with a falling sweep:
TUNING_TOWER COMMAND=SET_PRESSURE_ADVANCE PARAMETER=SMOOTH_TIME START=0.101 FACTOR=-.002
Smooth time drops 0.002 s per millimetre, so the 0.040 default prints at 30.5 mm and the value reaches 0.001 at 50 mm. Keep your tuned pressure_advance active, because smooth time does nothing at PA 0. Read the result as 0.101 − 0.002 × height, then save it as pressure_advance_smooth_time in [extruder] or apply it with SET_PRESSURE_ADVANCE SMOOTH_TIME= (G-code reference).
Print this test at your normal acceleration, not the 500 mm/s² PA setup. A Klipper discussion quoted in OrcaSlicer’s adaptive PA pull request notes that an acceptable smooth time depends on acceleration. Change smooth time only after PA itself is tuned, then repeat the verification print below with both values in place.
Adaptive pressure advance on Klipper
Adaptive pressure advance is an OrcaSlicer feature, not a Klipper setting: Klipper applies whatever pressure_advance the config or the latest SET_PRESSURE_ADVANCE command sets. With adaptive PA enabled, OrcaSlicer models PA against volumetric flow and acceleration and emits a fitted value before each feature (pull request #5609).
It exists because the effective PA value typically decreases as speed, flow and acceleration rise, so one fixed value is a compromise between bulging slow features and gapping fast ones (OrcaSlicer’s PA settings). OrcaSlicer fits the measurements with a PCHIP curve, which passes through each measured point without overshooting between them (PR #5609).
Setup, per OrcaSlicer’s adaptive PA guide:
- Run current Klipper. Builds older than July 11, 2024 might produce artifacts when dynamic PA is used; the fix is in stable 0.13.0, which Klipper’s release list dates 2025-04-11. The Klipper install guide covers updating components from Mainsail.
- Keep test accelerations at or below what Klipper’s input shaper calibration recommends.
- Print Ellis’s PA pattern, which the guide calls “the most efficient and effective test” for this, across 1000, 2000 and 4000 mm/s² and 50, 100, 150 and 200 mm/s: twelve tests at a PA step of 0.001. Set jerk to your external-perimeter jerk.
- Record the best PA, volumetric flow and acceleration for each test. OrcaSlicer 2.2.0 and later print flow and acceleration on the sample; 2.3.0 and later can batch-generate the patterns.
- Enter one triplet per line in the measurements field, such as
0.036, 3.84, 1000(PA, flow, acceleration), with at least three flows and three accelerations. - Keep a median value in the normal Pressure advance field as the fallback for tool changes, purge or wipe towers and cases the model cannot resolve. Start bridge PA at about half your usual value (0 disables it) and leave the experimental overhang option off until the main model is calibrated.
Skip adaptive PA if you print one layer height at one speed and one acceleration. OrcaSlicer says the gain is largest with high-flow nozzles on fast CoreXY printers that run a wide range of flows and accelerations. It overrides the fixed value, which is why the manual tower above runs with it off.
How to verify the saved value
Reprint the hollow square with fixed PA and your normal acceleration, corner velocity, layer height, and wall speeds. Ellis favors calibration close to normal conditions because deliberately exaggerated cornering can encourage excessive PA. Ellis’s method rationale.
Acceptance criteria: smaller corner bulges, continuous extrusion before and after corners, and no new perimeter gaps. Compare against a saved PA-disabled print using the same spool and geometry. These criteria follow the documented defect patterns.
If the extruder starts skipping after restoring normal acceleration, lower acceleration or disable PA, as Klipper advises.
Record manufacturer, material, color, spool batch if available, nozzle, temperature, profile, and PA together. Recheck after changing filament, nozzle, hotend, extruder, or input-shaping state; these can change the required compensation. Ellis’s recalibration factors.
FAQ
what is a good pressure advance value for klipper?
Klipper’s documentation puts typical pressure advance values between 0.050 and 1.000, with the high end usually reserved for Bowden extruders. The right number depends on extruder, nozzle and filament, so calibrate it. Values above roughly 0.200 can make the extruder skip at normal acceleration, and no improvement by 1.000 means PA is unlikely to help.
is pressure advance the same as linear advance?
Yes, in principle. Ellis treats Klipper’s pressure advance and Marlin’s linear advance as the same compensation, the only difference being that Marlin’s version has no smooth time setting. On Marlin, Linear Advance must be enabled in firmware and is set with M900, while Klipper uses pressure_advance or SET_PRESSURE_ADVANCE.
why does my klipper tuning tower print the same pressure advance on every layer?
Usually something resets PA after TUNING_TOWER starts. A start macro issued after the command can cancel the sweep, and slicer PA fields or adaptive PA can emit their own PA commands during the print. Place the command after the start sequence, disable slicer PA for the test file, and watch the console for changing values.
does pressure advance slow down prints or use more filament?
No. Klipper’s documentation states that pressure advance does not change the timing or path of the toolhead and does not change the total amount of filament extruded. It only redistributes extruder movement, pushing extra filament during acceleration and retracting an equal amount during deceleration, so print time and filament use stay the same.