What is pressure advance in 3D printing?

By Asked 3D Content TeamPublished Last verified

What is pressure advance in 3D printing?

Pressure advance is a firmware setting that pushes extra filament into the hotend as the print head speeds up and pulls it back as the head slows, in proportion to extruder speed, so nozzle pressure keeps pace. It prevents thin line starts and corner blobs. Klipper ships it at 0 (off) and calls 0.050 to 1.000 typical.

The number

Firmware or slicer Name and where it is set Off value Values it accepts Typical values its makers give
Klipper pressure_advance in [extruder], or SET_PRESSURE_ADVANCE ADVANCE= 0, the default 0 or higher, no upper limit 0.050 to 1.000; the high end usually only with Bowden extruders
Marlin Linear Advance, M900 K, only if LIN_ADVANCE is compiled in (it is off in Marlin’s stock configuration) K0 0 to 10 About 0.1 to 2.0; Bowden needs more than direct drive
Prusa firmware 5.0.0 and later (MK4/S, MK3.9/S, XL, MINI/+) Pressure Advance, M572 S, sent by the filament start G-code in PrusaSlicer’s profiles S0 0 to 10 Set per filament and nozzle diameter by PrusaSlicer’s profiles; Prusa recommends keeping that default
Bambu Lab Flow Dynamics, the K value (“Factor K”) in Bambu Studio’s Calibration tab None: Bambu Studio’s K fields reject 0 Above 0 and below 2 Bambu’s own example: 0.015 (auto calibration, Bambu PLA Basic, 0.4 mm nozzle)

Klipper’s figures come from its pressure advance guide, configuration reference and v0.13.0 source; Marlin’s from its Linear Advance docs and 2.1.2.9 source; Prusa’s from its knowledge base, Buddy firmware v6.9.2 and PrusaSlicer 2.9.6’s profiles; Bambu’s from the Bambu Lab Wiki and Bambu Studio v02.08.02.61.

Why does extrusion lag behind the print head?

Because the plastic in the hotend has to be pressurized before it flows. Klipper models this in two parts: pressure in the hotend rises as filament is pushed in, like a compressed spring, and the flow out of the nozzle orifice is set by that pressure. Building pressure takes extra filament, and releasing it takes time.

Without pressure advance, the extruder feeds exactly what the slicer asks for, and the flow at the nozzle lags. Marlin’s documentation describes a fast line: at the start the filament is still compressing, so the line comes out thin; when the extruder stops, the compressed melt keeps flowing and leaves a blob. Corners are where lines stop and start, so the error shows there as bulging corners, or as gaps between perimeters in extreme cases. Bambu Lab notes the effect gets worse at higher print speeds.

A hotend cut away to show molten plastic under pressure above the nozzle, with the printed line thickening into a bulge where the head slows to a stopThe melt in the hot zone is pressurized by the filament behind it, so flow lags the extruder and the line thickens where the head slows, which is what pressure advance corrects.2Melt under pressure in the hot zone3Nozzle1Filament pushed in by the extruder4Line thickens where the head slows5Even line at steady speed
  1. Filament pushed in by the extruder
  2. Melt under pressure in the hot zone
  3. Nozzle
  4. Line thickens where the head slows
  5. Even line at steady speed
The melt in the hot zone is pressurized by the filament behind it, so flow lags the extruder and the line thickens where the head slows, which is what pressure advance corrects.

How does pressure advance work?

It moves the extruder ahead of the slicer’s plan by an amount proportional to extruder speed. Klipper’s formula:

pa_position = nominal_position + pressure_advance * nominal_velocity
  • Speeding up: velocity rises, so the extruder pushes in extra filament and builds pressure early. The higher the flow, the more it adds.
  • Slowing down: velocity falls and the extra filament is retracted. Klipper’s kinematics notes show the extruder running backward here.
  • Steady speed: the offset stays constant, so the extruder feeds at the planned rate.

Only the extruder moves differently. The toolhead’s path and timing do not change. Klipper averages the extruder velocity over a short window, 0.040 s by default, so the motor does not jerk at each speed change. That window is pressure advance smooth time.

What does the pressure advance value mean?

It is how far ahead the extruder runs, in millimeters of filament, for each 1 mm/s of extruder speed. At 0.050, the filament leads by 0.05 mm for every 1 mm/s, and a higher value means more compensation. Klipper and Marlin both define the value in these units, and Prusa converts an old M900 K value 1:1. Bambu publishes no unit for its K.

