Prusa
  • SHOP
    • Latest products
    BY CATEGORY
    • 3D printersnew
    • 3D printer upgradesnew
    • Materials
    • Accessories
    • Spare parts
    • Courses
    • Merch
    • Get a price quote
    QUICK LINKS
    • Shipping & delivery
    • Returns & refunds
    • Payment & financing
    • Warranty
    • VAT & Customs fees
    • FAQ

    0 item in your cartitems in your cart

    Your cart is empty

    Go to cartShop 3D printers

    My profile

    Log in to see orders, saved items

    My profile

    Signed in as

    • Orders
    • Logout
  • 3D PRINTING
    • Explore 3D printing
    FOR BEGINNERS
    • 3D printing 101
    • How FDM printing works
    • Buying your first printer
    • 3D model catalog
    BY APPLICATION
    • Rapid prototyping
    • Manufacturing
    • Engineering
    • Research
    • Arts & design
    GO DEEPER
    • Materials guide
    • Courses
    • Webinars
    • Case studies
    • Custom 3D printing
  • 3D PRINTERS
    • All 3D printers
    FOR
    • Home or garageHobbyists, tinkerers and home printing
    • BusinessIn-house production for small teams
    • EnterpriseFleets, security and scale
    • Which Prusa is right for me
    SHOP & BROWSE
    • CORE One+new
    • CORE One+ INDXnew
    • CORE One L+new
    • CORE One L+ INDXnew
    • XL+new
    • MK4S
    • Prusa Pro HT90
    • Prusa Pro AFS
    • Prusa Pro SLX
    MORE FROM PRINTERS
    • Parts & upgradesnew
    • Critical infrastructure
    • Case studies
    • Signature Oak
    • Kits
  • MATERIALS
    • All materials
    BY USE
    • Every-day & design
    • Functional engineering
    • Composites
    • Pro speciality
    • SLA resins
    PRUSAMENT
    • PLA
    • PETG
    • ASA
    • PC
    • PA11
    • Flex
    • TPU
    MORE FROM MATERIALS
    • Materials guide
    • We make material in house
    • Sustainability
    • Order on the store
  • SOFTWARE
    • All software
    PREPARE THE PRINT
    • PrusaSlicer 3.0New
    PRINT & MONITOR
    • Prusa Connect
    • EasyPrint
    • iOS & Android app
    • Prusa Farm
    GET STARTED
    • Download & install
    • Knowledge base
    MORE FROM SOFTWARE
    • 3D model catalog
  • SUPPORT
    • Explore support
    FIND ANSWERS
    • Knowledge base
    • Troubleshooting
    • Courses
    • Webinars
    GET HELP
    • Contact us
    • Livechat
    • Shipping & delivery
    • Warranty
    • Returns & refunds
    • Service & spare parts
    • Service & Repair
    COMMUNITY
    • Forum
    • Reddit
    • Printables
  • TRUST CENTER
    • Trust Center overview
    BY TOPIC
    • GDPR
    • Certificates
    • Security
    • Compliance
    COMMITMENTS
    • Sustainability report
    TALK TO US
    • Contact the security team
  • COMPANY
    • About Prusa
    GET TO KNOW US
    • Our story
    • How we make printers
    • Open source
    • Brand & media kit
    NEWS
    • Blog
    • Newsroom
    • Events
    TRUST & PARTNERS
    • Sustainability
    • Resellers & distributors
    • Affiliate program
    • Contact
    • English
    • Čeština
    • Deutsch
    • Español
    • Français
    • Italiano
    • Polski
    • 日本語
  • Signed in as

    • Orders
    • Address
    • In-stock Alerts
    • My Courses
    • Subscription
    • Edit Account
    • Logout

Log in to see orders, saved items

Signed in as
  • Orders
  • Address
  • In-stock Alerts
  • My Courses
  • Subscription
  • Edit Account
  • English
  • Čeština
  • Deutsch
  • Español
  • Français
  • Italiano
  • Polski
  • 日本語
Shop

0 item in your cartitems in your cart

Your cart is empty

Go to cartShop 3D printers

My profile

Log in to see orders, saved items

My profile

Signed in as

  • Orders
  • Logout
SHOP
  • Latest products
BY CATEGORY
  • 3D printersnew
  • 3D printer upgradesnew
  • Materials
  • Accessories
  • Spare parts
  • Courses
  • Merch
  • Get a price quote
