Some print defects survive a perfect flow-rate calibration. Corners come out bulged and glossy while the straight runs look right. The first few millimetres after every corner look starved and gappy. Seams show a blob on one side and a void on the other. Solid top surfaces have a faint ripple that tracks the infill direction underneath.
None of those are flow errors, because flow rate sets how much plastic comes out on average, and all of them are timing errors — the nozzle delivering the right total volume at the wrong moments. Pressure advance is the correction for that, and it is the single calibration most likely to be missing from a printer that has otherwise been tuned carefully.
The Physics in One Paragraph
The melt zone is not rigid. Molten plastic compresses slightly, the filament itself compresses along its length, and on a Bowden setup the PTFE tube stretches. When the extruder pushes harder, pressure builds in that compliance before the extra plastic appears at the nozzle; when the extruder slows, the stored pressure keeps pushing after it should have stopped. The result is a lag between commanded flow and delivered flow, and the lag grows with print speed.
The Klipper pressure advance documentation models this as a linear relationship: the extra filament that needs to be held in the melt zone is proportional to the current extrusion rate. Feed that model a coefficient and the firmware can push extra filament in advance of an acceleration and retract slightly before a deceleration, cancelling the lag.
Klipper and Marlin both compensate for changing extrusion pressure, but their implementations and coefficient scales must be treated separately.
Pressure Advance Commands by Firmware
| Firmware | Feature | Apply a calibrated value | Persistence |
|---|---|---|---|
| Klipper | Pressure advance | SET_PRESSURE_ADVANCE ADVANCE=<value> | Set pressure_advance under [extruder], then RESTART |
Marlin with LIN_ADVANCE enabled | Linear Advance | M900 K<value> | Use M500 when EEPROM is enabled, or intentional filament start G-code |
The placeholders above must be replaced with a value from that firmware’s test. Do not transfer a Klipper coefficient to Marlin, or copy a K value between different Linear Advance versions. The shared physical goal does not make the numbers interchangeable.
A Bowden feed path can require a wider test range than direct drive. Start with the range documented for your firmware and extruder arrangement, then narrow it around the best result. Record the filament, nozzle and temperature with the coefficient.
For the location of the setting in a particular interface, see pressure advance settings in OrcaSlicer, PrusaSlicer and Cura. The procedure here covers generating the test, reading it and applying the result to firmware.
What to Fix First
Pressure advance is stage 6 in the 3D printer calibration order, and the three stages before it are prerequisites rather than suggestions.
- E-steps. The test pattern is read by eye. If the extruder is 5% out, the whole pattern is uniformly wrong and the visual comparison becomes guesswork. Set them using the extruder e-steps calibration guide, or the machine-specific version in how to calibrate e-steps on Ender 3.
- Temperature. Melt viscosity is part of the compliance being modelled. A spool run 15 °C off its ideal will produce a different optimum. Find the temperature with a temperature tower first.
- Flow rate. Over-extrusion masks the corner bulging that the test is asking you to look for. Set the flow ratio using the appropriate slicer test in flow rate calibration for dimensional accuracy.
Dry filament matters here too, for the same reason it matters everywhere: moisture changes extrusion behaviour, so a value found on a damp spool stops being right once the spool dries. Use 3D Filament Guide’s drying chart for material schedules, then keep the spool and print environment consistent using the dry-box and chamber workflow.
Method 1: The Klipper Tuning Tower
Klipper’s built-in approach changes the value continuously as the print rises, so one object covers the whole range.
- Use the hollow-square model linked by Klipper, with zero infill, a coarse layer height around 75% of nozzle diameter, and the documented normal two or three perimeters. Disable dynamic acceleration control and scarf seams for this test.
- Before the print starts, issue
SET_VELOCITY_LIMIT SQUARE_CORNER_VELOCITY=1 ACCEL=500, which is the command Klipper’s own documentation specifies for this test. Dropping square-corner velocity to 1 mm/s forces the toolhead to come to a near stop at each corner, which is what makes the extrusion lag visible; leave it at the usual 5 mm/s and the test understates the defect it is measuring. Record your ordinary motion settings so you can distinguish the test conditions from the later verification print. - Issue
TUNING_TOWER COMMAND=SET_PRESSURE_ADVANCE PARAMETER=ADVANCE START=0 FACTOR=.005for a direct-drive setup, orFACTOR=.020for Bowden. - Print it, then measure the height at which the corners stop bulging and before the corners start showing gaps.
- Multiply that height in millimetres by the factor and add the start value. At 30 mm with
FACTOR=.005, the answer is 0.15. - Set
pressure_advancein printer.cfg and restart, or store it per filament.
Klipper’s documentation is explicit that acceleration and square-corner velocity affect what the tower shows, so record the settings the tower was printed at.
Method 2: The OrcaSlicer Tests
OrcaSlicer provides generated tests for compatible printer profiles. OrcaSlicer ships three of them under Calibration → Pressure Advance, each in a direct-drive and a Bowden variant — pick the wrong variant and the value range printed will not contain your answer.
- The line method is the fastest to print and read: paired lines at increasing values, correct where the line ends stop showing a bulge or a gap. Its weakness is stated plainly in the documentation — accuracy depends heavily on first-layer quality, so run bed mesh levelling before you trust it.
- The pattern method uses a corner pattern, and its advantage is batching: it can generate several tests in one project, which is how you sweep a coarse range and then a fine one without reslicing.
- The tower method takes longer but reduces dependence on judging the first-layer surface. On a machine with a marginal first layer, this is the one to use.
One Marlin-specific prerequisite that wastes a lot of time: Linear Advance has to be compiled into the firmware, and it is not enabled by default on every board. Send M900 and see whether the printer answers with a K value. If it does not, no slicer-side test will change anything until the firmware is rebuilt. On Bambu machines, do not tick the separate flow-calibration option while running this test — it changes the variable you are trying to measure.
Read the result under raking light at a low angle. Keep the viewing angle consistent when comparing candidate values.
Reading the Result
There is a genuinely correct answer and it is bracketed on both sides.
Too low. Corners bulge outward. Lines are thick at the end and thin at the start. The seam shows a blob. Solid surfaces look slightly over-filled where the toolhead slowed down.
Correct. Line width looks constant from acceleration through the corner and out the other side. Corners are square without a raised lip.
Too high. Corners show a visible gap or a pinched-in notch. Line starts are starved. The extruder audibly reverses on every corner at speed, and on a Bowden machine the effect can look like light under-extrusion everywhere.
The failure mode of over-correcting is worse than under-correcting, because the firmware is now commanding retractions on every direction change. If you are unsure between two values, take the lower one.
Smoothing, and Why the Number Is Not the Whole Setting
Klipper pairs pressure advance with a smoothing time, pressure_advance_smooth_time. The config reference defines it as the time window used to average extruder velocity when computing the correction, defaults it to 0.040 s, caps it at 200 ms, and notes it only applies when pressure_advance is non-zero. Lower it and the correction is sharper but the extruder motor is asked for more violent accelerations; raise it and the correction smears across a longer distance. The default suits most machines, and it is not worth touching until the coefficient itself is right — tuning both at once means neither result is attributable.
Marlin’s Linear Advance has an analogous constraint, expressed through the extruder’s own acceleration and jerk limits. The physical point is the same in both firmwares: the model can ask for an extruder move the extruder cannot actually perform. A high-inertia geared extruder or a marginal driver current will then skip steps or grind rather than produce a visible print defect, so skipping after enabling pressure advance calls for checking the coefficient, acceleration and the extruder’s ability to execute the requested motion.
Where Retraction and Wipe Distance Fit
This is the part that trips people who tuned their printer in the pre-pressure-advance era. Pressure advance already bleeds nozzle pressure down before the end of a line, so a machine running correct pressure advance needs less retraction than the same machine without it — often noticeably less on a Bowden setup.
Two practical consequences:
- Re-tune retraction after pressure advance, not before. Retraction distance and speed are stage 7 for exactly this reason; the starting values and the method are in how to fix stringing on 3D prints.
- Wipe distance interacts with both. Wiping moves the nozzle along the just-printed path while retracting, to hide the pressure release inside the seam. With pressure advance correcting the pressure profile, a long outer-wall wipe distance starts to remove material that was never over-extruded in the first place, leaving a visible divot at the seam. Shorten it, or turn wipe off on the outer wall and judge the seam again.
Apply and Save the Calibrated Value
Klipper SET_PRESSURE_ADVANCE
After the tower, edit the existing [extruder] section in the configuration. For a hypothetical result of 0.045, the setting is pressure_advance: 0.045. Issue RESTART while idle. Klipper’s documented restart clears the tuning-tower state and returns acceleration and cornering to the configured values.
For a later temporary comparison, the console syntax is:
SET_PRESSURE_ADVANCE ADVANCE=0.045
That command changes the runtime value; it does not write the configuration. The Klipper G-code reference also supports naming an extruder with EXTRUDER= when the printer has more than one.
Choose whether the normal value comes from the configuration or from deliberate per-filament start commands. Inspect macros and exported G-code for later overrides. Keep pressure_advance_smooth_time unchanged while comparing coefficients.
Marlin M900 K and EEPROM
Marlin’s M900 reference requires a build with LIN_ADVANCE enabled. On that firmware, query the active factor with M900. A hypothetical calibrated K of 0.04 is applied as follows:
M900 K0.04
M900
The reply should show the new factor. To persist a supported setting in EEPROM, use M500, then restart when idle and query M900 again. Alternatively, intentionally set the material’s factor in filament start G-code. Verify the exported file contains the command and that a later start routine does not overwrite it.
An unknown-command response means the feature or command is unavailable in that build. Repeating a slicer test cannot enable it. Consult the printer’s firmware documentation before making firmware changes. To compare against disabled Linear Advance on a supported build, M900 K0 sets its factor to zero.
The example Klipper value and example Marlin value above are independent illustrations of syntax. Neither is a recommended PLA setting, and they are not a conversion pair.
Verification, and What Invalidates It
Once the value is set, print an object with sharp corners at a speed you actually use. Ringing and pressure-advance artefacts look similar at a glance and have different causes: ringing repeats as a decaying wave after a corner and is a resonance problem addressed by input shaping, covered in print speed vs quality: where input shaping changes the math. A pressure-advance error appears at the corner and does not oscillate.
Redo the calibration when any of these change:
- The filament brand, colour or material, since each has different melt viscosity.
- The hotend or heat break, which changes melt-zone volume.
- The nozzle diameter, which changes flow rate at a given speed and therefore the size of the lag. The knock-on effects on line width and layer height are set out in the nozzle size and layer height guide.
- The Bowden tube length, or a conversion between Bowden and direct drive.
Klipper notes that temperature and extrusion rate can affect the result. Verify at the speed and acceleration used for real parts; a low-acceleration test may reveal less cornering error.
The Payoff
Pressure advance is a single number per material that removes a whole class of defect nothing else touches: dimensional error concentrated at corners, inconsistent line width, seam blobs and the vague “the corners look wrong” complaint that survives every other calibration. It costs one test print per filament and it is worth more at high speed than any other setting on the list.
Store the value alongside the temperature and flow ratio for that spool, and work through the rest of the sequence in the order set out in the 3D printer calibration guide order. If you are budgeting filament and machine time for a run of test prints before a large job, the print time and filament cost estimator will price the whole calibration session in grams and hours before you start it.