-
-
Notifications
You must be signed in to change notification settings - Fork 2.1k
Start End G‐Code
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)
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.
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
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 (that 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>}
ℹ️ 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
ℹ️ The extruder_index
can also be retrieved from a setting value
"settable_per_extruder": false
, for them we will always use the value from the global stack
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 profile -
quality_changes_name
: Name of the specific applied quality changes profile -
print_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)
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}
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}
- Welcome
- Getting Started
- Reporting An Issue
- Core Development
- Plugins & Material Packages
- Printers
- Translations
- Best Practices
- Settings
- 3D Scene
- Profiling
- Cura User Files
- GitHub Actions