QUICK LINKS
  • Shipping & delivery
  • Returns & refunds
  • Payment & financing
  • Warranty
  • VAT & Customs fees
  • FAQ

Featured products

    Popular categories

      Trending searches

        Articles

          Blog

            Products

              Categories

                Suggested searches

                  Searching…
                  No results
                  Something went wrong.
                  ↑↓ Select↵ OpenEsc Close search
                  1. Support
                  2. Original Prusa MMU1
                  3. Other (PrusaSlicer)
                  4. Macros
                   

                  Contents

                  • Constructs
                  • Operators
                  • Functions
                  • Variables (placeholders)

                  Blog

                  • Print colorful and glowing Halloween decorations with our spooky offer
                  • Factorio Has Arrived on Printables
                  • Prusament PLA Lightweight: 65% lighter than regular PLA. Perfect choice for aircraft, cosplay, and more.

                  Newsletter

                  Signup and get our monthly squeeze on updates, blog, printables and much more.

                  By clicking, you agree to receive our newsletter.

                  This site is protected by reCAPTCHA Enterprise and the Google Privacy Policy and Terms of Service apply.

                  Factorio Transport Belts
                  E-shop
                  • 3D Printers
                  • Printer Upgrades
                  • Filaments
                  • Accessories
                  • Prusa Merchandise

                  © Prusa Research a.s.

                  Printables
                  • 3D Models
                  • Store
                  • Clubs
                  • 3D Design Contests
                  • Brands
                  Community
                  • World Map
                  • Forum
                  • User Groups
                  • Events
                  Help
                  • Prusa Help
                  • Prusa Academy
                  • 3D Printing Calculators
                  Software
                  • PrusaSlicer
                  • Prusa.app
                  • Prusa Connect
                  • Drivers and Software
                  Company
                  • About Us
                  • Blog
                  • Official Prusa Resellers
                  • Contact Us
                  • Certified for ISO 9001, ISO 14001, ISO 45001
                  • General Terms and Conditions
                  • General Terms and Conditions of Use of the PRUSA Websites
                  • Privacy Policy
                  • Information about cookies
                  • Customer Complaints Policy
                  • Status Page
                  • Do Not Sell or Share My Personal Information
                  • Supplemental Statements
                  • General Terms and Conditions
                  • General Terms and Conditions of Use of the PRUSA Websites
                  • Privacy Policy
                  • Information about cookies
                  • Customer Complaints Policy
                  • Status Page
                  • Do Not Sell or Share My Personal Information
                  • Supplemental Statements

                  © Prusa Research a.s.

                  JOSEF PRUSA®, PRUSA RESEARCH®, PRUSA POLYMERS®, PRUSA ORANGE®, PRUSA 3D ® AND PRUSAMENT® are registered trademarks of Prusa Development a.s. used by Prusa Research a.s. under licence from Prusa Development a.s.

                  Macros

                  Relevant for

                  MMU family
                  MINI family
                  MK3 family
                  OLD PRODUCTS
                  SLA family
                  +
                  15 comments
                  Article is also available in following languages
                  English
                  Čeština
                  Polski
                  Deutsch
                  Français
                  Español
                  Italiano
                  日本語

                  Macros allow you to create conditions and evaluate math equations in the Custom G-code fields.

                  PrusaSlicer macro language is not compatible with Slic3r conditional expressions.

                  Constructs

                  Conditional evaluation

                  Expression evaluation

                  Legacy Placeholder syntax

                  or

                  Inside either construct, PrusaSlicer configuration variables can be accessed by their names

                  and elements of vector variables can be accessed by using square braces

                  refers to the temperature of the first extruder.

                  Multidimensional vectors can currently be only accessed as a simple vector variable resulting in a string value (e.g. if the extruder_variable[1] resulting in [n,0] string value -- can be posted in g-code but can not be used in arithmetic operations).

                  Strings are identified by double quotes and regular expressions by slashes  Strings are not parsed recursively, i.e. curly and square brackets inside strings will appear in the output. This allows constructs such as

                  Operators

                  The following operators are allowed:

                  1. Comparison
                    • Example:
                  2. Boolean logic or, equivalently,  
                    • Example
                  3. Arithmetics
                    • Example: (Note that first_layer_temperature is a vector)
                  4. Ternary operator This needs to be enclosed in parentheses to work.
                    • Example: This expression sets the extruder temperature to either 230 or 200 depending on whether the first layer needs to be above 220°.
                  5. Regular expression matching
                  6. Regular expressions are enclosed in slashes /
                    • Example:

                  Functions

                  Minimum

                  Maximum

                  Casting to integer

                  Rounding to an integer

                  Rounding / padding with spaces: rounds fractional part to num_decimals digits (adding trailing zeros if needed), then left fills with spaces so the number has num_digits characters in total (including a decimal point if present). Last argument can be omitted, defaults to zero.

                  Rounding / padding with zeros: same as above, only left filled with zeros

                  Check if the configuration option is active

                   

                  Variables (placeholders)

                  You can use variables inside customs scripts and in the output file name template.

                  Check the List of all PrusaSlicer placeholders, grouped according to their scope.

                   

                  Scalar variables

                  These values are scalar and can be directly referenced.

                  • printer_notes (string)
                  • layer_z (only available in layer change GCode)
                  • layer_num (only available in layer change GCode)
                  • toolchange_z (available in custom toolchange GCode since version 2.4.0)

                  Some variables are defined by complex formulas. For example, the perimeter_extrusion_width if left to zero takes the value of extrusion_width if non zero, otherwise a default perimeter_extrusion_width is calculated for the current layer_height. These substitutions are only done for the new syntax expressions (enclosed in curly braces {}), while the expressions written using the old placeholder syntax (enclosed in square braces []) are interpreted verbatim.

                  Vector (array variables)

                  These variables are arrays and need to be accessed as such (e.g. temperature[0]).

                  • temperature
                  • first_layer_temperature
                  • bed_temperature (note that this is a vector, even though only one value makes sense: bed_temperature[0])
                  • first_layer_bed_temperature (same as above!)

                  Multidimensional vector

                  These variables can only be accessed as simple vectors and can not be used in arithmetic expressions.

                  • extruder_offset
                  • bed_shape

                  Examples

                  Temp tower

                  You can use the "Before layer change" custom G-code to slowly decrease hot end temperatures. First, one may use the if/elsif/else expression:

                   The same result may be achieved by a shorter if/else/endif expression together with a linear interpolation:

                  Or one may use the ternary operator:

                  Faster heat up with weak bed heaters before print

                  If you have a bed that takes a very long time to get up to temperature you can shave off a little bit of waiting time by using "Start G-code" to heat up the bed to the destination temperature minus 5 degrees and then starting to warm up the hot end while the bed continues to heat to the target value:

                   

                  Was this article helpful?
                  This action is available only to registered users. Please log-in.

                  Topics

                  • PrusaSlicer 2.9 (Legacy)
                    • Other (PrusaSlicer)
                      • 3Dconnexion devices
                      • Sending files to Octoprint/Duet
                      • Macros
                      • Export toolpaths as OBJ
                      • PrusaSlicer G-code viewer
                      • List of placeholders
                      • How to lift object from the print bed
                      • Opening models in PrusaSlicer from supported websites
                    • About PrusaSlicer
                    • Configuration and profiles
                    • User interface
                    • Input/output
                    • Left toolbar
                    • Top toolbar
                    • Print settings
                    • Filament settings
                    • Printer settings
                    • Advanced features
                    • Multi-material slicing
                    • SLA slicing

                  11 comments

                  Log in  to post a comment
                  jep17
                  •
                  Is there any way to call an external script with each layer change?
                  Reply
                  RyanC
                  •
                  For those wondering, you can use modulus / mod with macros by utilizing the percent % symbol.
                  E.g., to perform something every N layers:
                  {if layer_num % N == 0}; something{endif}
                  Reply
                  nivekmai
                  •
                  Now that custom variables are supported (since 2.6, see https://github.com/prusa3d/PrusaSlicer/commit/c28585ab7fa62a56a1f188284b8bf782b734003f), could you please update this page with references on how to use them? Some example gcode would be nice, e.g.:{local myBoolean = true}{local myXVariable = 200}{local myYVariable = 100}{if myBoolean == true}G0 X{myXVariable} Y{myYVariable}{endif}--edit-- The editor doesn't let me get good formatting, code should be each line separately
                  Reply
                  J
                  •
                  bed_temperature: "(note that this is a vector, even though only one value makes sense" This is misleading. The bed_temperature vector contains print temps per loaded filament. Also many of the variables on this page are missing on the placeholders page, that made setting up macros quite frustrating
                  Reply
                  MartinD
                  •
                  Can I ask for a clarification? 
                  The if/elseif/else expression - is the spelling of the command correct in this article, that is, is the elseif command spelled "elsif" without the "e"?
                  Reply