The right value belongs to one extruder, nozzle and filament together, and a Bowden extruder (a long tube between drive gear and hotend) needs more than a direct drive (starting values for PLA).

Marlin calls the same setting Linear Advance, Bambu Lab calls it the Flow Dynamics K value (where it is in Bambu Studio), and OrcaSlicer labels it “Pressure advance (Klipper) AKA Linear advance factor (Marlin)”.

Can pressure advance be negative?

No. Klipper, Marlin and Prusa firmware treat 0 as off and refuse anything below it. Bambu Studio goes further and refuses 0:

  • Klipper: the minimum is 0 in printer.cfg and in SET_PRESSURE_ADVANCE. A negative config value stops Klipper with Option 'pressure_advance' in section 'extruder' must have minimum of 0.0.
  • Marlin: M900 K outside 0 to 10 is ignored with ?K value out of range (0-10).
  • Prusa: M572 S outside 0 to 10 is ignored with ?Pressure advance (S) value out of range (0-10).
  • Bambu Studio: a K of 0 or less, or 2 or more, is refused with Please input a valid value (K in 0.0~2.0).

What does go negative is the extruder’s motion: while the head slows, pressure advance can run the extruder backward to take the extra filament out. If your test print looks best at 0, leave it off. Klipper’s guide adds that if no value up to 1.000 brings a clear improvement, pressure advance is unlikely to help and should stay disabled.

How to check it on your own print

  1. Read the current value. Send SET_PRESSURE_ADVANCE with no parameters on Klipper, M900 on Marlin (no Advance K= reply means your build has no Linear Advance) or M572 on Prusa. On Bambu, open Calibration, Flow Dynamics, Manage Result in Bambu Studio.
  2. Calibrate extruder rotation distance (E-steps) and nozzle temperature first. Klipper’s guide says both change the result.
  3. Print a calibration test with the spool and nozzle you will use: Klipper’s tuning tower, or Flow Dynamics calibration on a Bambu printer. How to read a pressure advance test has the commands, test settings and math.
  4. Read the corners. Blobs and bulges mean too little (why corners bulge). Rounded corners or poor extrusion leading into them mean too much (signs it is too high). Klipper says to take the lower value when in doubt.
  5. Save it. On Klipper, set pressure_advance: in [extruder] and send RESTART.
  6. Redo it when something changes. Klipper says to recalibrate for each spool; Bambu Lab adds a new or worn nozzle and any change to print temperature or maximum volumetric speed.
  7. If the extruder skips after tuning, Klipper warns that above about 0.200 the extruder may lack the torque for the extra filament at normal acceleration: lower the acceleration or turn pressure advance off.

Sources

  1. Pressure advance, Klipper documentation (accessed October 24, 2026)
  2. Kinematics (Pressure advance section), Klipper documentation (accessed October 24, 2026)
  3. Configuration reference ([extruder] section), Klipper documentation (accessed October 24, 2026)
  4. klippy/kinematics/extruder.py at v0.13.0, Klipper on GitHub (accessed October 24, 2026)
  5. klippy/configfile.py at v0.13.0, Klipper on GitHub (accessed October 24, 2026)
  6. Linear Advance, Marlin Firmware documentation (accessed October 24, 2026)
  7. M900: Linear Advance Factor, Marlin Firmware documentation (accessed October 24, 2026)
  8. Marlin/src/gcode/feature/advance/M900.cpp at 2.1.2.9, Marlin on GitHub (accessed October 24, 2026)
  9. Marlin/Configuration_adv.h at 2.1.2.9, Marlin on GitHub (accessed October 24, 2026)
  10. Pressure Advance, Prusa Knowledge Base (accessed October 24, 2026)
  11. lib/Marlin/Marlin/src/gcode/feature/pressure_advance/M572.cpp at v6.9.2, Prusa-Firmware-Buddy on GitHub (accessed October 24, 2026)
  12. resources/profiles/PrusaResearch.ini at version_2.9.6, PrusaSlicer on GitHub (accessed October 24, 2026)
  13. Flow Dynamics Calibration, Bambu Lab Wiki (accessed October 24, 2026)
  14. src/slic3r/Utils/CalibUtils.cpp at v02.08.02.61, Bambu Studio on GitHub (accessed October 24, 2026)
  15. src/libslic3r/PrintConfig.cpp at v2.4.2, OrcaSlicer on GitHub (accessed October 24, 2026)