Ellis' Pressure Advance / Linear Advance Calibration Tool

Original Marlin calibration tool by Sineos. Heavily modified/rewritten by Andrew Ellis.
The old "lines" version of this tool has been deprecated. It's still available here if you prefer it.

For issues/bugs, contributions, and feature requests, please open a GitHub issue.


3D Preview

Line widths are approximations only.

See my
Print Tuning Guide
Pressure / Linear Advance article
for demonstrations and examples!
.gcode    (Go through ALL the settings first!)


Advanced Mode



mm mm
mm mm
🛈 A rough guess is fine if you haven't tuned this yet.

Overextruding the test is a bit better than underextruding it.

For printers with multiple toolheads.

Enter the config section name of the desired extruder (e.g. "extruder2").


Also appends EXTRUDER_NAME=[EXTRUDER_NAME] to pressure advance g-codes.
🛈 Usually 0 if only one extruder. Allows choosing extruder if more than one.

Emits T[TOOL_INDEX] if not set to 0.
🛈 Uncommon on rectangular beds.

Sets X0, Y0 to the center instead of the corner.

Retraction / Z Hop

mm/s mm
🛈 Must be set up in your printer's firmware.

Uses G10 / G11 for retracts instead of directly commanding E moves.

First Layer Settings

mm/s %
🛈 Percentage is based on nozzle diameter.

Print Settings

🛈 Percentage is based on nozzle diameter.

Match your thickest perimeter from your slicer settings (internal/external).
🛈 Includes first layer.
🛈 Use your external perimeter speed from your slicer settings - if it's reasonably fast (>60mm/s).

If the results are hard to read, try a faster speed.
🛈 Your MAX accel will be used if you don't set this.

Set this if you use acceleration control in your slicer!!

(Use your external perimeter acceleration)

Pattern Settings  

(Unchecked will use defaults. Defaults are usually fine.)
🛈 Wall/perimeter count for each test pattern. This will slightly impact print size.
🛈 Rotates the print.
🛈 Horizontal spacing between the patterns.

Pressure Advance Stepping

🛈 Increment for each pattern.
Needs to cleanly divide into range (End - Start).
🛈 Klipper only.

Increment PA smooth time INSTEAD of PA value.

This should only be ran after tuning pressure advance.

Don't forget to activate your new PA value first.

🛈 Creates a tab with PA/LA values printed on it.
🛈 Removes leading zeroes on the number tab.
🛈 Echo current value to the LCD using M117.

Start / End G-code

🛈 Use this if you are using a start macro and don't want G28 added.
🛈 Use this if don't want M190 / M109 heating g-codes added automatically.

Useful if you are passing temps to a start macro instead.


  • With Cura / Prusa Slicer / SuperSlicer, you should generally be able to copy your start g-code from your slicer directly.
  • With other slicers, you should also just be able to copy/paste, UNLESS you use slicer variables in your start g-code.
    • If you do, you will have to change them to the tool's variables, listed under "Tool Variables" below.
  • If you use slicer variables in your start g-code APART from bed / hotend temps, replace them with REAL VALUES instead.
  • Tool Variables (Optional)
    • These can be used in your start g-code and will be replaced with real values from the form automatically:
      • [BED_TEMP], [HOTEND_TEMP], [EXTRUDER_NAME] (Klipper), [TOOL_INDEX] (Marlin/RRF)

Check over the start g-code preview below before printing!

Copy your normal end G-code from your slicer (and replace any dynamic variables with real values).