Skip to content

Instantly share code, notes, and snippets.

@alepetri
Last active August 3, 2023 01:33
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save alepetri/8fd9f99316aa6e4fd9917fa7819bac0e to your computer and use it in GitHub Desktop.
Save alepetri/8fd9f99316aa6e4fd9917fa7819bac0e to your computer and use it in GitHub Desktop.
Prusa Temp Tower GCODE Generator
def create_temp_tower_gcode(last_layer: int, final_speed: int = 50, first_layer: int = 1, initial_speed: int = 100):
"""
Linearly changes speed between `first_layer` and `last_layer` from `initial_speed` to `final_speed`
Assembles the BEFORE_LAYER_CHANGE prusa gcode script to be placed in
PrusaSlicer > Printer Settings > Custom G-code > Before layer change G-code
"""
out: str = f"M220 S{{if layer_num <= {first_layer}}}{initial_speed}"
last_layer_speed: int = initial_speed
for layer in range(first_layer+2, last_layer):
layer_speed: int = round(initial_speed + (final_speed - initial_speed) * ((layer - first_layer) / last_layer))
if layer_speed != last_layer_speed:
out += f"{{elsif layer_num <= {layer}}}{layer_speed}"
last_layer_speed = layer_speed
out += f"{{else}}{final_speed}{{endif}}"
return out
if __name__ == "__main__":
# Example
print(create_temp_tower_gcode(last_layer=1040))
# Outputs:
# M220 S{if layer_num <= 1}100{elsif layer_num <= 12}99{elsif layer_num <= 33}98{elsif layer_num <= 54}97{elsif layer_num <= 74}96{elsif layer_num <= 95}95{elsif layer_num <= 116}94{elsif layer_num <= 137}93{elsif layer_num <= 157}92{elsif layer_num <= 178}91{elsif layer_num <= 199}90{elsif layer_num <= 220}89{elsif layer_num <= 241}88{elsif layer_num <= 262}87{elsif layer_num <= 282}86{elsif layer_num <= 303}85{elsif layer_num <= 324}84{elsif layer_num <= 345}83{elsif layer_num <= 365}82{elsif layer_num <= 386}81{elsif layer_num <= 407}80{elsif layer_num <= 428}79{elsif layer_num <= 449}78{elsif layer_num <= 470}77{elsif layer_num <= 490}76{elsif layer_num <= 511}75{elsif layer_num <= 532}74{elsif layer_num <= 553}73{elsif layer_num <= 573}72{elsif layer_num <= 594}71{elsif layer_num <= 615}70{elsif layer_num <= 636}69{elsif layer_num <= 657}68{elsif layer_num <= 678}67{elsif layer_num <= 698}66{elsif layer_num <= 719}65{elsif layer_num <= 740}64{elsif layer_num <= 761}63{elsif layer_num <= 781}62{elsif layer_num <= 802}61{elsif layer_num <= 823}60{elsif layer_num <= 844}59{elsif layer_num <= 865}58{elsif layer_num <= 886}57{elsif layer_num <= 906}56{elsif layer_num <= 927}55{elsif layer_num <= 948}54{elsif layer_num <= 969}53{elsif layer_num <= 989}52{elsif layer_num <= 1010}51{elsif layer_num <= 1031}50{else}50{endif}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment