Start End G‐Code - lulzbot3d/CuraLE GitHub Wiki
Cura allows you to add some custom G-Code parts into your generated files. This can be very handy to setup some specific features of a printer, or to customize the way your printer starts according to your workflow. Custom G-Code can be inserted at different points:
- Machine Start G-Code: inserted at the beginning of the file, before any other G-Code command
- Machine End G-Code: inserted at the end of the file, after any other G-Code command
- Extruder Start G-Code: inserted every time an extruder starts being used (can be different per extruder)
- Extruder End G-Code: inserted every time an extruder stop being used (can be different per extruder)
:warning: Editing the G-Code manually can damage your printer. Always check the G-Code output before sending it to the printer.
How to set custom G-Code
In Cura, select your active printer, then go to Preferences
> Configure Cura...
> Printers
> Machine Settings
In the Printer tab, you can set the Machine Start and End G-Code.
In each extruder's tab, you can set the Extruder Start and End G-Code.
:warning: Some printers have custom G-Code setup by the manufacturers, with custom commands that may be necessary. Remove them only if you know what they are used for.
Syntax
Static G-Code
The simplest syntax is to just add static G-Code commands that will be directly inserted into the file without any transformation, for example:
G90 ; use absolute positioning
M82 ; absolute extrusion mode
G28 ; home all
G29 ; mesh bed leveling
Settings values
Classic settings
In order to make the custom G-Code more flexible, you can also insert the value of settings that will be resolved at run-time with the proper output. Just use the raw name of the setting (which can be found in the definition files) and add {}
around it:
{<setting_name>}
For example, you can write the following:
M140 S{material_bed_temperature_layer_0} ; set bed temp
The output will be something like:
M140 S50.0 ; set bed temp
When doing so, the value of the setting will be retrieved from the global stack, which contains the settings that are global to the printer. However, sometimes you may want to get the value of a setting specific to an extruder, especially when you have a multi-extruders printer. You can then use the following syntax:
{<setting_name>, <extruder_index>}
:information_source: The extruder index is 0-based, which means "Extruder 1" in the UI will have index 0, "Extruder 2" will have index 1, and so on.
You can then write the following:
M109 T0 S{material_print_temperature_layer_0, 0}
M109 T1 S{material_print_temperature_layer_0, 1}
Which could output to:
M109 T0 S230.0
M109 T1 S210.0
:information_source: The extruder_index
can also be retrieved from a setting value
:warning: This does not apply to settings that are marked as "settable_per_extruder": false
, for them we will always use the value from the global stack
Extra settings
In addition to settings that are declared in definition files, some extra settings are added at run-time that you can use for convenience:
material_id
: ID of the used material (per extruder)material_type
: Type of used material (per extruder)material_name
: Name of used material (per extruder)material_brand
: Brand of used material (per extruder)quality_name
: Name of the used quality profilequality_changes_name
: Name of the specific applied quality changes profileprint_bed_temperature
: Alias tomaterial_bed_temperature
print_temperature
: Alias tomaterial_print_temperature
travel_speed
: Alias tospeed_travel
time
: Current time, using format%H:%M:%S
, e.g.09:17:35
date
: Current date, using format%d-%m-%Y
, e.g.06-09-2024
day
: First three letters of the current day, e.g.Fri
initial_extruder_nr
: Index of the first used extruder (which may sometimes be incorrect)
Formulas
Starting with Cura 5.6, you can also write simple formulas to tweak the values of the setting for a specific purpose. Formulas are based on Python syntax and are widely used in printers settings definitions. For example, you can write:
M104 T0 S{material_print_temperature_layer_0 - 50, 0}
M104 T1 S{material_print_temperature_layer_0 - 50, 1}
M190 S{material_bed_temperature_layer_0 / 2}
M109 T{initial_extruder_nr} S{material_print_temperature_layer_0 + 10, initial_extruder_nr}
M109 T{(initial_extruder_nr + 1) % 2} S{material_print_temperature_layer_0 - 20, (initial_extruder_nr + 1) % 2}
Conditional parts of G-Code
Starting with Cura 5.9, you can make some parts of your custom G-Code dependant on some conditions, which can be handy to enable or disable a whole feature of your printer. The syntax for this is slightly more complex:
{if|elif|else|endif <condition_formula>, <extruder_index>}
These statements will be evaluated and not exported to the file, but will enable or disable the following lines, for example:
{if material_bed_temperature_layer_0 < 40}
M190 S{material_bed_temperature_layer_0}
{elif material_bed_temperature_layer_0 >= 40 and material_bed_temperature_layer_0 < 50}
M190 S{material_bed_temperature_layer_0 - 10}
M140 S{material_bed_temperature_layer_0}
{else}
M140 S{material_bed_temperature_layer_0}
{endif}