This question already has an answer here:

I want to print this heat tower calibration test.

The instructions say to change the temperature every 25 layers. It also tells me to use G-Code command M104 Sxxx

First, is there a way to specify this command using Ultimaker Cura?

If not, how do I do so in the G-code file?

I see that the G-code file is just a plain text file with a command per line presumably. Do I just insert M104 S225 at one point and then M104 S220...? If so, how do I know where the 25th layer is?


marked as duplicate by 0scar, Carl Witthoft, Davo, Pᴀᴜʟsᴛᴇʀ2, StarWind0 Jan 16 at 22:32

This question has been asked before and already has an answer. If those answers do not fully address your question, please ask a new question.


Every time you see a Z movement that matches the layer height (eg. 0.20 mm) you can assume that is the end/start of one "layer". It should have a line like:

;Layer count: 17
;LAYER:0.  ; mine has this as the first layer
G0 F2400 X67.175 Y61.730 Z0.250. ;  moves to Z0.250 mm for the first layer, with layer thickness 0.25 mm

Then later:

M106 S255
G0 F2400 X78.078 Y69.627 Z0.550 ; 2nd layer.

So search for "Z" or "Layer" and once you've seen 25 of these "small" movements (comparing to previous Z movement?), insert your line of code at the end of the layer commands. Don't confuse it with large Z-movements, that may correspond to move up/retract filaments. Depending on your goals for the print, maybe you also want to insert a wait time - say a minute or two for the new temp to stabilize? Here is the line for that:

G4 P200  ;  Sit still doing nothing for 200 milliseconds.
  • 1
    $\begingroup$ The value of Z can be found in the G-code file; if all layers are 0.2 mm, you can just look up parameter Z5, Z10, etc. in the file, there is no need to count for 25 layers. Positioning is usually absolute, not relative, for most slicers. Insertion of a dwell time (pause) is usually not necessary as the temperature steps are not that high, but nice addition if you want to be precise! $\endgroup$ – 0scar Jan 16 at 7:03
  • $\begingroup$ A little math goes a long way! Watch out for 1st layer having a different height due to adhesion options (like in my file above). $\endgroup$ – Demis Jan 23 at 7:27

Under the Extensions menu in Ultimaker Cura, there's an option to add post-processing scripts. One of these is called TweakAtZ, and it allows you to override certain print settings when the printer reaches a certain Z height. Multiple overrides can be specified for different heights.

TweakAtZ has been bundled with the standard Ultimaker Cura download for some time, but if your version doesn't have it, you can download it from GitHub.


Not the answer you're looking for? Browse other questions tagged or ask your own question.