The problem with a downloaded temperature tower is that the numbers are printed on the model, but the temperatures aren't in the file. You still have to make the printer actually change temperature at each band, by hand, at exactly the heights the designer used. Get a height wrong and every label on the tower is lying to you.

This generator builds both halves together. You choose the start temperature, the end temperature and the step, and it builds the tower with each value embossed on its band. Then it hands you the G-code that switches temperature at those exact heights. Change any setting and both change with it, so they can't drift apart.

There are four tests.

Temperature tower. 170 to 260 °C in 5 or 10 °C steps, with adjustable band height and width. Each band sticks out 2.5 mm further than the one below it, so every temperature also gets an overhang, and you can compare bridging and droop at each band as well as surface finish.

Tolerance gauge. A row of pins and a row of rings, with the clearance stepping up from ring to ring (start anywhere from 0.05 to 0.40 mm, in steps of 0.05 to 0.20 mm). The clearance is raised on the plate between the rows, so you read the answer straight off the print: the first ring that drops over its pin is your fit.

Retraction test. Two pillars, round or square, with a gap you set between 30 and 90 mm. Look at the strings in the gap.

Pressure advance. A thin-walled hollow square tower split into bands, each band a different value. Choose Klipper and you get SET_PRESSURE_ADVANCE ADVANCE=0.020 lines. Choose Marlin or RRF and you get M900 K0.020. Print it, find the band with the sharpest corners, and that's your number.

How the G-code works. The temperature and pressure-advance towers come with a block of conditional lines like this:

{if layer_z>=9 and layer_z<18}M104 S205{endif}

Paste the whole block into "Before layer change G-code" in PrusaSlicer, SuperSlicer, OrcaSlicer or Bambu Studio, and re-slice. Cura can't read those conditionals, so the page also gives a plain height-to-value table you can enter one row at a time with Cura's ChangeAtZ post-processing script. Delete the test block when you're done, or it follows you into your next real print.

It runs entirely in the browser. There's no account, no upload and nothing to install. The models are built in Three.js, shown in a 3D preview you can spin and zoom, and saved as binary STL in millimeters, so they land in the slicer at the right size. The preview and the download are the same geometry, so what you see is what you print.

It's free to use here: MakerX Calibration Print Generator

I'd like to hear what test is missing. Would a flow-rate or bridging test be more useful to you?